diff --git a/package.json b/package.json index 54b88df..397b719 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,9 @@ "@jupyterlab/application": "^0.15.0", "@jupyterlab/docmanager": "^0.13.0", "@jupyterlab/filebrowser": "^0.15.0", - "@jupyterlab/mainmenu": "^0.4.2", - "@jupyterlab/launcher": "^0.15.1" + "@jupyterlab/mainmenu": "^0.4.0", + "@jupyterlab/launcher": "^0.15.0", + "@jupyterlab/apputils": "^0.15.0" }, "devDependencies": { "rimraf": "^2.6.1", diff --git a/src/editor.ts b/src/editor.ts index 8fb1d6c..d9fe229 100644 --- a/src/editor.ts +++ b/src/editor.ts @@ -61,7 +61,7 @@ class DrawioWidget extends Widget implements DocumentRegistry.IReadyWidget { } protected onAfterShow(msg: Message): void { - this.loadEditor(this.node); + this._loadEditor(this.node); this._onContentChanged(); } @@ -88,7 +88,7 @@ class DrawioWidget extends Widget implements DocumentRegistry.IReadyWidget { this.ready = Promise.resolve(); } - private loadEditor(node: HTMLElement, contents?: string): void { + private _loadEditor(node: HTMLElement, contents?: string): void { // console.log(mx); var editorUiInit = mx.EditorUi.prototype.init; @@ -97,15 +97,14 @@ class DrawioWidget extends Widget implements DocumentRegistry.IReadyWidget { mx.mxResources.loadDefaultBundle = false; // Fixes possible asynchronous requests - var bundle = grapheditor_txt; mx.mxResources.parse(grapheditor_txt); let oParser = new DOMParser(); let oDOM = oParser.parseFromString(default_xml, "text/xml"); - var themes = new Object(); + let themes: any = new Object(null); themes[mx.Graph.prototype.defaultThemeName] = oDOM.documentElement; this._editor = new mx.EditorUi(new mx.Editor(false, themes), node); - this._editor.editor.graph.model.addListener(mx.mxEvent.NOTIFY, (sender, evt) => { + this._editor.editor.graph.model.addListener(mx.mxEvent.NOTIFY, (sender: any, evt: any) => { this._saveToContext(); }); return this._editor; @@ -149,10 +148,6 @@ class DrawioWidget extends Widget implements DocumentRegistry.IReadyWidget { this.context.model.fromString(xml); } - public getSVG() : void { - return mx.mxUtils.getXml(this._editor.editor.graph.getSvg()); - } - private _onModelStateChanged(sender: DocumentRegistry.IModel, args: IChangedArgs): void { if (args.name === 'dirty') { this._handleDirtyState(); @@ -167,12 +162,16 @@ class DrawioWidget extends Widget implements DocumentRegistry.IReadyWidget { } } - // TODO make this readonly, too - public ready : Promise; + /** + * A promise that resolves when the csv viewer is ready. + */ + get ready(): Promise { + return this._ready.promise; + } - // TODO turn this into a readonly attribute. - public context : DocumentRegistry.Context; - public _editor : any; + readonly context: DocumentRegistry.Context; + private _editor : any; + private _ready = new PromiseDelegate(); } /** diff --git a/src/index.ts b/src/index.ts index 6d56d99..0cf4e58 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,22 +9,10 @@ import { ICommandPalette, InstanceTracker, IInstanceTracker } from '@jupyterlab/apputils'; -import { - PathExt -} from '@jupyterlab/coreutils'; - import { IFileBrowserFactory } from '@jupyterlab/filebrowser'; -import { - IDocumentManager -} from '@jupyterlab/docmanager'; - -// import { -// drawio, drawioFactory, IDrawioTracker -// } from '@jupyterlab/drawio'; - import { DrawioWidget, DrawioFactory } from './editor'; @@ -34,22 +22,13 @@ import { } from '@jupyterlab/launcher'; import { - IEditMenu, IFileMenu, IMainMenu, IRunMenu, IViewMenu + IMainMenu } from '@jupyterlab/mainmenu'; import { - JSONObject, Token + Token } from '@phosphor/coreutils'; -import { - Menu -} from '@phosphor/widgets'; - -/** - * The class name for the text editor icon from the default theme. - */ -const EDITOR_ICON_CLASS = 'jp-TextEditorIcon'; - /** * The name of the factory that creates editor widgets. */ @@ -66,7 +45,7 @@ const IDrawioTracker = new Token('drawio/tracki'); const plugin: JupyterLabPlugin = { activate, id: '@jupyterlab/drawio-extension:plugin', - requires: [IFileBrowserFactory, ILayoutRestorer, IDocumentManager], + requires: [IFileBrowserFactory, ILayoutRestorer], optional: [ICommandPalette, ILauncher, IMainMenu], provides: IDrawioTracker, autoStart: true @@ -74,15 +53,22 @@ const plugin: JupyterLabPlugin = { export default plugin; -function activate(app: JupyterLab, - browserFactory: IFileBrowserFactory, restorer: ILayoutRestorer, docmanager: IDocumentManager, +function activate(app: JupyterLab, + browserFactory: IFileBrowserFactory, restorer: ILayoutRestorer, palette: ICommandPalette | null, launcher: ILauncher | null, menu: IMainMenu | null): IDrawioTracker { - const namespace = 'drawio'; const factory = new DrawioFactory({ name: FACTORY, fileTypes: ['dio'], defaultFor: ['dio'] }); - const { commands, restored } = app; + const { commands } = app; const tracker = new InstanceTracker({ namespace }); + /** + * Whether there is an active DrawIO editor. + */ + function isEnabled(): boolean { + return tracker.currentWidget !== null && + tracker.currentWidget === app.shell.currentWidget; + } + // Handle state restoration. restorer.restore(tracker, { command: 'docmanager:open', @@ -120,6 +106,7 @@ function activate(app: JupyterLab, }); }); }; + const createNewSVG = (cwd: string) => { return commands.execute('docmanager:new-untitled', { path: cwd, type: 'file', ext: '.svg' @@ -131,7 +118,7 @@ function activate(app: JupyterLab, }); }; - // Add a command for creating a new text file. + // Add a command for creating a new diagram file. commands.addCommand('drawio:create-new', { label: 'Diagram', caption: 'Create a new diagram file', @@ -142,19 +129,20 @@ function activate(app: JupyterLab, }); commands.addCommand('drawio:export-svg', { - label: 'Export SVG', + label: 'Export diagram as SVG', caption: 'Export diagram as SVG', execute: () => { let cwd = browserFactory.defaultBrowser.model.path; return createNewSVG(cwd); - } + }, + isEnabled }); // Add a launcher item if the launcher is available. if (launcher) { launcher.add({ - displayName: 'MXGraph', - name: 'MXGraph', + displayName: 'Diagram', + name: 'diagram', iconClass: 'jp-MaterialIcon jp-ImageIcon', callback: createNewDIO, rank: 1, @@ -165,10 +153,14 @@ function activate(app: JupyterLab, if (menu) { // Add new text file creation to the file menu. menu.fileMenu.newMenu.addGroup([{ command: 'drawio:create-new' }], 40); - let args = { 'format': 'SVG', 'label': 'SVG', 'isPalette': true }; - palette.addItem({ command: 'drawio:export-svg', category: 'Notebook Operations', args: args }); + //let args = { 'format': 'SVG', 'label': 'SVG', 'isPalette': true }; + //palette.addItem({ command: 'drawio:export-svg', category: 'Notebook Operations', args: args }); menu.fileMenu.addGroup([{ command: 'drawio:export-svg'}], 40); } + if (palette) { + palette.addItem({ command: 'drawio:export-svg', category: 'DrawIO' }); + } + return tracker; -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 64f2aad..e2e85ca 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,9 @@ { "compilerOptions": { "declaration": false, - "noImplicitAny": false, + "noImplicitAny": true, "noEmitOnError": true, - "noUnusedLocals": false, + "noUnusedLocals": true, "allowJs": true, "module": "commonjs", "moduleResolution": "node", diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..e6c8d6a --- /dev/null +++ b/yarn.lock @@ -0,0 +1,705 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@jupyterlab/application@^0.15.0": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-0.15.2.tgz#2cc59b4c5fb26d3398d9ba7b6e0c9cc482244bdc" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/docregistry" "^0.15.2" + "@jupyterlab/rendermime" "^0.15.2" + "@jupyterlab/rendermime-interfaces" "^1.0.4" + "@jupyterlab/services" "^1.1.2" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/application" "^1.5.0" + "@phosphor/commands" "^1.4.0" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/properties" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/widgets" "^1.5.0" + +"@jupyterlab/apputils@^0.15.0", "@jupyterlab/apputils@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-0.15.2.tgz#ac2c27d704c864e151c288fb4da2dcfa479c8860" + dependencies: + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/services" "^1.1.2" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/commands" "^1.4.0" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/domutils" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/properties" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/virtualdom" "^1.1.2" + "@phosphor/widgets" "^1.5.0" + "@types/react" "~16.0.19" + react "~16.0.0" + react-dom "~16.0.0" + sanitize-html "~1.14.3" + +"@jupyterlab/codeeditor@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-0.15.2.tgz#a7a33b6fa181964df05718d7b1e6e9f3e1000d1f" + dependencies: + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/observables" "^1.0.4" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/virtualdom" "^1.1.2" + "@phosphor/widgets" "^1.5.0" + +"@jupyterlab/codemirror@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-0.15.2.tgz#7749429e3d46358f620064991d623e040f33fdfc" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@jupyterlab/codeeditor" "^0.15.2" + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/observables" "^1.0.4" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + codemirror "~5.24.2" + +"@jupyterlab/coreutils@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-1.0.4.tgz#242e198958b984fdcf319edfea932cefb34b9616" + dependencies: + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + ajv "~5.1.6" + comment-json "^1.1.3" + minimist "~1.2.0" + moment "~2.17.1" + path-posix "~1.0.0" + url-parse "~1.1.9" + +"@jupyterlab/docmanager@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager/-/docmanager-0.15.2.tgz#b49353fbd849a49627763f1a9709ccf73d4b87d5" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/docregistry" "^0.15.2" + "@jupyterlab/services" "^1.1.2" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/properties" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/widgets" "^1.5.0" + +"@jupyterlab/docregistry@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-0.15.2.tgz#7590999456870e8867dad1a525815dce9efce8fb" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@jupyterlab/codeeditor" "^0.15.2" + "@jupyterlab/codemirror" "^0.15.2" + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/observables" "^1.0.4" + "@jupyterlab/rendermime" "^0.15.2" + "@jupyterlab/rendermime-interfaces" "^1.0.4" + "@jupyterlab/services" "^1.1.2" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/widgets" "^1.5.0" + +"@jupyterlab/filebrowser@^0.15.0": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser/-/filebrowser-0.15.2.tgz#d0666e47d9e304065f3c88be0bdb5c59d34c0e3a" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/docmanager" "^0.15.2" + "@jupyterlab/docregistry" "^0.15.2" + "@jupyterlab/services" "^1.1.2" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/commands" "^1.4.0" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/domutils" "^1.1.2" + "@phosphor/dragdrop" "^1.3.0" + "@phosphor/messaging" "^1.2.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/widgets" "^1.5.0" + +"@jupyterlab/launcher@^0.15.0": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/launcher/-/launcher-0.15.2.tgz#cff5af362e4b69873189f9aedc342f0135542600" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/properties" "^1.1.2" + "@phosphor/widgets" "^1.5.0" + react "~16.0.0" + +"@jupyterlab/mainmenu@^0.4.0": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/mainmenu/-/mainmenu-0.4.2.tgz#7accc73109774a584ef0f54336bf38f1113ff5aa" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@jupyterlab/services" "^1.1.2" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/commands" "^1.4.0" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/widgets" "^1.5.0" + +"@jupyterlab/observables@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-1.0.4.tgz#7c46b52a6a3c1440478e12e6fc6e464cc0f21cbf" + dependencies: + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/signaling" "^1.2.2" + +"@jupyterlab/rendermime-interfaces@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.4.tgz#98dddd8a103b12c146934dac242db60811b7c3a7" + dependencies: + "@phosphor/coreutils" "^1.3.0" + "@phosphor/widgets" "^1.5.0" + +"@jupyterlab/rendermime@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-0.15.2.tgz#af438810191317c49ddfde9ed456013515e719ff" + dependencies: + "@jupyterlab/apputils" "^0.15.2" + "@jupyterlab/codemirror" "^0.15.2" + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/observables" "^1.0.4" + "@jupyterlab/rendermime-interfaces" "^1.0.4" + "@jupyterlab/services" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/messaging" "^1.2.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/widgets" "^1.5.0" + ansi_up "~1.3.0" + marked "~0.3.9" + +"@jupyterlab/services@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-1.1.2.tgz#36af71b26a43a225b29fd03e8ced57d9598d7415" + dependencies: + "@jupyterlab/coreutils" "^1.0.4" + "@jupyterlab/observables" "^1.0.4" + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + node-fetch "~1.7.3" + ws "~1.1.4" + +"@phosphor/algorithm@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.1.2.tgz#fd1de9104c9a7f34e92864586ddf2e7f2e7779e8" + +"@phosphor/application@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@phosphor/application/-/application-1.5.0.tgz#8d44677b1d62a54de90926bf25c921e7a5a25a49" + dependencies: + "@phosphor/commands" "^1.4.0" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/widgets" "^1.5.0" + +"@phosphor/collections@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@phosphor/collections/-/collections-1.1.2.tgz#c4c0b8b91129905fb36a9f243f2dbbde462dab8d" + dependencies: + "@phosphor/algorithm" "^1.1.2" + +"@phosphor/commands@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@phosphor/commands/-/commands-1.4.0.tgz#7e236a4c015daf37a9586fde29188c3dac20162f" + dependencies: + "@phosphor/algorithm" "^1.1.2" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/domutils" "^1.1.2" + "@phosphor/keyboard" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + +"@phosphor/coreutils@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.0.tgz#63292d381c012c5ab0d0196e83ced829b7e04a42" + +"@phosphor/disposable@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@phosphor/disposable/-/disposable-1.1.2.tgz#a192dd6a2e6c69d5d09d39ecf334dab93778060e" + dependencies: + "@phosphor/algorithm" "^1.1.2" + +"@phosphor/domutils@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@phosphor/domutils/-/domutils-1.1.2.tgz#e2efeb052f398c42b93b89e9bab26af15cc00514" + +"@phosphor/dragdrop@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz#7ce6ad39d6ca216d62a56f78104d02a77ae67307" + dependencies: + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + +"@phosphor/keyboard@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@phosphor/keyboard/-/keyboard-1.1.2.tgz#3e32234451764240a98e148034d5a8797422dd1f" + +"@phosphor/messaging@^1.1.0", "@phosphor/messaging@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@phosphor/messaging/-/messaging-1.2.2.tgz#7d896ddd3797b94a347708ded13da5783db75c14" + dependencies: + "@phosphor/algorithm" "^1.1.2" + "@phosphor/collections" "^1.1.2" + +"@phosphor/properties@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@phosphor/properties/-/properties-1.1.2.tgz#78cc77eff452839da02255de48e814946cc09a28" + +"@phosphor/signaling@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@phosphor/signaling/-/signaling-1.2.2.tgz#3fcf97ca88e38bfb357fe8fe6bf7513347a514a9" + dependencies: + "@phosphor/algorithm" "^1.1.2" + +"@phosphor/virtualdom@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz#ce55c86eef31e5d0e26b1dc96ea32bd684458f41" + dependencies: + "@phosphor/algorithm" "^1.1.2" + +"@phosphor/widgets@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@phosphor/widgets/-/widgets-1.5.0.tgz#5f998e86f5fde78d8aa44d7dc147686ca661681e" + dependencies: + "@phosphor/algorithm" "^1.1.2" + "@phosphor/commands" "^1.4.0" + "@phosphor/coreutils" "^1.3.0" + "@phosphor/disposable" "^1.1.2" + "@phosphor/domutils" "^1.1.2" + "@phosphor/dragdrop" "^1.3.0" + "@phosphor/keyboard" "^1.1.2" + "@phosphor/messaging" "^1.2.2" + "@phosphor/properties" "^1.1.2" + "@phosphor/signaling" "^1.2.2" + "@phosphor/virtualdom" "^1.1.2" + +"@types/react@~16.0.19": + version "16.0.36" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.36.tgz#ceb5639013bdb92a94147883052e69bb2c22c69b" + +ajv@~5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.6.tgz#4b2f1a19dece93d57ac216037e3e9791c7dd1564" + dependencies: + co "^4.6.0" + json-schema-traverse "^0.3.0" + json-stable-stringify "^1.0.1" + +ansi_up@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-1.3.0.tgz#c9c946bfc0b9bb5eaa060684bf2abaafe68bbd44" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +codemirror@~5.24.2: + version "5.24.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.24.2.tgz#b55ca950fa009709c37df68eb133310ed89cf2fe" + +comment-json@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e" + dependencies: + json-parser "^1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +esprima@^2.7.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +fbjs@^0.8.16: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +glob@^7.0.5: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +htmlparser2@^3.9.0: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +iconv-lite@~0.4.13: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +js-tokens@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +json-parser@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/json-parser/-/json-parser-1.1.5.tgz#e62ec5261d1a6a5fc20e812a320740c6d9005677" + dependencies: + esprima "^2.7.0" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +marked@~0.3.9: + version "0.3.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +moment@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" + +node-fetch@^1.0.1, node-fetch@~1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-posix@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + +react-dom@~16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.0.0.tgz#9cc3079c3dcd70d4c6e01b84aab2a7e34c303f58" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +react@~16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.0.0.tgz#ce7df8f1941b036f02b2cca9dbd0cb1f0e855e2d" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +readable-stream@^2.0.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +requires-port@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +rimraf@^2.2.8, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sanitize-html@~1.14.3: + version "1.14.3" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.3.tgz#62afd7c2d44ffd604599121d49e25b934e7a5514" + dependencies: + htmlparser2 "^3.9.0" + lodash.escaperegexp "^4.1.2" + xtend "^4.0.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +typescript@~2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" + +ua-parser-js@^0.7.9: + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +url-parse@~1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" + dependencies: + querystringify "~1.0.0" + requires-port "1.0.x" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +ws@~1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"