diff --git a/.gitignore b/.gitignore index 063dc9ef..2bc9ae31 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ dist/ +bin/ node_modules/ npm-debug.log .DS_Store .tern-project yarn-error.log -.vscode/ \ No newline at end of file +.vscode/ diff --git a/example/index.html b/example/index.html index ffd26667..600f89da 100644 --- a/example/index.html +++ b/example/index.html @@ -11,7 +11,7 @@ window.repoFiles = { _posts: { "2015-02-14-this-is-a-post.md": { - content: "---\ntitle: This is a post\nimage: /nf-logo.png\ndate: 2015-02-14T00:00:00.000Z\n---\n\n# I Am a Title in Markdown\n\nHello, world\n" + content: "---\ntitle: This is a post\nimage: /nf-logo.png\ndate: 2015-02-14T00:00:00.000Z\n---\n\n# I Am a Title in Markdown\n\nHello, world\n\n* One Thing\n* Another Thing\n* A Third Thing\n" } }, _faqs: { diff --git a/package.json b/package.json index 3fe5d5e3..acc6d3d4 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "test": "jest", "test:watch": "jest --watch", "build": "NODE_ENV=production webpack --config webpack.prod.js", + "build:scripts": "NODE_ENV=production webpack --config webpack.cli.js", "prepublish": "npm run build", "storybook": "start-storybook -p 9001", "storybook-build": "build-storybook -o dist", @@ -91,7 +92,10 @@ "dependencies": { "@kadira/storybook": "^1.36.0", "autoprefixer": "^6.3.3", + "babel": "^6.5.2", + "babel-cli": "^6.18.0", "dateformat": "^1.0.12", + "deep-equal": "^1.0.1", "fuzzy": "^0.1.1", "immutability-helper": "^2.0.0", "immutable": "^3.7.6", @@ -108,18 +112,18 @@ "normalize.css": "^4.2.0", "pluralize": "^3.0.0", "prismjs": "^1.5.1", - "prosemirror-commands": "^0.12.0", - "prosemirror-history": "^0.12.0", - "prosemirror-inputrules": "^0.12.0", - "prosemirror-keymap": "^0.12.0", - "prosemirror-markdown": "^0.12.0", - "prosemirror-model": "^0.12.0", - "prosemirror-schema-basic": "^0.12.0", - "prosemirror-schema-list": "^0.12.0", - "prosemirror-schema-table": "^0.12.0", - "prosemirror-state": "^0.12.0", - "prosemirror-transform": "^0.12.1", - "prosemirror-view": "^0.12.0", + "prosemirror-commands": "^0.16.0", + "prosemirror-history": "^0.16.0", + "prosemirror-inputrules": "^0.16.0", + "prosemirror-keymap": "^0.16.0", + "prosemirror-markdown": "^0.16.0", + "prosemirror-model": "^0.16.0", + "prosemirror-schema-basic": "^0.16.0", + "prosemirror-schema-list": "^0.16.0", + "prosemirror-schema-table": "^0.16.0", + "prosemirror-state": "^0.16.0", + "prosemirror-transform": "^0.16.0", + "prosemirror-view": "^0.16.0", "react": "^15.1.0", "react-addons-css-transition-group": "^15.3.1", "react-autosuggest": "^7.0.1", diff --git a/scripts/autoconfigure.collection.js b/scripts/autoconfigure.collection.js new file mode 100755 index 00000000..b347a240 --- /dev/null +++ b/scripts/autoconfigure.collection.js @@ -0,0 +1,150 @@ +import fs from "fs"; +import path from "path"; +import process from "process"; +import yaml from 'js-yaml'; +import deepEqual from 'deep-equal'; +import { formatByExtension } from "../src/formats/formats"; + +const looksLikeMarkdown = /(\[.+\]\(.+\)|\n?[#]+ [a-z0-9])/; // eslint-disable-line +const looksLikeAnImage = /^[^ ]+\.(png|jpg|svg|gif|jpeg)/; + +function capitalize(name) { + return name.substr(0, 1).toUpperCase() + name.substr(1); +} + +function inferWidget(name, value) { + if (value == null) { + return { widget: 'string' }; + } + if (value instanceof Date) { + return { widget: value.toJSON().match(/T00:00:00\.000Z$/) ? 'date' : 'datetime' }; + } + if (value instanceof Array) { + if (typeof value[0] === 'string') { + return { widget: 'list' }; + } + return { widget: 'list', fields: inferFields(value) }; + } + if (typeof value === 'object') { + return { widget: 'object', fields: inferFields([value]) }; + } + if (value === false || value === true) { + return { widget: 'checkbox' }; + } + if (typeof value === 'number') { + return { widget: 'number' }; + } + if (name === 'body' || value.match(looksLikeMarkdown)) { + return { widget: 'markdown' }; + } + if (value.match(/\n/)) { + return { widget: 'text' }; + } + if (value.match(looksLikeAnImage)) { + return { widget: 'image' }; + } + return { widget: 'string' }; +} + +function inferField(name, value) { + return Object.assign({ + label: capitalize(name.replace(/_-/g, ' ')), + name, + }, inferWidget(name, value)); +} + +function inferFields(entries) { + const fields = {}; + entries.forEach((entry) => { + if (entry == null) { return; } + Object.keys(entry).forEach((fieldName) => { + const field = inferField(fieldName, entry[fieldName]); + if (fields[fieldName]) { + fields[fieldName] = combineFields(fields[fieldName], field); + } else { + fields[fieldName] = field; + } + }); + }); + return Object.keys(fields).map(key => fields[key]); +} + +const widgetRank = { + markdown: 1, + text: 2, + string: 3, + image: 4, + datetime: 4, + date: 5, + number: 5, + object: 7, + list: 7, +}; + +function compareWidget(a, b) { + return widgetRank[a] - widgetRank[b]; +} + +function combineFields(a, b) { + if (b == null && a) { + return a; + } + if (a == null && b) { + return b; + } + if (deepEqual(a, b)) { + return a; + } + if (a.widget === b.widget) { + if (a.fields && b.fields) { + const newFields = {}; + a.fields.forEach((field) => { + newFields[field.name] = combineFields(field, b.fields.find(f => f.name === field.name)); + }); + b.fields.forEach((field) => { + if (!newFields[field.name]) { + newFields[field.name] = field; + } + }); + return Object.assign({}, a, { fields: Object.keys(newFields).map(k => newFields[k]) }); + } + return a; + } + return [a, b].sort((fieldA, fieldB) => compareWidget(fieldB.widget, fieldA.widget))[0]; +} + +if (process.argv.length !== 3) { + console.log("Usage: autoconfigure.collections.js "); + process.exit(1); +} + +const folder = process.argv[2].replace(/\/$/, ''); +const files = fs.readdirSync(folder); +const extensions = {}; + +files.forEach((file) => { + const ext = file.split(".").pop(); + if (ext) { + extensions[ext] = extensions[ext] || 0; + extensions[ext] += 1; + } +}); + +const name = folder.split('/').filter(s => s).pop(); +const extension = Object.keys(extensions).sort((a, b) => extensions[b] - extensions[a])[0]; +const format = formatByExtension(extension); +const entries = files.filter(name => name.split(".").pop() === extension).slice(0, 100).map(file => ( + format.fromFile(fs.readFileSync(path.join(folder, file), { encoding: 'utf8' })) +)); +const fields = inferFields(entries); + + +const collection = { + label: capitalize(name), + name, + folder, + extension, + fields, +}; + +console.log(yaml.safeDump([collection], { flowLevel: 3 })); diff --git a/src/components/MarkupItReactRenderer/__tests__/MarkupItReactRenderer.spec.js b/src/components/MarkupItReactRenderer/__tests__/MarkupItReactRenderer.spec.js index cdf49cc5..744d3ecc 100644 --- a/src/components/MarkupItReactRenderer/__tests__/MarkupItReactRenderer.spec.js +++ b/src/components/MarkupItReactRenderer/__tests__/MarkupItReactRenderer.spec.js @@ -10,6 +10,10 @@ import htmlSyntax from 'markup-it/syntaxes/html'; import reInline from 'markup-it/syntaxes/markdown/re/inline'; import MarkupItReactRenderer from '../'; +function getMedia(path) { + return path; +} + describe('MarkitupReactRenderer', () => { describe('basics', () => { it('should re-render properly after a value and syntax update', () => { @@ -17,6 +21,7 @@ describe('MarkitupReactRenderer', () => { ); const tree1 = component.html(); @@ -33,6 +38,7 @@ describe('MarkitupReactRenderer', () => { ); const syntax1 = component.instance().props.syntax; @@ -77,6 +83,7 @@ Text with **bold** & _em_ elements ); expect(component.html()).toMatchSnapshot(); @@ -91,6 +98,7 @@ Text with **bold** & _em_ elements ); expect(component.html()).toMatchSnapshot(); @@ -115,6 +123,7 @@ Text with **bold** & _em_ elements ); expect(component.html()).toMatchSnapshot(); @@ -134,6 +143,7 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3] ); expect(component.html()).toMatchSnapshot(); @@ -147,6 +157,7 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3] ); expect(component.html()).toMatchSnapshot(); @@ -158,6 +169,7 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3] ); expect(component.html()).toMatchSnapshot(); @@ -172,7 +184,7 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3]
+
Test HTML content
Testing HTML in Markdown
@@ -185,6 +197,7 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3] ); expect(component.html()).toMatchSnapshot(); @@ -228,6 +241,7 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3] value={value} syntax={myMarkdownSyntax} schema={myCustomSchema} + getMedia={getMedia} /> ); expect(component.html()).toMatchSnapshot(); @@ -241,6 +255,7 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3] ); expect(component.html()).toMatchSnapshot(); diff --git a/src/components/MarkupItReactRenderer/__tests__/__snapshots__/MarkupItReactRenderer.spec.js.snap b/src/components/MarkupItReactRenderer/__tests__/__snapshots__/MarkupItReactRenderer.spec.js.snap index 82d17c3b..87212581 100644 --- a/src/components/MarkupItReactRenderer/__tests__/__snapshots__/MarkupItReactRenderer.spec.js.snap +++ b/src/components/MarkupItReactRenderer/__tests__/__snapshots__/MarkupItReactRenderer.spec.js.snap @@ -10,7 +10,7 @@ exports[`MarkitupReactRenderer Markdown rendering HTML should render HTML as is "

Title

+
Test HTML content
Testing HTML in Markdown
diff --git a/src/components/MarkupItReactRenderer/index.js b/src/components/MarkupItReactRenderer/index.js index 8fdfb485..3513c1fd 100644 --- a/src/components/MarkupItReactRenderer/index.js +++ b/src/components/MarkupItReactRenderer/index.js @@ -42,11 +42,7 @@ const defaultSchema = { [ENTITIES.HARD_BREAK]: 'br', }; -const notAllowedAttributes = ['loose']; - -function sanitizeProps(props) { - return omit(props, notAllowedAttributes); -} +const notAllowedAttributes = ['loose', 'image']; export default class MarkupItReactRenderer extends React.Component { @@ -66,6 +62,17 @@ export default class MarkupItReactRenderer extends React.Component { } } + sanitizeProps(props) { + const { getMedia } = this.props; + + if (props.image) { + props = Object.assign({}, props, { src: getMedia(props.image).toString() }); + } + + return omit(props, notAllowedAttributes); + } + + renderToken(schema, token, index = 0, key = '0') { const type = token.get('type'); const data = token.get('data'); @@ -85,7 +92,7 @@ export default class MarkupItReactRenderer extends React.Component { if (nodeType !== null) { let props = { key, token }; if (typeof nodeType !== 'function') { - props = { key, ...sanitizeProps(data.toJS()) }; + props = { key, ...this.sanitizeProps(data.toJS()) }; } // If this is a react element return React.createElement(nodeType, props, children); @@ -108,7 +115,7 @@ export default class MarkupItReactRenderer extends React.Component { render() { - const { value, schema } = this.props; + const { value, schema, getMedia } = this.props; const content = this.parser.toContent(value); return this.renderToken({ ...defaultSchema, ...schema }, content.get('token')); } @@ -121,4 +128,5 @@ MarkupItReactRenderer.propTypes = { PropTypes.string, PropTypes.func, ])), + getMedia: PropTypes.func.isRequired, }; diff --git a/src/components/Widgets/MarkdownControl.js b/src/components/Widgets/MarkdownControl.js index a04ea6da..9c8e2421 100644 --- a/src/components/Widgets/MarkdownControl.js +++ b/src/components/Widgets/MarkdownControl.js @@ -6,6 +6,8 @@ import { processEditorPlugins } from './richText'; import { connect } from 'react-redux'; import { switchVisualMode } from '../../actions/editor'; +const MODE_STORAGE_KEY = 'cms.md-mode'; + class MarkdownControl extends React.Component { static propTypes = { editor: PropTypes.object.isRequired, @@ -18,7 +20,7 @@ class MarkdownControl extends React.Component { constructor(props) { super(props); - this.state = { mode: 'visual' }; + this.state = { mode: localStorage.getItem(MODE_STORAGE_KEY) || 'visual' }; } componentWillMount() { @@ -27,6 +29,7 @@ class MarkdownControl extends React.Component { handleMode = (mode) => { this.setState({ mode }); + localStorage.setItem(MODE_STORAGE_KEY, mode); }; render() { diff --git a/src/components/Widgets/MarkdownControlElements/RawEditor/index.css b/src/components/Widgets/MarkdownControlElements/RawEditor/index.css index 6e91c9f0..f158b7f8 100644 --- a/src/components/Widgets/MarkdownControlElements/RawEditor/index.css +++ b/src/components/Widgets/MarkdownControlElements/RawEditor/index.css @@ -1,3 +1,22 @@ .root { position: relative; } + +.dragging { } + +.shim { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + border: 2px dashed #aaa; + background: rgba(0,0,0,0.2); +} + +.dragging .shim { + z-index: 1000; + display: block; + pointer-events: none; +} diff --git a/src/components/Widgets/MarkdownControlElements/RawEditor/index.js b/src/components/Widgets/MarkdownControlElements/RawEditor/index.js index d921a4c1..ad9c2cf3 100644 --- a/src/components/Widgets/MarkdownControlElements/RawEditor/index.js +++ b/src/components/Widgets/MarkdownControlElements/RawEditor/index.js @@ -24,10 +24,6 @@ function processUrl(url) { return `/${ url }`; } -function preventDefault(e) { - e.preventDefault(); -} - function cleanupPaste(paste) { const content = html.toContent(paste); return markdown.toText(content); @@ -76,11 +72,9 @@ export default class RawEditor extends React.Component { }, }; } + componentDidMount() { this.updateHeight(); - this.element.addEventListener('dragenter', preventDefault, false); - this.element.addEventListener('dragover', preventDefault, false); - this.element.addEventListener('drop', this.handleDrop, false); this.element.addEventListener('paste', this.handlePaste, false); } @@ -93,9 +87,7 @@ export default class RawEditor extends React.Component { } componentWillUnmount() { - this.element.removeEventListener('dragenter', preventDefault); - this.element.removeEventListener('dragover', preventDefault); - this.element.removeEventListener('drop', this.handleDrop); + this.element.removeEventListener('paste', this.handlePaste); } getSelection() { @@ -256,8 +248,25 @@ export default class RawEditor extends React.Component { }; } + handleDragEnter = (e) => { + e.preventDefault(); + this.setState({ dragging: true }); + }; + + handleDragLeave = (e) => { + e.preventDefault(); + this.setState({ dragging: false }); + }; + + handleDragOver = (e) => { + e.preventDefault(); + }; + handleDrop = (e) => { e.preventDefault(); + + this.setState({ dragging: false }); + let data; if (e.dataTransfer.files && e.dataTransfer.files.length) { @@ -296,8 +305,19 @@ export default class RawEditor extends React.Component { render() { const { onAddMedia, onRemoveMedia, getMedia } = this.props; - const { showToolbar, showBlockMenu, plugins, selectionPosition } = this.state; - return (
+ const { showToolbar, showBlockMenu, plugins, selectionPosition, dragging } = this.state; + const classNames = [styles.root]; + if (dragging) { + classNames.push(styles.dragging); + } + + return (
+
); } } diff --git a/src/components/Widgets/MarkdownControlElements/VisualEditor/index.css b/src/components/Widgets/MarkdownControlElements/VisualEditor/index.css index 54764f89..9dc2e9b5 100644 --- a/src/components/Widgets/MarkdownControlElements/VisualEditor/index.css +++ b/src/components/Widgets/MarkdownControlElements/VisualEditor/index.css @@ -20,6 +20,13 @@ & p { margin-bottom: 20px; } + & hr { + border: 1px solid; + margin-bottom: 20px; + } + & li > p { + margin: 0; + } & div[data-plugin] { background: #fff; border: 1px solid #aaa; @@ -28,6 +35,25 @@ } } +.dragging { } + +.shim { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + border: 2px dashed #aaa; + background: rgba(0,0,0,0.2); +} + +.dragging .shim { + z-index: 1000; + display: block; + pointer-events: none; +} + :global { & .ProseMirror { position: relative; diff --git a/src/components/Widgets/MarkdownControlElements/VisualEditor/index.js b/src/components/Widgets/MarkdownControlElements/VisualEditor/index.js index f269e0c9..216b30fc 100644 --- a/src/components/Widgets/MarkdownControlElements/VisualEditor/index.js +++ b/src/components/Widgets/MarkdownControlElements/VisualEditor/index.js @@ -11,6 +11,7 @@ import { keymap } from 'prosemirror-keymap'; import { schema, defaultMarkdownSerializer } from 'prosemirror-markdown'; import { baseKeymap, setBlockType, toggleMark } from 'prosemirror-commands'; import registry from '../../../../lib/registry'; +import MediaProxy from '../../../../valueObjects/MediaProxy'; import { buildKeymap } from './keymap'; import createMarkdownParser from './parser'; import Toolbar from '../Toolbar'; @@ -88,7 +89,7 @@ function createSerializer(schema, plugins) { plugins.forEach((plugin) => { serializer.nodes[`plugin_${ plugin.get('id') }`] = (state, node) => { const toBlock = plugin.get('toBlock'); - state.write(toBlock.call(plugin, node.attrs)); + state.write(toBlock.call(plugin, node.attrs) + '\n\n'); }; }); return serializer; @@ -210,7 +211,53 @@ export default class Editor extends Component { handleBlock = (plugin, data) => { const { schema } = this.state; const nodeType = schema.nodes[`plugin_${ plugin.get('id') }`]; - this.view.props.onAction(this.view.state.tr.replaceSelection(nodeType.create(data.toJS())).action()); + this.view.props.onAction(this.view.state.tr.replaceSelectionWith(nodeType.create(data.toJS())).action()); + }; + + handleDragEnter = (e) => { + e.preventDefault(); + this.setState({ dragging: true }); + }; + + handleDragLeave = (e) => { + e.preventDefault(); + this.setState({ dragging: false }); + }; + + handleDragOver = (e) => { + e.preventDefault(); + }; + + handleDrop = (e) => { + e.preventDefault(); + + this.setState({ dragging: false }); + + const { schema } = this.state; + + const nodes = []; + + if (e.dataTransfer.files && e.dataTransfer.files.length) { + Array.from(e.dataTransfer.files).forEach((file) => { + const mediaProxy = new MediaProxy(file.name, file); + this.props.onAddMedia(mediaProxy); + if (file.type.split('/')[0] === 'image') { + nodes.push( + schema.nodes.image.create({ src: mediaProxy.public_path, alt: file.name }) + ); + } else { + nodes.push( + schema.marks.link.create({ href: mediaProxy.public_path, title: file.name }) + ); + } + }); + } else { + nodes.push(schema.nodes.paragraph.create({}, e.dataTransfer.getData('text/plain'))); + } + + nodes.forEach((node) => { + this.view.props.onAction(this.view.state.tr.replaceSelectionWith(node).action()); + }); }; handleToggle = () => { @@ -219,9 +266,19 @@ export default class Editor extends Component { render() { const { onAddMedia, onRemoveMedia, getMedia } = this.props; - const { plugins, showToolbar, showBlockMenu, selectionPosition } = this.state; + const { plugins, showToolbar, showBlockMenu, selectionPosition, dragging } = this.state; + const classNames = [styles.editor]; + if (dragging) { + classNames.push(styles.dragging); + } - return (
+ return (
+
); } } diff --git a/src/components/Widgets/MarkdownControlElements/VisualEditor/parser.js b/src/components/Widgets/MarkdownControlElements/VisualEditor/parser.js index a3d438cc..6234056f 100644 --- a/src/components/Widgets/MarkdownControlElements/VisualEditor/parser.js +++ b/src/components/Widgets/MarkdownControlElements/VisualEditor/parser.js @@ -228,8 +228,11 @@ export default function createMarkdownParser(schema, plugins) { blockquote: {block: "blockquote"}, paragraph: {block: "paragraph"}, list_item: {block: "list_item"}, - bullet_list: {block: "bullet_list"}, - ordered_list: {block: "ordered_list", attrs: tok => ({order: +tok.attrGet("order") || 1})}, + // Note - we force lists to be tight here, while that's not ProseMirror's default + // The default behavior means list elements always have a `p` inside, and we want + // to avoid tha. + bullet_list: {block: "bullet_list", attrs: tok => ({tight: true})}, + ordered_list: {block: "ordered_list", attrs: tok => ({tight: true, order: +tok.attrGet("order") || 1})}, heading: {block: "heading", attrs: tok => ({level: +tok.tag.slice(1)})}, code_block: {block: "code_block"}, fence: {block: "code_block"}, diff --git a/src/components/Widgets/MarkdownControlElements/VisualEditor/serializer.js b/src/components/Widgets/MarkdownControlElements/VisualEditor/serializer.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/Widgets/MarkdownPreview.js b/src/components/Widgets/MarkdownPreview.js index 1d55ad3e..456693d7 100644 --- a/src/components/Widgets/MarkdownPreview.js +++ b/src/components/Widgets/MarkdownPreview.js @@ -24,6 +24,7 @@ const MarkdownPreview = ({ value, getMedia }) => { value={value} syntax={markdown} schema={schema} + getMedia={getMedia} />
); diff --git a/src/components/stories/MarkupItReactRenderer.js b/src/components/stories/MarkupItReactRenderer.js index 07a1f28c..46b9612f 100644 --- a/src/components/stories/MarkupItReactRenderer.js +++ b/src/components/stories/MarkupItReactRenderer.js @@ -19,16 +19,22 @@ const htmlContent = ` `; +function getMedia(path) { + return path; +} + storiesOf('MarkupItReactRenderer', module) .add('Markdown', () => ( )).add('HTML', () => ( )); diff --git a/src/formats/formats.js b/src/formats/formats.js index 48fa5367..de357e8a 100644 --- a/src/formats/formats.js +++ b/src/formats/formats.js @@ -12,7 +12,7 @@ function formatByType(type) { return YamlFrontmatterFormatter; } -function formatByExtension(extension) { +export function formatByExtension(extension) { return { yml: yamlFormatter, json: jsonFormatter, diff --git a/src/reducers/medias.js b/src/reducers/medias.js index 65862b95..3d38e320 100644 --- a/src/reducers/medias.js +++ b/src/reducers/medias.js @@ -17,15 +17,18 @@ const medias = (state = Map(), action) => { export default medias; +const memoizedProxies = {}; export const getMedia = (publicFolder, state, path) => { // No path provided, skip if (!path) return null; - if (state.has(path)) { + let proxy = state.get(path) || memoizedProxies[path]; + if (proxy) { // There is already a MediaProxy in memmory for this path. Use it. - return state.get(path); + return proxy; } // Create a new MediaProxy (for consistency) and return it. - return new MediaProxy(resolvePath(path, publicFolder), null, true); + proxy = memoizedProxies[path] = new MediaProxy(resolvePath(path, publicFolder), null, true); + return proxy; }; diff --git a/yarn.lock b/yarn.lock index ed8df366..405510a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -111,8 +111,8 @@ ajv-keywords@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.4.1.tgz#f080e635e230baae26537ce727f260ae62b43802" ajv@^4.7.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.1.tgz#6e1669b62d752424a73da9175901d0327adfc2a5" + version "4.10.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.3.tgz#3e4fea9675b157de7888b80dd0ed735b83f28e11" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -301,7 +301,7 @@ async@^1.3.0, async@^1.4.0, async@^1.4.2, async@^1.5.0, async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.1: +async@^2.0.1, async@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" dependencies: @@ -334,6 +334,27 @@ aws4@^1.2.1: version "1.5.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" +babel-cli@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186" + dependencies: + babel-core "^6.18.0" + babel-polyfill "^6.16.0" + babel-register "^6.18.0" + babel-runtime "^6.9.0" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.0.0" + glob "^5.0.5" + lodash "^4.2.0" + output-file-sync "^1.1.0" + path-is-absolute "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + v8flags "^2.0.10" + optionalDependencies: + chokidar "^1.0.0" + babel-code-frame@^6.16.0, babel-code-frame@^6.20.0: version "6.20.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26" @@ -962,7 +983,7 @@ babel-plugin-transform-system-register@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-system-register/-/babel-plugin-transform-system-register-0.0.1.tgz#9dff40390c2763ac518f0b2ad7c5ea4f65a5be25" -babel-polyfill@^6.9.1: +babel-polyfill@^6.16.0, babel-polyfill@^6.9.1: version "6.20.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7" dependencies: @@ -1116,6 +1137,10 @@ babel-types@^6.13.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.18 lodash "^4.2.0" to-fast-properties "^1.0.1" +babel@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" + babylon@^6.1.21, babylon@^6.11.0, babylon@^6.13.0: version "6.14.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" @@ -1507,7 +1532,7 @@ cli-table@^0.3.1: cli-truncate@^0.2.1: version "0.2.1" - resolved "http://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" dependencies: slice-ansi "0.0.4" string-width "^1.0.1" @@ -1648,7 +1673,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.9.0, commander@2.9.x: +commander@^2.8.1, commander@^2.9.0, commander@2.9.x: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -2068,8 +2093,8 @@ dateformat@^1.0.12: meow "^3.3.0" debug@^2.1.1, debug@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.5.1.tgz#9107bb4a506052ec2a02314bc606313ed2b921c1" + version "2.5.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.5.2.tgz#50c295a53dbf1657146e0c1b21307275e90d49cb" dependencies: ms "0.7.2" @@ -2190,8 +2215,8 @@ detect-indent@^4.0.0: repeating "^2.0.0" diff@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.1.0.tgz#9406c73a401e6c2b3ba901c5e2c44eb6a60c5385" + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" diffie-hellman@^5.0.0: version "5.0.2" @@ -2899,10 +2924,6 @@ extend@^3.0.0, extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" -extending-char@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/extending-char/-/extending-char-1.0.1.tgz#4c6c0eee3658a49df1600b32fc73876f418c7c6c" - extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -2999,12 +3020,12 @@ filename-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" -fileset@0.2.x: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" dependencies: - glob "5.x" - minimatch "2.x" + glob "^7.0.3" + minimatch "^3.0.3" fill-range@^2.1.0: version "2.2.3" @@ -3131,6 +3152,10 @@ fs-exists-sync@^0.1.0: version "0.1.0" resolved "http://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" +fs-readdir-recursive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3283,7 +3308,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^5.0.15, glob@5.0.x, glob@5.x: +glob@^5.0.15, glob@^5.0.5, glob@5.0.x: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: @@ -3411,7 +3436,7 @@ got@^5.0.0: unzip-response "^1.0.2" url-parse-lax "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6: +graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -4048,35 +4073,34 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.0.0-aplha.10: - version "1.0.0-aplha.10" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.0.0-aplha.10.tgz#902edf5cf5404e0eba7e00ef46408488a0d3e337" + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.0.tgz#fb3f62edd5bfc6ae09da09453ded6e10ae7e483b" dependencies: - async "1.x" - clone "^1.0.2" - fileset "0.2.x" - istanbul-lib-coverage "^1.0.0-alpha" - istanbul-lib-hook "^1.0.0-alpha" - istanbul-lib-instrument "^1.0.0-alpha" - istanbul-lib-report "^1.0.0-alpha" - istanbul-lib-source-maps "^1.0.0-alpha" - istanbul-reports "^1.0.0-alpha" - js-yaml "3.x" - mkdirp "0.5.x" - once "1.x" + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.0.0" + istanbul-lib-hook "^1.0.0-alpha.4" + istanbul-lib-instrument "^1.3.0" + istanbul-lib-report "^1.0.0-alpha.3" + istanbul-lib-source-maps "^1.1.0" + istanbul-reports "^1.0.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0: version "1.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2" -istanbul-lib-hook@^1.0.0-alpha: +istanbul-lib-hook@^1.0.0-alpha.4: version "1.0.0-alpha.4" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0-alpha.4.tgz#8c5bb9f6fbd8526e0ae6cf639af28266906b938f" dependencies: append-transform "^0.3.0" -istanbul-lib-instrument@^1.0.0-alpha, istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.1.4: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.0.tgz#19f0a973397454989b98330333063a5b56df0e58" +istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.1.4, istanbul-lib-instrument@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.1.tgz#112c25a4f2f9bc361d13d14bbff992331b974e52" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" @@ -4086,7 +4110,7 @@ istanbul-lib-instrument@^1.0.0-alpha, istanbul-lib-instrument@^1.1.1, istanbul-l istanbul-lib-coverage "^1.0.0" semver "^5.3.0" -istanbul-lib-report@^1.0.0-alpha: +istanbul-lib-report@^1.0.0-alpha.3: version "1.0.0-alpha.3" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af" dependencies: @@ -4097,7 +4121,7 @@ istanbul-lib-report@^1.0.0-alpha: rimraf "^2.4.3" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.0.0-alpha: +istanbul-lib-source-maps@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f" dependencies: @@ -4106,7 +4130,7 @@ istanbul-lib-source-maps@^1.0.0-alpha: rimraf "^2.4.4" source-map "^0.5.3" -istanbul-reports@^1.0.0-alpha: +istanbul-reports@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.0.tgz#24b4eb2b1d29d50f103b369bd422f6e640aa0777" dependencies: @@ -4872,8 +4896,8 @@ localforage@^1.4.2: lie "3.0.2" lodash-es@^4.2.0, lodash-es@^4.2.1: - version "4.17.2" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.2.tgz#59011b585166e613eb9dd5fc256b2cd1a30f3712" + version "4.17.3" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.3.tgz#567a08d2f0c91d92b31ce35c5565e1f337fb81db" lodash._arraycopy@^3.0.0: version "3.0.0" @@ -5234,8 +5258,8 @@ lodash@^3.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.16.2, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.7.0, "lodash@4.6.1 || ^4.16.1": - version "4.17.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" + version "4.17.3" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.3.tgz#557ed7d2a9438cac5fd5a43043ca60cb455e01f7" lodash@~4.16.4: version "4.16.6" @@ -5485,12 +5509,6 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, "minimat dependencies: brace-expansion "^1.0.0" -minimatch@2.x: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - dependencies: - brace-expansion "^1.0.0" - minimatch@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.2.tgz#0f398a7300ea441e9c348c83d98ab8c9dbf9c40a" @@ -5921,7 +5939,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.1, once@1.x: +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@1.x: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -5976,6 +5994,10 @@ ora@^0.2.1, ora@^0.2.3: cli-spinners "^0.1.2" object-assign "^4.0.1" +orderedmap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-1.0.0.tgz#d90fc2ba1ed085190907d601dec6e6a53f8d41ba" + original@>=0.0.5: version "1.0.0" resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" @@ -6011,6 +6033,14 @@ osenv@^0.1.0, osenv@0: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + package-json@^2.0.0, package-json@^2.0.1: version "2.4.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" @@ -6193,7 +6223,7 @@ pkg-up@^1.0.0: pleeease-filters@^3.0.0: version "3.0.0" - resolved "http://registry.npmjs.org/pleeease-filters/-/pleeease-filters-3.0.0.tgz#35a4d4c2086413eabc2ce17aaa2ec29054e3075c" + resolved "https://registry.yarnpkg.com/pleeease-filters/-/pleeease-filters-3.0.0.tgz#35a4d4c2086413eabc2ce17aaa2ec29054e3075c" dependencies: onecolor "~2.4.0" postcss "^5.0.4" @@ -6718,8 +6748,8 @@ postcss@^4.1.7: source-map "~0.4.2" postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.18, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.20, postcss@^5.0.21, postcss@^5.0.3, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.1.0, postcss@^5.1.1, postcss@^5.1.2, postcss@^5.2.0, postcss@^5.2.4, postcss@^5.2.5, postcss@^5.2.6: - version "5.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.6.tgz#a252cd67cd52585035f17e9ad12b35137a7bdd9e" + version "5.2.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.8.tgz#05720c49df23c79bda51fd01daeb1e9222e94390" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -6797,88 +6827,90 @@ proper-lockfile@^1.1.2: graceful-fs "^4.1.2" retry "^0.10.0" -prosemirror-commands@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-0.12.0.tgz#d790fe3dbabb5221e4d87e82834835e0f65881b2" +prosemirror-commands@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-0.16.0.tgz#061ec07de7a695cc3afbf0fb8b1ce7b8feaafb3b" dependencies: - extending-char "^1.0.0" - prosemirror-model "^0.12.0" - prosemirror-state "^0.12.0" - prosemirror-transform "^0.12.0" + prosemirror-model "^0.16.0" + prosemirror-state "^0.16.0" + prosemirror-transform "^0.16.0" -prosemirror-history@^0.12.0: - version "0.12.1" - resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-0.12.1.tgz#cbcdb536455b6af36bd2ba3ccced5387e5cfbfe1" +prosemirror-history@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-0.16.0.tgz#62babd5e048f9b035b539b297514350856b3e27f" dependencies: - prosemirror-state "^0.12.0" - prosemirror-transform "^0.12.0" + prosemirror-state "^0.16.0" + prosemirror-transform "^0.16.0" rope-sequence "^1.2.0" -prosemirror-inputrules@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-0.12.0.tgz#2e07b5cb1bfc7007c2b51ea5394303204b4b34df" +prosemirror-inputrules@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-0.16.0.tgz#dc2d3f3e79c4c28ed7e1208608fa854f25f88aba" dependencies: - prosemirror-state "^0.12.0" - prosemirror-transform "^0.12.0" + prosemirror-state "^0.16.0" + prosemirror-transform "^0.16.0" -prosemirror-keymap@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-0.12.0.tgz#b70645b5d3f5ff4843bc6d26a74fa0022b504221" +prosemirror-keymap@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-0.16.0.tgz#00d98e62161f78d17bcec88dbe0dde822dfd461d" dependencies: - prosemirror-state "^0.12.0" + prosemirror-state "^0.16.0" w3c-keyname "^1.1.0" -prosemirror-markdown@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-0.12.0.tgz#7ff8557c159168dcb532833c0b23b5b2866715c8" +prosemirror-markdown@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-0.16.0.tgz#3d5c66841340f5e4e3f81109faaa1760d93b1dfd" dependencies: markdown-it "^6.0.4" - prosemirror-model "~0.12.0" + prosemirror-model "~0.16.0" -prosemirror-model@^0.12.0, prosemirror-model@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-0.12.0.tgz#5430c4056f2d3fe87d36de3f73aa9d9d07b0e8a7" - -prosemirror-schema-basic@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-0.12.0.tgz#9af876f8a915e75ba65847c794eebfc0df9f274e" +prosemirror-model@^0.16.0, prosemirror-model@~0.16.0: + version "0.16.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-0.16.1.tgz#02bb4d0912d9f8847c002902304b784124736f6d" dependencies: - prosemirror-model "^0.12.0" + orderedmap "^1.0.0" -prosemirror-schema-list@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-0.12.0.tgz#d93ba425ed202fc113d7b3388e5d9be1f698c276" +prosemirror-schema-basic@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-0.16.0.tgz#1a7c45fd25b5307e361edb16ab31f308dbacde41" dependencies: - prosemirror-model "^0.12.0" - prosemirror-transform "^0.12.0" + prosemirror-model "^0.16.0" -prosemirror-schema-table@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-schema-table/-/prosemirror-schema-table-0.12.0.tgz#a665dcb66bbd4c0ff2eac492d82991c6c410b5f3" +prosemirror-schema-list@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-0.16.0.tgz#b7dd1e7f42da4e487b1eb0199a9c77e78dcadc93" dependencies: - prosemirror-model "^0.12.0" - prosemirror-state "^0.12.0" - prosemirror-transform "^0.12.0" + prosemirror-model "^0.16.0" + prosemirror-transform "^0.16.0" -prosemirror-state@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-0.12.0.tgz#16e13d57d91840d0c3c340d47694efabeb77e987" +prosemirror-schema-table@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-schema-table/-/prosemirror-schema-table-0.16.0.tgz#b94dc190dd86b3a976faa8d6444b7a23821bb30f" dependencies: - prosemirror-model "^0.12.0" - prosemirror-transform "^0.12.0" + prosemirror-model "^0.16.0" + prosemirror-state "^0.16.0" + prosemirror-transform "^0.16.0" -prosemirror-transform@^0.12.0, prosemirror-transform@^0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-0.12.1.tgz#69bca7e55976815e59281fbd8af4518f5ab90844" +prosemirror-state@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-0.16.0.tgz#51959ff8c0624058ce2abf2481f988a7bf33fe78" dependencies: - prosemirror-model "^0.12.0" + prosemirror-model "^0.16.0" + prosemirror-transform "^0.16.0" -prosemirror-view@^0.12.0: - version "0.12.2" - resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-0.12.2.tgz#4a48bfe2ae3119b8c0c79166d7cd73e82284c99d" +prosemirror-transform@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-0.16.0.tgz#fec4296d0876fa7e8f698773fa0d7008e2779317" dependencies: - prosemirror-model "^0.12.0" - prosemirror-state "^0.12.0" + prosemirror-model "^0.16.0" + +prosemirror-view@^0.16.0: + version "0.16.2" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-0.16.2.tgz#63ed4cdfd000242d769b8cac6ea94b6de22b1954" + dependencies: + prosemirror-model "^0.16.0" + prosemirror-state "^0.16.0" + prosemirror-transform "^0.16.0" proxy-addr@~1.1.2: version "1.1.2" @@ -7416,7 +7448,7 @@ regenerator-transform@0.9.8: regex-cache@^0.4.2: version "0.4.3" - resolved "http://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" dependencies: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" @@ -7635,7 +7667,19 @@ rxjs@^5.0.0-beta.11: dependencies: symbol-observable "^1.0.1" -sane@^1.3.3, sane@~1.4.1: +sane@^1.3.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sane@~1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715" dependencies: @@ -7881,8 +7925,8 @@ source-list-map@^0.1.4, source-list-map@~0.1.0, source-list-map@~0.1.7: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e" source-map-support@^0.4.0, source-map-support@^0.4.2: - version "0.4.7" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.7.tgz#7a7988e0e66241c778c78dd179199bb6bcd35bd6" + version "0.4.8" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b" dependencies: source-map "^0.5.3" @@ -8318,7 +8362,7 @@ symbol-observable@^1.0.1, symbol-observable@^1.0.2: synesthesia@^1.0.1: version "1.0.1" - resolved "http://registry.npmjs.org/synesthesia/-/synesthesia-1.0.1.tgz#5ef95ea548c0d5c6e6f9bb4b0d0731dff864a777" + resolved "https://registry.yarnpkg.com/synesthesia/-/synesthesia-1.0.1.tgz#5ef95ea548c0d5c6e6f9bb4b0d0731dff864a777" dependencies: css-color-names "0.0.3" @@ -8472,8 +8516,8 @@ through2@^0.6.1, through2@^0.6.2, through2@^0.6.3, through2@^0.6.5, through2@~0. xtend ">=4.0.0 <4.1.0-0" timed-out@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.0.tgz#43b98b14bb712c9161c28f4dc1f3068d67a04ec2" + version "3.1.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.1.tgz#2eaaa1021888e4ce3b6ce3511fa7a8556114752b" timers-browserify@^1.4.2: version "1.4.2" @@ -8601,11 +8645,11 @@ uid-number@~0.0.6: uid@0.0.2: version "0.0.2" - resolved "http://registry.npmjs.org/uid/-/uid-0.0.2.tgz#5e4a5d4b78138b4f70f89fd3c76fc59aa9d2f103" + resolved "https://registry.yarnpkg.com/uid/-/uid-0.0.2.tgz#5e4a5d4b78138b4f70f89fd3c76fc59aa9d2f103" unc-path-regex@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + resolved "http://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" uniq@^1.0.1: version "1.0.1" @@ -8689,6 +8733,10 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + user-home@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" @@ -8717,6 +8765,12 @@ uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +v8flags@^2.0.10: + version "2.0.11" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" + dependencies: + user-home "^1.1.1" + validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"