diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..0ea18741 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,35 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + ecmaFeatures: { jsx: true }, + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react/recommended', + 'plugin:react-hooks/recommended', + 'prettier', + ], + plugins: ['@typescript-eslint', 'react', 'react-hooks'], + settings: { + react: { version: 'detect' }, + }, + rules: { + 'react/react-in-jsx-scope': 'off', + '@typescript-eslint/no-explicit-any': 'warn', + 'react/prop-types': 'off', + }, + overrides: [ + { + files: ['**/__tests__/**'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], + }, + }, + ], + ignorePatterns: ['lib/', 'example/', 'node_modules/'], +}; diff --git a/.gitignore b/.gitignore index 5c77aa99..06137c43 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /node_modules /.idea package-lock.json -/.DS_Store \ No newline at end of file +/.DS_Store +/lib/ +*.tsbuildinfo \ No newline at end of file diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 7261b119..00000000 --- a/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -/example -/.idea -/bin \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..fd3e5715 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog + +## 4.0.0-alpha.0 + +### Breaking Changes + +- **Minimum React 18.0.0** (was 16.2.0) +- **Minimum React Native 0.73.0** (was 0.50.4) +- **`react-native-fit-image` removed** - The default `image` render rule now uses React Native's built-in `` component. Users who need auto-sizing image behavior should provide a custom `image` render rule. +- **`prop-types` removed** - Runtime prop validation is no longer performed. Use TypeScript for type checking. +- **Class component replaced with function component** - `` is now a function component using hooks. Code relying on class instance methods or refs will break. +- **`markdown-it` upgraded from ^8 to ^14** - Custom markdown-it plugins should verify compatibility. +- **Package entry points changed** - `main` now points to `lib/commonjs/index.js`, `module` to `lib/module/index.js`, `types` to `lib/typescript/index.d.ts`. + +### New Features + +- Full TypeScript source with auto-generated type declarations +- Exported types: `ASTNode`, `RenderFunction`, `RenderRules`, `MarkdownStyles`, `MarkdownProps` +- ESM module output via react-native-builder-bob +- Proper memoization using `useMemo` hooks for better rendering performance + +### Improvements + +- All source converted from JavaScript to TypeScript +- Deprecated `componentWillMount` and `componentWillReceiveProps` replaced with hooks +- Broken `PropTypes` import from `react` removed in AstRenderer +- Unused `React` and `View` imports removed from parser +- ESLint + Prettier configured +- Jest test suite with 99 tests across 17 suites +- Integration snapshot tests for comprehensive markdown rendering + +### Removed + +- `react-native-fit-image` dependency +- `prop-types` dependency +- `chokidar` and `fs-extra` dev dependencies +- `bin/` build scripts (replaced by react-native-builder-bob) +- `export.json` debug artifact +- Hand-written `index.d.ts` (replaced by auto-generated types) +- `.npmignore` (replaced by `files` field in package.json) diff --git a/README.md b/README.md index 459eccc5..30380d86 100644 --- a/README.md +++ b/README.md @@ -1,217 +1,158 @@ -# React Native Markdown Renderer [![npm version](https://badge.fury.io/js/react-native-markdown-renderer.svg)](https://badge.fury.io/js/react-native-markdown-renderer) [![Known Vulnerabilities](https://snyk.io/test/github/mientjan/react-native-markdown-renderer/badge.svg)](https://snyk.io/test/github/mientjan/react-native-markdown-renderer) - -Is a 100% compatible CommonMark renderer, a react-native markdown renderer done right. This is __not__ -a web-view markdown renderer but a renderer that uses native components for all its elements. These components can be overwritten when needed as seen in the examples. - -### Quick links - - [Documentation](https://github.com/mientjan/react-native-markdown-renderer/wiki/) - - [Examples](https://github.com/mientjan/react-native-markdown-renderer/wiki/Examples) - - [Example App](https://github.com/mientjan/react-native-markdown-renderer/wiki/ExampleApp) - - -### Syntax Support - -To give a summary of the supported syntax react-native-markdown-renderer supports. - - - Tables - - Heading 1 > 6 - - Horizontal Rules - - Typographic replacements - - Emphasis ( **bold**, *italic*, ~~strikethrough~~ ) - - Blockquotes - - Lists - - Ordered - 57. Unordered - 2. foo - 3. bar - - Code Blocks - - Syntax highlighting - - Links - - Images - - Plugins for **extra** syntax support, [see plugins](https://www.npmjs.com/browse/keyword/markdown-it-plugin). Because this markdown-renderer uses markdown-it as its base it also supports all its plugins and subsequent extra language support. - -### Tested on: - -| [] | react | react-native | version | -| -- | ----- | ------------ | ------- | -| v | 16.2 | 0.50.4 | 3.0.0 | -| v | 16.0.0-alpha.12 | 0.45.1 | 2.0.5 | -| v | 16.0.0-alpha.6 | 0.44.0 | 2.0.5 | -| x | 15.x | ^0.46.4 | 2.0.5 | - -### Todo - - ~~add styleSheet support~~ - - ~~add plugin support~~ - - ~~add support for seperate rules~~ - -### How to: - -#### npm -```npm -npm install -S react-native-markdown-renderer -``` -#### yarn -```npm -yarn add react-native-markdown-renderer -``` - -See [WIKI](https://github.com/mientjan/react-native-markdown-renderer/wiki/) for examples and documentation - ---- - -# Syntax Support - -__Advertisement :)__ - -- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image - resize in browser. -- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly - i18n with plurals support and easy syntax. - -You will like those projects! - ---- - -# h1 Heading 8-) -## h2 Heading -### h3 Heading -#### h4 Heading -##### h5 Heading -###### h6 Heading - - -### Horizontal Rules - -___ - ---- - - -### Typographic replacements - -Enable typographer option to see result. - -(c) (C) (r) (R) (tm) (TM) (p) (P) +- - -test.. test... test..... test?..... test!.... - -!!!!!! ???? ,, -- --- - -"Smartypants, double quotes" and 'single quotes' - - -## Emphasis - -**This is bold text** - -__This is bold text__ - -*This is italic text* +# React Native Markdown Renderer -_This is italic text_ +A 100% CommonMark-compatible markdown renderer for React Native using native components (not WebView). All elements are rendered as native React Native components that can be overwritten when needed. -~~Strikethrough~~ +## Installation +```sh +npm install react-native-markdown-renderer +``` -## Blockquotes - - -> Blockquotes can also be nested... ->> ...by using additional greater-than signs right next to each other... -> > > ...or with spaces between arrows. - - -## Lists - -Unordered - -+ Create a list by starting a line with `+`, `-`, or `*` -+ Sub-lists are made by indenting 2 spaces: - - Marker character change forces new list start: - * Ac tristique libero volutpat at - + Facilisis in pretium nisl aliquet - - Nulla volutpat aliquam velit -+ Very easy! - -Ordered - -1. Lorem ipsum dolor sit amet -2. Consectetur adipiscing elit -3. Integer molestie lorem at massa - - -1. You can use sequential numbers... -1. ...or keep all the numbers as `1.` - -Start numbering with offset: - -57. foo -1. bar +or +```sh +yarn add react-native-markdown-renderer +``` -## Code +## Requirements -Inline `code` +| Dependency | Version | +| ------------ | ---------- | +| React | >= 18.0.0 | +| React Native | >= 0.73.0 | -Indented code +## Basic Usage - // Some comments - line 1 of code - line 2 of code - line 3 of code +```tsx +import React from 'react'; +import Markdown from 'react-native-markdown-renderer'; +const App = () => ( + + {`# Hello World -Block code "fences" +This is **bold** and *italic* text. +- Item 1 +- Item 2 +`} + +); ``` -Sample text here... -``` - -Syntax highlighting -``` js -var foo = function (bar) { - return bar++; -}; - -console.log(foo(5)); +## TypeScript Support + +This library is written in TypeScript and ships with full type definitions. + +```tsx +import Markdown, { + AstRenderer, + renderRules, + styles, + PluginContainer, + type MarkdownProps, + type RenderRules, + type ASTNode, + type RenderFunction, + type MarkdownStyles, +} from 'react-native-markdown-renderer'; ``` -## Tables - -| Option | Description | -| ------ | ----------- | -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | +## Custom Styles -Right aligned columns - -| Option | Description | -| ------:| -----------:| -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | +```tsx +import Markdown from 'react-native-markdown-renderer'; +const customStyles = { + heading1: { fontSize: 40, color: '#333' }, + strong: { fontWeight: '800' }, + paragraph: { marginVertical: 8 }, +}; -## Links +const App = () => ( + + {'# Styled Heading\n\n**Bold text** in a paragraph.'} + +); +``` -[link text](http://dev.nodeca.com) +## Custom Render Rules -[link with title](http://nodeca.github.io/pica/demo/ "title text!") +```tsx +import React from 'react'; +import { Text, View } from 'react-native'; +import Markdown from 'react-native-markdown-renderer'; +import type { ASTNode, RenderRules } from 'react-native-markdown-renderer'; -Autoconverted link https://github.com/nodeca/pica (enable linkify to see) +const customRules: Partial = { + heading1: (node: ASTNode, children, parent, styles) => ( + + {children} + + ), +}; +const App = () => ( + + {'# Custom Heading'} + +); +``` -## Images +## Plugins -![Minion](https://octodex.github.com/images/minion.png) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat") +This library uses [markdown-it](https://github.com/markdown-it/markdown-it) as its parser. Any markdown-it plugin can be used: -Like links, Images also have a footnote style syntax +```tsx +import Markdown, { PluginContainer } from 'react-native-markdown-renderer'; +import markdownItCheckbox from 'markdown-it-checkbox'; -![Alt text][id] +const plugins = [new PluginContainer(markdownItCheckbox)]; -With a reference later in the document defining the URL location: +const App = () => ( + + {'- [ ] Unchecked\n- [x] Checked'} + +); +``` -[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" +## Props + +| Prop | Type | Description | +| ------------ | ----------------------------------------- | ---------------------------------------- | +| `children` | `string \| string[]` | Markdown content to render (required) | +| `rules` | `RenderRules` | Custom render rules for element types | +| `style` | `Partial` | Custom styles merged with defaults | +| `renderer` | `AstRenderer \| ((nodes) => ReactElement)` | Fully custom renderer (overrides rules/style) | +| `markdownit` | `MarkdownIt` | Custom markdown-it instance | +| `plugins` | `PluginContainer[]` | markdown-it plugins | + +## Syntax Support + +- Headings (1-6) +- Emphasis (**bold**, *italic*, ~~strikethrough~~) +- Blockquotes +- Lists (ordered and unordered) +- Code (inline and blocks) +- Tables +- Links +- Images +- Horizontal rules +- Typographic replacements +- Plugins for extra syntax support via [markdown-it plugins](https://www.npmjs.com/browse/keyword/markdown-it-plugin) + +## Migration from v3 to v4 + +### Breaking Changes + +1. **Minimum React 18.0.0** (was 16.2.0) +2. **Minimum React Native 0.73.0** (was 0.50.4) +3. **`react-native-fit-image` removed** - The default `image` render rule now uses React Native's built-in ``. If you need auto-sizing, provide a custom `image` render rule. +4. **`prop-types` removed** - Use TypeScript for type checking. +5. **Class component replaced with function component** - The `` component is now a function component. Any code relying on class refs will break. +6. **`markdown-it` upgraded from ^8 to ^14** - Custom markdown-it plugins should verify compatibility. +7. **Package entry points changed** - `main` points to `lib/commonjs/`, `module` to `lib/module/`, `types` to `lib/typescript/`. + +## License + +MIT diff --git a/README.v1.3.6.md b/README.v1.3.6.md deleted file mode 100644 index a76743e0..00000000 --- a/README.v1.3.6.md +++ /dev/null @@ -1,291 +0,0 @@ -# React Native Markdown Renderer [![npm version](https://badge.fury.io/js/react-native-markdown-renderer.svg)](https://badge.fury.io/js/react-native-markdown-renderer) [![Known Vulnerabilities](https://snyk.io/test/github/mientjan/react-native-markdown-renderer/badge.svg)](https://snyk.io/test/github/mientjan/react-native-markdown-renderer) - -Is a 100% compatible CommonMark renderer, a react-native markdown renderer done right. This is __not__ -a web-view markdown renderer but a renderer that uses native components for all its elements. These components can be overwritten when needed as seen in the examples. - -To give a summary of the supported syntax react-native-markdown-renderer supports. - - - Tables - - Heading 1 > 6 - - Horizontal Rules - - Typographic replacements - - Emphasis ( **bold**, *italic*, ~~strikethrough~~ ) - - Blockquotes - - Lists - - Ordered - 57. Unordered - 2. foo - 3. bar - - Code Blocks - - Syntax highlighting - - Links - - Images - - Plugins for extra syntax support, [see plugins](https://www.npmjs.com/browse/keyword/markdown-it-plugin). Because this markdown-renderer uses markdown-it as its base it also supports all its plugins and subsequent extra language support. - - -### tested on: - -| [] | react | react-native | -| ---- | ---- | ------- | -| v | 16.0.0-alpha.12 | 0.45.1 | -| v | 16.0.0-alpha.6 | 0.44.0 | -| v | ^15.6.1 | ^0.46.4 | - -### todo - - add styleSheet support - - add styleSheet inheritance support - - ~~adding plugin support~~ - -### How to: - -#### npm -```npm -npm install -S react-native-markdown-renderer -``` -#### yarn -```npm -yarn add react-native-markdown-renderer -``` - -### Example: -##### Simple example -```js - -import react from 'react'; -import {View, PureComponent} from 'react-native'; -import Markdown from 'react-native-markdown-renderer'; - -const copy = `# h1 Heading 8-) - -| Option | Description | -| ------ | ----------- | -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | -`; - -export default class Page extends PureComponent { - - static propTypes = {}; - static defaultProps = {}; - - render() { - - return ( - {copy} - ); - } -} -``` - -##### If you want to use your own native elements and styling, and want to add extra plugins: -```js - -import react from 'react'; -import {View, PureComponent, Text} from 'react-native'; -import Markdown, { AstRenderer, defaultRenderFunctions, PluginContainer, blockPlugin} from 'react-native-markdown-renderer'; - -const copy = `# h1 Heading 8-) - -| Option | Description | -| ------ | ----------- | -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - -[block] -I'm in a block -[/block] -`; - -/** - * i'm overriding the default h1 render function. - */ -const renderer = new AstRenderer({ - ...defaultRenderFunctions, - h1: (node, children, parents) => { - return {children}; - }, - // added custom block element defined by plugin - block: (node, children, parents) => { - return {children}; - } -}); - -export default class Page extends PureComponent { - - static propTypes = {}; - static defaultProps = {}; - - render() { - - const plugins = [ - new PluginContainer(blockPlugin, 'block', {}) - ]; - - return ( - {copy} - ); - } -} -``` - ---- - - -# Syntax Support - -__Advertisement :)__ - -- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image - resize in browser. -- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly - i18n with plurals support and easy syntax. - -You will like those projects! - ---- - -# h1 Heading 8-) -## h2 Heading -### h3 Heading -#### h4 Heading -##### h5 Heading -###### h6 Heading - - -### Horizontal Rules - -___ - ---- - - -### Typographic replacements - -Enable typographer option to see result. - -(c) (C) (r) (R) (tm) (TM) (p) (P) +- - -test.. test... test..... test?..... test!.... - -!!!!!! ???? ,, -- --- - -"Smartypants, double quotes" and 'single quotes' - - -## Emphasis - -**This is bold text** - -__This is bold text__ - -*This is italic text* - -_This is italic text_ - -~~Strikethrough~~ - - -## Blockquotes - - -> Blockquotes can also be nested... ->> ...by using additional greater-than signs right next to each other... -> > > ...or with spaces between arrows. - - -## Lists - -Unordered - -+ Create a list by starting a line with `+`, `-`, or `*` -+ Sub-lists are made by indenting 2 spaces: - - Marker character change forces new list start: - * Ac tristique libero volutpat at - + Facilisis in pretium nisl aliquet - - Nulla volutpat aliquam velit -+ Very easy! - -Ordered - -1. Lorem ipsum dolor sit amet -2. Consectetur adipiscing elit -3. Integer molestie lorem at massa - - -1. You can use sequential numbers... -1. ...or keep all the numbers as `1.` - -Start numbering with offset: - -57. foo -1. bar - - -## Code - -Inline `code` - -Indented code - - // Some comments - line 1 of code - line 2 of code - line 3 of code - - -Block code "fences" - -``` -Sample text here... -``` - -Syntax highlighting - -``` js -var foo = function (bar) { - return bar++; -}; - -console.log(foo(5)); -``` - -## Tables - -| Option | Description | -| ------ | ----------- | -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - -Right aligned columns - -| Option | Description | -| ------:| -----------:| -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - - -## Links - -[link text](http://dev.nodeca.com) - -[link with title](http://nodeca.github.io/pica/demo/ "title text!") - -Autoconverted link https://github.com/nodeca/pica (enable linkify to see) - - -## Images - -![Minion](https://octodex.github.com/images/minion.png) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat") - -Like links, Images also have a footnote style syntax - -![Alt text][id] - -With a reference later in the document defining the URL location: - -[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..f7b3da3b --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], +}; diff --git a/bin/copy-to-run.js b/bin/copy-to-run.js deleted file mode 100644 index 0fe840f0..00000000 --- a/bin/copy-to-run.js +++ /dev/null @@ -1,17 +0,0 @@ -const fs = require("fs-extra"); -const path = require("path"); - -const location = path.join(__dirname, "../src"); -const destination = path.join( - location, - "../example/react-native-markdown-renderer" -); - -fs.remove(destination, err => { - fs.copy(location, destination, err => { - if (err) return console.error(err); - - console.log("to %s ", destination); - console.log("success!"); - }); -}); diff --git a/bin/data.json b/bin/data.json deleted file mode 100644 index 9df07118..00000000 --- a/bin/data.json +++ /dev/null @@ -1,529 +0,0 @@ -[ - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [2, 3], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "image:", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [4, 5], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "image", - "tag": "img", - "attrs": [["src", "https://octodex.github.com/images/minion.png"], ["alt", ""]], - "map": null, - "nesting": 0, - "level": 0, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Minion", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Minion", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [6, 7], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "copy", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [8, 9], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "blocklink", - "tag": "a", - "attrs": [["href", "http://dev.nodeca.com"]], - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "image", - "tag": "img", - "attrs": [["src", "https://octodex.github.com/images/minion.png"], ["alt", ""]], - "map": null, - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Minion", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Minion", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "blocklink", - "tag": "a", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [10, 11], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "copy", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [12, 13], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Inline ", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "code_inline", - "tag": "code", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "code", - "markup": "`", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [14, 15], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Indented code", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "code_block", - "tag": "code", - "attrs": null, - "map": [16, 20], - "nesting": 0, - "level": 0, - "children": null, - "content": "// Some comments\nline 1 of code\nline 2 of code\nline 3 of code\n", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [22, 23], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Block code “fences”", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "fence", - "tag": "code", - "attrs": null, - "map": [24, 27], - "nesting": 0, - "level": 0, - "children": null, - "content": "Sample text here...\n", - "markup": "```", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": [28, 29], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Syntax highlighting", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "paragraph", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "fence", - "tag": "code", - "attrs": null, - "map": [30, 37], - "nesting": 0, - "level": 0, - "children": null, - "content": "var foo = function (bar) {\n\treturn bar++;\n};\n\nconsole.log(foo(5));\n", - "markup": "```", - "info": " js", - "meta": null, - "block": true, - "hidden": false - } -] diff --git a/bin/example.js b/bin/example.js deleted file mode 100644 index 2f3bfdce..00000000 --- a/bin/example.js +++ /dev/null @@ -1,162 +0,0 @@ -const hello = ` - # Syntax Support - -__Advertisement :)__ - -This is a text. Click [here](https://google.com) to open a link. Let's add some more text to see how this behaves. - -- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image - resize in browser. -- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly - i18n with plurals support and easy syntax. - -You will like those projects! - ---- - -# h1 Heading 8-) -## h2 Heading -### h3 Heading -#### h4 Heading -##### h5 Heading -###### h6 Heading - - -### Horizontal Rules - -___ - ---- - - -### Typographic replacements - -Enable typographer option to see result. - -(c) (C) (r) (R) (tm) (TM) (p) (P) +- - -test.. test... test..... test?..... test!.... - -!!!!!! ???? ,, -- --- - -"Smartypants, double quotes" and 'single quotes' - - -## Emphasis - -**This is bold text** - -__This is bold text__ - -*This is italic text* - -_This is italic text_ - -~~Strikethrough~~ - - -## Blockquotes - - -> Blockquotes can also be nested... ->> ...by using additional greater-than signs right next to each other... -> > > ...or with spaces between arrows. - - -## Lists - -Unordered - -+ Create a list by starting a line with \`+\`, \`-\`, or \`*\` -+ Sub-lists are made by indenting 2 spaces: - - Marker character change forces new list start: - * Ac tristique libero volutpat at - + Facilisis in pretium nisl aliquet - - Nulla volutpat aliquam velit -+ Very easy! - -Ordered - -1. Lorem ipsum dolor sit amet -2. Consectetur adipiscing elit -3. Integer molestie lorem at massa - - -1. You can use sequential numbers... -1. ...or keep all the numbers as \`1.\` - -Start numbering with offset: - -57. foo -1. bar - - -## Code - -Inline \`code\` - -Indented code - - // Some comments - line 1 of code - line 2 of code - line 3 of code - - -Block code "fences" - -\`\`\` -Sample text here... -\`\`\` - -Syntax highlighting - -\`\`\` js -var foo = function (bar) { - return bar++; -}; - -console.log(foo(5)); -\`\`\` - -## Tables - -| Option | Description | -| ------ | ----------- | -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - -Right aligned columns - -| Option | Description | -| ------:| -----------:| -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - - -## Links - -[link text](http://dev.nodeca.com) - -[link with title](http://nodeca.github.io/pica/demo/ "title text!") - -Autoconverted link https://github.com/nodeca/pica (enable linkify to see) - - -## Images - -![Minion](https://octodex.github.com/images/minion.png) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat") - -Like links, Images also have a footnote style syntax - -![Alt text][id] - -With a reference later in the document defining the URL location: - -[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" -`; - -module.exports = hello; \ No newline at end of file diff --git a/bin/test.js b/bin/test.js deleted file mode 100644 index 0c2bcdbd..00000000 --- a/bin/test.js +++ /dev/null @@ -1,13 +0,0 @@ -const MarkdownIt = require('markdown-it'); -const copy = require('./example'); -const fs = require('fs'); - -console.log(copy); - -const md = MarkdownIt({ - typographer: true, -}) - -fs.writeFile('./export.json', JSON.stringify(md.parse(copy, {})), err => { - if(err) console.log('err', err); -}) \ No newline at end of file diff --git a/bin/watch.js b/bin/watch.js deleted file mode 100644 index 9e8a63d9..00000000 --- a/bin/watch.js +++ /dev/null @@ -1,25 +0,0 @@ -const chokidar = require('chokidar'); -const fs = require('fs-extra'); -const path = require('path'); - -const location = path.join(__dirname, '../src'); -const destination = path.join(location, '../example/react-native-markdown-renderer'); - -const watcher = chokidar.watch(location + '/**/*'); -watcher.on('change', dir => { - - - console.log('Updating %s by removing it', destination); - - fs.remove(destination, err => { - - console.log('Copy %s ', location); - - fs.copy(location, destination, err => { - if (err) return console.error(err) - - console.log('to %s ', destination); - console.log('success!') - }) - }); -}); diff --git a/example/.babelrc b/example/.babelrc deleted file mode 100644 index a9ce1369..00000000 --- a/example/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["react-native"] -} diff --git a/example/.buckconfig b/example/.buckconfig deleted file mode 100644 index 934256cb..00000000 --- a/example/.buckconfig +++ /dev/null @@ -1,6 +0,0 @@ - -[android] - target = Google Inc.:Google APIs:23 - -[maven_repositories] - central = https://repo1.maven.org/maven2 diff --git a/example/.flowconfig b/example/.flowconfig deleted file mode 100644 index 7d5e2d33..00000000 --- a/example/.flowconfig +++ /dev/null @@ -1,54 +0,0 @@ -[ignore] -; We fork some components by platform -.*/*[.]android.js - -; Ignore "BUCK" generated dirs -/\.buckd/ - -; Ignore unexpected extra "@providesModule" -.*/node_modules/.*/node_modules/fbjs/.* - -; Ignore duplicate module providers -; For RN Apps installed via npm, "Libraries" folder is inside -; "node_modules/react-native" but in the source repo it is in the root -.*/Libraries/react-native/React.js - -; Ignore polyfills -.*/Libraries/polyfills/.* - -; Ignore metro -.*/node_modules/metro/.* - -[include] - -[libs] -node_modules/react-native/Libraries/react-native/react-native-interface.js -node_modules/react-native/flow/ -node_modules/react-native/flow-github/ - -[options] -emoji=true - -module.system=haste - -munge_underscores=true - -module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' - -module.file_ext=.js -module.file_ext=.jsx -module.file_ext=.json -module.file_ext=.native.js - -suppress_type=$FlowIssue -suppress_type=$FlowFixMe -suppress_type=$FlowFixMeProps -suppress_type=$FlowFixMeState - -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ -suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy -suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError - -[version] -^0.67.0 diff --git a/example/.gitattributes b/example/.gitattributes deleted file mode 100644 index d42ff183..00000000 --- a/example/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.pbxproj -text diff --git a/example/.gitignore b/example/.gitignore index 5d647565..d914c328 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -1,56 +1,41 @@ -# OSX -# -.DS_Store +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml - -# node.js -# +# dependencies node_modules/ -npm-debug.log -yarn-error.log - -# BUCK -buck-out/ -\.buckd/ -*.keystore - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots - -# Bundle artifact -*.jsbundle + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +.kotlin/ +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +# generated native folders +/ios +/android diff --git a/example/.watchmanconfig b/example/.watchmanconfig deleted file mode 100644 index 9e26dfee..00000000 --- a/example/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/example/App.js b/example/App.js deleted file mode 100644 index d273b8fe..00000000 --- a/example/App.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - */ - -import React, { Component } from 'react'; -import { Platform, Picker, ScrollView, StyleSheet, Text, View, Dimensions } from 'react-native'; - -import Markdown, { - AstRenderer, - getUniqueID, - PluginContainer, - renderRules, - styles, -} from './react-native-markdown-renderer'; -// -import markdownItCheckbox from 'markdown-it-checkbox'; -import { TabViewAnimated, SceneMap, TabBar } from 'react-native-tab-view'; - -import copyAll from './src/copyAll'; -import customMarkdownStyle from './src/customMarkdownStyle'; -import copyAllCheckboxPlugin from './src/copyAllCheckboxPlugin'; -import pluginRules from './src/pluginRules'; -import all from './src/copy/all'; -import linkedimg from './src/copy/linkedimg'; - -import MarkdownIt from 'markdown-it'; - -const md = MarkdownIt({ - typographer: true, - linkify: true, -}); - -md.linkify.tlds('.py', false); // disables .py as top level domain - // Reload with full tlds list -md.linkify.tlds('onion', true) // Add unofficial `.onion` domain -md.linkify.add('git:', 'http:') // Add `git:` protocol as "alias" -md.linkify.add('ftp:', null) // Disable `ftp:` ptotocol -md.linkify.set({ fuzzyIP: true }); // Enable IPs in fuzzy links (without schema) - -md.linkify.add('@', { - validate: function (text, pos, self) { - var tail = text.slice(pos); - - if (!self.re.twitter) { - self.re.twitter = new RegExp( - '^([a-zA-Z0-9_]){1,15}(?!_)(?=$|' + self.re.src_ZPCc + ')' - ); - } - if (self.re.twitter.test(tail)) { - // Linkifier allows punctuation chars before prefix, - // but we additionally disable `@` ("@@mention" is invalid) - if (pos >= 2 && tail[pos - 2] === '@') { - return false; - } - return tail.match(self.re.twitter)[0].length; - } - return 0; - }, - normalize: function (match) { - match.url = 'https://twitter.com/' + match.url.replace(/^@/, ''); - } -}); - -const routes = { - all: () => ( - - ( - - {node.content} - - ), - }} - plugins={[ - new PluginContainer( - (md, name, options) => { - const parse = state => { - const Token = state.Token; - - for (let i = 0; i < state.tokens.length; i++) { - const block = state.tokens[i]; - if (block.type !== 'inline') { - continue; - } - - for (let j = 0; j < block.children.length; j++) { - const token = block.children[j]; - if (token.type !== 'text') { - continue; - } - - if (token.content === name) { - const newToken = new Token(name, '', token.nesting); - - newToken.content = token.content; - block.children = md.utils.arrayReplaceAt(block.children, j, [newToken]); - } - } - } - }; - - md.core.ruler.after('inline', name, parse); - }, - 'foo', - {} - ), - ]} - /> - - ), - linkedimg: () => ( - - - - ), -}; - -const initialLayout = { - height: 0, - width: Dimensions.get('window').width, -}; - -export default class App extends Component { - state = { - index: 0, - routes: [{ key: 'all', title: 'All' }, { key: 'linkedimg', title: 'Linked Images' }], - }; - - handleIndexChange = index => this.setState({ index }); - renderHeader = props => ; - renderScene = SceneMap(routes); - - render() { - return ( - - ); - } -} diff --git a/example/App.tsx b/example/App.tsx new file mode 100644 index 00000000..3e707727 --- /dev/null +++ b/example/App.tsx @@ -0,0 +1,78 @@ +import { StatusBar } from 'expo-status-bar'; +import { StyleSheet, ScrollView, SafeAreaView } from 'react-native'; +import Markdown from 'react-native-markdown-renderer'; + +const copy = `# React Native Markdown Renderer + +## Features + +This library renders **Markdown** in *React Native* using native components. + +### Supported elements + +- **Bold** and *italic* text +- ~~Strikethrough~~ +- [Links](https://github.com) +- Inline \`code\` + +### Lists + +1. First ordered item +2. Second ordered item +3. Third ordered item + +- Unordered item A +- Unordered item B +- Unordered item C + +### Code block + +\`\`\` +const greeting = "Hello, Markdown!"; +console.log(greeting); +\`\`\` + +### Blockquote + +> Markdown is a lightweight markup language that you can use +> to add formatting elements to plaintext text documents. + +### Table + +| Feature | Status | +|---------------|--------| +| Headings | Done | +| Bold / Italic | Done | +| Links | Done | +| Images | Done | +| Tables | Done | +| Code blocks | Done | + +--- + +*Rendered with react-native-markdown-renderer v4* +`; + +export default function App() { + return ( + + + {copy} + + + + ); +} + +const styles = StyleSheet.create({ + safe: { + flex: 1, + backgroundColor: '#fff', + }, + scroll: { + flex: 1, + }, + content: { + padding: 16, + }, +}); diff --git a/example/android/app/BUCK b/example/android/app/BUCK deleted file mode 100644 index c8f56032..00000000 --- a/example/android/app/BUCK +++ /dev/null @@ -1,65 +0,0 @@ -# To learn about Buck see [Docs](https://buckbuild.com/). -# To run your application with Buck: -# - install Buck -# - `npm start` - to start the packager -# - `cd android` -# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` -# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck -# - `buck install -r android/app` - compile, install and run application -# - -lib_deps = [] - -for jarfile in glob(['libs/*.jar']): - name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] - lib_deps.append(':' + name) - prebuilt_jar( - name = name, - binary_jar = jarfile, - ) - -for aarfile in glob(['libs/*.aar']): - name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] - lib_deps.append(':' + name) - android_prebuilt_aar( - name = name, - aar = aarfile, - ) - -android_library( - name = "all-libs", - exported_deps = lib_deps, -) - -android_library( - name = "app-code", - srcs = glob([ - "src/main/java/**/*.java", - ]), - deps = [ - ":all-libs", - ":build_config", - ":res", - ], -) - -android_build_config( - name = "build_config", - package = "com.example", -) - -android_resource( - name = "res", - package = "com.example", - res = "src/main/res", -) - -android_binary( - name = "app", - keystore = "//android/keystores:debug", - manifest = "src/main/AndroidManifest.xml", - package_type = "debug", - deps = [ - ":app-code", - ], -) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index 7bb0ebc2..00000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,150 +0,0 @@ -apply plugin: "com.android.application" - -import com.android.build.OutputFile - -/** - * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets - * and bundleReleaseJsAndAssets). - * These basically call `react-native bundle` with the correct arguments during the Android build - * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the - * bundle directly from the development server. Below you can see all the possible configurations - * and their defaults. If you decide to add a configuration block, make sure to add it before the - * `apply from: "../../node_modules/react-native/react.gradle"` line. - * - * project.ext.react = [ - * // the name of the generated asset file containing your JS bundle - * bundleAssetName: "index.android.bundle", - * - * // the entry file for bundle generation - * entryFile: "index.android.js", - * - * // whether to bundle JS and assets in debug mode - * bundleInDebug: false, - * - * // whether to bundle JS and assets in release mode - * bundleInRelease: true, - * - * // whether to bundle JS and assets in another build variant (if configured). - * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants - * // The configuration property can be in the following formats - * // 'bundleIn${productFlavor}${buildType}' - * // 'bundleIn${buildType}' - * // bundleInFreeDebug: true, - * // bundleInPaidRelease: true, - * // bundleInBeta: true, - * - * // whether to disable dev mode in custom build variants (by default only disabled in release) - * // for example: to disable dev mode in the staging build type (if configured) - * devDisabledInStaging: true, - * // The configuration property can be in the following formats - * // 'devDisabledIn${productFlavor}${buildType}' - * // 'devDisabledIn${buildType}' - * - * // the root of your project, i.e. where "package.json" lives - * root: "../../", - * - * // where to put the JS bundle asset in debug mode - * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", - * - * // where to put the JS bundle asset in release mode - * jsBundleDirRelease: "$buildDir/intermediates/assets/release", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in debug mode - * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in release mode - * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", - * - * // by default the gradle tasks are skipped if none of the JS files or assets change; this means - * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to - * // date; if you have any other folders that you want to ignore for performance reasons (gradle - * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ - * // for example, you might want to remove it from here. - * inputExcludes: ["android/**", "ios/**"], - * - * // override which node gets called and with what additional arguments - * nodeExecutableAndArgs: ["node"], - * - * // supply additional arguments to the packager - * extraPackagerArgs: [] - * ] - */ - -project.ext.react = [ - entryFile: "index.js" -] - -apply from: "../../node_modules/react-native/react.gradle" - -/** - * Set this to true to create two separate APKs instead of one: - * - An APK that only works on ARM devices - * - An APK that only works on x86 devices - * The advantage is the size of the APK is reduced by about 4MB. - * Upload all the APKs to the Play Store and people will download - * the correct one based on the CPU architecture of their device. - */ -def enableSeparateBuildPerCPUArchitecture = false - -/** - * Run Proguard to shrink the Java bytecode in release builds. - */ -def enableProguardInReleaseBuilds = false - -android { - compileSdkVersion 23 - buildToolsVersion "23.0.1" - - defaultConfig { - applicationId "com.example" - minSdkVersion 16 - targetSdkVersion 22 - versionCode 1 - versionName "1.0" - ndk { - abiFilters "armeabi-v7a", "x86" - } - } - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86" - } - } - buildTypes { - release { - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } - // applicationVariants are e.g. debug, release - applicationVariants.all { variant -> - variant.outputs.each { output -> - // For each separate APK per architecture, set a unique version code as described here: - // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits - def versionCodes = ["armeabi-v7a":1, "x86":2] - def abi = output.getFilter(OutputFile.ABI) - if (abi != null) { // null for the universal-debug, universal-release variants - output.versionCodeOverride = - versionCodes.get(abi) * 1048576 + defaultConfig.versionCode - } - } - } -} - -dependencies { - compile fileTree(dir: "libs", include: ["*.jar"]) - compile "com.android.support:appcompat-v7:23.0.1" - compile "com.facebook.react:react-native:+" // From node_modules -} - -// Run this once to be able to run the application with BUCK -// puts all compile dependencies into folder libs for BUCK to use -task copyDownloadableDepsToLibs(type: Copy) { - from configurations.compile - into 'libs' -} diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro deleted file mode 100644 index 6e8516c8..00000000 --- a/example/android/app/proguard-rules.pro +++ /dev/null @@ -1,70 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Disabling obfuscation is useful if you collect stack traces from production crashes -# (unless you are using a system that supports de-obfuscate the stack traces). --dontobfuscate - -# React Native - -# Keep our interfaces so they can be used by other ProGuard rules. -# See http://sourceforge.net/p/proguard/bugs/466/ --keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip --keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters --keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip - -# Do not strip any method/class that is annotated with @DoNotStrip --keep @com.facebook.proguard.annotations.DoNotStrip class * --keep @com.facebook.common.internal.DoNotStrip class * --keepclassmembers class * { - @com.facebook.proguard.annotations.DoNotStrip *; - @com.facebook.common.internal.DoNotStrip *; -} - --keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { - void set*(***); - *** get*(); -} - --keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } --keep class * extends com.facebook.react.bridge.NativeModule { *; } --keepclassmembers,includedescriptorclasses class * { native ; } --keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } --keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } --keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } - --dontwarn com.facebook.react.** - -# TextLayoutBuilder uses a non-public Android constructor within StaticLayout. -# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details. --dontwarn android.text.StaticLayout - -# okhttp - --keepattributes Signature --keepattributes *Annotation* --keep class okhttp3.** { *; } --keep interface okhttp3.** { *; } --dontwarn okhttp3.** - -# okio - --keep class sun.misc.Unsafe { *; } --dontwarn java.nio.file.* --dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement --dontwarn okio.** diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index efef5762..00000000 --- a/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/example/android/app/src/main/java/com/example/MainActivity.java b/example/android/app/src/main/java/com/example/MainActivity.java deleted file mode 100644 index e84b7255..00000000 --- a/example/android/app/src/main/java/com/example/MainActivity.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example; - -import com.facebook.react.ReactActivity; - -public class MainActivity extends ReactActivity { - - /** - * Returns the name of the main component registered from JavaScript. - * This is used to schedule rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "example"; - } -} diff --git a/example/android/app/src/main/java/com/example/MainApplication.java b/example/android/app/src/main/java/com/example/MainApplication.java deleted file mode 100644 index 2e94f3ac..00000000 --- a/example/android/app/src/main/java/com/example/MainApplication.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.example; - -import android.app.Application; - -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.shell.MainReactPackage; -import com.facebook.soloader.SoLoader; - -import java.util.Arrays; -import java.util.List; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - return Arrays.asList( - new MainReactPackage() - ); - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - } -} diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cde69bcc..00000000 Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c133a0cb..00000000 Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index bfa42f0e..00000000 Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 324e72cd..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml deleted file mode 100644 index d75426c8..00000000 --- a/example/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - example - diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 319eb0ca..00000000 --- a/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index c5fecab1..00000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,24 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - mavenLocal() - jcenter() - maven { - // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url "$rootDir/../node_modules/react-native/android" - } - } -} diff --git a/example/android/gradle.properties b/example/android/gradle.properties deleted file mode 100644 index 1fd964e9..00000000 --- a/example/android/gradle.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -android.useDeprecatedNdk=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index b5166dad..00000000 Binary files a/example/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 2d5ea884..00000000 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Mon Jun 18 16:01:11 CEST 2018 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/example/android/gradlew b/example/android/gradlew deleted file mode 100755 index 91a7e269..00000000 --- a/example/android/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat deleted file mode 100644 index 8a0b282a..00000000 --- a/example/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/example/android/keystores/BUCK b/example/android/keystores/BUCK deleted file mode 100644 index 88e4c31b..00000000 --- a/example/android/keystores/BUCK +++ /dev/null @@ -1,8 +0,0 @@ -keystore( - name = "debug", - properties = "debug.keystore.properties", - store = "debug.keystore", - visibility = [ - "PUBLIC", - ], -) diff --git a/example/android/keystores/debug.keystore.properties b/example/android/keystores/debug.keystore.properties deleted file mode 100644 index 121bfb49..00000000 --- a/example/android/keystores/debug.keystore.properties +++ /dev/null @@ -1,4 +0,0 @@ -key.store=debug.keystore -key.alias=androiddebugkey -key.store.password=android -key.alias.password=android diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index 13df8b58..00000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,3 +0,0 @@ -rootProject.name = 'example' - -include ':app' diff --git a/example/app.json b/example/app.json index 486d55b0..67aafdf2 100644 --- a/example/app.json +++ b/example/app.json @@ -1,4 +1,30 @@ { - "name": "example", - "displayName": "example" -} \ No newline at end of file + "expo": { + "name": "example", + "slug": "example", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/icon.png", + "userInterfaceStyle": "light", + "newArchEnabled": true, + "splash": { + "image": "./assets/splash-icon.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/adaptive-icon.png", + "backgroundColor": "#ffffff" + }, + "edgeToEdgeEnabled": true, + "predictiveBackGestureEnabled": false + }, + "web": { + "favicon": "./assets/favicon.png" + } + } +} diff --git a/example/index.js b/example/index.js deleted file mode 100644 index 0bb7b32a..00000000 --- a/example/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import { AppRegistry } from 'react-native'; -import App from './App'; - -AppRegistry.registerComponent('example', () => App); diff --git a/example/index.ts b/example/index.ts new file mode 100644 index 00000000..1d6e981e --- /dev/null +++ b/example/index.ts @@ -0,0 +1,8 @@ +import { registerRootComponent } from 'expo'; + +import App from './App'; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); diff --git a/example/ios/example-tvOS/Info.plist b/example/ios/example-tvOS/Info.plist deleted file mode 100644 index 2fb6a11c..00000000 --- a/example/ios/example-tvOS/Info.plist +++ /dev/null @@ -1,54 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - NSLocationWhenInUseUsageDescription - - NSAppTransportSecurity - - - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - - - - diff --git a/example/ios/example-tvOSTests/Info.plist b/example/ios/example-tvOSTests/Info.plist deleted file mode 100644 index 886825cc..00000000 --- a/example/ios/example-tvOSTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/example/ios/example.xcodeproj/project.pbxproj b/example/ios/example.xcodeproj/project.pbxproj deleted file mode 100644 index cff66c2c..00000000 --- a/example/ios/example.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1468 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; - 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; - 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; - 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; - 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; - 00E356F31AD99517003FC87E /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; }; - 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; - 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; - 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; - 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; - 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; - 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; - 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; }; - 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; }; - 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; }; - 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; }; - 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; }; - 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; }; - 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; }; - 2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; }; - 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; - 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; - 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; - ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RCTActionSheet; - }; - 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RCTGeolocation; - }; - 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 58B5115D1A9E6B3D00147676; - remoteInfo = RCTImage; - }; - 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 58B511DB1A9E6C8500147676; - remoteInfo = RCTNetwork; - }; - 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; - remoteInfo = RCTVibration; - }; - 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = example; - }; - 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RCTSettings; - }; - 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3C86DF461ADF2C930047B81A; - remoteInfo = RCTWebSocket; - }; - 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; - remoteInfo = React; - }; - 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; - remoteInfo = "example-tvOS"; - }; - 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = ADD01A681E09402E00F6D226; - remoteInfo = "RCTBlob-tvOS"; - }; - 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3DBE0D001F3B181A0099AA32; - remoteInfo = fishhook; - }; - 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32; - remoteInfo = "fishhook-tvOS"; - }; - 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = EBF21BDC1FC498900052F4D5; - remoteInfo = jsinspector; - }; - 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; - remoteInfo = "jsinspector-tvOS"; - }; - 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7; - remoteInfo = "third-party"; - }; - 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D383D3C1EBD27B6005632C8; - remoteInfo = "third-party-tvOS"; - }; - 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 139D7E881E25C6D100323FB7; - remoteInfo = "double-conversion"; - }; - 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D383D621EBD27B9005632C8; - remoteInfo = "double-conversion-tvOS"; - }; - 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 9936F3131F5F2E4B0010BF04; - remoteInfo = privatedata; - }; - 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04; - remoteInfo = "privatedata-tvOS"; - }; - 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; - remoteInfo = "RCTImage-tvOS"; - }; - 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A28471D9B043800D4039D; - remoteInfo = "RCTLinking-tvOS"; - }; - 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A28541D9B044C00D4039D; - remoteInfo = "RCTNetwork-tvOS"; - }; - 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A28611D9B046600D4039D; - remoteInfo = "RCTSettings-tvOS"; - }; - 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A287B1D9B048500D4039D; - remoteInfo = "RCTText-tvOS"; - }; - 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A28881D9B049200D4039D; - remoteInfo = "RCTWebSocket-tvOS"; - }; - 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A28131D9B038B00D4039D; - remoteInfo = "React-tvOS"; - }; - 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D3C059A1DE3340900C268FA; - remoteInfo = yoga; - }; - 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D3C06751DE3340C00C268FA; - remoteInfo = "yoga-tvOS"; - }; - 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; - remoteInfo = cxxreact; - }; - 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; - remoteInfo = "cxxreact-tvOS"; - }; - 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; - remoteInfo = jschelpers; - }; - 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; - remoteInfo = "jschelpers-tvOS"; - }; - 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RCTAnimation; - }; - 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 2D2A28201D9B03D100D4039D; - remoteInfo = "RCTAnimation-tvOS"; - }; - 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RCTLinking; - }; - 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 58B5119B1A9E6C1200147676; - remoteInfo = RCTText; - }; - ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 358F4ED71D1E81A9004DF814; - remoteInfo = RCTBlob; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; - 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; - 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; - 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; - 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; - 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; - 00E356EE1AD99517003FC87E /* exampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = exampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* exampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = exampleTests.m; sourceTree = ""; }; - 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; - 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = example/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = example/AppDelegate.m; sourceTree = ""; }; - 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = example/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = example/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = example/main.m; sourceTree = ""; }; - 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; - 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "example-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; - 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; - 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; - ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 00E356EB1AD99517003FC87E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, - 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, - 146834051AC3E58100842450 /* libReact.a in Frameworks */, - 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, - 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, - 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, - 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, - 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, - 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, - 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, - 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, - 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, - 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */, - 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */, - 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, - 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, - 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, - 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, - 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, - 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00C302A81ABCB8CE00DB3ED1 /* Products */ = { - isa = PBXGroup; - children = ( - 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, - ); - name = Products; - sourceTree = ""; - }; - 00C302B61ABCB90400DB3ED1 /* Products */ = { - isa = PBXGroup; - children = ( - 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, - ); - name = Products; - sourceTree = ""; - }; - 00C302BC1ABCB91800DB3ED1 /* Products */ = { - isa = PBXGroup; - children = ( - 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, - 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; - 00C302D41ABCB9D200DB3ED1 /* Products */ = { - isa = PBXGroup; - children = ( - 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, - 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; - 00C302E01ABCB9EE00DB3ED1 /* Products */ = { - isa = PBXGroup; - children = ( - 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, - ); - name = Products; - sourceTree = ""; - }; - 00E356EF1AD99517003FC87E /* exampleTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* exampleTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = exampleTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 139105B71AF99BAD00B5F7CC /* Products */ = { - isa = PBXGroup; - children = ( - 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, - 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; - 139FDEE71B06529A00C62182 /* Products */ = { - isa = PBXGroup; - children = ( - 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, - 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, - 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */, - 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; - 13B07FAE1A68108700A75B9A /* example */ = { - isa = PBXGroup; - children = ( - 008F07F21AC5B25A0029DE68 /* main.jsbundle */, - 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, - 13B07FB71A68108700A75B9A /* main.m */, - ); - name = example; - sourceTree = ""; - }; - 146834001AC3E56700842450 /* Products */ = { - isa = PBXGroup; - children = ( - 146834041AC3E56700842450 /* libReact.a */, - 3DAD3EA31DF850E9000B6D8A /* libReact.a */, - 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, - 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, - 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, - 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, - 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, - 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, - 2DF0FFDF2056DD460020B375 /* libjsinspector.a */, - 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */, - 2DF0FFE32056DD460020B375 /* libthird-party.a */, - 2DF0FFE52056DD460020B375 /* libthird-party.a */, - 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */, - 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */, - 2DF0FFEB2056DD460020B375 /* libprivatedata.a */, - 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2D16E6891FA4F8E400B85C8A /* libReact.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 5E91572E1DD0AC6500FF2AA8 /* Products */ = { - isa = PBXGroup; - children = ( - 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, - 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, - ); - name = Products; - sourceTree = ""; - }; - 78C398B11ACF4ADC00677621 /* Products */ = { - isa = PBXGroup; - children = ( - 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, - 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, - 146833FF1AC3E56700842450 /* React.xcodeproj */, - 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, - ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, - 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, - 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, - 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, - 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, - 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, - 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, - 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, - 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, - ); - name = Libraries; - sourceTree = ""; - }; - 832341B11AAA6A8300B99B32 /* Products */ = { - isa = PBXGroup; - children = ( - 832341B51AAA6A8300B99B32 /* libRCTText.a */, - 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* example */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* exampleTests */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* example.app */, - 00E356EE1AD99517003FC87E /* exampleTests.xctest */, - 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */, - 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - ADBDB9201DFEBF0600ED6528 /* Products */ = { - isa = PBXGroup; - children = ( - ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */, - 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* exampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */; - buildPhases = ( - 00E356EA1AD99517003FC87E /* Sources */, - 00E356EB1AD99517003FC87E /* Frameworks */, - 00E356EC1AD99517003FC87E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 00E356F51AD99517003FC87E /* PBXTargetDependency */, - ); - name = exampleTests; - productName = exampleTests; - productReference = 00E356EE1AD99517003FC87E /* exampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 13B07F861A680F5B00A75B9A /* example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */; - buildPhases = ( - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = example; - productName = "Hello World"; - productReference = 13B07F961A680F5B00A75B9A /* example.app */; - productType = "com.apple.product-type.application"; - }; - 2D02E47A1E0B4A5D006451C7 /* example-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOS" */; - buildPhases = ( - 2D02E4771E0B4A5D006451C7 /* Sources */, - 2D02E4781E0B4A5D006451C7 /* Frameworks */, - 2D02E4791E0B4A5D006451C7 /* Resources */, - 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "example-tvOS"; - productName = "example-tvOS"; - productReference = 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */; - productType = "com.apple.product-type.application"; - }; - 2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOSTests" */; - buildPhases = ( - 2D02E48C1E0B4A5D006451C7 /* Sources */, - 2D02E48D1E0B4A5D006451C7 /* Frameworks */, - 2D02E48E1E0B4A5D006451C7 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, - ); - name = "example-tvOSTests"; - productName = "example-tvOSTests"; - productReference = 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0610; - ORGANIZATIONNAME = Facebook; - TargetAttributes = { - 00E356ED1AD99517003FC87E = { - CreatedOnToolsVersion = 6.2; - TestTargetID = 13B07F861A680F5B00A75B9A; - }; - 2D02E47A1E0B4A5D006451C7 = { - CreatedOnToolsVersion = 8.2.1; - ProvisioningStyle = Automatic; - }; - 2D02E48F1E0B4A5D006451C7 = { - CreatedOnToolsVersion = 8.2.1; - ProvisioningStyle = Automatic; - TestTargetID = 2D02E47A1E0B4A5D006451C7; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; - ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; - }, - { - ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; - ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; - }, - { - ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; - ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; - }, - { - ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; - ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; - }, - { - ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; - ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; - }, - { - ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; - ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; - }, - { - ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; - ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; - }, - { - ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; - ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; - }, - { - ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; - ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; - }, - { - ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; - ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; - }, - { - ProductGroup = 139FDEE71B06529A00C62182 /* Products */; - ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; - }, - { - ProductGroup = 146834001AC3E56700842450 /* Products */; - ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* example */, - 00E356ED1AD99517003FC87E /* exampleTests */, - 2D02E47A1E0B4A5D006451C7 /* example-tvOS */, - 2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTActionSheet.a; - remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTGeolocation.a; - remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTImage.a; - remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTNetwork.a; - remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTVibration.a; - remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTSettings.a; - remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTWebSocket.a; - remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 146834041AC3E56700842450 /* libReact.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libReact.a; - remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRCTBlob-tvOS.a"; - remoteRef = 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2D16E6841FA4F8DC00B85C8A /* libfishhook.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libfishhook.a; - remoteRef = 2D16E6831FA4F8DC00B85C8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2D16E6861FA4F8DC00B85C8A /* libfishhook-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libfishhook-tvOS.a"; - remoteRef = 2D16E6851FA4F8DC00B85C8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFDF2056DD460020B375 /* libjsinspector.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libjsinspector.a; - remoteRef = 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libjsinspector-tvOS.a"; - remoteRef = 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFE32056DD460020B375 /* libthird-party.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libthird-party.a"; - remoteRef = 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFE52056DD460020B375 /* libthird-party.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libthird-party.a"; - remoteRef = 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libdouble-conversion.a"; - remoteRef = 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libdouble-conversion.a"; - remoteRef = 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFEB2056DD460020B375 /* libprivatedata.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libprivatedata.a; - remoteRef = 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libprivatedata-tvOS.a"; - remoteRef = 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRCTImage-tvOS.a"; - remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRCTLinking-tvOS.a"; - remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRCTNetwork-tvOS.a"; - remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRCTSettings-tvOS.a"; - remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRCTText-tvOS.a"; - remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRCTWebSocket-tvOS.a"; - remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libReact.a; - remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libyoga.a; - remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libyoga.a; - remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcxxreact.a; - remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcxxreact.a; - remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libjschelpers.a; - remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libjschelpers.a; - remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTAnimation.a; - remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTAnimation.a; - remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTLinking.a; - remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTText.a; - remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTBlob.a; - remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 00E356EC1AD99517003FC87E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E4791E0B4A5D006451C7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E48E1E0B4A5D006451C7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; - }; - 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Bundle React Native Code And Images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 00E356EA1AD99517003FC87E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00E356F31AD99517003FC87E /* exampleTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, - 13B07FC11A68108700A75B9A /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E4771E0B4A5D006451C7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E48C1E0B4A5D006451C7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* example */; - targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; - }; - 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 2D02E47A1E0B4A5D006451C7 /* example-tvOS */; - targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - 13B07FB21A68108700A75B9A /* Base */, - ); - name = LaunchScreen.xib; - path = example; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 00E356F61AD99517003FC87E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = exampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example"; - }; - name = Debug; - }; - 00E356F71AD99517003FC87E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - COPY_PHASE_STRIP = NO; - INFOPLIST_FILE = exampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example"; - }; - name = Release; - }; - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = NO; - INFOPLIST_FILE = example/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_NAME = example; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CURRENT_PROJECT_VERSION = 1; - INFOPLIST_FILE = example/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_NAME = example; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - 2D02E4971E0B4A5E006451C7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "example-tvOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.2; - }; - name = Debug; - }; - 2D02E4981E0B4A5E006451C7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "example-tvOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.2; - }; - name = Release; - }; - 2D02E4991E0B4A5E006451C7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "example-tvOSTests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS"; - TVOS_DEPLOYMENT_TARGET = 10.1; - }; - name = Debug; - }; - 2D02E49A1E0B4A5E006451C7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "example-tvOSTests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS"; - TVOS_DEPLOYMENT_TARGET = 10.1; - }; - name = Release; - }; - 83CBBA201A601CBA00E9B192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 00E356F61AD99517003FC87E /* Debug */, - 00E356F71AD99517003FC87E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2D02E4971E0B4A5E006451C7 /* Debug */, - 2D02E4981E0B4A5E006451C7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2D02E4991E0B4A5E006451C7 /* Debug */, - 2D02E49A1E0B4A5E006451C7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme deleted file mode 100644 index a36391c9..00000000 --- a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme b/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme deleted file mode 100644 index eae95137..00000000 --- a/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/example/AppDelegate.h b/example/ios/example/AppDelegate.h deleted file mode 100644 index d4f2580b..00000000 --- a/example/ios/example/AppDelegate.h +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#import - -@interface AppDelegate : UIResponder - -@property (nonatomic, strong) UIWindow *window; - -@end diff --git a/example/ios/example/AppDelegate.m b/example/ios/example/AppDelegate.m deleted file mode 100644 index eba94f35..00000000 --- a/example/ios/example/AppDelegate.m +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#import "AppDelegate.h" - -#import -#import - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - NSURL *jsCodeLocation; - - jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; - - RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation - moduleName:@"example" - initialProperties:nil - launchOptions:launchOptions]; - rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; - - self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - UIViewController *rootViewController = [UIViewController new]; - rootViewController.view = rootView; - self.window.rootViewController = rootViewController; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/example/ios/example/Base.lproj/LaunchScreen.xib b/example/ios/example/Base.lproj/LaunchScreen.xib deleted file mode 100644 index 9e04807a..00000000 --- a/example/ios/example/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json b/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f7..00000000 --- a/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/example/ios/example/Images.xcassets/Contents.json b/example/ios/example/Images.xcassets/Contents.json deleted file mode 100644 index 2d92bd53..00000000 --- a/example/ios/example/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/ios/example/Info.plist b/example/ios/example/Info.plist deleted file mode 100644 index 44e178a6..00000000 --- a/example/ios/example/Info.plist +++ /dev/null @@ -1,56 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - example - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - NSLocationWhenInUseUsageDescription - - NSAppTransportSecurity - - - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - - - - diff --git a/example/ios/example/main.m b/example/ios/example/main.m deleted file mode 100644 index c73e0062..00000000 --- a/example/ios/example/main.m +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/example/ios/exampleTests/Info.plist b/example/ios/exampleTests/Info.plist deleted file mode 100644 index 886825cc..00000000 --- a/example/ios/exampleTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/example/ios/exampleTests/exampleTests.m b/example/ios/exampleTests/exampleTests.m deleted file mode 100644 index 8c594de0..00000000 --- a/example/ios/exampleTests/exampleTests.m +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#import -#import - -#import -#import - -#define TIMEOUT_SECONDS 600 -#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" - -@interface exampleTests : XCTestCase - -@end - -@implementation exampleTests - -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test -{ - if (test(view)) { - return YES; - } - for (UIView *subview in [view subviews]) { - if ([self findSubviewInView:subview matching:test]) { - return YES; - } - } - return NO; -} - -- (void)testRendersWelcomeScreen -{ - UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; - BOOL foundElement = NO; - - __block NSString *redboxError = nil; - RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } - }); - - while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - - foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { - if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { - return YES; - } - return NO; - }]; - } - - RCTSetLogFunction(RCTDefaultLogFunction); - - XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); - XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); -} - - -@end diff --git a/example/metro.config.js b/example/metro.config.js new file mode 100644 index 00000000..42271d18 --- /dev/null +++ b/example/metro.config.js @@ -0,0 +1,32 @@ +const path = require('path'); +const { getDefaultConfig } = require('expo/metro-config'); + +const projectRoot = __dirname; +const libraryRoot = path.resolve(projectRoot, '..'); + +/** @type {import('expo/metro-config').MetroConfig} */ +const config = getDefaultConfig(projectRoot); + +// Watch the library source so changes are picked up live +config.watchFolders = [libraryRoot]; + +// Only resolve node_modules from the example to avoid duplicate React +config.resolver.nodeModulesPaths = [ + path.resolve(projectRoot, 'node_modules'), +]; + +// Map the library and its runtime dep to the actual locations +config.resolver.extraNodeModules = { + 'react-native-markdown-renderer': libraryRoot, + 'markdown-it': path.resolve(libraryRoot, 'node_modules', 'markdown-it'), +}; + +// Block the library's node_modules for packages the example already provides +config.resolver.blockList = [ + new RegExp( + path.resolve(libraryRoot, 'node_modules').replace(/[/\\]/g, '[/\\\\]') + + '[\\/\\\\](react|react-native|react-native-web|@react-native)[\\/\\\\].*' + ), +]; + +module.exports = config; diff --git a/example/package.json b/example/package.json index 2c51f9a8..4dbdaa0f 100644 --- a/example/package.json +++ b/example/package.json @@ -1,32 +1,24 @@ { "name": "example", - "version": "0.0.1", - "private": true, + "version": "1.0.0", + "main": "index.ts", "scripts": { - "start": "node node_modules/react-native/local-cli/cli.js start", - "ios": "react-native run-ios", - "android": "react-native run-android", - "dev": "node ../bin/watch", - "test": "jest" + "start": "expo start", + "android": "expo start --android", + "ios": "expo start --ios", + "web": "expo start --web" }, "dependencies": { - "linkify-it": "^2.0.3", - "markdown-it-checkbox": "^1.1.0", - "prop-types": "^15.6.1", - "react": "16.3.1", - "react-native": "0.55.2", - "react-native-fit-image": "^1.5.4", - "react-native-markdown-renderer": "^3.2.0", - "react-native-tab-view": "0.0.77" + "expo": "~54.0.33", + "expo-status-bar": "~3.0.9", + "react": "19.1.0", + "react-dom": "19.1.0", + "react-native": "0.81.5", + "react-native-web": "^0.21.0" }, "devDependencies": { - "babel-jest": "22.4.3", - "babel-preset-react-native": "4.0.0", - "jest": "22.4.3", - "markdown-it": "^8.4.1", - "react-test-renderer": "16.3.1" + "@types/react": "~19.1.0", + "typescript": "~5.9.2" }, - "jest": { - "preset": "react-native" - } + "private": true } diff --git a/example/react-native-markdown-renderer/index.d.ts b/example/react-native-markdown-renderer/index.d.ts deleted file mode 100644 index ba639129..00000000 --- a/example/react-native-markdown-renderer/index.d.ts +++ /dev/null @@ -1,86 +0,0 @@ -// tslint:disable:max-classes-per-file -import { MarkdownIt, Token } from 'markdown-it'; -import { ComponentType, ReactNode } from 'react'; -import { StyleSheet, View } from 'react-native'; - -export function applyStyle(children: any[], styles: any, type: string): any; - -export function getUniqueID(): string; -export function openUrl(url: string): void; - -export function hasParents(parents: any[], type: string): boolean; - -export type RenderFunction = ( - node: any, - children: ReactNode[], - parent: ReactNode, - styles: any, -) => ReactNode; - -export interface RenderRules { - [name: string]: RenderFunction; -} - -export const renderRules: RenderRules; - -export interface MarkdownParser { - parse: (value: string, options: any) => Token[]; -} - -export interface ASTNode { - type: string; - sourceType: string; // original source token name - key: string; - content: string; - tokenIndex: number; - index: number; - attributes: Record; - children: ASTNode[]; -} - -export class AstRenderer { - constructor(renderRules: RenderRules, style?: any); - getRenderFunction(type: string): RenderFunction; - renderNode(node: any, parentNodes: ReadonlyArray): ReactNode; - render(nodes: ReadonlyArray): View; -} - -export function parser( - source: string, - renderer: (node: ASTNode) => View, - parser: MarkdownParser, -): any; - -export function stringToTokens( - source: string, - markdownIt: MarkdownParser, -): Token[]; - -export function tokensToAST(tokens: ReadonlyArray): ASTNode[]; - -interface PluginContainerResult extends Array { - 0: A; -} - -export class PluginContainer { - constructor(plugin: A, ...options: any[]); - toArray(): PluginContainerResult; -} - -export function blockPlugin(md: any, name: string, options: object): any; - -export const styles: any; - -export interface MarkdownProps { - rules?: RenderRules; - style?: StyleSheet.NamedStyles; - renderer?: AstRenderer; - markdownit?: MarkdownIt; - plugins?: Array>; -} - -type MarkdownStatic = React.ComponentType; -export const Markdown: MarkdownStatic; -export type Markdown = MarkdownStatic; - -export default Markdown; diff --git a/example/react-native-markdown-renderer/index.js b/example/react-native-markdown-renderer/index.js deleted file mode 100644 index 653bba22..00000000 --- a/example/react-native-markdown-renderer/index.js +++ /dev/null @@ -1,215 +0,0 @@ -/** - * Base Markdown component - * @author Mient-jan Stelling - */ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { View } from 'react-native'; -import parser from './lib/parser'; -import applyStyle from './lib/util/applyStyle'; -import getUniqueID from './lib/util/getUniqueID'; -import hasParents from './lib/util/hasParents'; -import openUrl from './lib/util/openUrl'; -import tokensToAST from './lib/util/tokensToAST'; -import renderRules from './lib/renderRules'; -import AstRenderer from './lib/AstRenderer'; -import MarkdownIt from 'markdown-it'; -import PluginContainer from './lib/plugin/PluginContainer'; -import blockPlugin from './lib/plugin/blockPlugin'; -import { styles } from './lib/styles'; -import { stringToTokens } from './lib/util/stringToTokens'; -/** - * - */ -export { - applyStyle, - getUniqueID, - openUrl, - hasParents, - renderRules, - AstRenderer, - parser, - stringToTokens, - tokensToAST, - MarkdownIt, - PluginContainer, - blockPlugin, - styles, -}; - -/** - * react-native-markdown-renderer - */ -export default class Markdown extends Component { - /** - * Definition of the prop types - */ - static propTypes = { - children: PropTypes.node.isRequired, - renderer: PropTypes.oneOfType([PropTypes.func, PropTypes.instanceOf(AstRenderer)]), - rules: (props, propName, componentName) => { - let invalidProps = []; - const prop = props[propName]; - - if (!prop) { - return; - } - - if (typeof prop === 'object') { - invalidProps = Object.keys(prop).filter(key => typeof prop[key] !== 'function'); - } - - if (typeof prop !== 'object') { - return new Error( - `Invalid prop \`${propName}\` supplied to \`${componentName}\`. Must be of shape {[index:string]:function} ` - ); - } else if (invalidProps.length > 0) { - return new Error( - `Invalid prop \`${propName}\` supplied to \`${componentName}\`. These ` + - `props are not of type function \`${invalidProps.join(', ')}\` ` - ); - } - }, - markdownit: PropTypes.instanceOf(MarkdownIt), - plugins: PropTypes.arrayOf(PropTypes.instanceOf(PluginContainer)), - style: PropTypes.any, - }; - - /** - * Default Props - */ - static defaultProps = { - renderer: null, - rules: null, - plugins: [], - style: null, - markdownit: MarkdownIt({ - typographer: true, - }), - }; - - copy = ''; - renderer = null; - markdownParser = null; - - /** - * Only when the copy changes will the markdown render again. - * @param nextProps - * @param nextState - * @return {boolean} - */ - shouldComponentUpdate(nextProps, nextState) { - const copy = this.getCopyFromChildren(nextProps.children); - - if (copy !== this.copy) { - this.copy = copy; - return true; - } - - if ( - nextProps.renderer !== this.props.renderer || - nextProps.style !== this.props.style || - nextProps.plugins !== this.props.plugins || - nextProps.rules !== this.props.rules || - nextProps.markdownit !== this.props.markdownit - ) { - return true; - } - - return false; - } - - /** - * - * @param props - */ - updateSettings(props = this.props) { - const { renderer, rules, style, plugins, markdownit } = props; - - if (renderer && rules) { - console.warn( - 'react-native-markdown-renderer you are using renderer and rules at the same time. This is not possible, props.rules is ignored' - ); - } - - if (renderer && style) { - console.warn( - 'react-native-markdown-renderer you are using renderer and style at the same time. This is not possible, props.style is ignored' - ); - } - - // these checks are here to prevent extra overhead. - if (renderer) { - if (typeof renderer === 'function') { - if (!this.renderer || this.renderer.render !== renderer) { - this.renderer = { - render: renderer, - }; - } - } else if (renderer instanceof AstRenderer) { - if (this.renderer !== renderer) { - this.renderer = renderer; - } - } else { - throw new Error('Provided renderer is not compatible with function or AstRenderer. please change'); - } - } else { - if (!this.renderer || this.props.renderer || this.props.rules !== rules || this.props.style !== style) { - this.renderer = new AstRenderer( - { - ...renderRules, - ...(rules || {}), - }, - { - ...styles, - ...style, - } - ); - } - } - - if (!this.markdownParser || this.props.markdownit !== markdownit || plugins !== this.props.plugins) { - let md = markdownit; - if (plugins && plugins.length > 0) { - plugins.forEach(plugin => { - md = md.use.apply(md, plugin.toArray()); - }); - } - - this.markdownParser = md; - } - } - - /** - * - */ - componentWillMount() { - this.updateSettings(this.props); - } - - /** - * - * @param nextProps - */ - componentWillReceiveProps(nextProps) { - this.updateSettings(nextProps); - } - - /** - * - * @param children - * @return {string} - */ - getCopyFromChildren(children = this.props.children) { - return children instanceof Array ? children.join('') : children; - } - - /** - * - * @return {View} - */ - render() { - const copy = (this.copy = this.getCopyFromChildren()); - return parser(copy, this.renderer.render, this.markdownParser); - } -} diff --git a/example/react-native-markdown-renderer/lib/AstRenderer.js b/example/react-native-markdown-renderer/lib/AstRenderer.js deleted file mode 100644 index 532e0cf7..00000000 --- a/example/react-native-markdown-renderer/lib/AstRenderer.js +++ /dev/null @@ -1,71 +0,0 @@ -import React, { Component, PropTypes } from "react"; -import { Text, View } from "react-native"; -import getUniqueID from "./util/getUniqueID"; - -export function rootRenderRule(children, styles) { - return {children}; -} - -/** - * - */ -export default class AstRenderer { - /** - * - * @param {Object.} renderRules - * @param {any} style - */ - constructor(renderRules, style) { - this._renderRules = renderRules; - this._style = style; - } - - /** - * - * @param {string} type - * @return {string} - */ - getRenderFunction = type => { - const renderFunction = this._renderRules[type]; - - if (!renderFunction) { - throw new Error( - `${type} renderRule not defined example: ` - ); - } - return renderFunction; - }; - - /** - * - * @param node - * @param parentNodes - * @return {*} - */ - renderNode = (node, parentNodes) => { - const renderFunction = this.getRenderFunction(node.type); - - const parents = [...parentNodes]; - parents.unshift(node); - - if (node.type === "text") { - return renderFunction(node, [], parentNodes, this._style); - } - - const children = node.children.map(value => { - return this.renderNode(value, parents); - }); - - return renderFunction(node, children, parentNodes, this._style); - }; - - /** - * - * @param nodes - * @return {*} - */ - render = nodes => { - const children = nodes.map(value => this.renderNode(value, [])); - return rootRenderRule(children, this._style); - }; -} diff --git a/example/react-native-markdown-renderer/lib/data/PlatformEnum.js b/example/react-native-markdown-renderer/lib/data/PlatformEnum.js deleted file mode 100644 index 1e45c5e4..00000000 --- a/example/react-native-markdown-renderer/lib/data/PlatformEnum.js +++ /dev/null @@ -1,4 +0,0 @@ -export default { - IOS: "ios", - ANDROID: "android" -}; diff --git a/example/react-native-markdown-renderer/lib/parser.js b/example/react-native-markdown-renderer/lib/parser.js deleted file mode 100644 index 82f2d8f0..00000000 --- a/example/react-native-markdown-renderer/lib/parser.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import { View } from 'react-native'; -import tokensToAST from './util/tokensToAST'; -import { stringToTokens } from './util/stringToTokens'; -import { cleanupTokens } from './util/cleanupTokens'; -import groupTextTokens from './util/groupTextTokens'; - -/** - * - * @param {string} source - * @param {function} [renderer] - * @param {AstRenderer} [markdownIt] - * @return {View} - */ -export default function parser(source, renderer, markdownIt) { - let tokens = stringToTokens(source, markdownIt); - tokens = cleanupTokens(tokens); - tokens = groupTextTokens(tokens); - - const astTree = tokensToAST(tokens); - - return renderer(astTree); -} diff --git a/example/react-native-markdown-renderer/lib/plugin/PluginContainer.js b/example/react-native-markdown-renderer/lib/plugin/PluginContainer.js deleted file mode 100644 index 80fce541..00000000 --- a/example/react-native-markdown-renderer/lib/plugin/PluginContainer.js +++ /dev/null @@ -1,10 +0,0 @@ -export default class PluginContainer { - constructor(plugin, ...options) { - this.plugin = plugin; - this.options = options; - } - - toArray() { - return [this.plugin, ...this.options]; - } -} diff --git a/example/react-native-markdown-renderer/lib/plugin/blockPlugin.js b/example/react-native-markdown-renderer/lib/plugin/blockPlugin.js deleted file mode 100644 index c1af31f8..00000000 --- a/example/react-native-markdown-renderer/lib/plugin/blockPlugin.js +++ /dev/null @@ -1,166 +0,0 @@ -/* code is still in beta, thats why im disabling linter */ -/* eslint-disable */ - -/** - * How to use? - * new PluginContainer(blockPlugin, '__name_of_block__', {}) - * @param md - * @param name - * @param options - */ -export default function blockPlugin(md, name, options) { - function validateDefault(params) { - return params.trim().split(' ', 2)[0] === name; - } - - function renderDefault(tokens, idx, _options, env, self) { - return self.renderToken(tokens, idx, _options, env, self); - } - - options = options || {}; - - let min_markers = 1; - let marker_str = options.marker || `[${name}]`; - let marker_end_str = options.marker_end || `[/${name}]`; - let marker_char = marker_str.charCodeAt(0); - let marker_len = marker_str.length; - let marker_end_len = marker_end_str.length; - - let validate = options.validate || validateDefault; - let render = options.render || renderDefault; - - function container(state, startLine, endLine, silent) { - var pos, - nextLine, - marker_count, - markup, - params, - token, - old_parent, - old_line_max, - auto_closed = false, - start = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine]; - - // Check out the first character quickly, - // this should filter out most of non-containers - // - if (marker_char !== state.src.charCodeAt(start)) { - return false; - } - - // Check out the rest of the marker string - // - for (pos = start + 1; pos <= max; pos++) { - if (marker_str[(pos - start) % marker_len] !== state.src[pos]) { - break; - } - } - - marker_count = Math.floor((pos - start) / marker_len); - if (marker_count < min_markers) { - return false; - } - pos -= (pos - start) % marker_len; - - markup = state.src.slice(start, pos); - params = state.src.slice(pos, max); - - // if (!validate(params)) { - // return false; - // } - - // Since start is found, we can report success here in validation mode - // - if (silent) { - return true; - } - - // Search for the end of the block - // - nextLine = startLine; - - for (;;) { - nextLine++; - if (nextLine >= endLine) { - // unclosed block should be autoclosed by end of document. - // also block seems to be autoclosed by end of parent - break; - } - - start = state.bMarks[nextLine] + state.tShift[nextLine]; - max = state.eMarks[nextLine]; - - if (start < max && state.sCount[nextLine] < state.blkIndent) { - // non-empty line with negative indent should stop the list: - // - ``` - // test - break; - } - - if (marker_char !== state.src.charCodeAt(start)) { - continue; - } - - if (state.sCount[nextLine] - state.blkIndent >= 4) { - // closing fence should be indented less than 4 spaces - continue; - } - - for (pos = start + 1; pos <= max; pos++) { - if (marker_end_str[(pos - start) % marker_end_len] !== state.src[pos]) { - break; - } - } - - // closing code fence must be at least as long as the opening one - if (Math.floor((pos - start) / marker_end_len) < marker_count) { - continue; - } - - // make sure tail has spaces only - pos -= (pos - start) % marker_end_len; - pos = state.skipSpaces(pos); - - if (pos < max) { - continue; - } - - // found! - auto_closed = true; - break; - } - - old_parent = state.parentType; - old_line_max = state.lineMax; - state.parentType = 'container'; - - // this will prevent lazy continuations from ever going past our end marker - state.lineMax = nextLine; - - token = state.push(`container_${name}_open`, name, 1); - token.markup = markup; - token.block = true; - token.info = params; - token.map = [startLine, nextLine]; - - state.md.block.tokenize(state, startLine + 1, nextLine); - - token = state.push(`container_${name}_close`, name, -1); - token.markup = state.src.slice(start, pos); - token.block = true; - - state.parentType = old_parent; - state.lineMax = old_line_max; - state.line = nextLine + (auto_closed ? 1 : 0); - - return true; - } - - md.block.ruler.before('fence', 'container_checklist', container, { - alt: ['paragraph', 'reference', 'blockquote', 'list'], - }); - - md.renderer.rules['container_' + name + '_open'] = render; - md.renderer.rules['container_' + name + '_close'] = render; -} diff --git a/example/react-native-markdown-renderer/lib/renderRules.js b/example/react-native-markdown-renderer/lib/renderRules.js deleted file mode 100644 index 67a180c5..00000000 --- a/example/react-native-markdown-renderer/lib/renderRules.js +++ /dev/null @@ -1,237 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { Text, TouchableWithoutFeedback, View } from 'react-native'; - -import FitImage from 'react-native-fit-image'; -import openUrl from './util/openUrl'; -import hasParents from './util/hasParents'; -import applyStyle from './util/applyStyle'; - -const renderRules = { - // when unknown elements are introduced, so it wont break - unknown: (node, children, parent, styles) => { - return ( - - {node.type} - - ); - }, - - textgroup: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - - inline: (node, children, parent, styles) => { - return {children}; - }, - - text: (node, children, parent, styles) => { - return {node.content}; - }, - span: (node, children, parent, styles) => { - return {children}; - }, - - strong: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - - s: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - // a - link: (node, children, parent, styles) => { - return ( - openUrl(node.attributes.href)}> - {children} - - ); - }, - // a with a non text element nested inside - blocklink: (node, children, parent, styles) => { - return ( - openUrl(node.attributes.href)} style={styles.blocklink}> - {children} - - ); - }, - em: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - - heading1: (node, children, parent, styles) => { - return ( - - {applyStyle(children, [styles.heading, styles.heading1], 'Text')} - - ); - }, - - heading2: (node, children, parent, styles) => { - children = applyStyle(children, [styles.heading, styles.heading2], 'Text'); - return ( - - {children} - - ); - }, - heading3: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading3], 'Text')} - - ), - heading4: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading4], 'Text')} - - ), - heading5: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading5], 'Text')} - - ), - heading6: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading6], 'Text')} - - ), - - paragraph: (node, children, parent, styles) => ( - - {children} - - ), - - hardbreak: (node, children, parent, styles) => , - - blockquote: (node, children, parent, styles) => ( - - {children} - - ), - code_inline: (node, children, parent, styles) => { - return ( - - {node.content} - - ); - }, - code_block: (node, children, parent, styles) => { - return ( - - {node.content} - - ); - }, - fence: (node, children, parent, styles) => { - return ( - - {node.content} - - ); - }, - pre: (node, children, parent, styles) => ( - - {children} - - ), - // ul - bullet_list: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - ordered_list: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - // li - list_item: (node, children, parent, styles) => { - if (hasParents(parent, 'bullet_list')) { - return ( - - {'\u00B7'} - {children} - - ); - } - - if (hasParents(parent, 'ordered_list')) { - return ( - - {node.index + 1}{node.markup} - {children} - - ); - } - - return ( - - {children} - - ); - }, - table: (node, children, parent, styles) => ( - - {children} - - ), - thead: (node, children, parent, styles) => ( - - {children} - - ), - tbody: (node, children, parent, styles) => {children}, - th: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - tr: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - td: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - hr: (node, children, parent, styles) => { - return ; - }, - - // br - softbreak: (node, children, parent, styles) => {'\n'}, - image: (node, children, parent, styles) => { - return ; - }, -}; - -export default renderRules; diff --git a/example/react-native-markdown-renderer/lib/styles.js b/example/react-native-markdown-renderer/lib/styles.js deleted file mode 100644 index 7f7a7ea3..00000000 --- a/example/react-native-markdown-renderer/lib/styles.js +++ /dev/null @@ -1,174 +0,0 @@ -import { Platform, StyleSheet } from 'react-native'; -import PlatformEnum from './data/PlatformEnum'; - -/** - * - */ -export const styles = StyleSheet.create({ - root: {}, - view: {}, - codeBlock: { - borderWidth: 1, - borderColor: '#CCCCCC', - backgroundColor: '#f5f5f5', - padding: 10, - borderRadius: 4, - }, - codeInline: { - borderWidth: 1, - borderColor: '#CCCCCC', - backgroundColor: '#f5f5f5', - padding: 10, - borderRadius: 4, - }, - del: { - backgroundColor: '#000000', - }, - em: { - fontStyle: 'italic', - }, - headingContainer: { - flexDirection: 'row', - }, - heading: {}, - heading1: { - fontSize: 32, - }, - heading2: { - fontSize: 24, - }, - heading3: { - fontSize: 18, - }, - heading4: { - fontSize: 16, - }, - heading5: { - fontSize: 13, - }, - heading6: { - fontSize: 11, - }, - hr: { - backgroundColor: '#000000', - height: 1, - }, - blockquote: { - paddingHorizontal: 20, - paddingVertical: 10, - margin: 20, - backgroundColor: '#CCCCCC', - }, - inlineCode: { - borderRadius: 3, - borderWidth: 1, - fontFamily: 'Courier', - fontWeight: 'bold', - }, - list: {}, - listItem: { - flex: 1, - flexWrap: 'wrap', - // backgroundColor: 'green', - }, - listUnordered: {}, - - listUnorderedItem: { - flexDirection: 'row', - justifyContent: 'flex-start', - }, - - listUnorderedItemIcon: { - marginLeft: 10, - marginRight: 10, - ...Platform.select({ - [PlatformEnum.IOS]: { - lineHeight: 36, - }, - [PlatformEnum.ANDROID]: { - lineHeight: 30, - }, - }), - }, - listUnorderedItemText: { - fontSize: 20, - lineHeight: 20, - }, - - listOrdered: {}, - listOrderedItem: { - flexDirection: 'row', - }, - listOrderedItemIcon: { - marginLeft: 10, - marginRight: 10, - ...Platform.select({ - [PlatformEnum.IOS]: { - lineHeight: 36, - }, - [PlatformEnum.ANDROID]: { - lineHeight: 30, - }, - }), - }, - listOrderedItemText: { - fontWeight: 'bold', - lineHeight: 20, - }, - paragraph: { - marginTop: 10, - marginBottom: 10, - flexWrap: 'wrap', - flexDirection: 'row', - alignItems: 'flex-start', - justifyContent: 'flex-start', - }, - hardbreak: { - width: '100%', - height: 1, - }, - strong: { - fontWeight: 'bold', - }, - table: { - borderWidth: 1, - borderColor: '#000000', - borderRadius: 3, - }, - tableHeader: {}, - tableHeaderCell: { - flex: 1, - // color: '#000000', - padding: 5, - // backgroundColor: 'green', - }, - tableRow: { - borderBottomWidth: 1, - borderColor: '#000000', - flexDirection: 'row', - }, - tableRowCell: { - flex: 1, - padding: 5, - }, - text: {}, - strikethrough: { - textDecorationLine: 'line-through', - }, - link: { - textDecorationLine: 'underline', - }, - blocklink: { - flex: 1, - borderColor: '#000000', - borderBottomWidth: 1, - - }, - u: { - borderColor: '#000000', - borderBottomWidth: 1, - }, - image: { - flex: 1, - }, -}); diff --git a/example/react-native-markdown-renderer/lib/util/Token.js b/example/react-native-markdown-renderer/lib/util/Token.js deleted file mode 100644 index 9a7c18c5..00000000 --- a/example/react-native-markdown-renderer/lib/util/Token.js +++ /dev/null @@ -1,8 +0,0 @@ -export default class Token { - constructor(type, nesting = 0, children = null, block = false) { - this.type = type; - this.nesting = nesting; - this.children = children; - this.block = block; - } -} diff --git a/example/react-native-markdown-renderer/lib/util/applyStyle.js b/example/react-native-markdown-renderer/lib/util/applyStyle.js deleted file mode 100644 index 23a2b86b..00000000 --- a/example/react-native-markdown-renderer/lib/util/applyStyle.js +++ /dev/null @@ -1,22 +0,0 @@ -import React, { Component } from 'react'; -import { Text } from 'react-native'; - -/** - * - * @param Array children - * @param Array styles - * @param {string} type - */ -export default function applyStyle(children, styles, type) { - if (!(styles instanceof Array)) { - styles = [styles]; - } - - return children.map(child => { - if (child.type.displayName === type) { - return ; - } - - return child; - }); -} diff --git a/example/react-native-markdown-renderer/lib/util/flattenInlineTokens.js b/example/react-native-markdown-renderer/lib/util/flattenInlineTokens.js deleted file mode 100644 index 4fe3b605..00000000 --- a/example/react-native-markdown-renderer/lib/util/flattenInlineTokens.js +++ /dev/null @@ -1,14 +0,0 @@ -export default function flattenTokens(tokens) { - return tokens.reduce((acc, curr) => { - if (curr.type === 'inline' && curr.children && curr.children.length > 0) { - const children = flattenTokens(curr.children); - while (children.length) { - acc.push(children.shift()); - } - } else { - acc.push(curr); - } - - return acc; - }, []); -} diff --git a/example/react-native-markdown-renderer/lib/util/getTokenTypeByToken.js b/example/react-native-markdown-renderer/lib/util/getTokenTypeByToken.js deleted file mode 100644 index 501267f2..00000000 --- a/example/react-native-markdown-renderer/lib/util/getTokenTypeByToken.js +++ /dev/null @@ -1,44 +0,0 @@ -const regSelectOpenClose = /_open|_close/g; -const regSelectHofH1 = /\w/g; - -/** - * - * @example { - "type": "heading_open", - "tag": "h1", - "attrs": null, - "map": [ - 1, - 2 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "#", - "info": "", - "meta": null, - "block": true, - "hidden": false - } - * @param token - * @return {String} - */ -export default function getTokenTypeByToken(token) { - let cleanedType = "unknown"; - - if (token.type) { - cleanedType = token.type.replace(regSelectOpenClose, ""); - } - - switch (cleanedType) { - case "heading": { - cleanedType = `${cleanedType}${token.tag.substr(1)}`; - break; - } - } - - return cleanedType; -} - - diff --git a/example/react-native-markdown-renderer/lib/util/getUniqueID.js b/example/react-native-markdown-renderer/lib/util/getUniqueID.js deleted file mode 100644 index 55e1d31e..00000000 --- a/example/react-native-markdown-renderer/lib/util/getUniqueID.js +++ /dev/null @@ -1,6 +0,0 @@ - -let uuid = new Date().getTime(); -export default function getUniqueID() { - uuid++; - return `rnmr_${uuid.toString(16)}`; -} diff --git a/example/react-native-markdown-renderer/lib/util/hasParents.js b/example/react-native-markdown-renderer/lib/util/hasParents.js deleted file mode 100644 index 971cf982..00000000 --- a/example/react-native-markdown-renderer/lib/util/hasParents.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * - * @param {Array} parents - * @param {string} type - * @return {boolean} - */ -export default function hasParents(parents, type) { - return parents.findIndex(el => el.type === type) > -1; - -} diff --git a/example/react-native-markdown-renderer/lib/util/openUrl.js b/example/react-native-markdown-renderer/lib/util/openUrl.js deleted file mode 100644 index 4ffe2e6d..00000000 --- a/example/react-native-markdown-renderer/lib/util/openUrl.js +++ /dev/null @@ -1,7 +0,0 @@ -import { Linking } from 'react-native'; - -export default function openUrl(url) { - if (url) { - Linking.openURL(url); - } -} diff --git a/example/react-native-markdown-renderer/lib/util/splitTextNonTextNodes.js b/example/react-native-markdown-renderer/lib/util/splitTextNonTextNodes.js deleted file mode 100644 index 3e6290f5..00000000 --- a/example/react-native-markdown-renderer/lib/util/splitTextNonTextNodes.js +++ /dev/null @@ -1,14 +0,0 @@ -export default function splitTextNonTextNodes(children) { - return children.reduce( - (acc, curr) => { - if (curr.type.displayName === "Text") { - acc.textNodes.push(curr); - } else { - acc.nonTextNodes.push(curr); - } - - return acc; - }, - { textNodes: [], nonTextNodes: [] } - ); -} diff --git a/example/react-native-markdown-renderer/lib/util/stringToTokens.js b/example/react-native-markdown-renderer/lib/util/stringToTokens.js deleted file mode 100644 index 78fdee61..00000000 --- a/example/react-native-markdown-renderer/lib/util/stringToTokens.js +++ /dev/null @@ -1,10 +0,0 @@ -export function stringToTokens(source, markdownIt) { - let result = []; - try { - result = markdownIt.parse(source, {}); - } catch (err) { - console.warn(err); - } - - return result; -} diff --git a/example/src/code.js b/example/src/code.js deleted file mode 100644 index 13d3c762..00000000 --- a/example/src/code.js +++ /dev/null @@ -1,29 +0,0 @@ -const markdownText = ` -Inline \`code\` - -Indented code - - // Some comments - line 1 of code - line 2 of code - line 3 of code - - -Block code "fences" - -\`\`\` -Sample text here... -\`\`\` - -Syntax highlighting - -\`\`\` js -var foo = function (bar) { - return bar++; -}; - -console.log(foo(5)); -\`\`\` -`; - -export default markdownText; \ No newline at end of file diff --git a/example/src/copy/all.js b/example/src/copy/all.js deleted file mode 100644 index d47fd540..00000000 --- a/example/src/copy/all.js +++ /dev/null @@ -1,181 +0,0 @@ -const copy = ` -# Syntax Support -foo - -a \nb - -# code inline - -**Foo Bar** - -Hello \`code inline\` code_inline - -__Advertisement :)__ - -This is a text. Click [here](https://google.com) to open a link. Let's add some more text to see how this behaves. - -# h1 Heading 8-) -## h2 Heading -### h3 Heading -#### h4 Heading -##### h5 Heading -###### h6 Heading - -- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image - resize in browser. -- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly - i18n with plurals support and easy syntax. - -You will like those projects! - ---- - -# h1 Heading 8-) -## h2 Heading -### h3 Heading -#### h4 Heading -##### h5 Heading -###### h6 Heading - - -### Horizontal Rules - -___ - ---- - - -### Typographic replacements - -Enable typographer option to see result. - -(c) (C) (r) (R) (tm) (TM) (p) (P) +- - -test.. test... test..... test?..... test!.... - -!!!!!! ???? ,, -- --- - -"Smartypants, double quotes" and 'single quotes' - - -## Emphasis - -**This is bold text** - -__This is bold text__ - -*This is italic text* - -_This is italic text_ - -~~Strikethrough~~ - - -## Blockquotes - - -> Blockquotes can also be nested... - ->> ...by using additional greater-than signs right next to each other... - -> > > ...or with spaces between arrows. - - -## Lists - -Unordered - -+ Create a list by starting a line with \`+\`, \`-\`, or \`*\` -+ Sub-lists are made by indenting 2 spaces: - - Marker character change forces new list start: - * Ac tristique libero volutpat at - + Facilisis in pretium nisl aliquet - - Nulla volutpat aliquam velit -+ Very easy! - -Ordered - -1. Lorem ipsum dolor sit amet -2. Consectetur adipiscing elit -3. Integer molestie lorem at massa - - -1. You can use sequential numbers... -1. ...or keep all the numbers as \`1.\` - -Start numbering with offset: - -57. foo -1. bar - - -## Code - -Inline \`code\` - -Indented code - - // Some comments - line 1 of code - line 2 of code - line 3 of code - - -Block code "fences" - -\`\`\` -Sample text here... -\`\`\` - -Syntax highlighting - -\`\`\` js -var foo = function (bar) { - return bar++; -}; - -console.log(foo(5)); -\`\`\` - -## Tables - -| Option | Description | -| ------ | ----------- | -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - -Right aligned columns - -| Option | Description | -| ------:| -----------:| -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - - -## Links - -[link text](http://dev.nodeca.com) - -[link with title](http://nodeca.github.io/pica/demo/ "title text!") - -Autoconverted link https://github.com/nodeca/pica (enable linkify to see) - - -## Images - -![Minion](https://octodex.github.com/images/minion.png) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat") - -Like links, Images also have a footnote style syntax - -![Alt text][id] - -With a reference later in the document defining the URL location: - -[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" -`; - - -export default copy; \ No newline at end of file diff --git a/example/src/copy/linkedimg.js b/example/src/copy/linkedimg.js deleted file mode 100644 index e9ba9e14..00000000 --- a/example/src/copy/linkedimg.js +++ /dev/null @@ -1,43 +0,0 @@ - -const copy = ` -![Minion](https://octodex.github.com/images/minion.png) -[![Minion](https://octodex.github.com/images/minion.png)](https://google.com) -[![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.png)](https://google.com) - -## Links - -@hello - -`; -const copy2 = ` -**tes -t** - -## Linked Images -[![Minion](https://octodex.github.com/images/minion.png)](https://google.com) -[![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.png)](https://google.com) - - -## Links - -[link text](http://dev.nodeca.com) - -[link with title](http://nodeca.github.io/pica/demo/ "title text!") - -Autoconverted link https://github.com/nodeca/pica (enable linkify to see) - - -## Images - -![Minion](https://octodex.github.com/images/minion.png) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat") - -Like links, Images also have a footnote style syntax - -![Alt text][id] - -With a reference later in the document defining the URL location: - -[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" -`; -export default copy; \ No newline at end of file diff --git a/example/src/copyAll.js b/example/src/copyAll.js deleted file mode 100644 index 56093358..00000000 --- a/example/src/copyAll.js +++ /dev/null @@ -1,169 +0,0 @@ -const markdownText = ` -[![Minion](https://octodex.github.com/images/minion.png)](https://google.com) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg) - -`; -const markdownText2 = ` - # Syntax Support - -__Advertisement :)__ - -This is a text. Click [here](https://google.com) to open a link. Let's add some more text to see how this behaves. - -- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image - resize in browser. -- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly - i18n with plurals support and easy syntax. - -You will like those projects! - ---- - -# h1 Heading 8-) -## h2 Heading -### h3 Heading -#### h4 Heading -##### h5 Heading -###### h6 Heading - - -### Horizontal Rules - -___ - ---- - - -### Typographic replacements - -Enable typographer option to see result. - -(c) (C) (r) (R) (tm) (TM) (p) (P) +- - -test.. test... test..... test?..... test!.... - -!!!!!! ???? ,, -- --- - -"Smartypants, double quotes" and 'single quotes' - - -## Emphasis - -**This is bold text** - -__This is bold text__ - -*This is italic text* - -_This is italic text_ - -~~Strikethrough~~ - - -## Blockquotes - - -> Blockquotes can also be nested... - ->> ...by using additional greater-than signs right next to each other... - -> > > ...or with spaces between arrows. - - -## Lists - -Unordered - -+ Create a list by starting a line with \`+\`, \`-\`, or \`*\` -+ Sub-lists are made by indenting 2 spaces: - - Marker character change forces new list start: - * Ac tristique libero volutpat at - + Facilisis in pretium nisl aliquet - - Nulla volutpat aliquam velit -+ Very easy! - -Ordered - -1. Lorem ipsum dolor sit amet -2. Consectetur adipiscing elit -3. Integer molestie lorem at massa - - -1. You can use sequential numbers... -1. ...or keep all the numbers as \`1.\` - -Start numbering with offset: - -57. foo -1. bar - - -## Code - -Inline \`code\` - -Indented code - - // Some comments - line 1 of code - line 2 of code - line 3 of code - - -Block code "fences" - -\`\`\` -Sample text here... -\`\`\` - -Syntax highlighting - -\`\`\` js -var foo = function (bar) { - return bar++; -}; - -console.log(foo(5)); -\`\`\` - -## Tables - -| Option | Description | -| ------ | ----------- | -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - -Right aligned columns - -| Option | Description | -| ------:| -----------:| -| data | path to data files to supply the data that will be passed into templates. | -| engine | engine to be used for processing templates. Handlebars is the default. | -| ext | extension to be used for dest files. | - - -## Links - -[link text](http://dev.nodeca.com) - -[link with title](http://nodeca.github.io/pica/demo/ "title text!") - -Autoconverted link https://github.com/nodeca/pica (enable linkify to see) - - -## Images - -![Minion](https://octodex.github.com/images/minion.png) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat") - -Like links, Images also have a footnote style syntax - -![Alt text][id] - -With a reference later in the document defining the URL location: - -[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" -`; - -export default markdownText; \ No newline at end of file diff --git a/example/src/copyAllCheckboxPlugin.js b/example/src/copyAllCheckboxPlugin.js deleted file mode 100644 index 08e66bd5..00000000 --- a/example/src/copyAllCheckboxPlugin.js +++ /dev/null @@ -1,30 +0,0 @@ -const markdownText = ` - - -## Images - -![Minion](https://octodex.github.com/images/minion.png) -![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg) - - -+ Selected third parties include: - - Service providers assigned to carrying out your service contract when placing a booking on the company. Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at - - Service providers assigned to carrying out your service contract when placing a booking on the company. Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at - - Service providers assigned to carrying out your service contract when placing a booking on the company. Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at Ac tristique libero volutpat at - -+ Sub-lists are made by indenting 2 spaces: - - Marker character change forces new list start: - * Ac tristique libero volutpat at - + Facilisis in pretium nisl aliquet - - Nulla volutpat aliquam velit -+ Very easy! - -# Syntax __Support__ - -__Advertisement :)__ - -* [ ] unchecked -* [x] checked -`; - -export default markdownText; diff --git a/example/src/customMarkdownStyle.js b/example/src/customMarkdownStyle.js deleted file mode 100644 index 6ac353d6..00000000 --- a/example/src/customMarkdownStyle.js +++ /dev/null @@ -1,34 +0,0 @@ -import { StyleSheet } from "react-native"; - -/** - * - */ -const customMarkdownStyle = StyleSheet.create({ - view: {}, - codeBlock: { - fontFamily: "Courier", - fontWeight: "500" - }, - del: { - backgroundColor: "#000000" - }, - em: { - fontStyle: "italic" - }, - - text: { fontSize: 20 }, - strikethrough: { - textDecorationLine: "line-through", - color: "#FF0000" - }, - a: { - textDecorationLine: "underline", - color: "#FF0000" - }, - u: { - borderColor: "#000000", - borderBottomWidth: 1 - } -}); - -export default customMarkdownStyle; diff --git a/example/src/pluginRules.js b/example/src/pluginRules.js deleted file mode 100644 index cbca87f2..00000000 --- a/example/src/pluginRules.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from "react"; -import { StyleSheet, Text, View, ScrollView, Picker } from "react-native"; - -const rules = { - checkbox: (node, children, parents, style) => { - return ( - - {children} - - ); - }, - checkbox_input: (node, children, parents, style) => { - return ( - - ); - }, - label: (node, children, parents, style) => { - return {children}; - } -}; -export default rules; diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 00000000..b9567f60 --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true + } +} diff --git a/example/yarn.lock b/example/yarn.lock deleted file mode 100644 index e326522f..00000000 --- a/example/yarn.lock +++ /dev/null @@ -1,5561 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.0.0-beta.44", "@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" - dependencies: - "@babel/highlight" "7.0.0-beta.44" - -"@babel/core@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.44.tgz#90bb9e897427e7ebec2a1b857f458ff74ca28057" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/generator" "7.0.0-beta.44" - "@babel/helpers" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" - lodash "^4.2.0" - micromatch "^2.3.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@7.0.0-beta.44", "@babel/generator@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" - dependencies: - "@babel/types" "7.0.0-beta.44" - jsesc "^2.5.1" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.44.tgz#8ecf33cc5235295afcc7f160a63cab17ce7776f4" - dependencies: - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.44.tgz#0e86d393c192bc846f871f3fcf4920b08a9cbb27" - dependencies: - "@babel/helper-explode-assignable-expression" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-builder-react-jsx@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0-beta.44.tgz#52a4fd63ce92df425a4fb550c7a1a3ca30e0f234" - dependencies: - "@babel/types" "7.0.0-beta.44" - esutils "^2.0.0" - -"@babel/helper-call-delegate@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.44.tgz#e644536f8b3d2eabeecca000037cdced8e453d26" - dependencies: - "@babel/helper-hoist-variables" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-define-map@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.44.tgz#d63578a67c9654ff9f32e55bbf269c2d5f094c97" - dependencies: - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/helper-explode-assignable-expression@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.44.tgz#1f06b9f76017deac2767ee09f3021d5b209bf5cd" - dependencies: - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-function-name@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" - dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-get-function-arity@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" - dependencies: - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-hoist-variables@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.44.tgz#a1bbb2c25f9b4058e041ecc1556f096eacdbd142" - dependencies: - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-module-imports@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.44.tgz#60edc68cdf17e13eaca5be813c96127303085133" - dependencies: - "@babel/types" "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/helper-module-transforms@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.44.tgz#185dc17b37c4b9cc3daee0f0f44e74f000e21bb7" - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.44" - "@babel/helper-simple-access" "7.0.0-beta.44" - "@babel/helper-split-export-declaration" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/helper-optimise-call-expression@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.44.tgz#84ceabfb99afc1c185d15668114a697cdad7a5d0" - dependencies: - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-plugin-utils@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.44.tgz#9f590bc3ae6daa8a10b853233baa3e25d263751d" - -"@babel/helper-remap-async-to-generator@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.44.tgz#8ad8c12a57444042ca281bdb16734841425938ad" - dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.44" - "@babel/helper-wrap-function" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-replace-supers@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.44.tgz#cf18697951431f533f9d8c201390b158d4a3ee04" - dependencies: - "@babel/helper-optimise-call-expression" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-simple-access@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.44.tgz#03fb6bfc91eb0a95f6c11499153f8c663654dce5" - dependencies: - "@babel/template" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/helper-split-export-declaration@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" - dependencies: - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-wrap-function@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.44.tgz#d128718a543f313264dff7cb386957e3e465c95d" - dependencies: - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helpers@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0-beta.44.tgz#b1cc87fdc3b77351c0a4860bcd9d4ef457919bfd" - dependencies: - "@babel/template" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/highlight@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@babel/plugin-external-helpers@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0-beta.44.tgz#9ccdea7ec83623b6e580e17b639d4dfe2fd93828" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-proposal-class-properties@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0-beta.44.tgz#aff9192a883b41fdf1c73026b9105c92e931c55e" - dependencies: - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - "@babel/plugin-syntax-class-properties" "7.0.0-beta.44" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.44.tgz#b7817770cb9cf72f2e73ca6fcb83d61a87305259" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.44" - -"@babel/plugin-syntax-class-properties@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0-beta.44.tgz#1e4e67ef6d7101a3a7d2ae5f60e580cbf4b7750f" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-syntax-dynamic-import@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-beta.44.tgz#1a7d009f892bc9799dcb22ace4bd24198eef8992" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-syntax-flow@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0-beta.44.tgz#12498c9c6565e185317fcead2cb2ea6b196ce8c1" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-syntax-jsx@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0-beta.44.tgz#b3475f0e6ea797634f0ba823273d76e93727e52f" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-syntax-object-rest-spread@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.44.tgz#c37d271e4edf8a1b5d4623fb2917ba0f5a9da3b3" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-arrow-functions@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.44.tgz#718dae35046eca6938c731d1eae10c5471c17398" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-block-scoping@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.44.tgz#a7b640e112743634b9226996e58ab92cdebb4ff0" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/plugin-transform-classes@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.44.tgz#5410fcf6a9eeba3cc8e25bf0f72b43358336b534" - dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.44" - "@babel/helper-define-map" "7.0.0-beta.44" - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-optimise-call-expression" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - "@babel/helper-replace-supers" "7.0.0-beta.44" - "@babel/helper-split-export-declaration" "7.0.0-beta.44" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.44.tgz#1421b4e1a18dc3bd276d8648a12a4f8ea088c6a1" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-destructuring@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.44.tgz#57c8b40d56db45eaa39b44696818b24004306752" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-exponentiation-operator@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.44.tgz#e6a9699b5036a7a75274e1546c23414ba945a135" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-flow-strip-types@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0-beta.44.tgz#e7f5028f886f6410d9e5488a4f2fde4a28afe9d8" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - "@babel/plugin-syntax-flow" "7.0.0-beta.44" - -"@babel/plugin-transform-for-of@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.44.tgz#b157e38e74c07beacbac01c1946b8ad11dbea32c" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-function-name@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.44.tgz#8cd5986dac8a0fd0df21b79e9a20de9b2c37b4c4" - dependencies: - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-literals@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.44.tgz#8c85631ea6fd8a6eecefdb81177ed6ae3d34b195" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-modules-commonjs@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.44.tgz#864a1fef64091bd5241b0aa7d4b235fb29f60580" - dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - "@babel/helper-simple-access" "7.0.0-beta.44" - -"@babel/plugin-transform-object-assign@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.0.0-beta.44.tgz#96881dd11daf77a0fb71137921650b86b8a0e5bb" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-parameters@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.44.tgz#19eaf0b852d58168097435e33e754a00c3507fb9" - dependencies: - "@babel/helper-call-delegate" "7.0.0-beta.44" - "@babel/helper-get-function-arity" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-react-display-name@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0-beta.44.tgz#e7937554e209d72804808581c334945af238481d" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-react-jsx-source@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0-beta.44.tgz#629101210cf86fe3cfb89a4278fb8d0966bdfc81" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - "@babel/plugin-syntax-jsx" "7.0.0-beta.44" - -"@babel/plugin-transform-react-jsx@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0-beta.44.tgz#656a2582002ff1b0eea4cd01b7c8f6cbbf3990bf" - dependencies: - "@babel/helper-builder-react-jsx" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - "@babel/plugin-syntax-jsx" "7.0.0-beta.44" - -"@babel/plugin-transform-regenerator@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.44.tgz#e9a21db8fbedfd99b9e5d04ac405f7440d36b290" - dependencies: - regenerator-transform "^0.12.3" - -"@babel/plugin-transform-shorthand-properties@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.44.tgz#42e2a31aaa5edf479adaf4c2b677cd3457c99991" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-spread@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.44.tgz#94cacc3317cb8e2227b543c25b8046d7635d4114" - dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/plugin-transform-template-literals@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.44.tgz#88d4605e63a21a4354837af06371e8c51cd76d08" - dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.44" - "@babel/helper-plugin-utils" "7.0.0-beta.44" - -"@babel/register@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0-beta.44.tgz#89cce279f1444aa560f10597073d0e448482d960" - dependencies: - core-js "^2.5.3" - find-cache-dir "^1.0.0" - home-or-tmp "^3.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - pirates "^3.0.1" - source-map-support "^0.4.2" - -"@babel/template@7.0.0-beta.44", "@babel/template@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/traverse@7.0.0-beta.44", "@babel/traverse@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/generator" "7.0.0-beta.44" - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-split-export-declaration" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" - -"@babel/types@7.0.0-beta.44", "@babel/types@^7.0.0-beta": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - -abab@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -absolute-path@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" - -accepts@~1.3.3, accepts@~1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-globals@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" - dependencies: - acorn "^5.0.0" - -acorn@^5.0.0, acorn@^5.3.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^5.1.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -ansi-wrap@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - -ansi@^0.3.0, ansi@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -arch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.0.tgz#3613aa46149064b3c1f0607919bf1d4786e82889" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -art@^0.10.0: - version "0.10.2" - resolved "https://registry.yarnpkg.com/art/-/art-0.10.2.tgz#55c3738d82a3a07e0623943f070ebe86297253d9" - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4, async@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" - dependencies: - lodash "^4.14.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.2.1, aws4@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" - -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.7.2: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.16.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@22.4.3, babel-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a" - dependencies: - babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.4.3" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-external-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-istanbul@^4.1.5: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a" - -babel-plugin-react-transform@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" - dependencies: - lodash "^4.6.1" - -babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0, babel-plugin-syntax-flow@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-to-generator@6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" - dependencies: - babel-helper-remap-async-to-generator "^6.16.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.8.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@6.x, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.8.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@6.x, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-commonjs@6.x, babel-plugin-transform-es2015-modules-commonjs@^6.5.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-object-super@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@6.x, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@6.x, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@6.x: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.5.0, babel-plugin-transform-es2015-template-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@6.x: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-es3-member-expression-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es3-property-literals@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-exponentiation-operator@^6.5.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.21.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-assign@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.8.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.5.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-es2015-node@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" - dependencies: - babel-plugin-transform-es2015-destructuring "6.x" - babel-plugin-transform-es2015-function-name "6.x" - babel-plugin-transform-es2015-modules-commonjs "6.x" - babel-plugin-transform-es2015-parameters "6.x" - babel-plugin-transform-es2015-shorthand-properties "6.x" - babel-plugin-transform-es2015-spread "6.x" - babel-plugin-transform-es2015-sticky-regex "6.x" - babel-plugin-transform-es2015-unicode-regex "6.x" - semver "5.x" - -babel-preset-fbjs@^2.1.2, babel-preset-fbjs@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af" - dependencies: - babel-plugin-check-es2015-constants "^6.8.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-plugin-syntax-flow "^6.8.0" - babel-plugin-syntax-jsx "^6.8.0" - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-plugin-syntax-trailing-function-commas "^6.8.0" - babel-plugin-transform-class-properties "^6.8.0" - babel-plugin-transform-es2015-arrow-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoping "^6.8.0" - babel-plugin-transform-es2015-classes "^6.8.0" - babel-plugin-transform-es2015-computed-properties "^6.8.0" - babel-plugin-transform-es2015-destructuring "^6.8.0" - babel-plugin-transform-es2015-for-of "^6.8.0" - babel-plugin-transform-es2015-function-name "^6.8.0" - babel-plugin-transform-es2015-literals "^6.8.0" - babel-plugin-transform-es2015-modules-commonjs "^6.8.0" - babel-plugin-transform-es2015-object-super "^6.8.0" - babel-plugin-transform-es2015-parameters "^6.8.0" - babel-plugin-transform-es2015-shorthand-properties "^6.8.0" - babel-plugin-transform-es2015-spread "^6.8.0" - babel-plugin-transform-es2015-template-literals "^6.8.0" - babel-plugin-transform-es3-member-expression-literals "^6.8.0" - babel-plugin-transform-es3-property-literals "^6.8.0" - babel-plugin-transform-flow-strip-types "^6.8.0" - babel-plugin-transform-object-rest-spread "^6.8.0" - babel-plugin-transform-react-display-name "^6.8.0" - babel-plugin-transform-react-jsx "^6.8.0" - -babel-preset-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156" - dependencies: - babel-plugin-jest-hoist "^22.4.3" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-preset-react-native@4.0.0, babel-preset-react-native@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.0.tgz#3df80dd33a453888cdd33bdb87224d17a5d73959" - dependencies: - babel-plugin-check-es2015-constants "^6.5.0" - babel-plugin-react-transform "^3.0.0" - babel-plugin-syntax-async-functions "^6.5.0" - babel-plugin-syntax-class-properties "^6.5.0" - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-syntax-flow "^6.5.0" - babel-plugin-syntax-jsx "^6.5.0" - babel-plugin-syntax-trailing-function-commas "^6.5.0" - babel-plugin-transform-class-properties "^6.5.0" - babel-plugin-transform-es2015-arrow-functions "^6.5.0" - babel-plugin-transform-es2015-block-scoping "^6.5.0" - babel-plugin-transform-es2015-classes "^6.5.0" - babel-plugin-transform-es2015-computed-properties "^6.5.0" - babel-plugin-transform-es2015-destructuring "^6.5.0" - babel-plugin-transform-es2015-for-of "^6.5.0" - babel-plugin-transform-es2015-function-name "^6.5.0" - babel-plugin-transform-es2015-literals "^6.5.0" - babel-plugin-transform-es2015-modules-commonjs "^6.5.0" - babel-plugin-transform-es2015-parameters "^6.5.0" - babel-plugin-transform-es2015-shorthand-properties "^6.5.0" - babel-plugin-transform-es2015-spread "^6.5.0" - babel-plugin-transform-es2015-template-literals "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.5.0" - babel-plugin-transform-object-assign "^6.5.0" - babel-plugin-transform-object-rest-spread "^6.5.0" - babel-plugin-transform-react-display-name "^6.5.0" - babel-plugin-transform-react-jsx "^6.5.0" - babel-plugin-transform-react-jsx-source "^6.5.0" - babel-plugin-transform-regenerator "^6.5.0" - babel-template "^6.24.1" - react-transform-hmr "^1.0.4" - -babel-register@^6.24.1, babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@7.0.0-beta.44, babylon@^7.0.0-beta: - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-js@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" - -base64-js@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" - -base64-js@^1.1.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba" - dependencies: - safe-buffer "5.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" - -big-integer@^1.6.7: - version "1.6.28" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.28.tgz#8cef0fda3ccde8759c2c66efcfacc35aea658283" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -bplist-creator@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" - dependencies: - stream-buffers "~2.2.0" - -bplist-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" - dependencies: - big-integer "^1.6.7" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -browser-process-hrtime@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" - -browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - -ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -clipboardy@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" - dependencies: - arch "^2.1.0" - execa "^0.8.0" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - -clone@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.9.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -compare-versions@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" - dependencies: - mime-db ">= 1.33.0 < 2" - -compression@^1.7.1: - version "1.7.2" - resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" - dependencies: - accepts "~1.3.4" - bytes "3.0.0" - compressible "~2.0.13" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.1" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect@^3.6.5: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - -core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.3: - version "2.5.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b" - -core-util-is@1.0.2, 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" - -create-react-class@^15.6.3: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" - -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - dependencies: - cssom "0.3.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" - dependencies: - abab "^1.0.4" - whatwg-mimetype "^2.0.0" - whatwg-url "^6.4.0" - -dateformat@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0, decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - dependencies: - strip-bom "^2.0.0" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -denodeify@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" - -depd@~1.1.1, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - -domexception@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - dependencies: - webidl-conversions "^4.0.2" - -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -encodeurl@~1.0.1, encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -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" - -envinfo@^3.0.0: - version "3.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-3.11.1.tgz#45968faf5079aa797b7dcdc3b123f340d4529e1c" - dependencies: - clipboardy "^1.2.2" - glob "^7.1.2" - minimist "^1.2.0" - os-name "^2.0.1" - which "^1.2.14" - -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -errorhandler@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.0.tgz#eaba64ca5d542a311ac945f582defc336165d9f4" - dependencies: - accepts "~1.3.3" - escape-html "~1.0.3" - -es-abstract@^1.5.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-plugin-react-native-globals@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" - -eslint-plugin-react-native@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.2.1.tgz#04fcadd3285b7cd2f27146e640c941b00acc4e7e" - dependencies: - eslint-plugin-react-native-globals "^0.1.1" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -event-target-shim@^1.0.5: - version "1.1.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" - -eventemitter3@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.0.1.tgz#4ce66c3fc5b5a6b9f2245e359e1938f1ab10f960" - -exec-sh@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" - dependencies: - merge "^1.1.3" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -expect@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.4.3" - jest-get-type "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fancy-log@^1.1.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - time-stamp "^1.0.0" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -fbjs-scripts@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.2.tgz#d2ce902ec3c8bf7cea5d0daf8692661a90710f25" - dependencies: - babel-core "^6.7.2" - babel-preset-fbjs "^2.1.2" - core-js "^2.4.1" - cross-spawn "^5.1.0" - gulp-util "^3.0.4" - object-assign "^4.0.1" - semver "^5.1.0" - through2 "^2.0.0" - -fbjs@^0.8.14, fbjs@^0.8.16, fbjs@^0.8.9: - 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" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -form-data@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -gauge@~1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" - dependencies: - ansi "^0.3.0" - has-unicode "^2.0.0" - lodash.pad "^4.1.0" - lodash.padend "^4.1.0" - lodash.padstart "^4.1.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - 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" - -global@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - dependencies: - min-document "^2.19.0" - process "~0.5.1" - -globals@^11.1.0: - version "11.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -glogg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" - dependencies: - sparkles "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, 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" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gulp-util@^3.0.4: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - dependencies: - glogg "^1.0.0" - -handlebars@^4.0.3: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - dependencies: - sparkles "^1.0.0" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -home-or-tmp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb" - -hosted-git-info@^2.1.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@^0.4.17, iconv-lite@~0.4.13: - version "0.4.21" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" - dependencies: - safer-buffer "^2.1.0" - -image-size@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.2.tgz#8ee316d4298b028b965091b673d5f1537adee5b4" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -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.3, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -invariant@^2.2.0, invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -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" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.1.14: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" - dependencies: - async "^2.1.4" - compare-versions "^3.1.0" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-hook "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" - -istanbul-lib-hook@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.0" - semver "^5.3.0" - -istanbul-lib-report@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" - dependencies: - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.1.2" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-lib-source-maps@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" - dependencies: - throat "^4.0.0" - -jest-cli@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.1.14" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.4.3" - jest-config "^22.4.3" - jest-environment-jsdom "^22.4.3" - jest-get-type "^22.4.3" - jest-haste-map "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve-dependencies "^22.4.3" - jest-runner "^22.4.3" - jest-runtime "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - jest-worker "^22.4.3" - micromatch "^2.3.11" - node-notifier "^5.2.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^10.0.3" - -jest-config@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" - dependencies: - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^22.4.3" - jest-environment-node "^22.4.3" - jest-get-type "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - pretty-format "^22.4.3" - -jest-diff@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" - -jest-docblock@22.4.0: - version "22.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8" - dependencies: - detect-newline "^2.1.0" - -jest-docblock@^22.4.0, jest-docblock@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" - dependencies: - detect-newline "^2.1.0" - -jest-environment-jsdom@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - jsdom "^11.5.1" - -jest-environment-node@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - -jest-get-type@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - -jest-haste-map@22.4.2: - version "22.4.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^22.4.0" - jest-serializer "^22.4.0" - jest-worker "^22.2.2" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-haste-map@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^22.4.3" - jest-serializer "^22.4.3" - jest-worker "^22.4.3" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" - dependencies: - chalk "^2.0.1" - co "^4.6.0" - expect "^22.4.3" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" - source-map-support "^0.5.0" - -jest-leak-detector@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" - dependencies: - pretty-format "^22.4.3" - -jest-matcher-utils@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" - -jest-message-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-mock@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" - -jest-regex-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" - -jest-resolve-dependencies@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" - dependencies: - jest-regex-util "^22.4.3" - -jest-resolve@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" - dependencies: - browser-resolve "^1.11.2" - chalk "^2.0.1" - -jest-runner@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3" - dependencies: - exit "^0.1.2" - jest-config "^22.4.3" - jest-docblock "^22.4.3" - jest-haste-map "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-leak-detector "^22.4.3" - jest-message-util "^22.4.3" - jest-runtime "^22.4.3" - jest-util "^22.4.3" - jest-worker "^22.4.3" - throat "^4.0.0" - -jest-runtime@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0" - dependencies: - babel-core "^6.0.0" - babel-jest "^22.4.3" - babel-plugin-istanbul "^4.1.5" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^22.4.3" - jest-haste-map "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^10.0.3" - -jest-serializer@^22.4.0, jest-serializer@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" - -jest-snapshot@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" - dependencies: - chalk "^2.0.1" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^22.4.3" - -jest-util@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.4.3" - mkdirp "^0.5.1" - source-map "^0.6.0" - -jest-validate@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" - dependencies: - chalk "^2.0.1" - jest-config "^22.4.3" - jest-get-type "^22.4.3" - leven "^2.1.0" - pretty-format "^22.4.3" - -jest-worker@22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" - dependencies: - merge-stream "^1.0.1" - -jest-worker@^22.2.2, jest-worker@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" - dependencies: - merge-stream "^1.0.1" - -jest@22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16" - dependencies: - import-local "^1.0.0" - jest-cli "^22.4.3" - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.7.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@^11.5.1: - version "11.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.7.0.tgz#8b45b657dae90d6d2d3a5f5d1126bb7102d0a172" - dependencies: - abab "^1.0.4" - acorn "^5.3.0" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - data-urls "^1.0.0" - domexception "^1.0.0" - escodegen "^1.9.0" - html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwmatcher "^1.4.3" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.83.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.3" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.0" - ws "^4.0.0" - xml-name-validator "^3.0.0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -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-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -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" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json5@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -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" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -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" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -left-pad@^1.1.3, left-pad@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - dependencies: - lodash._root "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.pad@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" - -lodash.padend@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" - -lodash.padstart@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - -lodash@^3.5.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -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" - -lru-cache@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -macos-release@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb" - -make-dir@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" - dependencies: - pify "^3.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - dependencies: - readable-stream "^2.0.1" - -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -metro-babylon7@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-babylon7/-/metro-babylon7-0.30.2.tgz#73784a958916bf5541b6a930598b62460fc376f5" - dependencies: - babylon "^7.0.0-beta" - -metro-cache@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.30.2.tgz#1fb1ff92d3d8c596fd8cddc1635a9cb1c26e4cba" - dependencies: - jest-serializer "^22.4.0" - mkdirp "^0.5.1" - -metro-core@0.30.2, metro-core@^0.30.0: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.30.2.tgz#380ae13cceee29e5be166df7acca9f1daa19fd7e" - dependencies: - lodash.throttle "^4.1.1" - wordwrap "^1.0.0" - -metro-minify-uglify@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.30.2.tgz#7299a0376ad6340e9acf415912d54b5309702040" - dependencies: - uglify-es "^3.1.9" - -metro-resolver@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.30.2.tgz#c26847e59cdc6a8ab1fb4b92d765165ec06946dd" - dependencies: - absolute-path "^0.0.0" - -metro-source-map@0.30.2: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.30.2.tgz#4ac056642a2c521d974d42a617c8731d094365bb" - dependencies: - source-map "^0.5.6" - -metro@^0.30.0: - version "0.30.2" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.30.2.tgz#e722e0eb106530f6d5bcf8de1f50353a0732cfb3" - dependencies: - "@babel/core" "^7.0.0-beta" - "@babel/generator" "^7.0.0-beta" - "@babel/helper-remap-async-to-generator" "^7.0.0-beta" - "@babel/plugin-external-helpers" "^7.0.0-beta" - "@babel/plugin-proposal-class-properties" "^7.0.0-beta" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0-beta" - "@babel/plugin-syntax-dynamic-import" "^7.0.0-beta" - "@babel/plugin-transform-arrow-functions" "^7.0.0-beta" - "@babel/plugin-transform-block-scoping" "^7.0.0-beta" - "@babel/plugin-transform-classes" "^7.0.0-beta" - "@babel/plugin-transform-computed-properties" "^7.0.0-beta" - "@babel/plugin-transform-destructuring" "^7.0.0-beta" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0-beta" - "@babel/plugin-transform-flow-strip-types" "^7.0.0-beta" - "@babel/plugin-transform-for-of" "^7.0.0-beta" - "@babel/plugin-transform-function-name" "^7.0.0-beta" - "@babel/plugin-transform-literals" "^7.0.0-beta" - "@babel/plugin-transform-modules-commonjs" "^7.0.0-beta" - "@babel/plugin-transform-object-assign" "^7.0.0-beta" - "@babel/plugin-transform-parameters" "^7.0.0-beta" - "@babel/plugin-transform-react-display-name" "^7.0.0-beta" - "@babel/plugin-transform-react-jsx" "^7.0.0-beta" - "@babel/plugin-transform-react-jsx-source" "^7.0.0-beta" - "@babel/plugin-transform-regenerator" "^7.0.0-beta" - "@babel/plugin-transform-shorthand-properties" "^7.0.0-beta" - "@babel/plugin-transform-spread" "^7.0.0-beta" - "@babel/plugin-transform-template-literals" "^7.0.0-beta" - "@babel/register" "^7.0.0-beta" - "@babel/template" "^7.0.0-beta" - "@babel/traverse" "^7.0.0-beta" - "@babel/types" "^7.0.0-beta" - absolute-path "^0.0.0" - async "^2.4.0" - babel-core "^6.24.1" - babel-generator "^6.26.0" - babel-plugin-external-helpers "^6.22.0" - babel-plugin-react-transform "^3.0.0" - babel-plugin-transform-flow-strip-types "^6.21.0" - babel-preset-es2015-node "^6.1.1" - babel-preset-fbjs "^2.1.4" - babel-preset-react-native "^4.0.0" - babel-register "^6.24.1" - babel-template "^6.24.1" - babylon "^6.18.0" - chalk "^1.1.1" - concat-stream "^1.6.0" - connect "^3.6.5" - core-js "^2.2.2" - debug "^2.2.0" - denodeify "^1.2.1" - eventemitter3 "^3.0.0" - fbjs "^0.8.14" - fs-extra "^1.0.0" - graceful-fs "^4.1.3" - image-size "^0.6.0" - jest-docblock "22.4.0" - jest-haste-map "22.4.2" - jest-worker "22.2.2" - json-stable-stringify "^1.0.1" - json5 "^0.4.0" - left-pad "^1.1.3" - lodash.throttle "^4.1.1" - merge-stream "^1.0.1" - metro-babylon7 "0.30.2" - metro-cache "0.30.2" - metro-core "0.30.2" - metro-minify-uglify "0.30.2" - metro-resolver "0.30.2" - metro-source-map "0.30.2" - mime-types "2.1.11" - mkdirp "^0.5.1" - node-fetch "^1.3.3" - resolve "^1.5.0" - rimraf "^2.5.4" - serialize-error "^2.1.0" - source-map "^0.5.6" - temp "0.8.3" - throat "^4.1.0" - wordwrap "^1.0.0" - write-file-atomic "^1.2.0" - ws "^1.1.0" - xpipe "^1.0.5" - yargs "^9.0.0" - -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - -mime-db@~1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" - -mime-types@2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" - dependencies: - mime-db "~1.23.0" - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - dependencies: - mime-db "~1.33.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - dependencies: - dom-walk "^0.1.0" - -minimatch@^3.0.0, minimatch@^3.0.3, 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@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -"mkdirp@>=0.5 0", mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -morgan@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051" - dependencies: - basic-auth "~2.0.0" - debug "2.6.9" - depd "~1.1.1" - on-finished "~2.3.0" - on-headers "~1.0.1" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - dependencies: - duplexer2 "0.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.3.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-odd "^2.0.0" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -node-fetch@^1.0.1, node-fetch@^1.3.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" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - -node-notifier@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" - dependencies: - growly "^1.3.0" - semver "^5.4.1" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npmlog@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -nwmatcher@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" - -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - -object-assign@^4.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" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -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.3, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -opn@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" - dependencies: - object-assign "^4.0.1" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e" - dependencies: - macos-release "^1.0.0" - win-release "^1.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pirates@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-3.0.2.tgz#7e6f85413fd9161ab4e12b539b06010d85954bb9" - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -plist@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" - dependencies: - base64-js "1.1.2" - xmlbuilder "8.2.2" - xmldom "0.1.x" - -plist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" - dependencies: - base64-js "0.0.8" - util-deprecate "1.0.2" - xmlbuilder "4.0.0" - xmldom "0.1.x" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -pretty-format@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-format@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" - -private@^0.1.6, private@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - -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.5.8, prop-types@^15.6.0: - version "15.6.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -rc@^1.1.7: - version "1.2.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-clone-referenced-element@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz#2bba8c69404c5e4a944398600bcc4c941f860682" - -react-deep-force-update@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.1.tgz#bcd31478027b64b3339f108921ab520b4313dc2c" - -react-devtools-core@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.1.0.tgz#eec2e9e0e6edb77772e2bfc7d286a296f55a261a" - dependencies: - shell-quote "^1.6.1" - ws "^2.0.3" - -react-is@^16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.3.1.tgz#ee66e6d8283224a83b3030e110056798488359ba" - -react-native@0.55.2: - version "0.55.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.55.2.tgz#80d26a3f4193ebd1fd49a4859011c501b0ca3bab" - dependencies: - absolute-path "^0.0.0" - art "^0.10.0" - babel-core "^6.24.1" - babel-plugin-syntax-trailing-function-commas "^6.20.0" - babel-plugin-transform-async-to-generator "6.16.0" - babel-plugin-transform-class-properties "^6.18.0" - babel-plugin-transform-exponentiation-operator "^6.5.0" - babel-plugin-transform-flow-strip-types "^6.21.0" - babel-plugin-transform-object-rest-spread "^6.20.2" - babel-register "^6.24.1" - babel-runtime "^6.23.0" - base64-js "^1.1.2" - chalk "^1.1.1" - commander "^2.9.0" - compression "^1.7.1" - connect "^3.6.5" - create-react-class "^15.6.3" - debug "^2.2.0" - denodeify "^1.2.1" - envinfo "^3.0.0" - errorhandler "^1.5.0" - eslint-plugin-react-native "^3.2.1" - event-target-shim "^1.0.5" - fbjs "^0.8.14" - fbjs-scripts "^0.8.1" - fs-extra "^1.0.0" - glob "^7.1.1" - graceful-fs "^4.1.3" - inquirer "^3.0.6" - lodash "^4.17.5" - metro "^0.30.0" - metro-core "^0.30.0" - mime "^1.3.4" - minimist "^1.2.0" - mkdirp "^0.5.1" - morgan "^1.9.0" - node-fetch "^1.3.3" - node-notifier "^5.2.1" - npmlog "^2.0.4" - opn "^3.0.2" - optimist "^0.6.1" - plist "^1.2.0" - pretty-format "^4.2.1" - promise "^7.1.1" - prop-types "^15.5.8" - react-clone-referenced-element "^1.0.1" - react-devtools-core "3.1.0" - react-timer-mixin "^0.13.2" - regenerator-runtime "^0.11.0" - rimraf "^2.5.4" - semver "^5.0.3" - serve-static "^1.13.1" - shell-quote "1.6.1" - stacktrace-parser "^0.1.3" - whatwg-fetch "^1.0.0" - ws "^1.1.0" - xcode "^0.9.1" - xmldoc "^0.4.0" - yargs "^9.0.0" - -react-proxy@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" - dependencies: - lodash "^4.6.1" - react-deep-force-update "^1.0.0" - -react-test-renderer@16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.3.1.tgz#d9257936d8535bd40f57f3d5a84e7b0452fb17f2" - dependencies: - fbjs "^0.8.16" - object-assign "^4.1.1" - prop-types "^15.6.0" - react-is "^16.3.1" - -react-timer-mixin@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" - -react-transform-hmr@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" - dependencies: - global "^4.3.0" - react-proxy "^1.1.7" - -react@16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.3.1.tgz#4a2da433d471251c69b6033ada30e2ed1202cfd8" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" - dependencies: - util.promisify "^1.0.0" - -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regenerator-transform@^0.12.3: - version "0.12.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.3.tgz#459adfb64f6a27164ab991b7873f45ab969eca8b" - dependencies: - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" - dependencies: - lodash "^4.13.1" - -request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -request@^2.83.0: - version "2.85.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.3.2, resolve@^1.5.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, 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" - -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, 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" - -safe-buffer@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sane@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.0.tgz#6359cd676f5efd9988b264d8ce3b827dd6b27bec" - dependencies: - anymatch "^2.0.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.1.1" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -sax@~1.1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" - -"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -serialize-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" - -serve-static@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@1.6.1, shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -simple-plist@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" - dependencies: - bplist-creator "0.0.7" - bplist-parser "0.1.1" - plist "2.0.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" - dependencies: - atob "^2.0.0" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15, source-map-support@^0.4.2: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0: - version "0.5.4" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" - dependencies: - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -sparkles@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" - -spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - -stacktrace-parser@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -stealthy-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - -stream-buffers@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" - dependencies: - has-flag "^3.0.0" - -symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -temp@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - -test-exclude@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" - dependencies: - arrify "^1.0.1" - micromatch "^3.1.8" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -throat@^4.0.0, throat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - -tr46@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -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" - -uglify-es@^3.1.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -ultron@1.0.x: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" - -util-deprecate@1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -uuid@^3.0.0, uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - dependencies: - browser-process-hrtime "^0.1.2" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" - dependencies: - iconv-lite "0.4.19" - -whatwg-fetch@>=0.10.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - -whatwg-fetch@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" - -whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" - -whatwg-url@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - -win-release@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" - dependencies: - semver "^5.0.1" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write-file-atomic@^1.2.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write-file-atomic@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -ws@^1.1.0: - 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" - -ws@^2.0.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" - dependencies: - safe-buffer "~5.0.1" - ultron "~1.1.0" - -ws@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - -xcode@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" - dependencies: - pegjs "^0.10.0" - simple-plist "^0.2.1" - uuid "3.0.1" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - -xmlbuilder@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" - dependencies: - lodash "^3.5.0" - -xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - -xmldoc@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" - dependencies: - sax "~1.1.1" - -xmldom@0.1.x: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - -xpipe@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" - -xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" - -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" - dependencies: - camelcase "^4.1.0" - -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" - -yargs@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" diff --git a/export.json b/export.json deleted file mode 100644 index f0ad0de1..00000000 --- a/export.json +++ /dev/null @@ -1,7588 +0,0 @@ -[ - { - "type": "heading_open", - "tag": "h1", - "attrs": null, - "map": [ - 1, - 2 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "#", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 1, - 2 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Syntax Support", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Syntax Support", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h1", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "#", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 3, - 4 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 3, - 4 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_open", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "Advertisement :)", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_close", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "__Advertisement :)__", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 5, - 6 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 5, - 6 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "This is a text. Click ", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_open", - "tag": "a", - "attrs": [ - [ - "href", - "https://google.com" - ] - ], - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "here", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_close", - "tag": "a", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": " to open a link. Let’s add some more text to see how this behaves.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "This is a text. Click [here](https://google.com) to open a link. Let's add some more text to see how this behaves.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_open", - "tag": "ul", - "attrs": null, - "map": [ - 7, - 12 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 7, - 9 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 7, - 9 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 7, - 9 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_open", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_open", - "tag": "a", - "attrs": [ - [ - "href", - "https://nodeca.github.io/pica/demo/" - ] - ], - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 2, - "children": null, - "content": "pica", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_close", - "tag": "a", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_close", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": " - high quality and fast image", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "softbreak", - "tag": "br", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "resize in browser.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "__[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\nresize in browser.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 9, - 12 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 9, - 11 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 9, - 11 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_open", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_open", - "tag": "a", - "attrs": [ - [ - "href", - "https://github.com/nodeca/babelfish/" - ] - ], - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 2, - "children": null, - "content": "babelfish", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_close", - "tag": "a", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_close", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": " - developer friendly", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "softbreak", - "tag": "br", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "i18n with plurals support and easy syntax.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "__[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly\ni18n with plurals support and easy syntax.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_close", - "tag": "ul", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 12, - 13 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 12, - 13 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "You will like those projects!", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "You will like those projects!", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "hr", - "tag": "hr", - "attrs": null, - "map": [ - 14, - 15 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "---", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h1", - "attrs": null, - "map": [ - 16, - 17 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "#", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 16, - 17 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "h1 Heading 8-)", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "h1 Heading 8-)", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h1", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "#", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 17, - 18 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 17, - 18 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "h2 Heading", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "h2 Heading", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h3", - "attrs": null, - "map": [ - 18, - 19 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "###", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 18, - 19 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "h3 Heading", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "h3 Heading", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h3", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "###", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h4", - "attrs": null, - "map": [ - 19, - 20 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "####", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 19, - 20 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "h4 Heading", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "h4 Heading", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h4", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "####", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h5", - "attrs": null, - "map": [ - 20, - 21 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "#####", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 20, - 21 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "h5 Heading", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "h5 Heading", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h5", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "#####", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h6", - "attrs": null, - "map": [ - 21, - 22 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "######", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 21, - 22 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "h6 Heading", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "h6 Heading", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h6", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "######", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h3", - "attrs": null, - "map": [ - 24, - 25 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "###", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 24, - 25 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Horizontal Rules", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Horizontal Rules", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h3", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "###", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "hr", - "tag": "hr", - "attrs": null, - "map": [ - 26, - 27 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "___", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "hr", - "tag": "hr", - "attrs": null, - "map": [ - 28, - 29 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "---", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h3", - "attrs": null, - "map": [ - 31, - 32 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "###", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 31, - 32 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Typographic replacements", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Typographic replacements", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h3", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "###", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 33, - 34 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 33, - 34 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Enable typographer option to see result.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Enable typographer option to see result.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 35, - 36 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 35, - 36 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "© © ® ® ™ ™ § § ±", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "(c) (C) (r) (R) (tm) (TM) (p) (P) +-", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 37, - 38 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 37, - 38 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "test… test… test… test?.. test!..", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "test.. test... test..... test?..... test!....", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 39, - 40 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 39, - 40 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "!!! ??? , – —", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "!!!!!! ???? ,, -- ---", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 41, - 42 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 41, - 42 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "“Smartypants, double quotes” and ‘single quotes’", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "\"Smartypants, double quotes\" and 'single quotes'", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 44, - 45 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 44, - 45 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Emphasis", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Emphasis", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 46, - 47 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 46, - 47 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_open", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "**", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "This is bold text", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_close", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "**", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "**This is bold text**", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 48, - 49 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 48, - 49 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_open", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "This is bold text", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "strong_close", - "tag": "strong", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "__", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "__This is bold text__", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 50, - 51 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 50, - 51 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "em_open", - "tag": "em", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "*", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "This is italic text", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "em_close", - "tag": "em", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "*", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "*This is italic text*", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 52, - 53 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 52, - 53 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "em_open", - "tag": "em", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "_", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "This is italic text", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "em_close", - "tag": "em", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "_", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "_This is italic text_", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 54, - 55 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 54, - 55 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "s_open", - "tag": "s", - "attrs": null, - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "~~", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "Strikethrough", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "s_close", - "tag": "s", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "~~", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "~~Strikethrough~~", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 57, - 58 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 57, - 58 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Blockquotes", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Blockquotes", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "blockquote_open", - "tag": "blockquote", - "attrs": null, - "map": [ - 60, - 63 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": ">", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 60, - 61 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 60, - 61 - ], - "nesting": 0, - "level": 2, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Blockquotes can also be nested…", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Blockquotes can also be nested...", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "blockquote_open", - "tag": "blockquote", - "attrs": null, - "map": [ - 61, - 63 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ">", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 61, - 62 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 61, - 62 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "…by using additional greater-than signs right next to each other…", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "...by using additional greater-than signs right next to each other...", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "blockquote_open", - "tag": "blockquote", - "attrs": null, - "map": [ - 62, - 63 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": ">", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 62, - 63 - ], - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 62, - 63 - ], - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "…or with spaces between arrows.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "...or with spaces between arrows.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "blockquote_close", - "tag": "blockquote", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": ">", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "blockquote_close", - "tag": "blockquote", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ">", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "blockquote_close", - "tag": "blockquote", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": ">", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 65, - 66 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 65, - 66 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Lists", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Lists", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 67, - 68 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 67, - 68 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Unordered", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Unordered", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_open", - "tag": "ul", - "attrs": null, - "map": [ - 69, - 77 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 69, - 70 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 69, - 70 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 69, - 70 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Create a list by starting a line with ", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "code_inline", - "tag": "code", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "+", - "markup": "`", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": ", ", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "code_inline", - "tag": "code", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "-", - "markup": "`", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": ", or ", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "code_inline", - "tag": "code", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "*", - "markup": "`", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Create a list by starting a line with `+`, `-`, or `*`", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 70, - 75 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 70, - 71 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 70, - 71 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Sub-lists are made by indenting 2 spaces:", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Sub-lists are made by indenting 2 spaces:", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "bullet_list_open", - "tag": "ul", - "attrs": null, - "map": [ - 71, - 75 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 71, - 75 - ], - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 71, - 72 - ], - "nesting": 1, - "level": 4, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 71, - 72 - ], - "nesting": 0, - "level": 5, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Marker character change forces new list start:", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Marker character change forces new list start:", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 4, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "bullet_list_open", - "tag": "ul", - "attrs": null, - "map": [ - 72, - 73 - ], - "nesting": 1, - "level": 4, - "children": null, - "content": "", - "markup": "*", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 72, - 73 - ], - "nesting": 1, - "level": 5, - "children": null, - "content": "", - "markup": "*", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 72, - 73 - ], - "nesting": 1, - "level": 6, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 72, - 73 - ], - "nesting": 0, - "level": 7, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Ac tristique libero volutpat at", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Ac tristique libero volutpat at", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 6, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 5, - "children": null, - "content": "", - "markup": "*", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_close", - "tag": "ul", - "attrs": null, - "map": null, - "nesting": -1, - "level": 4, - "children": null, - "content": "", - "markup": "*", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_open", - "tag": "ul", - "attrs": null, - "map": [ - 73, - 74 - ], - "nesting": 1, - "level": 4, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 73, - 74 - ], - "nesting": 1, - "level": 5, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 73, - 74 - ], - "nesting": 1, - "level": 6, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 73, - 74 - ], - "nesting": 0, - "level": 7, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Facilisis in pretium nisl aliquet", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Facilisis in pretium nisl aliquet", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 6, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 5, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_close", - "tag": "ul", - "attrs": null, - "map": null, - "nesting": -1, - "level": 4, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_open", - "tag": "ul", - "attrs": null, - "map": [ - 74, - 75 - ], - "nesting": 1, - "level": 4, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 74, - 75 - ], - "nesting": 1, - "level": 5, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 74, - 75 - ], - "nesting": 1, - "level": 6, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 74, - 75 - ], - "nesting": 0, - "level": 7, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Nulla volutpat aliquam velit", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Nulla volutpat aliquam velit", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 6, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 5, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_close", - "tag": "ul", - "attrs": null, - "map": null, - "nesting": -1, - "level": 4, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_close", - "tag": "ul", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "-", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 75, - 77 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 75, - 76 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 75, - 76 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Very easy!", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Very easy!", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "bullet_list_close", - "tag": "ul", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "+", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 77, - 78 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 77, - 78 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Ordered", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Ordered", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "ordered_list_open", - "tag": "ol", - "attrs": null, - "map": [ - 79, - 87 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 79, - 80 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 79, - 80 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 79, - 80 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Lorem ipsum dolor sit amet", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Lorem ipsum dolor sit amet", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 80, - 81 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 80, - 81 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 80, - 81 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Consectetur adipiscing elit", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Consectetur adipiscing elit", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 81, - 84 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 81, - 82 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 81, - 82 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Integer molestie lorem at massa", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Integer molestie lorem at massa", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 84, - 85 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 84, - 85 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 84, - 85 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "You can use sequential numbers…", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "You can use sequential numbers...", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 85, - 87 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 85, - 86 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 85, - 86 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "…or keep all the numbers as ", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "code_inline", - "tag": "code", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "1.", - "markup": "`", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "...or keep all the numbers as `1.`", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "ordered_list_close", - "tag": "ol", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 87, - 88 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 87, - 88 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Start numbering with offset:", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Start numbering with offset:", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "ordered_list_open", - "tag": "ol", - "attrs": [ - [ - "start", - 57 - ] - ], - "map": [ - 89, - 93 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 89, - 90 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 89, - 90 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 89, - 90 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "foo", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "foo", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "list_item_open", - "tag": "li", - "attrs": null, - "map": [ - 90, - 93 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 90, - 91 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 90, - 91 - ], - "nesting": 0, - "level": 3, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "bar", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "bar", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": true - }, - { - "type": "list_item_close", - "tag": "li", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "ordered_list_close", - "tag": "ol", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": ".", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 93, - 94 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 93, - 94 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Code", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Code", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 95, - 96 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 95, - 96 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Inline ", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "code_inline", - "tag": "code", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "code", - "markup": "`", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Inline `code`", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 97, - 98 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 97, - 98 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Indented code", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Indented code", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "code_block", - "tag": "code", - "attrs": null, - "map": [ - 99, - 103 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "// Some comments\nline 1 of code\nline 2 of code\nline 3 of code\n", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 105, - 106 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 105, - 106 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Block code “fences”", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Block code \"fences\"", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "fence", - "tag": "code", - "attrs": null, - "map": [ - 107, - 110 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "Sample text here...\n", - "markup": "```", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 111, - 112 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 111, - 112 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Syntax highlighting", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Syntax highlighting", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "fence", - "tag": "code", - "attrs": null, - "map": [ - 113, - 120 - ], - "nesting": 0, - "level": 0, - "children": null, - "content": "var foo = function (bar) {\n\treturn bar++;\n};\n\nconsole.log(foo(5));\n", - "markup": "```", - "info": " js", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 121, - 122 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 121, - 122 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Tables", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Tables", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "table_open", - "tag": "table", - "attrs": null, - "map": [ - 123, - 128 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "thead_open", - "tag": "thead", - "attrs": null, - "map": [ - 123, - 124 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": [ - 123, - 124 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_open", - "tag": "th", - "attrs": null, - "map": [ - 123, - 124 - ], - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 123, - 124 - ], - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Option", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Option", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_close", - "tag": "th", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_open", - "tag": "th", - "attrs": null, - "map": [ - 123, - 124 - ], - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 123, - 124 - ], - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Description", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Description", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_close", - "tag": "th", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "thead_close", - "tag": "thead", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tbody_open", - "tag": "tbody", - "attrs": null, - "map": [ - 125, - 128 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": null, - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "data", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "data", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": null, - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "path to data files to supply the data that will be passed into templates.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "path to data files to supply the data that will be passed into templates.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": null, - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "engine", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "engine", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": null, - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "engine to be used for processing templates. Handlebars is the default.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "engine to be used for processing templates. Handlebars is the default.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": null, - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "ext", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "ext", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": null, - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "extension to be used for dest files.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "extension to be used for dest files.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tbody_close", - "tag": "tbody", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "table_close", - "tag": "table", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 129, - 130 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 129, - 130 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Right aligned columns", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Right aligned columns", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "table_open", - "tag": "table", - "attrs": null, - "map": [ - 131, - 136 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "thead_open", - "tag": "thead", - "attrs": null, - "map": [ - 131, - 132 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": [ - 131, - 132 - ], - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_open", - "tag": "th", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": [ - 131, - 132 - ], - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 131, - 132 - ], - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Option", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Option", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_close", - "tag": "th", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_open", - "tag": "th", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": [ - 131, - 132 - ], - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 131, - 132 - ], - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Description", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Description", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "th_close", - "tag": "th", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "thead_close", - "tag": "thead", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tbody_open", - "tag": "tbody", - "attrs": null, - "map": [ - 133, - 136 - ], - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "data", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "data", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "path to data files to supply the data that will be passed into templates.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "path to data files to supply the data that will be passed into templates.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "engine", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "engine", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "engine to be used for processing templates. Handlebars is the default.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "engine to be used for processing templates. Handlebars is the default.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_open", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": 1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "ext", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "ext", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_open", - "tag": "td", - "attrs": [ - [ - "style", - "text-align:right" - ] - ], - "map": null, - "nesting": 1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 4, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "extension to be used for dest files.", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "extension to be used for dest files.", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "td_close", - "tag": "td", - "attrs": null, - "map": null, - "nesting": -1, - "level": 3, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tr_close", - "tag": "tr", - "attrs": null, - "map": null, - "nesting": -1, - "level": 2, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "tbody_close", - "tag": "tbody", - "attrs": null, - "map": null, - "nesting": -1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "table_close", - "tag": "table", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 138, - 139 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 138, - 139 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Links", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Links", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 140, - 141 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 140, - 141 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "link_open", - "tag": "a", - "attrs": [ - [ - "href", - "http://dev.nodeca.com" - ] - ], - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "link text", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_close", - "tag": "a", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "[link text](http://dev.nodeca.com)", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 142, - 143 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 142, - 143 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "link_open", - "tag": "a", - "attrs": [ - [ - "href", - "http://nodeca.github.io/pica/demo/" - ], - [ - "title", - "title text!" - ] - ], - "map": null, - "nesting": 1, - "level": 1, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 1, - "children": null, - "content": "link with title", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "link_close", - "tag": "a", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "[link with title](http://nodeca.github.io/pica/demo/ \"title text!\")", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 144, - 145 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 144, - 145 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Autoconverted link https://github.com/nodeca/pica (enable linkify to see)", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Autoconverted link https://github.com/nodeca/pica (enable linkify to see)", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_open", - "tag": "h2", - "attrs": null, - "map": [ - 147, - 148 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 147, - 148 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Images", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Images", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "heading_close", - "tag": "h2", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "##", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 149, - 151 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 149, - 151 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "image", - "tag": "img", - "attrs": [ - [ - "src", - "https://octodex.github.com/images/minion.png" - ], - [ - "alt", - "" - ] - ], - "map": null, - "nesting": 0, - "level": 0, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Minion", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Minion", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "softbreak", - "tag": "br", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - }, - { - "type": "image", - "tag": "img", - "attrs": [ - [ - "src", - "https://octodex.github.com/images/stormtroopocat.jpg" - ], - [ - "alt", - "" - ], - [ - "title", - "The Stormtroopocat" - ] - ], - "map": null, - "nesting": 0, - "level": 0, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Stormtroopocat", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Stormtroopocat", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "![Minion](https://octodex.github.com/images/minion.png)\n![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg \"The Stormtroopocat\")", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 152, - 153 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 152, - 153 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Like links, Images also have a footnote style syntax", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Like links, Images also have a footnote style syntax", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 154, - 155 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 154, - 155 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "image", - "tag": "img", - "attrs": [ - [ - "src", - "https://octodex.github.com/images/dojocat.jpg" - ], - [ - "alt", - "" - ], - [ - "title", - "The Dojocat" - ] - ], - "map": null, - "nesting": 0, - "level": 0, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "Alt text", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "Alt text", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "![Alt text][id]", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_open", - "tag": "p", - "attrs": null, - "map": [ - 156, - 157 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "inline", - "tag": "", - "attrs": null, - "map": [ - 156, - 157 - ], - "nesting": 0, - "level": 1, - "children": [ - { - "type": "text", - "tag": "", - "attrs": null, - "map": null, - "nesting": 0, - "level": 0, - "children": null, - "content": "With a reference later in the document defining the URL location:", - "markup": "", - "info": "", - "meta": null, - "block": false, - "hidden": false - } - ], - "content": "With a reference later in the document defining the URL location:", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - }, - { - "type": "paragraph_close", - "tag": "p", - "attrs": null, - "map": null, - "nesting": -1, - "level": 0, - "children": null, - "content": "", - "markup": "", - "info": "", - "meta": null, - "block": true, - "hidden": false - } -] \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..b4507e56 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,14 @@ +module.exports = { + preset: 'react-native', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + transform: { + '^.+\\.(ts|tsx)$': 'babel-jest', + '^.+\\.(js|jsx)$': 'babel-jest', + }, + testMatch: ['**/__tests__/**/*.test.(ts|tsx)'], + collectCoverageFrom: [ + 'src/**/*.{ts,tsx}', + '!src/**/*.d.ts', + '!src/__tests__/**', + ], +}; diff --git a/package.json b/package.json index 06e2535f..dcbac3a1 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,24 @@ { "name": "react-native-markdown-renderer", - "version": "3.2.8", + "version": "4.0.0-alpha.0", "description": "Markdown renderer for react-native, with CommonMark spec support + adds syntax extensions & sugar (URL autolinking, typographer).", - "main": "src/index.js", - "types": "src/index.d.ts", - "scripts": {}, + "source": "src/index.tsx", + "main": "lib/commonjs/index.js", + "module": "lib/module/index.js", + "types": "lib/typescript/index.d.ts", + "files": [ + "src", + "lib", + "!**/__tests__" + ], + "scripts": { + "build": "bob build", + "clean": "rm -rf lib", + "lint": "eslint src --ext .ts,.tsx", + "typecheck": "tsc --noEmit", + "test": "jest", + "prepare": "bob build" + }, "repository": { "type": "git", "url": "git+https://github.com/mientjan/react-native-markdown-renderer.git" @@ -15,7 +29,8 @@ "native", "markdown", "commonmark", - "markdown-it" + "markdown-it", + "typescript" ], "author": "Mient-jan Stelling", "license": "MIT", @@ -24,18 +39,45 @@ }, "homepage": "https://github.com/mientjan/react-native-markdown-renderer#readme", "dependencies": { - "@types/markdown-it": "^0.0.4", - "@types/react-native": ">=0.50.0", - "markdown-it": "^8.4.0", - "prop-types": "^15.5.10", - "react-native-fit-image": "^1.5.2" + "markdown-it": "^14.0.0" }, "peerDependencies": { - "react": "^16.2.0", - "react-native": "^0.50.4" + "react": ">=18.0.0", + "react-native": ">=0.73.0" }, "devDependencies": { - "chokidar": "^2.0.0", - "fs-extra": "^5.0.0" + "@react-native/babel-preset": "^0.76.0", + "@testing-library/react-native": "^12.4.0", + "@types/jest": "^29.5.0", + "@types/markdown-it": "^14.0.0", + "@types/react": "^18.2.0", + "@types/react-native": "^0.73.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react-hooks": "^4.6.0", + "jest": "^29.7.0", + "prettier": "^3.2.0", + "react": "18.2.0", + "react-native": "0.73.11", + "react-native-builder-bob": "^0.23.0", + "react-test-renderer": "18.2.0", + "typescript": "^5.4.0" + }, + "react-native-builder-bob": { + "source": "src", + "output": "lib", + "targets": [ + "commonjs", + "module", + [ + "typescript", + { + "project": "tsconfig.build.json" + } + ] + ] } } diff --git a/src/__tests__/AstRenderer.test.tsx b/src/__tests__/AstRenderer.test.tsx new file mode 100644 index 00000000..9359f854 --- /dev/null +++ b/src/__tests__/AstRenderer.test.tsx @@ -0,0 +1,105 @@ +import React from 'react'; +import { create } from 'react-test-renderer'; +import AstRenderer, { rootRenderRule } from '../lib/AstRenderer'; +import type { ASTNode, MarkdownStyles } from '../types'; + +const mockStyles: MarkdownStyles = { + root: { flex: 1 }, + text: {}, + strong: { fontWeight: 'bold' }, +}; + +function makeNode(overrides: Partial = {}): ASTNode { + return { + type: 'text', + sourceType: 'text', + sourceInfo: '', + sourceMeta: null, + block: false, + markup: '', + key: 'test-key-1', + content: 'hello', + tokenIndex: 0, + index: 0, + attributes: {}, + children: [], + ...overrides, + }; +} + +describe('rootRenderRule', () => { + it('wraps children in a View with styles.root', () => { + const tree = create(rootRenderRule([React.createElement('Text', { key: '1' }, 'child')], mockStyles)); + const root = tree.toJSON() as any; + expect(root.type).toBe('View'); + }); +}); + +describe('AstRenderer', () => { + const textRule = jest.fn((node: ASTNode, _children: any[], _parent: any[], _styles: any) => { + return React.createElement('Text', { key: node.key }, node.content); + }); + + const strongRule = jest.fn((node: ASTNode, children: any[], parent: any[], styles: any) => { + return React.createElement('Text', { key: node.key, style: styles.strong }, children); + }); + + const rules = { + text: textRule, + strong: strongRule, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('getRenderFunction returns the rule for a known type', () => { + const renderer = new AstRenderer(rules, mockStyles); + expect(renderer.getRenderFunction('text')).toBe(textRule); + }); + + it('getRenderFunction throws for an unknown type', () => { + const renderer = new AstRenderer(rules, mockStyles); + expect(() => renderer.getRenderFunction('unknown_type')).toThrow('unknown_type renderRule not defined'); + }); + + it('renderNode calls the correct render function for the node type', () => { + const renderer = new AstRenderer(rules, mockStyles); + const node = makeNode({ type: 'text', content: 'hello' }); + renderer.renderNode(node, []); + expect(textRule).toHaveBeenCalledTimes(1); + }); + + it('renderNode passes (node, children, parentNodes, styles) to the render function', () => { + const renderer = new AstRenderer(rules, mockStyles); + const node = makeNode({ type: 'text', content: 'test' }); + renderer.renderNode(node, []); + expect(textRule).toHaveBeenCalledWith(node, [], [], mockStyles); + }); + + it('renderNode for text nodes passes empty children array', () => { + const renderer = new AstRenderer(rules, mockStyles); + const node = makeNode({ type: 'text', content: 'test' }); + renderer.renderNode(node, []); + expect(textRule).toHaveBeenCalledWith(node, [], expect.any(Array), mockStyles); + }); + + it('renderNode recursively renders child nodes', () => { + const renderer = new AstRenderer(rules, mockStyles); + const childNode = makeNode({ type: 'text', key: 'child-1', content: 'child text' }); + const parentNode = makeNode({ type: 'strong', key: 'parent-1', children: [childNode] }); + renderer.renderNode(parentNode, []); + expect(strongRule).toHaveBeenCalledTimes(1); + expect(textRule).toHaveBeenCalledTimes(1); + }); + + it('render maps all top-level nodes and wraps in rootRenderRule', () => { + const renderer = new AstRenderer(rules, mockStyles); + const node = makeNode({ type: 'text', content: 'hello' }); + const result = renderer.render([node]); + const tree = create(result); + const root = tree.toJSON() as any; + expect(root.type).toBe('View'); + expect(root.children).toHaveLength(1); + }); +}); diff --git a/src/__tests__/Markdown.test.tsx b/src/__tests__/Markdown.test.tsx new file mode 100644 index 00000000..9c7e2dc1 --- /dev/null +++ b/src/__tests__/Markdown.test.tsx @@ -0,0 +1,183 @@ +import React from 'react'; +import { create, act } from 'react-test-renderer'; +import Markdown from '../index'; +import AstRenderer from '../lib/AstRenderer'; +import renderRules from '../lib/renderRules'; +import { styles } from '../lib/styles'; +import MarkdownIt from 'markdown-it'; +import PluginContainer from '../lib/plugin/PluginContainer'; +import type { ASTNode } from '../types'; +import { Text, View } from 'react-native'; + +describe('Markdown', () => { + it('renders a simple markdown string without crashing', () => { + const tree = create({'# Hello'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders with children as string array', () => { + const tree = create({['# Hello', '\nworld']}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders headings', () => { + const tree = create({'# H1\n## H2\n### H3'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders paragraphs', () => { + const tree = create({'This is a paragraph.'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders bold text', () => { + const tree = create({'**bold text**'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders italic text', () => { + const tree = create({'*italic text*'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders links', () => { + const tree = create({'[link](https://example.com)'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders images', () => { + const tree = create({'![alt](https://example.com/img.png)'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders unordered lists', () => { + const tree = create({'- item 1\n- item 2'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders ordered lists', () => { + const tree = create({'1. item 1\n2. item 2'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders code blocks', () => { + const tree = create({'```\ncode\n```'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders blockquotes', () => { + const tree = create({'> blockquote'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders tables', () => { + const tree = create({'| A | B |\n|---|---|\n| 1 | 2 |'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders horizontal rules', () => { + const tree = create({'---'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('applies custom rules override', () => { + const customRules = { + heading1: (node: ASTNode) => ( + + CUSTOM H1 + + ), + }; + const tree = create({'# Hello'}); + const json = JSON.stringify(tree.toJSON()); + expect(json).toContain('CUSTOM H1'); + }); + + it('applies custom style override', () => { + const customStyle = { + heading1: { fontSize: 99 }, + }; + const tree = create({'# Hello'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders with custom renderer function', () => { + const customRenderer = (_nodes: ASTNode[]) => ( + + Custom Render + + ); + const tree = create({'# Hello'}); + const json = JSON.stringify(tree.toJSON()); + expect(json).toContain('Custom Render'); + }); + + it('renders with custom renderer as AstRenderer instance', () => { + const renderer = new AstRenderer(renderRules, styles); + const tree = create({'# Hello'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders with custom markdownit instance', () => { + const md = MarkdownIt({ typographer: false }); + const tree = create({'# Hello'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('renders with plugins array', () => { + // Simple no-op plugin + const noopPlugin = (_md: MarkdownIt) => {}; + const container = new PluginContainer(noopPlugin); + const tree = create({'# Hello'}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('logs warning when both renderer and rules are provided', () => { + const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + const customRenderer = (_nodes: ASTNode[]) => ; + create( + null }}> + {'# Hello'} + + ); + expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('renderer and rules')); + warnSpy.mockRestore(); + }); + + it('logs warning when both renderer and style are provided', () => { + const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + const customRenderer = (_nodes: ASTNode[]) => ; + create( + + {'# Hello'} + + ); + expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('renderer and style')); + warnSpy.mockRestore(); + }); + + it('handles empty string input', () => { + const tree = create({''}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('handles whitespace-only input', () => { + const tree = create({' '}); + expect(tree.toJSON()).toBeTruthy(); + }); + + it('re-renders when children prop changes', () => { + let tree: ReturnType; + act(() => { + tree = create({'# First'}); + }); + const first = JSON.stringify(tree!.toJSON()); + + act(() => { + tree!.update({'# Second'}); + }); + const second = JSON.stringify(tree!.toJSON()); + + expect(first).not.toBe(second); + }); +}); diff --git a/src/__tests__/__snapshots__/integration.test.tsx.snap b/src/__tests__/__snapshots__/integration.test.tsx.snap new file mode 100644 index 00000000..0156f7b5 --- /dev/null +++ b/src/__tests__/__snapshots__/integration.test.tsx.snap @@ -0,0 +1,2304 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = ` + + + + + Heading 1 + + + + + + + Heading 2 + + + + + + + Heading 3 + + + + + + + This is a + + + + bold + + + + and + + + + italic + + + + and + + + + strikethrough + + + + paragraph. + + + + + + + + A link + + + + + + + + + + + · + + + + + + Unordered item 1 + + + + + + + + · + + + + + + Unordered item 2 + + + + + + + + + + 1 + . + + + + + + Ordered item 1 + + + + + + + + 2 + . + + + + + + Ordered item 2 + + + + + + + + + + inline code + + + + + code block + + + + + + + Blockquote text + + + + + + + + + + + Header A + + + + + + + Header B + + + + + + + + + + + Cell 1 + + + + + + + Cell 2 + + + + + + + + + + + Hard line break follows + + + + + + + next line + + + + +`; + +exports[`Integration renders with a custom render rule override 1`] = ` + + + + CUSTOM: + + + + + + Heading 2 + + + + + + + Heading 3 + + + + + + + This is a + + + + bold + + + + and + + + + italic + + + + and + + + + strikethrough + + + + paragraph. + + + + + + + + A link + + + + + + + + + + + · + + + + + + Unordered item 1 + + + + + + + + · + + + + + + Unordered item 2 + + + + + + + + + + 1 + . + + + + + + Ordered item 1 + + + + + + + + 2 + . + + + + + + Ordered item 2 + + + + + + + + + + inline code + + + + + code block + + + + + + + Blockquote text + + + + + + + + + + + Header A + + + + + + + Header B + + + + + + + + + + + Cell 1 + + + + + + + Cell 2 + + + + + + + + + + + Hard line break follows + + + + + + + next line + + + + +`; + +exports[`Integration renders with custom styles applied 1`] = ` + + + + + Heading 1 + + + + + + + Heading 2 + + + + + + + Heading 3 + + + + + + + This is a + + + + bold + + + + and + + + + italic + + + + and + + + + strikethrough + + + + paragraph. + + + + + + + + A link + + + + + + + + + + + · + + + + + + Unordered item 1 + + + + + + + + · + + + + + + Unordered item 2 + + + + + + + + + + 1 + . + + + + + + Ordered item 1 + + + + + + + + 2 + . + + + + + + Ordered item 2 + + + + + + + + + + inline code + + + + + code block + + + + + + + Blockquote text + + + + + + + + + + + Header A + + + + + + + Header B + + + + + + + + + + + Cell 1 + + + + + + + Cell 2 + + + + + + + + + + + Hard line break follows + + + + + + + next line + + + + +`; diff --git a/src/__tests__/integration.test.tsx b/src/__tests__/integration.test.tsx new file mode 100644 index 00000000..6a4dc91a --- /dev/null +++ b/src/__tests__/integration.test.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import { create } from 'react-test-renderer'; +import Markdown from '../index'; +import type { ASTNode } from '../types'; +import { View, Text } from 'react-native'; + +const comprehensiveMarkdown = `# Heading 1 + +## Heading 2 + +### Heading 3 + +This is a **bold** and *italic* and ~~strikethrough~~ paragraph. + +[A link](https://example.com) + +![An image](https://example.com/image.png) + +- Unordered item 1 +- Unordered item 2 + +1. Ordered item 1 +2. Ordered item 2 + +\`inline code\` + +\`\`\` +code block +\`\`\` + +> Blockquote text + +| Header A | Header B | +|----------|----------| +| Cell 1 | Cell 2 | + +--- + +Hard line break follows +next line +`; + +describe('Integration', () => { + it('renders a comprehensive markdown document (snapshot)', () => { + const tree = create({comprehensiveMarkdown}); + expect(tree.toJSON()).toMatchSnapshot(); + }); + + it('renders with custom styles applied', () => { + const customStyle = { + heading1: { fontSize: 48, color: 'red' }, + strong: { color: 'blue' }, + }; + const tree = create({comprehensiveMarkdown}); + expect(tree.toJSON()).toMatchSnapshot(); + }); + + it('renders with a custom render rule override', () => { + const customRules = { + heading1: (node: ASTNode) => ( + + CUSTOM: {node.content} + + ), + }; + const tree = create({comprehensiveMarkdown}); + expect(tree.toJSON()).toMatchSnapshot(); + }); + + it('renders simple paragraph text correctly', () => { + const tree = create({'Hello world'}); + const json = JSON.stringify(tree.toJSON()); + expect(json).toContain('Hello world'); + }); + + it('renders multiple elements without errors', () => { + const markdown = '# Title\n\nParagraph with **bold** and *italic*.\n\n- List item\n\n> Quote'; + const tree = create({markdown}); + expect(tree.toJSON()).toBeTruthy(); + }); +}); diff --git a/src/__tests__/parser.test.ts b/src/__tests__/parser.test.ts new file mode 100644 index 00000000..34d62bf1 --- /dev/null +++ b/src/__tests__/parser.test.ts @@ -0,0 +1,50 @@ +import MarkdownIt from 'markdown-it'; +import parser from '../lib/parser'; +import type { ASTNode } from '../types'; + +const md = MarkdownIt({ typographer: true }); + +describe('parser', () => { + it('parses "# Hello" and calls renderer with AST containing a heading1 node', () => { + const renderer = jest.fn((_nodes: ASTNode[]) => { + return null as any; + }); + parser('# Hello', renderer, md); + expect(renderer).toHaveBeenCalledTimes(1); + const nodes = renderer.mock.calls[0][0] as ASTNode[]; + const headingNode = nodes.find((n) => n.type === 'heading1'); + expect(headingNode).toBeDefined(); + }); + + it('parses "**bold**" and produces strong node', () => { + const renderer = jest.fn((_nodes: ASTNode[]) => null as any); + parser('**bold**', renderer, md); + const nodes = renderer.mock.calls[0][0] as ASTNode[]; + // The bold text should be nested inside paragraph > textgroup > strong + function findType(nodes: ASTNode[], type: string): ASTNode | undefined { + for (const node of nodes) { + if (node.type === type) return node; + const found = findType(node.children, type); + if (found) return found; + } + return undefined; + } + expect(findType(nodes, 'strong')).toBeDefined(); + }); + + it('parses empty string and calls renderer with empty array', () => { + const renderer = jest.fn((_nodes: ASTNode[]) => null as any); + parser('', renderer, md); + expect(renderer).toHaveBeenCalledWith([]); + }); + + it('tokens flow through the full pipeline', () => { + const renderer = jest.fn((_nodes: ASTNode[]) => null as any); + parser('Hello world', renderer, md); + expect(renderer).toHaveBeenCalledTimes(1); + const nodes = renderer.mock.calls[0][0] as ASTNode[]; + expect(nodes.length).toBeGreaterThan(0); + // Should have paragraph node + expect(nodes.some((n) => n.type === 'paragraph')).toBe(true); + }); +}); diff --git a/src/__tests__/plugin/PluginContainer.test.ts b/src/__tests__/plugin/PluginContainer.test.ts new file mode 100644 index 00000000..368e1d18 --- /dev/null +++ b/src/__tests__/plugin/PluginContainer.test.ts @@ -0,0 +1,28 @@ +import PluginContainer from '../../lib/plugin/PluginContainer'; + +describe('PluginContainer', () => { + it('stores plugin and options from constructor', () => { + const plugin = () => {}; + const container = new PluginContainer(plugin, 'opt1', 'opt2'); + expect(container.plugin).toBe(plugin); + expect(container.options).toEqual(['opt1', 'opt2']); + }); + + it('toArray() returns [plugin, ...options]', () => { + const plugin = () => {}; + const container = new PluginContainer(plugin, 'opt1', 'opt2'); + expect(container.toArray()).toEqual([plugin, 'opt1', 'opt2']); + }); + + it('works with no options', () => { + const plugin = () => {}; + const container = new PluginContainer(plugin); + expect(container.toArray()).toEqual([plugin]); + }); + + it('works with multiple options', () => { + const plugin = () => {}; + const container = new PluginContainer(plugin, { a: 1 }, { b: 2 }, 'third'); + expect(container.toArray()).toEqual([plugin, { a: 1 }, { b: 2 }, 'third']); + }); +}); diff --git a/src/__tests__/renderRules.test.tsx b/src/__tests__/renderRules.test.tsx new file mode 100644 index 00000000..d470a1c3 --- /dev/null +++ b/src/__tests__/renderRules.test.tsx @@ -0,0 +1,148 @@ +import React from 'react'; +import { create } from 'react-test-renderer'; +import renderRules from '../lib/renderRules'; +import type { ASTNode, MarkdownStyles } from '../types'; + +const mockStyles: MarkdownStyles = { + text: {}, + strong: { fontWeight: 'bold' }, + link: { textDecorationLine: 'underline' }, + image: { flex: 1 }, + codeBlock: {}, + codeInline: {}, + em: { fontStyle: 'italic' }, + headingContainer: {}, + heading: {}, + heading1: { fontSize: 32 }, + heading2: { fontSize: 24 }, + heading3: { fontSize: 18 }, + heading4: { fontSize: 16 }, + heading5: { fontSize: 13 }, + heading6: { fontSize: 11 }, + paragraph: {}, + hardbreak: {}, + blockquote: {}, + list: {}, + listUnordered: {}, + listOrdered: {}, + listItem: {}, + listUnorderedItem: {}, + listUnorderedItemIcon: {}, + listOrderedItem: {}, + listOrderedItemIcon: {}, + table: {}, + tableHeader: {}, + tableHeaderCell: {}, + tableRow: {}, + tableRowCell: {}, + hr: {}, + strikethrough: {}, + blocklink: {}, + pre: {}, +}; + +function makeNode(overrides: Partial = {}): ASTNode { + return { + type: 'text', + sourceType: 'text', + sourceInfo: '', + sourceMeta: null, + block: false, + markup: '', + key: 'test-key', + content: 'test content', + tokenIndex: 0, + index: 0, + attributes: {}, + children: [], + ...overrides, + }; +} + +describe('renderRules', () => { + const expectedRuleKeys = [ + 'text', + 'strong', + 'em', + 'link', + 'image', + 'heading1', + 'heading2', + 'heading3', + 'heading4', + 'heading5', + 'heading6', + 'paragraph', + 'blockquote', + 'code_inline', + 'fence', + 'code_block', + 'list_item', + 'bullet_list', + 'ordered_list', + 'table', + 'thead', + 'tbody', + 'tr', + 'td', + 'th', + 'hr', + 'softbreak', + 'hardbreak', + 'textgroup', + 'blocklink', + 'unknown', + 'inline', + 'span', + 's', + 'pre', + ]; + + it('has all expected rule keys', () => { + for (const key of expectedRuleKeys) { + expect(renderRules).toHaveProperty(key); + } + }); + + it('each rule is a function', () => { + for (const key of expectedRuleKeys) { + expect(typeof renderRules[key]).toBe('function'); + } + }); + + it('text rule renders a Text with content', () => { + const node = makeNode({ type: 'text', content: 'hello world' }); + const result = renderRules.text(node, [], [], mockStyles); + const tree = create(result as React.ReactElement); + const json = tree.toJSON() as any; + expect(json.type).toBe('Text'); + expect(json.children).toContain('hello world'); + }); + + it('strong rule renders a Text with bold style', () => { + const node = makeNode({ type: 'strong', key: 'strong-1' }); + const result = renderRules.strong(node, ['bold text'], [], mockStyles); + const tree = create(result as React.ReactElement); + const json = tree.toJSON() as any; + expect(json.type).toBe('Text'); + expect(json.props.style).toEqual({ fontWeight: 'bold' }); + }); + + it('link rule renders a Text with onPress handler', () => { + const node = makeNode({ type: 'link', key: 'link-1', attributes: { href: 'https://example.com' } }); + const result = renderRules.link(node, ['click me'], [], mockStyles); + const tree = create(result as React.ReactElement); + const json = tree.toJSON() as any; + expect(json.type).toBe('Text'); + expect(json.props.onPress).toBeDefined(); + }); + + it('image rule renders an Image with source uri from attributes', () => { + const node = makeNode({ type: 'image', key: 'img-1', attributes: { src: 'https://example.com/img.png' } }); + const result = renderRules.image(node, [], [], mockStyles); + const tree = create(result as React.ReactElement); + const json = tree.toJSON() as any; + expect(json.type).toBe('Image'); + expect(json.props.source).toEqual({ uri: 'https://example.com/img.png' }); + }); +}); diff --git a/src/__tests__/util/Token.test.ts b/src/__tests__/util/Token.test.ts new file mode 100644 index 00000000..c7d9283c --- /dev/null +++ b/src/__tests__/util/Token.test.ts @@ -0,0 +1,26 @@ +import Token from '../../lib/util/Token'; + +describe('Token', () => { + it('constructs with type and defaults', () => { + const token = new Token('text'); + expect(token.type).toBe('text'); + expect(token.nesting).toBe(0); + expect(token.children).toBeNull(); + expect(token.block).toBe(false); + }); + + it('constructs with all args specified', () => { + const children = [new Token('child')]; + const token = new Token('heading', 1, children, true); + expect(token.type).toBe('heading'); + expect(token.nesting).toBe(1); + expect(token.children).toBe(children); + expect(token.block).toBe(true); + }); + + it('stores properties correctly', () => { + const token = new Token('textgroup', -1); + expect(token.type).toBe('textgroup'); + expect(token.nesting).toBe(-1); + }); +}); diff --git a/src/__tests__/util/applyStyle.test.tsx b/src/__tests__/util/applyStyle.test.tsx new file mode 100644 index 00000000..723e7562 --- /dev/null +++ b/src/__tests__/util/applyStyle.test.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import applyStyle from '../../lib/util/applyStyle'; + +describe('applyStyle', () => { + const TextComponent: React.FC<{ style?: unknown; children?: React.ReactNode }> & { displayName?: string } = ({ + children, + ...props + }) => React.createElement('Text', props, children); + TextComponent.displayName = 'Text'; + + const ViewComponent: React.FC<{ children?: React.ReactNode }> & { displayName?: string } = ({ children }) => + React.createElement('View', null, children); + ViewComponent.displayName = 'View'; + + it('applies style to children whose type.displayName matches', () => { + const children = [React.createElement(TextComponent, { key: '1', style: { color: 'red' } }, 'hello')]; + const result = applyStyle(children, { fontWeight: 'bold' }, 'Text'); + expect(result).toHaveLength(1); + // The resulting element should have merged styles + expect(result[0].props.style).toEqual(expect.arrayContaining([{ color: 'red' }, { fontWeight: 'bold' }])); + }); + + it('does not modify children whose type.displayName does not match', () => { + const children = [React.createElement(ViewComponent, { key: '1' }, 'hello')]; + const result = applyStyle(children, { fontWeight: 'bold' }, 'Text'); + expect(result).toHaveLength(1); + expect(result[0].type).toBe(ViewComponent); + }); + + it('normalizes single style to array', () => { + const children = [React.createElement(TextComponent, { key: '1', style: { color: 'red' } }, 'hello')]; + const singleStyle = { fontWeight: 'bold' }; + const result = applyStyle(children, singleStyle, 'Text'); + expect(result[0].props.style).toEqual(expect.arrayContaining([{ fontWeight: 'bold' }])); + }); +}); diff --git a/src/__tests__/util/cleanupTokens.test.ts b/src/__tests__/util/cleanupTokens.test.ts new file mode 100644 index 00000000..721a85c2 --- /dev/null +++ b/src/__tests__/util/cleanupTokens.test.ts @@ -0,0 +1,46 @@ +import { cleanupTokens } from '../../lib/util/cleanupTokens'; + +describe('cleanupTokens', () => { + it('maps token types via getTokenTypeByToken', () => { + const tokens = [{ type: 'paragraph_open', block: true, nesting: 1, children: null }]; + const result = cleanupTokens(tokens as any); + expect(result[0].type).toBe('paragraph'); + }); + + it('sets block: true on image tokens', () => { + const tokens = [{ type: 'image', block: false, nesting: 0, children: null }]; + const result = cleanupTokens(tokens as any); + expect(result[0].block).toBe(true); + }); + + it('sets block: true on hardbreak tokens', () => { + const tokens = [{ type: 'hardbreak', block: false, nesting: 0, children: null }]; + const result = cleanupTokens(tokens as any); + expect(result[0].block).toBe(true); + }); + + it('converts link to blocklink when link contains a block-level token', () => { + const tokens = [ + { type: 'link_open', nesting: 1, block: false, children: null }, + { type: 'image', nesting: 0, block: false, children: null }, + { type: 'link_close', nesting: -1, block: false, children: null }, + ]; + const result = cleanupTokens(tokens as any); + // image becomes block, which triggers blocklink conversion + expect(result[0].type).toBe('blocklink'); + expect(result[0].block).toBe(true); + expect(result[2].type).toBe('blocklink'); + expect(result[2].block).toBe(true); + }); + + it('preserves normal links without block children', () => { + const tokens = [ + { type: 'link_open', nesting: 1, block: false, children: null }, + { type: 'text', nesting: 0, block: false, children: null, content: 'hello' }, + { type: 'link_close', nesting: -1, block: false, children: null }, + ]; + const result = cleanupTokens(tokens as any); + expect(result[0].type).toBe('link'); + expect(result[2].type).toBe('link'); + }); +}); diff --git a/src/__tests__/util/flattenInlineTokens.test.ts b/src/__tests__/util/flattenInlineTokens.test.ts new file mode 100644 index 00000000..29be3190 --- /dev/null +++ b/src/__tests__/util/flattenInlineTokens.test.ts @@ -0,0 +1,47 @@ +import flattenTokens from '../../lib/util/flattenInlineTokens'; + +describe('flattenInlineTokens', () => { + it('flattens inline tokens by extracting their children', () => { + const tokens = [ + { + type: 'inline', + children: [{ type: 'text', children: null }, { type: 'strong_open', children: null }], + }, + ]; + const result = flattenTokens(tokens as any); + expect(result).toHaveLength(2); + expect(result[0].type).toBe('text'); + expect(result[1].type).toBe('strong_open'); + }); + + it('preserves non-inline tokens as-is', () => { + const tokens = [ + { type: 'paragraph_open', children: null }, + { type: 'paragraph_close', children: null }, + ]; + const result = flattenTokens(tokens as any); + expect(result).toHaveLength(2); + expect(result[0].type).toBe('paragraph_open'); + }); + + it('handles nested inline tokens recursively', () => { + const tokens = [ + { + type: 'inline', + children: [ + { + type: 'inline', + children: [{ type: 'text', children: null }], + }, + ], + }, + ]; + const result = flattenTokens(tokens as any); + expect(result).toHaveLength(1); + expect(result[0].type).toBe('text'); + }); + + it('returns empty array for empty input', () => { + expect(flattenTokens([])).toEqual([]); + }); +}); diff --git a/src/__tests__/util/getTokenTypeByToken.test.ts b/src/__tests__/util/getTokenTypeByToken.test.ts new file mode 100644 index 00000000..8b7489f9 --- /dev/null +++ b/src/__tests__/util/getTokenTypeByToken.test.ts @@ -0,0 +1,32 @@ +import getTokenTypeByToken from '../../lib/util/getTokenTypeByToken'; + +describe('getTokenTypeByToken', () => { + it('strips _open suffix and appends heading level', () => { + expect(getTokenTypeByToken({ type: 'heading_open', tag: 'h1' })).toBe('heading1'); + }); + + it('strips _close suffix and appends heading level', () => { + expect(getTokenTypeByToken({ type: 'heading_close', tag: 'h1' })).toBe('heading1'); + }); + + it('appends heading level from tag h2', () => { + expect(getTokenTypeByToken({ type: 'heading_open', tag: 'h2' })).toBe('heading2'); + }); + + it('appends heading level from tag h6', () => { + expect(getTokenTypeByToken({ type: 'heading_open', tag: 'h6' })).toBe('heading6'); + }); + + it('returns type as-is for non-heading tokens', () => { + expect(getTokenTypeByToken({ type: 'paragraph_open' })).toBe('paragraph'); + }); + + it('strips _open/_close from non-heading types', () => { + expect(getTokenTypeByToken({ type: 'blockquote_open' })).toBe('blockquote'); + expect(getTokenTypeByToken({ type: 'blockquote_close' })).toBe('blockquote'); + }); + + it('returns "unknown" when token has no type', () => { + expect(getTokenTypeByToken({})).toBe('unknown'); + }); +}); diff --git a/src/__tests__/util/getUniqueID.test.ts b/src/__tests__/util/getUniqueID.test.ts new file mode 100644 index 00000000..c66b7775 --- /dev/null +++ b/src/__tests__/util/getUniqueID.test.ts @@ -0,0 +1,22 @@ +import getUniqueID from '../../lib/util/getUniqueID'; + +describe('getUniqueID', () => { + it('returns a string starting with rnmr_', () => { + const id = getUniqueID(); + expect(id).toMatch(/^rnmr_/); + }); + + it('returns unique values on successive calls', () => { + const id1 = getUniqueID(); + const id2 = getUniqueID(); + const id3 = getUniqueID(); + expect(id1).not.toBe(id2); + expect(id2).not.toBe(id3); + }); + + it('returns valid hex suffix', () => { + const id = getUniqueID(); + const suffix = id.replace('rnmr_', ''); + expect(suffix).toMatch(/^[0-9a-f]+$/); + }); +}); diff --git a/src/__tests__/util/groupTextTokens.test.ts b/src/__tests__/util/groupTextTokens.test.ts new file mode 100644 index 00000000..2832263f --- /dev/null +++ b/src/__tests__/util/groupTextTokens.test.ts @@ -0,0 +1,59 @@ +import groupTextTokens from '../../lib/util/groupTextTokens'; + +describe('groupTextTokens', () => { + it('wraps consecutive non-block tokens in textgroup open/close tokens', () => { + const tokens = [ + { type: 'text', block: false }, + { type: 'strong', block: false }, + ]; + const result = groupTextTokens(tokens as any); + expect(result[0]).toMatchObject({ type: 'textgroup', nesting: 1 }); + expect(result[1]).toMatchObject({ type: 'text' }); + expect(result[2]).toMatchObject({ type: 'strong' }); + }); + + it('does not wrap block tokens', () => { + const tokens = [{ type: 'paragraph', block: true }]; + const result = groupTextTokens(tokens as any); + expect(result).toHaveLength(1); + expect(result[0]).toMatchObject({ type: 'paragraph' }); + }); + + it('handles mixed block and non-block sequences', () => { + const tokens = [ + { type: 'text', block: false }, + { type: 'image', block: true }, + { type: 'text', block: false }, + ]; + const result = groupTextTokens(tokens as any); + // textgroup_open, text, textgroup_close, image, textgroup_open, text + expect(result[0]).toMatchObject({ type: 'textgroup', nesting: 1 }); + expect(result[1]).toMatchObject({ type: 'text' }); + expect(result[2]).toMatchObject({ type: 'textgroup', nesting: -1 }); + expect(result[3]).toMatchObject({ type: 'image' }); + expect(result[4]).toMatchObject({ type: 'textgroup', nesting: 1 }); + expect(result[5]).toMatchObject({ type: 'text' }); + }); + + it('handles all-block input (no textgroup wrappers)', () => { + const tokens = [ + { type: 'paragraph', block: true }, + { type: 'heading', block: true }, + ]; + const result = groupTextTokens(tokens as any); + expect(result).toHaveLength(2); + expect(result[0]).toMatchObject({ type: 'paragraph' }); + expect(result[1]).toMatchObject({ type: 'heading' }); + }); + + it('handles all-inline input (single textgroup wrapper)', () => { + const tokens = [ + { type: 'text', block: false }, + { type: 'em', block: false }, + { type: 'text', block: false }, + ]; + const result = groupTextTokens(tokens as any); + expect(result[0]).toMatchObject({ type: 'textgroup', nesting: 1 }); + expect(result).toHaveLength(4); // open + 3 tokens + }); +}); diff --git a/src/__tests__/util/hasParents.test.ts b/src/__tests__/util/hasParents.test.ts new file mode 100644 index 00000000..ba4847ef --- /dev/null +++ b/src/__tests__/util/hasParents.test.ts @@ -0,0 +1,17 @@ +import hasParents from '../../lib/util/hasParents'; + +describe('hasParents', () => { + it('returns true when parent array contains matching type', () => { + const parents = [{ type: 'blockquote' }, { type: 'paragraph' }]; + expect(hasParents(parents, 'blockquote')).toBe(true); + }); + + it('returns false when parent array does not contain matching type', () => { + const parents = [{ type: 'blockquote' }, { type: 'paragraph' }]; + expect(hasParents(parents, 'heading')).toBe(false); + }); + + it('returns false for empty parent array', () => { + expect(hasParents([], 'blockquote')).toBe(false); + }); +}); diff --git a/src/__tests__/util/splitTextNonTextNodes.test.ts b/src/__tests__/util/splitTextNonTextNodes.test.ts new file mode 100644 index 00000000..df14ca50 --- /dev/null +++ b/src/__tests__/util/splitTextNonTextNodes.test.ts @@ -0,0 +1,29 @@ +import React from 'react'; +import splitTextNonTextNodes from '../../lib/util/splitTextNonTextNodes'; + +describe('splitTextNonTextNodes', () => { + const TextComponent: React.FC<{ children?: React.ReactNode }> & { displayName?: string } = ({ children }) => + React.createElement('Text', null, children); + TextComponent.displayName = 'Text'; + + const ViewComponent: React.FC<{ children?: React.ReactNode }> & { displayName?: string } = ({ children }) => + React.createElement('View', null, children); + ViewComponent.displayName = 'View'; + + it('separates Text-type children from non-Text children', () => { + const children = [ + React.createElement(TextComponent, { key: '1' }, 'text'), + React.createElement(ViewComponent, { key: '2' }, 'view'), + React.createElement(TextComponent, { key: '3' }, 'more text'), + ]; + const result = splitTextNonTextNodes(children); + expect(result.textNodes).toHaveLength(2); + expect(result.nonTextNodes).toHaveLength(1); + }); + + it('returns empty arrays when no children provided', () => { + const result = splitTextNonTextNodes([]); + expect(result.textNodes).toEqual([]); + expect(result.nonTextNodes).toEqual([]); + }); +}); diff --git a/src/__tests__/util/stringToTokens.test.ts b/src/__tests__/util/stringToTokens.test.ts new file mode 100644 index 00000000..f42369b3 --- /dev/null +++ b/src/__tests__/util/stringToTokens.test.ts @@ -0,0 +1,30 @@ +import MarkdownIt from 'markdown-it'; +import { stringToTokens } from '../../lib/util/stringToTokens'; + +describe('stringToTokens', () => { + const md = MarkdownIt({ typographer: true }); + + it('parses simple markdown string via markdownIt.parse()', () => { + const tokens = stringToTokens('# Hello', md); + expect(tokens.length).toBeGreaterThan(0); + expect(tokens[0].type).toBe('heading_open'); + }); + + it('returns empty array for empty string', () => { + const tokens = stringToTokens('', md); + expect(tokens).toEqual([]); + }); + + it('returns empty array on parse error', () => { + const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + const brokenMd = { + parse() { + throw new Error('parse error'); + }, + } as unknown as MarkdownIt; + const result = stringToTokens('test', brokenMd); + expect(result).toEqual([]); + expect(warnSpy).toHaveBeenCalled(); + warnSpy.mockRestore(); + }); +}); diff --git a/src/__tests__/util/tokensToAST.test.ts b/src/__tests__/util/tokensToAST.test.ts new file mode 100644 index 00000000..0853b1a0 --- /dev/null +++ b/src/__tests__/util/tokensToAST.test.ts @@ -0,0 +1,93 @@ +import tokensToAST from '../../lib/util/tokensToAST'; + +describe('tokensToAST', () => { + it('returns empty array for null input', () => { + expect(tokensToAST(null)).toEqual([]); + }); + + it('returns empty array for undefined input', () => { + expect(tokensToAST(undefined)).toEqual([]); + }); + + it('returns empty array for empty array input', () => { + expect(tokensToAST([])).toEqual([]); + }); + + it('creates flat nodes for nesting=0 tokens', () => { + const tokens = [ + { type: 'text', nesting: 0, content: 'hello', block: false, children: null }, + ]; + const result = tokensToAST(tokens as any); + expect(result).toHaveLength(1); + expect(result[0].type).toBe('text'); + expect(result[0].content).toBe('hello'); + }); + + it('nests children between nesting=1 (open) and nesting=-1 (close) tokens', () => { + const tokens = [ + { type: 'paragraph_open', tag: 'p', nesting: 1, block: true, children: null }, + { type: 'text', nesting: 0, content: 'hello', block: false, children: null }, + { type: 'paragraph_close', tag: 'p', nesting: -1, block: true, children: null }, + ]; + const result = tokensToAST(tokens as any); + expect(result).toHaveLength(1); + expect(result[0].type).toBe('paragraph'); + expect(result[0].children).toHaveLength(1); + expect(result[0].children[0].content).toBe('hello'); + }); + + it('sets key, type, content, attributes, tokenIndex, index on each node', () => { + const tokens = [ + { type: 'text', nesting: 0, content: 'test', block: false, children: null }, + ]; + const result = tokensToAST(tokens as any); + const node = result[0]; + expect(node.key).toMatch(/^rnmr_/); + expect(node.type).toBe('text'); + expect(node.content).toBe('test'); + expect(node.attributes).toEqual({}); + expect(node.tokenIndex).toBe(0); + expect(node.index).toBe(0); + }); + + it('converts attrs array to attributes object', () => { + const tokens = [ + { + type: 'link_open', + nesting: 1, + block: false, + children: null, + attrs: [['href', 'https://example.com']], + }, + { type: 'text', nesting: 0, content: 'link', block: false, children: null }, + { type: 'link_close', nesting: -1, block: false, children: null }, + ]; + const result = tokensToAST(tokens as any); + expect(result[0].attributes).toEqual({ href: 'https://example.com' }); + }); + + it('filters out empty text nodes', () => { + const tokens = [ + { type: 'text', nesting: 0, content: '', block: false, children: null }, + { type: 'text', nesting: 0, content: 'hello', block: false, children: null }, + ]; + const result = tokensToAST(tokens as any); + expect(result).toHaveLength(1); + expect(result[0].content).toBe('hello'); + }); + + it('recursively processes token.children', () => { + const tokens = [ + { + type: 'image', + nesting: 0, + content: 'alt text', + block: true, + children: [{ type: 'text', nesting: 0, content: 'alt text', block: false, children: null }], + }, + ]; + const result = tokensToAST(tokens as any); + expect(result[0].children).toHaveLength(1); + expect(result[0].children[0].content).toBe('alt text'); + }); +}); diff --git a/src/index.d.ts b/src/index.d.ts deleted file mode 100644 index ba639129..00000000 --- a/src/index.d.ts +++ /dev/null @@ -1,86 +0,0 @@ -// tslint:disable:max-classes-per-file -import { MarkdownIt, Token } from 'markdown-it'; -import { ComponentType, ReactNode } from 'react'; -import { StyleSheet, View } from 'react-native'; - -export function applyStyle(children: any[], styles: any, type: string): any; - -export function getUniqueID(): string; -export function openUrl(url: string): void; - -export function hasParents(parents: any[], type: string): boolean; - -export type RenderFunction = ( - node: any, - children: ReactNode[], - parent: ReactNode, - styles: any, -) => ReactNode; - -export interface RenderRules { - [name: string]: RenderFunction; -} - -export const renderRules: RenderRules; - -export interface MarkdownParser { - parse: (value: string, options: any) => Token[]; -} - -export interface ASTNode { - type: string; - sourceType: string; // original source token name - key: string; - content: string; - tokenIndex: number; - index: number; - attributes: Record; - children: ASTNode[]; -} - -export class AstRenderer { - constructor(renderRules: RenderRules, style?: any); - getRenderFunction(type: string): RenderFunction; - renderNode(node: any, parentNodes: ReadonlyArray): ReactNode; - render(nodes: ReadonlyArray): View; -} - -export function parser( - source: string, - renderer: (node: ASTNode) => View, - parser: MarkdownParser, -): any; - -export function stringToTokens( - source: string, - markdownIt: MarkdownParser, -): Token[]; - -export function tokensToAST(tokens: ReadonlyArray): ASTNode[]; - -interface PluginContainerResult extends Array { - 0: A; -} - -export class PluginContainer { - constructor(plugin: A, ...options: any[]); - toArray(): PluginContainerResult; -} - -export function blockPlugin(md: any, name: string, options: object): any; - -export const styles: any; - -export interface MarkdownProps { - rules?: RenderRules; - style?: StyleSheet.NamedStyles; - renderer?: AstRenderer; - markdownit?: MarkdownIt; - plugins?: Array>; -} - -type MarkdownStatic = React.ComponentType; -export const Markdown: MarkdownStatic; -export type Markdown = MarkdownStatic; - -export default Markdown; diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 653bba22..00000000 --- a/src/index.js +++ /dev/null @@ -1,215 +0,0 @@ -/** - * Base Markdown component - * @author Mient-jan Stelling - */ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { View } from 'react-native'; -import parser from './lib/parser'; -import applyStyle from './lib/util/applyStyle'; -import getUniqueID from './lib/util/getUniqueID'; -import hasParents from './lib/util/hasParents'; -import openUrl from './lib/util/openUrl'; -import tokensToAST from './lib/util/tokensToAST'; -import renderRules from './lib/renderRules'; -import AstRenderer from './lib/AstRenderer'; -import MarkdownIt from 'markdown-it'; -import PluginContainer from './lib/plugin/PluginContainer'; -import blockPlugin from './lib/plugin/blockPlugin'; -import { styles } from './lib/styles'; -import { stringToTokens } from './lib/util/stringToTokens'; -/** - * - */ -export { - applyStyle, - getUniqueID, - openUrl, - hasParents, - renderRules, - AstRenderer, - parser, - stringToTokens, - tokensToAST, - MarkdownIt, - PluginContainer, - blockPlugin, - styles, -}; - -/** - * react-native-markdown-renderer - */ -export default class Markdown extends Component { - /** - * Definition of the prop types - */ - static propTypes = { - children: PropTypes.node.isRequired, - renderer: PropTypes.oneOfType([PropTypes.func, PropTypes.instanceOf(AstRenderer)]), - rules: (props, propName, componentName) => { - let invalidProps = []; - const prop = props[propName]; - - if (!prop) { - return; - } - - if (typeof prop === 'object') { - invalidProps = Object.keys(prop).filter(key => typeof prop[key] !== 'function'); - } - - if (typeof prop !== 'object') { - return new Error( - `Invalid prop \`${propName}\` supplied to \`${componentName}\`. Must be of shape {[index:string]:function} ` - ); - } else if (invalidProps.length > 0) { - return new Error( - `Invalid prop \`${propName}\` supplied to \`${componentName}\`. These ` + - `props are not of type function \`${invalidProps.join(', ')}\` ` - ); - } - }, - markdownit: PropTypes.instanceOf(MarkdownIt), - plugins: PropTypes.arrayOf(PropTypes.instanceOf(PluginContainer)), - style: PropTypes.any, - }; - - /** - * Default Props - */ - static defaultProps = { - renderer: null, - rules: null, - plugins: [], - style: null, - markdownit: MarkdownIt({ - typographer: true, - }), - }; - - copy = ''; - renderer = null; - markdownParser = null; - - /** - * Only when the copy changes will the markdown render again. - * @param nextProps - * @param nextState - * @return {boolean} - */ - shouldComponentUpdate(nextProps, nextState) { - const copy = this.getCopyFromChildren(nextProps.children); - - if (copy !== this.copy) { - this.copy = copy; - return true; - } - - if ( - nextProps.renderer !== this.props.renderer || - nextProps.style !== this.props.style || - nextProps.plugins !== this.props.plugins || - nextProps.rules !== this.props.rules || - nextProps.markdownit !== this.props.markdownit - ) { - return true; - } - - return false; - } - - /** - * - * @param props - */ - updateSettings(props = this.props) { - const { renderer, rules, style, plugins, markdownit } = props; - - if (renderer && rules) { - console.warn( - 'react-native-markdown-renderer you are using renderer and rules at the same time. This is not possible, props.rules is ignored' - ); - } - - if (renderer && style) { - console.warn( - 'react-native-markdown-renderer you are using renderer and style at the same time. This is not possible, props.style is ignored' - ); - } - - // these checks are here to prevent extra overhead. - if (renderer) { - if (typeof renderer === 'function') { - if (!this.renderer || this.renderer.render !== renderer) { - this.renderer = { - render: renderer, - }; - } - } else if (renderer instanceof AstRenderer) { - if (this.renderer !== renderer) { - this.renderer = renderer; - } - } else { - throw new Error('Provided renderer is not compatible with function or AstRenderer. please change'); - } - } else { - if (!this.renderer || this.props.renderer || this.props.rules !== rules || this.props.style !== style) { - this.renderer = new AstRenderer( - { - ...renderRules, - ...(rules || {}), - }, - { - ...styles, - ...style, - } - ); - } - } - - if (!this.markdownParser || this.props.markdownit !== markdownit || plugins !== this.props.plugins) { - let md = markdownit; - if (plugins && plugins.length > 0) { - plugins.forEach(plugin => { - md = md.use.apply(md, plugin.toArray()); - }); - } - - this.markdownParser = md; - } - } - - /** - * - */ - componentWillMount() { - this.updateSettings(this.props); - } - - /** - * - * @param nextProps - */ - componentWillReceiveProps(nextProps) { - this.updateSettings(nextProps); - } - - /** - * - * @param children - * @return {string} - */ - getCopyFromChildren(children = this.props.children) { - return children instanceof Array ? children.join('') : children; - } - - /** - * - * @return {View} - */ - render() { - const copy = (this.copy = this.getCopyFromChildren()); - return parser(copy, this.renderer.render, this.markdownParser); - } -} diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 00000000..6fa2d7ee --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,109 @@ +import { useMemo } from 'react'; +import type { ReactElement } from 'react'; +import parser from './lib/parser'; +import applyStyle from './lib/util/applyStyle'; +import getUniqueID from './lib/util/getUniqueID'; +import hasParents from './lib/util/hasParents'; +import openUrl from './lib/util/openUrl'; +import tokensToAST from './lib/util/tokensToAST'; +import defaultRenderRules from './lib/renderRules'; +import AstRenderer from './lib/AstRenderer'; +import MarkdownIt from 'markdown-it'; +import PluginContainer from './lib/plugin/PluginContainer'; +import blockPlugin from './lib/plugin/blockPlugin'; +import { styles } from './lib/styles'; +import { stringToTokens } from './lib/util/stringToTokens'; +import type { ASTNode, RenderFunction, RenderRules, MarkdownStyles } from './types'; + +export { + applyStyle, + getUniqueID, + openUrl, + hasParents, + defaultRenderRules as renderRules, + AstRenderer, + parser, + stringToTokens, + tokensToAST, + MarkdownIt, + PluginContainer, + blockPlugin, + styles, +}; + +export type { ASTNode, RenderFunction, RenderRules, MarkdownStyles }; + +export interface MarkdownProps { + children: string | string[]; + rules?: RenderRules; + style?: Partial; + renderer?: AstRenderer | ((nodes: ASTNode[]) => ReactElement); + markdownit?: MarkdownIt; + plugins?: PluginContainer[]; +} + +export type { MarkdownProps as MarkdownPropsType }; + +const defaultMarkdownIt = MarkdownIt({ typographer: true }); + +export default function Markdown({ + children, + rules, + style, + renderer: rendererProp, + markdownit = defaultMarkdownIt, + plugins = [], +}: MarkdownProps): ReactElement { + if (rendererProp && rules) { + console.warn( + 'react-native-markdown-renderer you are using renderer and rules at the same time. This is not possible, props.rules is ignored' + ); + } + + if (rendererProp && style) { + console.warn( + 'react-native-markdown-renderer you are using renderer and style at the same time. This is not possible, props.style is ignored' + ); + } + + const markdownParser = useMemo(() => { + let md = markdownit; + if (plugins.length > 0) { + plugins.forEach((plugin) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any, prefer-spread + md = md.use(...(plugin.toArray() as [any, ...any[]])); + }); + } + return md; + }, [markdownit, plugins]); + + const resolvedRenderer = useMemo(() => { + if (rendererProp) { + if (typeof rendererProp === 'function') { + return { render: rendererProp }; + } + if (rendererProp instanceof AstRenderer) { + return rendererProp; + } + throw new Error('Provided renderer is not compatible with function or AstRenderer. please change'); + } + return new AstRenderer( + { + ...defaultRenderRules, + ...(rules || {}), + }, + { + ...styles, + ...style, + } + ); + }, [rendererProp, rules, style]); + + const copy = useMemo(() => { + return Array.isArray(children) ? children.join('') : children; + }, [children]); + + return useMemo(() => { + return parser(copy, resolvedRenderer.render, markdownParser); + }, [copy, resolvedRenderer, markdownParser]); +} diff --git a/src/lib/AstRenderer.js b/src/lib/AstRenderer.js deleted file mode 100644 index 532e0cf7..00000000 --- a/src/lib/AstRenderer.js +++ /dev/null @@ -1,71 +0,0 @@ -import React, { Component, PropTypes } from "react"; -import { Text, View } from "react-native"; -import getUniqueID from "./util/getUniqueID"; - -export function rootRenderRule(children, styles) { - return {children}; -} - -/** - * - */ -export default class AstRenderer { - /** - * - * @param {Object.} renderRules - * @param {any} style - */ - constructor(renderRules, style) { - this._renderRules = renderRules; - this._style = style; - } - - /** - * - * @param {string} type - * @return {string} - */ - getRenderFunction = type => { - const renderFunction = this._renderRules[type]; - - if (!renderFunction) { - throw new Error( - `${type} renderRule not defined example: ` - ); - } - return renderFunction; - }; - - /** - * - * @param node - * @param parentNodes - * @return {*} - */ - renderNode = (node, parentNodes) => { - const renderFunction = this.getRenderFunction(node.type); - - const parents = [...parentNodes]; - parents.unshift(node); - - if (node.type === "text") { - return renderFunction(node, [], parentNodes, this._style); - } - - const children = node.children.map(value => { - return this.renderNode(value, parents); - }); - - return renderFunction(node, children, parentNodes, this._style); - }; - - /** - * - * @param nodes - * @return {*} - */ - render = nodes => { - const children = nodes.map(value => this.renderNode(value, [])); - return rootRenderRule(children, this._style); - }; -} diff --git a/src/lib/AstRenderer.tsx b/src/lib/AstRenderer.tsx new file mode 100644 index 00000000..fe9b9474 --- /dev/null +++ b/src/lib/AstRenderer.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import type { ReactNode, ReactElement } from 'react'; +import { View } from 'react-native'; +import getUniqueID from './util/getUniqueID'; +import type { ASTNode, RenderRules, RenderFunction, MarkdownStyles } from '../types'; + +export function rootRenderRule(children: ReactNode[], styles: MarkdownStyles): ReactElement { + return ( + + {children} + + ); +} + +export default class AstRenderer { + private _renderRules: RenderRules; + private _style: MarkdownStyles; + + constructor(renderRules: RenderRules, style?: MarkdownStyles) { + this._renderRules = renderRules; + this._style = style || {}; + } + + getRenderFunction = (type: string): RenderFunction => { + const renderFunction = this._renderRules[type]; + + if (!renderFunction) { + throw new Error(`${type} renderRule not defined example: `); + } + return renderFunction; + }; + + renderNode = (node: ASTNode, parentNodes: ASTNode[]): ReactNode => { + const renderFunction = this.getRenderFunction(node.type); + + const parents = [...parentNodes]; + parents.unshift(node); + + if (node.type === 'text') { + return renderFunction(node, [], parentNodes, this._style); + } + + const children = node.children.map((value) => { + return this.renderNode(value, parents); + }); + + return renderFunction(node, children, parentNodes, this._style); + }; + + render = (nodes: ASTNode[]): ReactElement => { + const children = nodes.map((value) => this.renderNode(value, [])); + return rootRenderRule(children, this._style); + }; +} diff --git a/src/lib/data/PlatformEnum.js b/src/lib/data/PlatformEnum.js deleted file mode 100644 index 1e45c5e4..00000000 --- a/src/lib/data/PlatformEnum.js +++ /dev/null @@ -1,4 +0,0 @@ -export default { - IOS: "ios", - ANDROID: "android" -}; diff --git a/src/lib/data/PlatformEnum.ts b/src/lib/data/PlatformEnum.ts new file mode 100644 index 00000000..b91055c1 --- /dev/null +++ b/src/lib/data/PlatformEnum.ts @@ -0,0 +1,8 @@ +export const PlatformEnum = { + IOS: 'ios', + ANDROID: 'android', +} as const; + +export type PlatformType = (typeof PlatformEnum)[keyof typeof PlatformEnum]; + +export default PlatformEnum; diff --git a/src/lib/parser.js b/src/lib/parser.js deleted file mode 100644 index 82f2d8f0..00000000 --- a/src/lib/parser.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import { View } from 'react-native'; -import tokensToAST from './util/tokensToAST'; -import { stringToTokens } from './util/stringToTokens'; -import { cleanupTokens } from './util/cleanupTokens'; -import groupTextTokens from './util/groupTextTokens'; - -/** - * - * @param {string} source - * @param {function} [renderer] - * @param {AstRenderer} [markdownIt] - * @return {View} - */ -export default function parser(source, renderer, markdownIt) { - let tokens = stringToTokens(source, markdownIt); - tokens = cleanupTokens(tokens); - tokens = groupTextTokens(tokens); - - const astTree = tokensToAST(tokens); - - return renderer(astTree); -} diff --git a/src/lib/parser.ts b/src/lib/parser.ts new file mode 100644 index 00000000..d25ac909 --- /dev/null +++ b/src/lib/parser.ts @@ -0,0 +1,22 @@ +import type { ReactElement } from 'react'; +import type MarkdownIt from 'markdown-it'; +import tokensToAST from './util/tokensToAST'; +import { stringToTokens } from './util/stringToTokens'; +import { cleanupTokens } from './util/cleanupTokens'; +import groupTextTokens from './util/groupTextTokens'; +import type { ASTNode } from '../types'; + +export default function parser( + source: string, + renderer: (nodes: ASTNode[]) => ReactElement, + markdownIt: MarkdownIt +): ReactElement { + const tokens = stringToTokens(source, markdownIt); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const cleaned = cleanupTokens(tokens as any[]); + const grouped = groupTextTokens(cleaned); + + const astTree = tokensToAST(grouped as any[]); + + return renderer(astTree); +} diff --git a/src/lib/plugin/PluginContainer.js b/src/lib/plugin/PluginContainer.js deleted file mode 100644 index 80fce541..00000000 --- a/src/lib/plugin/PluginContainer.js +++ /dev/null @@ -1,10 +0,0 @@ -export default class PluginContainer { - constructor(plugin, ...options) { - this.plugin = plugin; - this.options = options; - } - - toArray() { - return [this.plugin, ...this.options]; - } -} diff --git a/src/lib/plugin/PluginContainer.ts b/src/lib/plugin/PluginContainer.ts new file mode 100644 index 00000000..15055630 --- /dev/null +++ b/src/lib/plugin/PluginContainer.ts @@ -0,0 +1,13 @@ +export default class PluginContainer { + plugin: T; + options: unknown[]; + + constructor(plugin: T, ...options: unknown[]) { + this.plugin = plugin; + this.options = options; + } + + toArray(): [T, ...unknown[]] { + return [this.plugin, ...this.options]; + } +} diff --git a/src/lib/plugin/blockPlugin.js b/src/lib/plugin/blockPlugin.js deleted file mode 100644 index c1af31f8..00000000 --- a/src/lib/plugin/blockPlugin.js +++ /dev/null @@ -1,166 +0,0 @@ -/* code is still in beta, thats why im disabling linter */ -/* eslint-disable */ - -/** - * How to use? - * new PluginContainer(blockPlugin, '__name_of_block__', {}) - * @param md - * @param name - * @param options - */ -export default function blockPlugin(md, name, options) { - function validateDefault(params) { - return params.trim().split(' ', 2)[0] === name; - } - - function renderDefault(tokens, idx, _options, env, self) { - return self.renderToken(tokens, idx, _options, env, self); - } - - options = options || {}; - - let min_markers = 1; - let marker_str = options.marker || `[${name}]`; - let marker_end_str = options.marker_end || `[/${name}]`; - let marker_char = marker_str.charCodeAt(0); - let marker_len = marker_str.length; - let marker_end_len = marker_end_str.length; - - let validate = options.validate || validateDefault; - let render = options.render || renderDefault; - - function container(state, startLine, endLine, silent) { - var pos, - nextLine, - marker_count, - markup, - params, - token, - old_parent, - old_line_max, - auto_closed = false, - start = state.bMarks[startLine] + state.tShift[startLine], - max = state.eMarks[startLine]; - - // Check out the first character quickly, - // this should filter out most of non-containers - // - if (marker_char !== state.src.charCodeAt(start)) { - return false; - } - - // Check out the rest of the marker string - // - for (pos = start + 1; pos <= max; pos++) { - if (marker_str[(pos - start) % marker_len] !== state.src[pos]) { - break; - } - } - - marker_count = Math.floor((pos - start) / marker_len); - if (marker_count < min_markers) { - return false; - } - pos -= (pos - start) % marker_len; - - markup = state.src.slice(start, pos); - params = state.src.slice(pos, max); - - // if (!validate(params)) { - // return false; - // } - - // Since start is found, we can report success here in validation mode - // - if (silent) { - return true; - } - - // Search for the end of the block - // - nextLine = startLine; - - for (;;) { - nextLine++; - if (nextLine >= endLine) { - // unclosed block should be autoclosed by end of document. - // also block seems to be autoclosed by end of parent - break; - } - - start = state.bMarks[nextLine] + state.tShift[nextLine]; - max = state.eMarks[nextLine]; - - if (start < max && state.sCount[nextLine] < state.blkIndent) { - // non-empty line with negative indent should stop the list: - // - ``` - // test - break; - } - - if (marker_char !== state.src.charCodeAt(start)) { - continue; - } - - if (state.sCount[nextLine] - state.blkIndent >= 4) { - // closing fence should be indented less than 4 spaces - continue; - } - - for (pos = start + 1; pos <= max; pos++) { - if (marker_end_str[(pos - start) % marker_end_len] !== state.src[pos]) { - break; - } - } - - // closing code fence must be at least as long as the opening one - if (Math.floor((pos - start) / marker_end_len) < marker_count) { - continue; - } - - // make sure tail has spaces only - pos -= (pos - start) % marker_end_len; - pos = state.skipSpaces(pos); - - if (pos < max) { - continue; - } - - // found! - auto_closed = true; - break; - } - - old_parent = state.parentType; - old_line_max = state.lineMax; - state.parentType = 'container'; - - // this will prevent lazy continuations from ever going past our end marker - state.lineMax = nextLine; - - token = state.push(`container_${name}_open`, name, 1); - token.markup = markup; - token.block = true; - token.info = params; - token.map = [startLine, nextLine]; - - state.md.block.tokenize(state, startLine + 1, nextLine); - - token = state.push(`container_${name}_close`, name, -1); - token.markup = state.src.slice(start, pos); - token.block = true; - - state.parentType = old_parent; - state.lineMax = old_line_max; - state.line = nextLine + (auto_closed ? 1 : 0); - - return true; - } - - md.block.ruler.before('fence', 'container_checklist', container, { - alt: ['paragraph', 'reference', 'blockquote', 'list'], - }); - - md.renderer.rules['container_' + name + '_open'] = render; - md.renderer.rules['container_' + name + '_close'] = render; -} diff --git a/src/lib/plugin/blockPlugin.ts b/src/lib/plugin/blockPlugin.ts new file mode 100644 index 00000000..05803801 --- /dev/null +++ b/src/lib/plugin/blockPlugin.ts @@ -0,0 +1,142 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export interface BlockPluginOptions { + marker?: string; + marker_end?: string; + validate?: (params: string) => boolean; + render?: (tokens: any[], idx: number, options: any, env: any, self: any) => any; +} + +export default function blockPlugin(md: any, name: string, options?: BlockPluginOptions): void { + function validateDefault(params: string): boolean { + return params.trim().split(' ', 2)[0] === name; + } + + function renderDefault(tokens: any[], idx: number, _options: any, env: any, self: any): any { + return self.renderToken(tokens, idx, _options, env, self); + } + + const opts = options || {}; + + const min_markers = 1; + const marker_str = opts.marker || `[${name}]`; + const marker_end_str = opts.marker_end || `[/${name}]`; + const marker_char = marker_str.charCodeAt(0); + const marker_len = marker_str.length; + const marker_end_len = marker_end_str.length; + + const validate = opts.validate || validateDefault; + const render = opts.render || renderDefault; + + function container(state: any, startLine: number, endLine: number, silent: boolean): boolean { + let pos: number; + let nextLine: number; + let marker_count: number; + let markup: string; + let params: string; + let token: any; + let old_parent: any; + let old_line_max: number; + let auto_closed = false; + const start = state.bMarks[startLine] + state.tShift[startLine]; + let max = state.eMarks[startLine]; + + if (marker_char !== state.src.charCodeAt(start)) { + return false; + } + + for (pos = start + 1; pos <= max; pos++) { + if (marker_str[(pos - start) % marker_len] !== state.src[pos]) { + break; + } + } + + marker_count = Math.floor((pos - start) / marker_len); + if (marker_count < min_markers) { + return false; + } + pos -= (pos - start) % marker_len; + + markup = state.src.slice(start, pos); + params = state.src.slice(pos, max); + + if (silent) { + return true; + } + + nextLine = startLine; + + for (;;) { + nextLine++; + if (nextLine >= endLine) { + break; + } + + const lineStart = state.bMarks[nextLine] + state.tShift[nextLine]; + max = state.eMarks[nextLine]; + + if (lineStart < max && state.sCount[nextLine] < state.blkIndent) { + break; + } + + if (marker_char !== state.src.charCodeAt(lineStart)) { + continue; + } + + if (state.sCount[nextLine] - state.blkIndent >= 4) { + continue; + } + + for (pos = lineStart + 1; pos <= max; pos++) { + if (marker_end_str[(pos - lineStart) % marker_end_len] !== state.src[pos]) { + break; + } + } + + if (Math.floor((pos - lineStart) / marker_end_len) < marker_count) { + continue; + } + + pos -= (pos - lineStart) % marker_end_len; + pos = state.skipSpaces(pos); + + if (pos < max) { + continue; + } + + auto_closed = true; + break; + } + + old_parent = state.parentType; + old_line_max = state.lineMax; + state.parentType = 'container'; + + state.lineMax = nextLine; + + token = state.push(`container_${name}_open`, name, 1); + token.markup = markup; + token.block = true; + token.info = params; + token.map = [startLine, nextLine]; + + state.md.block.tokenize(state, startLine + 1, nextLine); + + token = state.push(`container_${name}_close`, name, -1); + token.markup = state.src.slice(state.bMarks[nextLine] + state.tShift[nextLine], pos); + token.block = true; + + state.parentType = old_parent; + state.lineMax = old_line_max; + state.line = nextLine + (auto_closed ? 1 : 0); + + return true; + } + + md.block.ruler.before('fence', 'container_checklist', container, { + alt: ['paragraph', 'reference', 'blockquote', 'list'], + }); + + md.renderer.rules['container_' + name + '_open'] = render; + md.renderer.rules['container_' + name + '_close'] = render; +} diff --git a/src/lib/renderRules.js b/src/lib/renderRules.js deleted file mode 100644 index 67a180c5..00000000 --- a/src/lib/renderRules.js +++ /dev/null @@ -1,237 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { Text, TouchableWithoutFeedback, View } from 'react-native'; - -import FitImage from 'react-native-fit-image'; -import openUrl from './util/openUrl'; -import hasParents from './util/hasParents'; -import applyStyle from './util/applyStyle'; - -const renderRules = { - // when unknown elements are introduced, so it wont break - unknown: (node, children, parent, styles) => { - return ( - - {node.type} - - ); - }, - - textgroup: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - - inline: (node, children, parent, styles) => { - return {children}; - }, - - text: (node, children, parent, styles) => { - return {node.content}; - }, - span: (node, children, parent, styles) => { - return {children}; - }, - - strong: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - - s: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - // a - link: (node, children, parent, styles) => { - return ( - openUrl(node.attributes.href)}> - {children} - - ); - }, - // a with a non text element nested inside - blocklink: (node, children, parent, styles) => { - return ( - openUrl(node.attributes.href)} style={styles.blocklink}> - {children} - - ); - }, - em: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - - heading1: (node, children, parent, styles) => { - return ( - - {applyStyle(children, [styles.heading, styles.heading1], 'Text')} - - ); - }, - - heading2: (node, children, parent, styles) => { - children = applyStyle(children, [styles.heading, styles.heading2], 'Text'); - return ( - - {children} - - ); - }, - heading3: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading3], 'Text')} - - ), - heading4: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading4], 'Text')} - - ), - heading5: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading5], 'Text')} - - ), - heading6: (node, children, parent, styles) => ( - - {applyStyle(children, [styles.heading, styles.heading6], 'Text')} - - ), - - paragraph: (node, children, parent, styles) => ( - - {children} - - ), - - hardbreak: (node, children, parent, styles) => , - - blockquote: (node, children, parent, styles) => ( - - {children} - - ), - code_inline: (node, children, parent, styles) => { - return ( - - {node.content} - - ); - }, - code_block: (node, children, parent, styles) => { - return ( - - {node.content} - - ); - }, - fence: (node, children, parent, styles) => { - return ( - - {node.content} - - ); - }, - pre: (node, children, parent, styles) => ( - - {children} - - ), - // ul - bullet_list: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - ordered_list: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - // li - list_item: (node, children, parent, styles) => { - if (hasParents(parent, 'bullet_list')) { - return ( - - {'\u00B7'} - {children} - - ); - } - - if (hasParents(parent, 'ordered_list')) { - return ( - - {node.index + 1}{node.markup} - {children} - - ); - } - - return ( - - {children} - - ); - }, - table: (node, children, parent, styles) => ( - - {children} - - ), - thead: (node, children, parent, styles) => ( - - {children} - - ), - tbody: (node, children, parent, styles) => {children}, - th: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - tr: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - td: (node, children, parent, styles) => { - return ( - - {children} - - ); - }, - hr: (node, children, parent, styles) => { - return ; - }, - - // br - softbreak: (node, children, parent, styles) => {'\n'}, - image: (node, children, parent, styles) => { - return ; - }, -}; - -export default renderRules; diff --git a/src/lib/renderRules.tsx b/src/lib/renderRules.tsx new file mode 100644 index 00000000..496b9a37 --- /dev/null +++ b/src/lib/renderRules.tsx @@ -0,0 +1,263 @@ +import React from 'react'; +import { Text, TouchableWithoutFeedback, View, Image } from 'react-native'; +import type { ReactNode } from 'react'; + +import openUrl from './util/openUrl'; +import hasParents from './util/hasParents'; +import applyStyle from './util/applyStyle'; +import type { ASTNode, RenderRules, MarkdownStyles } from '../types'; + +const renderRules: RenderRules = { + unknown: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {node.type} + + ); + }, + + textgroup: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + inline: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return {children}; + }, + + text: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return {node.content}; + }, + + span: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return {children}; + }, + + strong: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + s: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + link: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + openUrl(node.attributes.href)}> + {children} + + ); + }, + + blocklink: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + openUrl(node.attributes.href)}> + {children} + + ); + }, + + em: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + heading1: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {applyStyle(children as any, [styles.heading, styles.heading1], 'Text')} + + ); + }, + + heading2: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {applyStyle(children as any, [styles.heading, styles.heading2], 'Text')} + + ); + }, + + heading3: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {applyStyle(children as any, [styles.heading, styles.heading3], 'Text')} + + ), + + heading4: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {applyStyle(children as any, [styles.heading, styles.heading4], 'Text')} + + ), + + heading5: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {applyStyle(children as any, [styles.heading, styles.heading5], 'Text')} + + ), + + heading6: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {applyStyle(children as any, [styles.heading, styles.heading6], 'Text')} + + ), + + paragraph: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {children} + + ), + + hardbreak: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + ), + + blockquote: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {children} + + ), + + code_inline: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {node.content} + + ); + }, + + code_block: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {node.content} + + ); + }, + + fence: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {node.content} + + ); + }, + + pre: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {children} + + ), + + bullet_list: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + ordered_list: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + list_item: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + if (hasParents(parent, 'bullet_list')) { + return ( + + {'\u00B7'} + {children} + + ); + } + + if (hasParents(parent, 'ordered_list')) { + return ( + + + {node.index + 1} + {node.markup} + + {children} + + ); + } + + return ( + + {children} + + ); + }, + + table: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {children} + + ), + + thead: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + + {children} + + ), + + tbody: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + {children} + ), + + th: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + tr: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + td: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ( + + {children} + + ); + }, + + hr: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ; + }, + + softbreak: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => ( + {'\n'} + ), + + image: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { + return ; + }, +}; + +export default renderRules; diff --git a/src/lib/styles.js b/src/lib/styles.js deleted file mode 100644 index 7f7a7ea3..00000000 --- a/src/lib/styles.js +++ /dev/null @@ -1,174 +0,0 @@ -import { Platform, StyleSheet } from 'react-native'; -import PlatformEnum from './data/PlatformEnum'; - -/** - * - */ -export const styles = StyleSheet.create({ - root: {}, - view: {}, - codeBlock: { - borderWidth: 1, - borderColor: '#CCCCCC', - backgroundColor: '#f5f5f5', - padding: 10, - borderRadius: 4, - }, - codeInline: { - borderWidth: 1, - borderColor: '#CCCCCC', - backgroundColor: '#f5f5f5', - padding: 10, - borderRadius: 4, - }, - del: { - backgroundColor: '#000000', - }, - em: { - fontStyle: 'italic', - }, - headingContainer: { - flexDirection: 'row', - }, - heading: {}, - heading1: { - fontSize: 32, - }, - heading2: { - fontSize: 24, - }, - heading3: { - fontSize: 18, - }, - heading4: { - fontSize: 16, - }, - heading5: { - fontSize: 13, - }, - heading6: { - fontSize: 11, - }, - hr: { - backgroundColor: '#000000', - height: 1, - }, - blockquote: { - paddingHorizontal: 20, - paddingVertical: 10, - margin: 20, - backgroundColor: '#CCCCCC', - }, - inlineCode: { - borderRadius: 3, - borderWidth: 1, - fontFamily: 'Courier', - fontWeight: 'bold', - }, - list: {}, - listItem: { - flex: 1, - flexWrap: 'wrap', - // backgroundColor: 'green', - }, - listUnordered: {}, - - listUnorderedItem: { - flexDirection: 'row', - justifyContent: 'flex-start', - }, - - listUnorderedItemIcon: { - marginLeft: 10, - marginRight: 10, - ...Platform.select({ - [PlatformEnum.IOS]: { - lineHeight: 36, - }, - [PlatformEnum.ANDROID]: { - lineHeight: 30, - }, - }), - }, - listUnorderedItemText: { - fontSize: 20, - lineHeight: 20, - }, - - listOrdered: {}, - listOrderedItem: { - flexDirection: 'row', - }, - listOrderedItemIcon: { - marginLeft: 10, - marginRight: 10, - ...Platform.select({ - [PlatformEnum.IOS]: { - lineHeight: 36, - }, - [PlatformEnum.ANDROID]: { - lineHeight: 30, - }, - }), - }, - listOrderedItemText: { - fontWeight: 'bold', - lineHeight: 20, - }, - paragraph: { - marginTop: 10, - marginBottom: 10, - flexWrap: 'wrap', - flexDirection: 'row', - alignItems: 'flex-start', - justifyContent: 'flex-start', - }, - hardbreak: { - width: '100%', - height: 1, - }, - strong: { - fontWeight: 'bold', - }, - table: { - borderWidth: 1, - borderColor: '#000000', - borderRadius: 3, - }, - tableHeader: {}, - tableHeaderCell: { - flex: 1, - // color: '#000000', - padding: 5, - // backgroundColor: 'green', - }, - tableRow: { - borderBottomWidth: 1, - borderColor: '#000000', - flexDirection: 'row', - }, - tableRowCell: { - flex: 1, - padding: 5, - }, - text: {}, - strikethrough: { - textDecorationLine: 'line-through', - }, - link: { - textDecorationLine: 'underline', - }, - blocklink: { - flex: 1, - borderColor: '#000000', - borderBottomWidth: 1, - - }, - u: { - borderColor: '#000000', - borderBottomWidth: 1, - }, - image: { - flex: 1, - }, -}); diff --git a/src/lib/styles.ts b/src/lib/styles.ts new file mode 100644 index 00000000..560525f6 --- /dev/null +++ b/src/lib/styles.ts @@ -0,0 +1,203 @@ +import { Platform, StyleSheet } from 'react-native'; +import PlatformEnum from './data/PlatformEnum'; + +const monospaceFont = Platform.select({ + [PlatformEnum.IOS]: 'Menlo', + [PlatformEnum.ANDROID]: 'monospace', + default: 'monospace', +}); + +export const styles = StyleSheet.create({ + root: {}, + view: {}, + codeBlock: { + backgroundColor: '#f6f8fa', + padding: 16, + borderRadius: 6, + fontFamily: monospaceFont, + fontSize: 13.6, + lineHeight: 20, + marginBottom: 16, + }, + codeInline: { + backgroundColor: 'rgba(175,184,193,0.2)', + paddingHorizontal: 6, + paddingVertical: 3, + borderRadius: 6, + fontFamily: monospaceFont, + fontSize: 13.6, + }, + del: { + textDecorationLine: 'line-through', + }, + em: { + fontStyle: 'italic', + }, + headingContainer: { + flexDirection: 'row', + marginTop: 24, + marginBottom: 16, + }, + heading: { + fontWeight: '600', + }, + heading1: { + fontSize: 32, + lineHeight: 40, + }, + heading1Container: { + paddingBottom: 10, + borderBottomWidth: 1, + borderBottomColor: '#d8dee4', + }, + heading2: { + fontSize: 24, + lineHeight: 30, + }, + heading2Container: { + paddingBottom: 8, + borderBottomWidth: 1, + borderBottomColor: '#d8dee4', + }, + heading3: { + fontSize: 20, + lineHeight: 25, + }, + heading4: { + fontSize: 16, + lineHeight: 20, + }, + heading5: { + fontSize: 14, + lineHeight: 18, + }, + heading6: { + fontSize: 13.6, + lineHeight: 17, + color: '#656d76', + }, + hr: { + backgroundColor: '#d0d7de', + height: 4, + marginTop: 24, + marginBottom: 24, + }, + blockquote: { + borderLeftWidth: 4, + borderLeftColor: '#d0d7de', + paddingHorizontal: 16, + marginBottom: 16, + }, + inlineCode: { + borderRadius: 6, + backgroundColor: 'rgba(175,184,193,0.2)', + fontFamily: monospaceFont, + paddingHorizontal: 6, + paddingVertical: 3, + fontSize: 13.6, + }, + list: { + marginBottom: 16, + }, + listItem: { + flex: 1, + flexWrap: 'wrap', + }, + listUnordered: {}, + listUnorderedItem: { + flexDirection: 'row', + alignItems: 'flex-start', + marginTop: 4, + }, + listUnorderedItemIcon: { + marginLeft: 10, + marginRight: 10, + lineHeight: 24, + }, + listUnorderedItemText: { + fontSize: 16, + lineHeight: 24, + }, + listOrdered: {}, + listOrderedItem: { + flexDirection: 'row', + alignItems: 'flex-start', + marginTop: 4, + }, + listOrderedItemIcon: { + marginLeft: 10, + marginRight: 10, + lineHeight: 24, + }, + listOrderedItemText: { + lineHeight: 24, + }, + paragraph: { + marginTop: 0, + marginBottom: 16, + flexWrap: 'wrap', + flexDirection: 'row', + alignItems: 'flex-start', + justifyContent: 'flex-start', + }, + hardbreak: { + width: '100%', + height: 1, + }, + strong: { + fontWeight: 'bold', + }, + table: { + borderWidth: 1, + borderColor: '#d0d7de', + marginBottom: 16, + }, + tableHeader: { + backgroundColor: '#f6f8fa', + }, + tableHeaderCell: { + flex: 1, + paddingVertical: 6, + paddingHorizontal: 13, + borderWidth: 1, + borderColor: '#d0d7de', + fontWeight: '600', + }, + tableRow: { + borderBottomWidth: 1, + borderColor: '#d0d7de', + flexDirection: 'row', + }, + tableRowCell: { + flex: 1, + paddingVertical: 6, + paddingHorizontal: 13, + borderWidth: 1, + borderColor: '#d0d7de', + }, + text: { + fontSize: 16, + lineHeight: 24, + }, + strikethrough: { + textDecorationLine: 'line-through', + }, + link: { + color: '#0969da', + }, + blocklink: { + flex: 1, + borderColor: '#d0d7de', + borderBottomWidth: 1, + }, + u: { + borderColor: '#d0d7de', + borderBottomWidth: 1, + }, + image: { + flex: 1, + }, + pre: { + marginBottom: 16, + }, +}); diff --git a/src/lib/util/Token.js b/src/lib/util/Token.js deleted file mode 100644 index 9a7c18c5..00000000 --- a/src/lib/util/Token.js +++ /dev/null @@ -1,8 +0,0 @@ -export default class Token { - constructor(type, nesting = 0, children = null, block = false) { - this.type = type; - this.nesting = nesting; - this.children = children; - this.block = block; - } -} diff --git a/src/lib/util/Token.ts b/src/lib/util/Token.ts new file mode 100644 index 00000000..6f478c8f --- /dev/null +++ b/src/lib/util/Token.ts @@ -0,0 +1,13 @@ +export default class Token { + type: string; + nesting: number; + children: Token[] | null; + block: boolean; + + constructor(type: string, nesting: number = 0, children: Token[] | null = null, block: boolean = false) { + this.type = type; + this.nesting = nesting; + this.children = children; + this.block = block; + } +} diff --git a/src/lib/util/applyStyle.js b/src/lib/util/applyStyle.js deleted file mode 100644 index 23a2b86b..00000000 --- a/src/lib/util/applyStyle.js +++ /dev/null @@ -1,22 +0,0 @@ -import React, { Component } from 'react'; -import { Text } from 'react-native'; - -/** - * - * @param Array children - * @param Array styles - * @param {string} type - */ -export default function applyStyle(children, styles, type) { - if (!(styles instanceof Array)) { - styles = [styles]; - } - - return children.map(child => { - if (child.type.displayName === type) { - return ; - } - - return child; - }); -} diff --git a/src/lib/util/applyStyle.tsx b/src/lib/util/applyStyle.tsx new file mode 100644 index 00000000..fd7d06c1 --- /dev/null +++ b/src/lib/util/applyStyle.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import type { ReactElement } from 'react'; +import { Text } from 'react-native'; + +export default function applyStyle( + children: ReactElement[], + styles: unknown | unknown[], + type: string +): ReactElement[] { + const styleArray = Array.isArray(styles) ? styles : [styles]; + + return children.map((child) => { + const displayName = (child.type as { displayName?: string })?.displayName; + if (displayName === type) { + return ; + } + + return child; + }); +} diff --git a/src/lib/util/cleanupTokens.js b/src/lib/util/cleanupTokens.js deleted file mode 100644 index d49f4642..00000000 --- a/src/lib/util/cleanupTokens.js +++ /dev/null @@ -1,46 +0,0 @@ -import getTokenTypeByToken from './getTokenTypeByToken'; -import flattenInlineTokens from './flattenInlineTokens'; - -export function cleanupTokens(tokens) { - tokens = flattenInlineTokens(tokens); - tokens.forEach(token => { - token.type = getTokenTypeByToken(token); - - // set image and hardbreak to block elements - if (token.type === 'image' || token.type === 'hardbreak') { - token.block = true; - } - }); - - /** - * changing a link token to a blocklink to fix issue where link tokens with - * nested non text tokens breaks component - */ - const stack = []; - tokens = tokens.reduce((acc, token, index) => { - if (token.type === 'link' && token.nesting === 1) { - stack.push(token); - } else if (stack.length > 0 && token.type === 'link' && token.nesting === -1) { - if (stack.some(stackToken => stackToken.block)) { - stack[0].type = 'blocklink'; - stack[0].block = true; - token.type = 'blocklink'; - token.block = true; - } - - stack.push(token); - - while (stack.length) { - acc.push(stack.shift()); - } - } else if (stack.length > 0) { - stack.push(token); - } else { - acc.push(token); - } - - return acc; - }, []); - - return tokens; -} diff --git a/example/react-native-markdown-renderer/lib/util/cleanupTokens.js b/src/lib/util/cleanupTokens.ts similarity index 65% rename from example/react-native-markdown-renderer/lib/util/cleanupTokens.js rename to src/lib/util/cleanupTokens.ts index d49f4642..a914b92f 100644 --- a/example/react-native-markdown-renderer/lib/util/cleanupTokens.js +++ b/src/lib/util/cleanupTokens.ts @@ -1,9 +1,18 @@ import getTokenTypeByToken from './getTokenTypeByToken'; import flattenInlineTokens from './flattenInlineTokens'; -export function cleanupTokens(tokens) { - tokens = flattenInlineTokens(tokens); - tokens.forEach(token => { +interface CleanupToken { + type: string; + tag?: string; + nesting?: number; + block?: boolean; + children?: CleanupToken[] | null; + [key: string]: unknown; +} + +export function cleanupTokens(tokens: T[]): T[] { + let result = flattenInlineTokens(tokens); + result.forEach((token) => { token.type = getTokenTypeByToken(token); // set image and hardbreak to block elements @@ -16,12 +25,12 @@ export function cleanupTokens(tokens) { * changing a link token to a blocklink to fix issue where link tokens with * nested non text tokens breaks component */ - const stack = []; - tokens = tokens.reduce((acc, token, index) => { + const stack: T[] = []; + result = result.reduce((acc, token) => { if (token.type === 'link' && token.nesting === 1) { stack.push(token); } else if (stack.length > 0 && token.type === 'link' && token.nesting === -1) { - if (stack.some(stackToken => stackToken.block)) { + if (stack.some((stackToken) => stackToken.block)) { stack[0].type = 'blocklink'; stack[0].block = true; token.type = 'blocklink'; @@ -31,7 +40,7 @@ export function cleanupTokens(tokens) { stack.push(token); while (stack.length) { - acc.push(stack.shift()); + acc.push(stack.shift()!); } } else if (stack.length > 0) { stack.push(token); @@ -42,5 +51,5 @@ export function cleanupTokens(tokens) { return acc; }, []); - return tokens; + return result; } diff --git a/src/lib/util/flattenInlineTokens.js b/src/lib/util/flattenInlineTokens.js deleted file mode 100644 index 4fe3b605..00000000 --- a/src/lib/util/flattenInlineTokens.js +++ /dev/null @@ -1,14 +0,0 @@ -export default function flattenTokens(tokens) { - return tokens.reduce((acc, curr) => { - if (curr.type === 'inline' && curr.children && curr.children.length > 0) { - const children = flattenTokens(curr.children); - while (children.length) { - acc.push(children.shift()); - } - } else { - acc.push(curr); - } - - return acc; - }, []); -} diff --git a/src/lib/util/flattenInlineTokens.ts b/src/lib/util/flattenInlineTokens.ts new file mode 100644 index 00000000..b0e8fa87 --- /dev/null +++ b/src/lib/util/flattenInlineTokens.ts @@ -0,0 +1,20 @@ +interface FlattenableToken { + type: string; + children?: FlattenableToken[] | null; + [key: string]: unknown; +} + +export default function flattenTokens(tokens: T[]): T[] { + return tokens.reduce((acc, curr) => { + if (curr.type === 'inline' && curr.children && curr.children.length > 0) { + const children = flattenTokens(curr.children as T[]); + while (children.length) { + acc.push(children.shift()!); + } + } else { + acc.push(curr); + } + + return acc; + }, []); +} diff --git a/src/lib/util/getTokenTypeByToken.js b/src/lib/util/getTokenTypeByToken.js deleted file mode 100644 index 501267f2..00000000 --- a/src/lib/util/getTokenTypeByToken.js +++ /dev/null @@ -1,44 +0,0 @@ -const regSelectOpenClose = /_open|_close/g; -const regSelectHofH1 = /\w/g; - -/** - * - * @example { - "type": "heading_open", - "tag": "h1", - "attrs": null, - "map": [ - 1, - 2 - ], - "nesting": 1, - "level": 0, - "children": null, - "content": "", - "markup": "#", - "info": "", - "meta": null, - "block": true, - "hidden": false - } - * @param token - * @return {String} - */ -export default function getTokenTypeByToken(token) { - let cleanedType = "unknown"; - - if (token.type) { - cleanedType = token.type.replace(regSelectOpenClose, ""); - } - - switch (cleanedType) { - case "heading": { - cleanedType = `${cleanedType}${token.tag.substr(1)}`; - break; - } - } - - return cleanedType; -} - - diff --git a/src/lib/util/getTokenTypeByToken.ts b/src/lib/util/getTokenTypeByToken.ts new file mode 100644 index 00000000..a63540e8 --- /dev/null +++ b/src/lib/util/getTokenTypeByToken.ts @@ -0,0 +1,23 @@ +export interface TokenLike { + type?: string; + tag?: string; +} + +const regSelectOpenClose = /_open|_close/g; + +export default function getTokenTypeByToken(token: TokenLike): string { + let cleanedType = 'unknown'; + + if (token.type) { + cleanedType = token.type.replace(regSelectOpenClose, ''); + } + + switch (cleanedType) { + case 'heading': { + cleanedType = `${cleanedType}${(token.tag || '').substr(1)}`; + break; + } + } + + return cleanedType; +} diff --git a/src/lib/util/getUniqueID.js b/src/lib/util/getUniqueID.js deleted file mode 100644 index 55e1d31e..00000000 --- a/src/lib/util/getUniqueID.js +++ /dev/null @@ -1,6 +0,0 @@ - -let uuid = new Date().getTime(); -export default function getUniqueID() { - uuid++; - return `rnmr_${uuid.toString(16)}`; -} diff --git a/src/lib/util/getUniqueID.ts b/src/lib/util/getUniqueID.ts new file mode 100644 index 00000000..7a96cd83 --- /dev/null +++ b/src/lib/util/getUniqueID.ts @@ -0,0 +1,6 @@ +let uuid: number = new Date().getTime(); + +export default function getUniqueID(): string { + uuid++; + return `rnmr_${uuid.toString(16)}`; +} diff --git a/src/lib/util/groupTextTokens.js b/src/lib/util/groupTextTokens.js deleted file mode 100644 index d62ded89..00000000 --- a/src/lib/util/groupTextTokens.js +++ /dev/null @@ -1,26 +0,0 @@ -// import getIsTextType from './getIsTextType'; -import Token from './Token'; -// import getIsInlineTextType from './getIsInlineTextType'; - -export default function groupTextTokens(tokens) { - const result = []; - - let hasGroup = false; - tokens.forEach((token, index) => { - if (!token.block && !hasGroup) { - hasGroup = true; - result.push(new Token('textgroup', 1)); - result.push(token); - } else if (!token.block && hasGroup) { - result.push(token); - } else if (token.block && hasGroup) { - hasGroup = false; - result.push(new Token('textgroup', -1)); - result.push(token); - } else { - result.push(token); - } - }); - - return result; -} diff --git a/example/react-native-markdown-renderer/lib/util/groupTextTokens.js b/src/lib/util/groupTextTokens.ts similarity index 66% rename from example/react-native-markdown-renderer/lib/util/groupTextTokens.js rename to src/lib/util/groupTextTokens.ts index d62ded89..726e00d4 100644 --- a/example/react-native-markdown-renderer/lib/util/groupTextTokens.js +++ b/src/lib/util/groupTextTokens.ts @@ -1,12 +1,15 @@ -// import getIsTextType from './getIsTextType'; import Token from './Token'; -// import getIsInlineTextType from './getIsInlineTextType'; -export default function groupTextTokens(tokens) { - const result = []; +interface GroupableToken { + block?: boolean; + [key: string]: unknown; +} + +export default function groupTextTokens(tokens: T[]): (T | Token)[] { + const result: (T | Token)[] = []; let hasGroup = false; - tokens.forEach((token, index) => { + tokens.forEach((token) => { if (!token.block && !hasGroup) { hasGroup = true; result.push(new Token('textgroup', 1)); diff --git a/src/lib/util/hasParents.js b/src/lib/util/hasParents.js deleted file mode 100644 index 971cf982..00000000 --- a/src/lib/util/hasParents.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * - * @param {Array} parents - * @param {string} type - * @return {boolean} - */ -export default function hasParents(parents, type) { - return parents.findIndex(el => el.type === type) > -1; - -} diff --git a/src/lib/util/hasParents.ts b/src/lib/util/hasParents.ts new file mode 100644 index 00000000..dbbb1f8d --- /dev/null +++ b/src/lib/util/hasParents.ts @@ -0,0 +1,3 @@ +export default function hasParents(parents: Array<{ type: string }>, type: string): boolean { + return parents.findIndex((el) => el.type === type) > -1; +} diff --git a/src/lib/util/openUrl.js b/src/lib/util/openUrl.ts similarity index 61% rename from src/lib/util/openUrl.js rename to src/lib/util/openUrl.ts index 4ffe2e6d..cd95dcf8 100644 --- a/src/lib/util/openUrl.js +++ b/src/lib/util/openUrl.ts @@ -1,6 +1,6 @@ import { Linking } from 'react-native'; -export default function openUrl(url) { +export default function openUrl(url: string): void { if (url) { Linking.openURL(url); } diff --git a/src/lib/util/splitTextNonTextNodes.js b/src/lib/util/splitTextNonTextNodes.js deleted file mode 100644 index 3e6290f5..00000000 --- a/src/lib/util/splitTextNonTextNodes.js +++ /dev/null @@ -1,14 +0,0 @@ -export default function splitTextNonTextNodes(children) { - return children.reduce( - (acc, curr) => { - if (curr.type.displayName === "Text") { - acc.textNodes.push(curr); - } else { - acc.nonTextNodes.push(curr); - } - - return acc; - }, - { textNodes: [], nonTextNodes: [] } - ); -} diff --git a/src/lib/util/splitTextNonTextNodes.ts b/src/lib/util/splitTextNonTextNodes.ts new file mode 100644 index 00000000..ed5fc941 --- /dev/null +++ b/src/lib/util/splitTextNonTextNodes.ts @@ -0,0 +1,22 @@ +import type { ReactElement } from 'react'; + +interface SplitResult { + textNodes: ReactElement[]; + nonTextNodes: ReactElement[]; +} + +export default function splitTextNonTextNodes(children: ReactElement[]): SplitResult { + return children.reduce( + (acc, curr) => { + const displayName = (curr.type as { displayName?: string })?.displayName; + if (displayName === 'Text') { + acc.textNodes.push(curr); + } else { + acc.nonTextNodes.push(curr); + } + + return acc; + }, + { textNodes: [], nonTextNodes: [] } + ); +} diff --git a/src/lib/util/stringToTokens.js b/src/lib/util/stringToTokens.js deleted file mode 100644 index 78fdee61..00000000 --- a/src/lib/util/stringToTokens.js +++ /dev/null @@ -1,10 +0,0 @@ -export function stringToTokens(source, markdownIt) { - let result = []; - try { - result = markdownIt.parse(source, {}); - } catch (err) { - console.warn(err); - } - - return result; -} diff --git a/src/lib/util/stringToTokens.ts b/src/lib/util/stringToTokens.ts new file mode 100644 index 00000000..71e23642 --- /dev/null +++ b/src/lib/util/stringToTokens.ts @@ -0,0 +1,13 @@ +import type MarkdownIt from 'markdown-it'; +import type MdToken from 'markdown-it/lib/token.mjs'; + +export function stringToTokens(source: string, markdownIt: MarkdownIt): MdToken[] { + let result: MdToken[] = []; + try { + result = markdownIt.parse(source, {}); + } catch (err) { + console.warn(err); + } + + return result; +} diff --git a/src/lib/util/tokensToAST.js b/src/lib/util/tokensToAST.js deleted file mode 100644 index 4428c29a..00000000 --- a/src/lib/util/tokensToAST.js +++ /dev/null @@ -1,72 +0,0 @@ -import getUniqueID from './getUniqueID'; -import getTokenTypeByToken from './getTokenTypeByToken'; - -/** - * - * @param {{type: string, tag:string, content: string, children: *, attrs: Array, meta, info, block: boolean}} token - * @param {number} tokenIndex - * @return {{type: string, content, tokenIndex: *, index: number, attributes: {}, children: *}} - */ -function createNode(token, tokenIndex) { - const type = getTokenTypeByToken(token); - const content = token.content; - - let attributes = {}; - - if (token.attrs) { - attributes = token.attrs.reduce((prev, curr) => { - const [name, value] = curr; - return { ...prev, [name]: value }; - }, {}); - } - - return { - type, - sourceType: token.type, - sourceInfo: token.info, - sourceMeta: token.meta, - block: token.block, - markup: token.markup, - key: getUniqueID(), - content, - tokenIndex, - index: 0, - attributes, - children: tokensToAST(token.children), - }; -} - -/** - * - * @param {Array<{type: string, tag:string, content: string, children: *, attrs: Array}>}tokens - * @return {Array} - */ -export default function tokensToAST(tokens) { - let stack = []; - let children = []; - - if (!tokens || tokens.length === 0) { - return []; - } - - for (let i = 0; i < tokens.length; i++) { - const token = tokens[i]; - const astNode = createNode(token, i); - - if (!(astNode.type === 'text' && astNode.children.length === 0 && astNode.content === '')) { - astNode.index = children.length; - - if (token.nesting === 1) { - children.push(astNode); - stack.push(children); - children = astNode.children; - } else if (token.nesting === -1) { - children = stack.pop(); - } else if (token.nesting === 0) { - children.push(astNode); - } - } - } - - return children; -} diff --git a/example/react-native-markdown-renderer/lib/util/tokensToAST.js b/src/lib/util/tokensToAST.ts similarity index 52% rename from example/react-native-markdown-renderer/lib/util/tokensToAST.js rename to src/lib/util/tokensToAST.ts index 4428c29a..beb4c4a9 100644 --- a/example/react-native-markdown-renderer/lib/util/tokensToAST.js +++ b/src/lib/util/tokensToAST.ts @@ -1,20 +1,29 @@ import getUniqueID from './getUniqueID'; import getTokenTypeByToken from './getTokenTypeByToken'; +import type { ASTNode } from '../../types'; -/** - * - * @param {{type: string, tag:string, content: string, children: *, attrs: Array, meta, info, block: boolean}} token - * @param {number} tokenIndex - * @return {{type: string, content, tokenIndex: *, index: number, attributes: {}, children: *}} - */ -function createNode(token, tokenIndex) { +interface TokenInput { + type?: string; + tag?: string; + content?: string; + attrs?: [string, string][] | null; + info?: string; + meta?: unknown; + block?: boolean; + markup?: string; + nesting?: number; + children?: TokenInput[] | null; + [key: string]: unknown; +} + +function createNode(token: TokenInput, tokenIndex: number): ASTNode { const type = getTokenTypeByToken(token); - const content = token.content; + const content = token.content || ''; - let attributes = {}; + let attributes: Record = {}; if (token.attrs) { - attributes = token.attrs.reduce((prev, curr) => { + attributes = token.attrs.reduce>((prev, curr) => { const [name, value] = curr; return { ...prev, [name]: value }; }, {}); @@ -22,28 +31,23 @@ function createNode(token, tokenIndex) { return { type, - sourceType: token.type, - sourceInfo: token.info, + sourceType: token.type || '', + sourceInfo: token.info || '', sourceMeta: token.meta, - block: token.block, - markup: token.markup, + block: token.block || false, + markup: token.markup || '', key: getUniqueID(), content, tokenIndex, index: 0, attributes, - children: tokensToAST(token.children), + children: tokensToAST(token.children || null), }; } -/** - * - * @param {Array<{type: string, tag:string, content: string, children: *, attrs: Array}>}tokens - * @return {Array} - */ -export default function tokensToAST(tokens) { - let stack = []; - let children = []; +export default function tokensToAST(tokens: TokenInput[] | null | undefined): ASTNode[] { + const stack: ASTNode[][] = []; + let children: ASTNode[] = []; if (!tokens || tokens.length === 0) { return []; @@ -61,7 +65,7 @@ export default function tokensToAST(tokens) { stack.push(children); children = astNode.children; } else if (token.nesting === -1) { - children = stack.pop(); + children = stack.pop()!; } else if (token.nesting === 0) { children.push(astNode); } diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 00000000..e5ba363e --- /dev/null +++ b/src/types.ts @@ -0,0 +1,29 @@ +import type { ReactNode } from 'react'; + +export interface ASTNode { + type: string; + sourceType: string; + sourceInfo: string; + sourceMeta: unknown; + block: boolean; + markup: string; + key: string; + content: string; + tokenIndex: number; + index: number; + attributes: Record; + children: ASTNode[]; +} + +export type RenderFunction = ( + node: ASTNode, + children: ReactNode[], + parentNodes: ASTNode[], + styles: MarkdownStyles +) => ReactNode; + +export interface RenderRules { + [name: string]: RenderFunction; +} + +export type MarkdownStyles = Record; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..2be4ac97 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "declaration": true, + "declarationMap": true, + "sourceMap": true + }, + "exclude": ["lib", "node_modules", "example", "**/__tests__", "**/*.test.ts", "**/*.test.tsx"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..c2be89d1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "strict": true, + "jsx": "react-jsx", + "target": "es2020", + "module": "esnext", + "moduleResolution": "bundler", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "lib", + "rootDir": "src", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "allowJs": false, + "noEmit": true + }, + "include": ["src"], + "exclude": ["lib", "node_modules", "example", "**/__tests__"] +}