mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-20 15:26:06 +08:00
Fix documentation generation, clean up ./app package dependencies
This commit is contained in:
parent
9292885494
commit
c549fcc8ba
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -65,3 +65,4 @@ scripts/venv
|
|||
client_secret.json
|
||||
/app/MailSync
|
||||
/logfile.txt
|
||||
/app/dist-docs
|
||||
|
|
|
@ -23,7 +23,7 @@ module.exports = (grunt) => {
|
|||
'rootDir': path.resolve('./'),
|
||||
'buildDir': buildDir,
|
||||
'appDir': appDir,
|
||||
'classDocsOutputDir': './docs_src/classes',
|
||||
'classDocsOutputDir': path.join(buildDir, 'docs_src', 'classes'),
|
||||
'outputDir': path.join(appDir, 'dist'),
|
||||
'appJSON': grunt.file.readJSON(path.join(appDir, 'package.json')),
|
||||
'source:coffeescript': [
|
||||
|
@ -59,7 +59,11 @@ module.exports = (grunt) => {
|
|||
grunt.loadTasks(tasksDir);
|
||||
grunt.file.setBase(appDir);
|
||||
|
||||
grunt.registerTask('docs', ['docs-build', 'docs-render']);
|
||||
grunt.registerTask('docs', [
|
||||
'docs-build',
|
||||
'docs-render',
|
||||
]);
|
||||
|
||||
grunt.registerTask('lint', [
|
||||
'eslint',
|
||||
'lesslint',
|
||||
|
|
100
app/build/docs_src/SUMMARY.md
Normal file
100
app/build/docs_src/SUMMARY.md
Normal file
|
@ -0,0 +1,100 @@
|
|||
# Nylas Mail SDK
|
||||
|
||||
* Nylas Mail SDK Guides
|
||||
* [Introduction](/README.md)
|
||||
* [Getting Started](/guides/GettingStarted.md)
|
||||
* [Getting Started Part 2](/guides/GettingStarted-2.md)
|
||||
* [Building a Package](/guides/PackageOverview.md)
|
||||
* [Interface Concepts](/guides/InterfaceConcepts.md)
|
||||
* [UI Components](/guides/React.md)
|
||||
* [Application Architecture](/guides/Architecture.md)
|
||||
* [Debugging Nylas Mail](/guides/Debugging.md)
|
||||
* [Accessing the Database](/guides/Database.md)
|
||||
* [Extending the Composer](/guides/ComposerExtensions.md)
|
||||
* [Writing Tests](/guides/WritingSpecs.md)
|
||||
* [Integration Testing](/guides/IntegrationTesting.md)
|
||||
* [Developing on Windows](/guides/Windows.md)
|
||||
* [FAQ](/guides/FAQ.md)
|
||||
|
||||
----
|
||||
|
||||
### Full Class Reference
|
||||
|
||||
* General
|
||||
* [Actions](/classes/Actions.md)
|
||||
* [BufferedProcess](/classes/BufferedProcess.md)
|
||||
* [ChangeFolderTask](/classes/ChangeFolderTask.md)
|
||||
* [ChangeLabelsTask](/classes/ChangeLabelsTask.md)
|
||||
* [ChangeMailTask](/classes/ChangeMailTask.md)
|
||||
* [Color](/classes/Color.md)
|
||||
* [Config](/classes/Config.md)
|
||||
* [Contenteditable](/classes/Contenteditable.md)
|
||||
* [KeyCommandsRegion](/classes/KeyCommandsRegion.md)
|
||||
* [NylasEnvConstructor](/classes/NylasEnvConstructor.md)
|
||||
* [QueryResultSet](/classes/QueryResultSet.md)
|
||||
* [QuerySubscriptionPool](/classes/QuerySubscriptionPool.md)
|
||||
* [StyleManager](/classes/StyleManager.md)
|
||||
* [Task](/classes/Task.md)
|
||||
* [TaskQueueStatusStore](/classes/TaskQueueStatusStore.md)
|
||||
* [ThemeManager](/classes/ThemeManager.md)
|
||||
|
||||
* Component Kit
|
||||
* [EventedIFrame](/classes/EventedIFrame.md)
|
||||
* [Flexbox](/classes/Flexbox.md)
|
||||
* [InjectedComponent](/classes/InjectedComponent.md)
|
||||
* [InjectedComponentSet](/classes/InjectedComponentSet.md)
|
||||
* [Menu](/classes/Menu.md)
|
||||
* [MenuItem](/classes/MenuItem.md)
|
||||
* [MenuNameEmailItem](/classes/MenuNameEmailItem.md)
|
||||
* [MultiselectActionBar](/classes/MultiselectActionBar.md)
|
||||
* [MultiselectList](/classes/MultiselectList.md)
|
||||
* [ResizableRegion](/classes/ResizableRegion.md)
|
||||
* [RetinaImg](/classes/RetinaImg.md)
|
||||
* [Spinner](/classes/Spinner.md)
|
||||
* [UnsafeComponent](/classes/UnsafeComponent.md)
|
||||
|
||||
* Extensions
|
||||
* [ComposerExtension](/classes/ComposerExtension.md)
|
||||
* [ContenteditableExtension](/classes/ContenteditableExtension.md)
|
||||
* [DraftStoreExtension](/classes/DraftStoreExtension.md)
|
||||
* [MessageStoreExtension](/classes/MessageStoreExtension.md)
|
||||
* [MessageViewExtension](/classes/MessageViewExtension.md)
|
||||
|
||||
* Models
|
||||
* [Contact](/classes/Contact.md)
|
||||
* [Message](/classes/Message.md)
|
||||
* [Model](/classes/Model.md)
|
||||
* [Thread](/classes/Thread.md)
|
||||
|
||||
* Stores
|
||||
* [AccountStore](/classes/AccountStore.md)
|
||||
* [ComponentRegistry](/classes/ComponentRegistry.md)
|
||||
* [ContactStore](/classes/ContactStore.md)
|
||||
* [FocusedContentStore](/classes/FocusedContentStore.md)
|
||||
* [TaskQueue](/classes/TaskQueue.md)
|
||||
* [WorkspaceStore](/classes/WorkspaceStore.md)
|
||||
|
||||
* Database
|
||||
* [Attribute](/classes/Attribute.md)
|
||||
* [AttributeBoolean](/classes/AttributeBoolean.md)
|
||||
* [AttributeCollection](/classes/AttributeCollection.md)
|
||||
* [AttributeDateTime](/classes/AttributeDateTime.md)
|
||||
* [AttributeJoinedData](/classes/AttributeJoinedData.md)
|
||||
* [AttributeNumber](/classes/AttributeNumber.md)
|
||||
* [AttributeObject](/classes/AttributeObject.md)
|
||||
* [AttributeServerId](/classes/AttributeServerId.md)
|
||||
* [AttributeString](/classes/AttributeString.md)
|
||||
* [DatabaseStore](/classes/DatabaseStore.md)
|
||||
* [Matcher](/classes/Matcher.md)
|
||||
* [ModelQuery](/classes/ModelQuery.md)
|
||||
* [SortOrder](/classes/SortOrder.md)
|
||||
|
||||
* Drafts
|
||||
* [DraftChangeSet](/classes/DraftChangeSet.md)
|
||||
* [DraftEditingSession](/classes/DraftEditingSession.md)
|
||||
* [DraftStore](/classes/DraftStore.md)
|
||||
|
||||
* NylasEnv
|
||||
* [PackageManager](/classes/PackageManager.md)
|
||||
|
||||
* Atom
|
|
@ -99,7 +99,7 @@ module.exports = function(grunt) {
|
|||
let transformed = require("babel-core").transform(fileStr, {
|
||||
plugins: ["transform-react-jsx",
|
||||
"transform-class-properties"],
|
||||
presets: ['react', 'stage-2']
|
||||
presets: ['react', 'electron']
|
||||
});
|
||||
|
||||
grunt.file.write(path.join(cjsxOutputDir, path.basename(file).slice(0, -3 || undefined)+'js'), transformed.code);
|
||||
|
@ -112,7 +112,7 @@ module.exports = function(grunt) {
|
|||
let transformed = require("babel-core").transform(fileStr, {
|
||||
plugins: ["transform-class-properties",
|
||||
"transform-function-bind"],
|
||||
presets: ['react', 'stage-2']
|
||||
presets: ['react', 'electron']
|
||||
|
||||
});
|
||||
|
||||
|
|
|
@ -1,177 +0,0 @@
|
|||
const path = require('path');
|
||||
const cjsxtransform = require('coffee-react-transform');
|
||||
const rimraf = require('rimraf');
|
||||
|
||||
const fs = require('fs-plus');
|
||||
const _ = require('underscore');
|
||||
|
||||
const donna = require('donna');
|
||||
const joanna = require('joanna');
|
||||
const tello = require('tello');
|
||||
|
||||
module.exports = function(grunt) {
|
||||
|
||||
let {cp, mkdir, rm} = grunt.config('taskHelpers');
|
||||
|
||||
let getClassesToInclude = function() {
|
||||
let modulesPath = path.join(grunt.config('appDir'), 'internal_packages');
|
||||
let classes = {};
|
||||
fs.traverseTreeSync(modulesPath, function(modulePath) {
|
||||
// Don't traverse inside dependencies
|
||||
if (modulePath.match(/node_modules/g)) { return false; }
|
||||
|
||||
// Don't traverse blacklisted packages (that have docs, but we don't want to include)
|
||||
if (path.basename(modulePath) !== 'package.json') { return true; }
|
||||
if (!fs.isFileSync(modulePath)) { return true; }
|
||||
|
||||
let apiPath = path.join(path.dirname(modulePath), 'api.json');
|
||||
if (fs.isFileSync(apiPath)) {
|
||||
Object.assign(classes, grunt.file.readJSON(apiPath).classes);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return classes;
|
||||
};
|
||||
|
||||
let sortClasses = function(classes) {
|
||||
let sortedClasses = {};
|
||||
for (let className of Array.from(Object.keys(classes).sort())) {
|
||||
sortedClasses[className] = classes[className];
|
||||
}
|
||||
return sortedClasses;
|
||||
};
|
||||
|
||||
var processFields = function(json, fields, tasks) {
|
||||
let val;
|
||||
if (fields == null) { fields = []; }
|
||||
if (tasks == null) { tasks = []; }
|
||||
if (json instanceof Array) {
|
||||
return (() => {
|
||||
let result = [];
|
||||
for (val of Array.from(json)) {
|
||||
result.push(processFields(val, fields, tasks));
|
||||
}
|
||||
return result;
|
||||
})();
|
||||
} else {
|
||||
return (() => {
|
||||
let result1 = [];
|
||||
for (let key in json) {
|
||||
val = json[key];
|
||||
let item;
|
||||
if (Array.from(fields).includes(key)) {
|
||||
for (let task of Array.from(tasks)) {
|
||||
val = task(val);
|
||||
}
|
||||
json[key] = val;
|
||||
}
|
||||
if (_.isObject(val)) {
|
||||
item = processFields(val, fields, tasks);
|
||||
}
|
||||
result1.push(item);
|
||||
}
|
||||
return result1;
|
||||
})();
|
||||
}
|
||||
};
|
||||
|
||||
return grunt.registerTask('docs', 'Builds the API docs in src', function() {
|
||||
|
||||
grunt.log.writeln("Time to build the docs!")
|
||||
|
||||
let done = this.async();
|
||||
|
||||
// Convert CJSX into coffeescript that can be read by Donna
|
||||
|
||||
// let classDocsOutputDir = grunt.config.get('classDocsOutputDir');
|
||||
|
||||
let classDocsOutputDir = '~/Desktop/Nylas Mail Docs/'
|
||||
let cjsxOutputDir = path.join(classDocsOutputDir, 'temp-cjsx');
|
||||
|
||||
return rimraf(cjsxOutputDir, function() {
|
||||
let api;
|
||||
fs.mkdir(cjsxOutputDir);
|
||||
|
||||
let srcPath = path.resolve(grunt.config('appDir'), 'src');
|
||||
|
||||
fs.traverseTreeSync(srcPath, function(file) {
|
||||
|
||||
if (file.indexOf('/K2/') > 0) {
|
||||
// Skip K2
|
||||
}
|
||||
else if (path.extname(file) === '.cjsx') { // Should also look for jsx and es6
|
||||
let transformed = cjsxtransform(grunt.file.read(file));
|
||||
|
||||
// Only attempt to parse this file as documentation if it contains
|
||||
// real Coffeescript classes.
|
||||
if (transformed.indexOf('\nclass ') > 0) {
|
||||
|
||||
grunt.log.writeln("Found class in file: " + file)
|
||||
|
||||
grunt.file.write(path.join(cjsxOutputDir, path.basename(file).slice(0, -5 + 1 || undefined)+'coffee'), transformed);
|
||||
}
|
||||
}
|
||||
else if (path.extname(file) === '.jsx') {
|
||||
console.log('Transforming ' + file)
|
||||
|
||||
let fileStr = grunt.file.read(file);
|
||||
|
||||
let transformed = require("babel-core").transform(fileStr, {
|
||||
plugins: ["transform-react-jsx",
|
||||
"transform-class-properties"],
|
||||
presets: ['react', 'stage-2']
|
||||
});
|
||||
|
||||
|
||||
if (transformed.code.indexOf('class ') > 0) {
|
||||
grunt.log.writeln("Found class in file: " + file)
|
||||
|
||||
grunt.file.write(path.join(cjsxOutputDir, path.basename(file).slice(0, -3 || undefined)+'js'), transformed.code);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
grunt.log.ok('Done transforming, starting donna extraction')
|
||||
grunt.log.writeln('cjsxOutputDir: ' + cjsxOutputDir)
|
||||
|
||||
// Process coffeescript source
|
||||
let metadata = donna.generateMetadata([cjsxOutputDir]);
|
||||
grunt.log.ok('---- Done with Donna (cjsx metadata)----');
|
||||
|
||||
console.log(js_files);
|
||||
|
||||
var js_files = []
|
||||
fs.traverseTreeSync(cjsxOutputDir, function(file) {
|
||||
if (path.extname(file) === '.js') {
|
||||
js_files.push(file.toString())
|
||||
}
|
||||
});
|
||||
|
||||
console.log(js_files);
|
||||
let jsx_metadata = joanna(js_files);
|
||||
grunt.log.ok('---- Done with Joanna (jsx metadata)----');
|
||||
|
||||
Object.assign(metadata, jsx_metadata);
|
||||
|
||||
console.log(metadata);
|
||||
|
||||
try {
|
||||
api = tello.digest(metadata);
|
||||
} catch (e) {
|
||||
console.log(e.stack);
|
||||
}
|
||||
|
||||
console.log('---- Done with Tello ----');
|
||||
Object.assign(api.classes, getClassesToInclude());
|
||||
api.classes = sortClasses(api.classes);
|
||||
|
||||
let apiJson = JSON.stringify(api, null, 2);
|
||||
let apiJsonPath = path.join(classDocsOutputDir, 'api.json');
|
||||
grunt.file.write(apiJsonPath, apiJson);
|
||||
return done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
};
|
|
@ -5,13 +5,6 @@
|
|||
"description": "The best email app for people and teams at work",
|
||||
"license": "GPL-3.0",
|
||||
"main": "./src/browser/main.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nylas/nylas-mail.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/nylas/nylas-mail/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"async": "^0.9",
|
||||
"babel-core": "6.22.0",
|
||||
|
@ -81,32 +74,7 @@
|
|||
"underscore.string": "^3.0",
|
||||
"windows-shortcuts": "emorikawa/windows-shortcuts#b0a0fc7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"donna": "^1.0.15",
|
||||
"esdoc": "^0.5.2",
|
||||
"esdoc-es7-plugin": "0.0.3",
|
||||
"gitbook": "^3.2.2",
|
||||
"gitbook-cli": "^2.3.0",
|
||||
"gitbook-plugin-anchors": "^0.7.1",
|
||||
"gitbook-plugin-editlink": "^1.0.2",
|
||||
"gitbook-plugin-favicon": "0.0.2",
|
||||
"gitbook-plugin-github": "^2.0.0",
|
||||
"gitbook-plugin-theme-api": "^1.1.2",
|
||||
"handlebars": "4.0.6",
|
||||
"joanna": "0.0.8",
|
||||
"meta-marked": "0.4.2",
|
||||
"tello": "1.0.6"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"node-mac-notifier": "0.0.13"
|
||||
},
|
||||
"packageDependencies": {},
|
||||
"scripts": {
|
||||
"test": "electron . --test --enable-logging",
|
||||
"test-window": "electron . --test=window --enable-logging",
|
||||
"test-junit": "electron . --test --enable-logging --junit-xml=junitxml",
|
||||
"start": "electron . --dev --enable-logging",
|
||||
"lint": "script/grunt lint",
|
||||
"build": "script/grunt build"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Builds docs and moves the output to gh-pages branch (overwrites)
|
||||
mkdir -p _docs_output
|
||||
script/grunt docs
|
||||
./node_modules/.bin/gitbook --gitbook=latest build . ./_docs_output --log=debug --debug
|
||||
rm -r docs_src/classes
|
||||
git checkout gh-pages --quiet
|
||||
cp -rf _docs_output/* .
|
||||
# rm -r _docs_output
|
||||
|
||||
git add .
|
||||
git status -s
|
||||
printf "\nDocs updated! \n\n"
|
||||
git commit -m 'Update Docs'
|
||||
git push origin gh-pages
|
||||
git checkout master
|
36
book.json
Normal file
36
book.json
Normal file
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"gitbook": "3.2.2",
|
||||
"title": "Merani Plugin SDK",
|
||||
"root": "./app/build/docs_src/",
|
||||
"plugins": [
|
||||
"search",
|
||||
"lunr",
|
||||
"-fontsettings",
|
||||
"-sharing",
|
||||
"anchors",
|
||||
"github",
|
||||
"editlink",
|
||||
"favicon"
|
||||
],
|
||||
"pluginsConfig": {
|
||||
"editlink": {
|
||||
"base": "https://github.com/Foundry376/Merani/tree/master",
|
||||
"label": "Edit This Page",
|
||||
"multilingual": false
|
||||
},
|
||||
"github": {
|
||||
"url": "https://github.com/Foundry376/Merani"
|
||||
},
|
||||
"favicon": {
|
||||
"shortcut": "/img/favicon.png"
|
||||
}
|
||||
},
|
||||
|
||||
"links": {
|
||||
"sharing": {
|
||||
"facebook": false,
|
||||
"twitter": false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
45
package.json
45
package.json
|
@ -1,7 +1,17 @@
|
|||
{
|
||||
"name": "nylas-mail-all",
|
||||
"name": "merani-root",
|
||||
"version": "0.0.1",
|
||||
"description": "All components required to run Nylas Mail",
|
||||
"description": "Packages required to develop and build Merani",
|
||||
"author": "Merani",
|
||||
"license": "GPL-3.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Foundry376/Merani.git"
|
||||
},
|
||||
"engines": {
|
||||
"node": "6.9.1",
|
||||
"npm": "3.10.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-cli": "6.x.x",
|
||||
"babel-core": "6.x.x",
|
||||
|
@ -12,6 +22,7 @@
|
|||
"coffeelint-cjsx": "2.x.x",
|
||||
"commander": "^2.9.0",
|
||||
"devtron": "^1.4.0",
|
||||
"donna": "^1.0.16",
|
||||
"electron-installer-dmg": "0.2.x",
|
||||
"electron-packager": "8.4.x",
|
||||
"electron-winstaller": "2.x.x",
|
||||
|
@ -23,6 +34,12 @@
|
|||
"eslint_d": "4.2.0",
|
||||
"fs-extra": "2.x.x",
|
||||
"fs-plus": "2.x.x",
|
||||
"gitbook-cli": "^2.3.2",
|
||||
"gitbook-plugin-anchors": "^0.7.1",
|
||||
"gitbook-plugin-editlink": "^1.0.2",
|
||||
"gitbook-plugin-favicon": "0.0.2",
|
||||
"gitbook-plugin-github": "^2.0.0",
|
||||
"gitbook-plugin-theme-api": "^1.1.2",
|
||||
"glob": "7.x.x",
|
||||
"grunt": "0.4.x",
|
||||
"grunt-cli": "0.1.x",
|
||||
|
@ -32,35 +49,25 @@
|
|||
"grunt-contrib-csslint": "0.5.x",
|
||||
"grunt-contrib-less": "0.8.x",
|
||||
"grunt-lesslint": "0.13.x",
|
||||
"handlebars": "^4.0.10",
|
||||
"jasmine": "2.x.x",
|
||||
"joanna": "0.0.9",
|
||||
"load-grunt-parent-tasks": "0.1.1",
|
||||
"meta-marked": "^0.4.2",
|
||||
"mkdirp": "^0.5.1",
|
||||
"pm2": "2.4.0",
|
||||
"request": "2.x.x",
|
||||
"rimraf": "^2.6.1",
|
||||
"temp": "0.8.x",
|
||||
"underscore": "1.8.x"
|
||||
},
|
||||
"scripts": {
|
||||
"postinstall": "node scripts/postinstall.js",
|
||||
"start": "app/node_modules/.bin/electron ./app --enable-logging --dev",
|
||||
"lint": "grunt lint --gruntfile=app/build/Gruntfile.js --base=./",
|
||||
"test": "app/node_modules/.bin/electron ./app --enable-logging --test",
|
||||
"test-window": "app/node_modules/.bin/electron ./app --enable-logging --test=window",
|
||||
"test-junit": "",
|
||||
"lint": "grunt lint --gruntfile=app/build/Gruntfile.js --base=./",
|
||||
"build": "grunt build-client --gruntfile=app/build/Gruntfile.js --base=./",
|
||||
"upload": "grunt upload-client --gruntfile=app/build/Gruntfile.js --base=./",
|
||||
"postinstall": "node scripts/postinstall.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/nylas/nylas-mail-all.git"
|
||||
},
|
||||
"author": "Nylas",
|
||||
"license": "GPL-3.0",
|
||||
"engines": {
|
||||
"node": "6.9.1",
|
||||
"npm": "3.10.8"
|
||||
},
|
||||
"dependencies": {
|
||||
"rimraf": "^2.6.1"
|
||||
"build-docs": "grunt docs --gruntfile=app/build/Gruntfile.js --base=./ && mkdir -p app/dist-docs && cp README.md ./app/build/docs_src/README.md && gitbook --gitbook=latest build . ./app/dist-docs --log=debug --debug && rm ./app/build/docs_src/README.md && rm -rf ./app/build/docs_src/classes"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ async function main(args) {
|
|||
await spawn('npm', ['install'], {env: {}})
|
||||
await spawn('npm', ['run', 'build-client'], {env: {SIGN_BUILD: true}})
|
||||
await spawn('codesign', ['--verify', '--deep', '--verbose=2', '"app/dist/Nylas Mail-darwin-x64/Nylas Mail.app"'])
|
||||
await spawn('npm', ['run', 'upload-client'])
|
||||
// await spawn('npm', ['run', 'upload-client'])
|
||||
} catch (err) {
|
||||
console.error('Errored while running build')
|
||||
console.error(err)
|
||||
|
|
Loading…
Reference in a new issue