From 2a44e4ca2931f0b3f804ebabb0a5446412ca3101 Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Sun, 8 Feb 2026 22:20:21 +0100 Subject: [PATCH 1/9] chore: set up build tooling and project infrastructure for v4 - Add TypeScript, ESLint, Jest, Babel, and react-native-builder-bob configs - Update package.json with modern deps (markdown-it ^14, React 18+, RN 0.73+) - Remove prop-types, react-native-fit-image, chokidar, fs-extra - Replace .npmignore with files field in package.json - Add CJS + ESM + TypeScript build targets via builder-bob --- .eslintrc.js | 25 ++++++++++++++++ .gitignore | 4 ++- .npmignore | 3 -- babel.config.js | 3 ++ jest.config.js | 14 +++++++++ package.json | 70 ++++++++++++++++++++++++++++++++++++--------- tsconfig.build.json | 10 +++++++ tsconfig.json | 23 +++++++++++++++ 8 files changed, 134 insertions(+), 18 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .npmignore create mode 100644 babel.config.js create mode 100644 jest.config.js create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..d83ffabd --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,25 @@ +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', + }, + ignorePatterns: ['lib/', 'example/', 'node_modules/'], +}; diff --git a/.gitignore b/.gitignore index 5c77aa99..77f94b31 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/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/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..e709cb15 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/src/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/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..fe161c66 --- /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": true, + "noEmit": true + }, + "include": ["src"], + "exclude": ["lib", "node_modules", "example", "**/__tests__"] +} From 25cf942070a22bea36506b067c87e1113af3fcd2 Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Sun, 8 Feb 2026 22:24:26 +0100 Subject: [PATCH 2/9] feat: convert utility files to TypeScript with unit tests - Convert all 13 utility files from JS to TS/TSX - Create shared types.ts with ASTNode, RenderFunction, RenderRules, MarkdownStyles - Add 11 test suites with 47 unit tests covering all utilities - All tests pass, TypeScript compiles cleanly --- .gitignore | 2 +- src/__tests__/util/Token.test.ts | 26 ++++++ src/__tests__/util/applyStyle.test.tsx | 37 ++++++++ src/__tests__/util/cleanupTokens.test.ts | 46 +++++++++ .../util/flattenInlineTokens.test.ts | 47 ++++++++++ .../util/getTokenTypeByToken.test.ts | 32 +++++++ src/__tests__/util/getUniqueID.test.ts | 22 +++++ src/__tests__/util/groupTextTokens.test.ts | 59 ++++++++++++ src/__tests__/util/hasParents.test.ts | 17 ++++ .../util/splitTextNonTextNodes.test.ts | 29 ++++++ src/__tests__/util/stringToTokens.test.ts | 30 ++++++ src/__tests__/util/tokensToAST.test.ts | 93 +++++++++++++++++++ src/lib/data/PlatformEnum.js | 4 - src/lib/data/PlatformEnum.ts | 8 ++ src/lib/util/Token.js | 8 -- src/lib/util/Token.ts | 13 +++ src/lib/util/applyStyle.js | 22 ----- src/lib/util/applyStyle.tsx | 20 ++++ .../{cleanupTokens.js => cleanupTokens.ts} | 25 +++-- src/lib/util/flattenInlineTokens.js | 14 --- src/lib/util/flattenInlineTokens.ts | 20 ++++ src/lib/util/getTokenTypeByToken.js | 44 --------- src/lib/util/getTokenTypeByToken.ts | 23 +++++ src/lib/util/getUniqueID.js | 6 -- src/lib/util/getUniqueID.ts | 6 ++ ...{groupTextTokens.js => groupTextTokens.ts} | 13 ++- src/lib/util/hasParents.js | 10 -- src/lib/util/hasParents.ts | 3 + src/lib/util/{openUrl.js => openUrl.ts} | 2 +- src/lib/util/splitTextNonTextNodes.js | 14 --- src/lib/util/splitTextNonTextNodes.ts | 22 +++++ src/lib/util/stringToTokens.js | 10 -- src/lib/util/stringToTokens.ts | 13 +++ .../util/{tokensToAST.js => tokensToAST.ts} | 52 ++++++----- src/types.ts | 29 ++++++ 35 files changed, 650 insertions(+), 171 deletions(-) create mode 100644 src/__tests__/util/Token.test.ts create mode 100644 src/__tests__/util/applyStyle.test.tsx create mode 100644 src/__tests__/util/cleanupTokens.test.ts create mode 100644 src/__tests__/util/flattenInlineTokens.test.ts create mode 100644 src/__tests__/util/getTokenTypeByToken.test.ts create mode 100644 src/__tests__/util/getUniqueID.test.ts create mode 100644 src/__tests__/util/groupTextTokens.test.ts create mode 100644 src/__tests__/util/hasParents.test.ts create mode 100644 src/__tests__/util/splitTextNonTextNodes.test.ts create mode 100644 src/__tests__/util/stringToTokens.test.ts create mode 100644 src/__tests__/util/tokensToAST.test.ts delete mode 100644 src/lib/data/PlatformEnum.js create mode 100644 src/lib/data/PlatformEnum.ts delete mode 100644 src/lib/util/Token.js create mode 100644 src/lib/util/Token.ts delete mode 100644 src/lib/util/applyStyle.js create mode 100644 src/lib/util/applyStyle.tsx rename src/lib/util/{cleanupTokens.js => cleanupTokens.ts} (65%) delete mode 100644 src/lib/util/flattenInlineTokens.js create mode 100644 src/lib/util/flattenInlineTokens.ts delete mode 100644 src/lib/util/getTokenTypeByToken.js create mode 100644 src/lib/util/getTokenTypeByToken.ts delete mode 100644 src/lib/util/getUniqueID.js create mode 100644 src/lib/util/getUniqueID.ts rename src/lib/util/{groupTextTokens.js => groupTextTokens.ts} (66%) delete mode 100644 src/lib/util/hasParents.js create mode 100644 src/lib/util/hasParents.ts rename src/lib/util/{openUrl.js => openUrl.ts} (61%) delete mode 100644 src/lib/util/splitTextNonTextNodes.js create mode 100644 src/lib/util/splitTextNonTextNodes.ts delete mode 100644 src/lib/util/stringToTokens.js create mode 100644 src/lib/util/stringToTokens.ts rename src/lib/util/{tokensToAST.js => tokensToAST.ts} (52%) create mode 100644 src/types.ts diff --git a/.gitignore b/.gitignore index 77f94b31..06137c43 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,5 @@ /.idea package-lock.json /.DS_Store -lib/ +/lib/ *.tsbuildinfo \ No newline at end of file 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..ae8b6731 --- /dev/null +++ b/src/__tests__/util/applyStyle.test.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import { create } from 'react-test-renderer'; +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/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/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.ts similarity index 65% rename from src/lib/util/cleanupTokens.js rename to src/lib/util/cleanupTokens.ts index d49f4642..a914b92f 100644 --- a/src/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.ts similarity index 66% rename from src/lib/util/groupTextTokens.js rename to src/lib/util/groupTextTokens.ts index d62ded89..726e00d4 100644 --- a/src/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.ts similarity index 52% rename from src/lib/util/tokensToAST.js rename to src/lib/util/tokensToAST.ts index 4428c29a..beb4c4a9 100644 --- a/src/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; From d76f999e32f2aced5496d4af707fc44c81ccc946 Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Sun, 8 Feb 2026 22:27:18 +0100 Subject: [PATCH 3/9] feat: convert core library to TypeScript with tests - Convert styles, AstRenderer, parser, renderRules, plugins to TypeScript - Remove react-native-fit-image dependency, use RN Image instead - Remove broken PropTypes import from react in AstRenderer - Add 4 test suites (AstRenderer, parser, renderRules, PluginContainer) - Total: 15 test suites, 69 tests all passing --- src/__tests__/AstRenderer.test.tsx | 105 ++++++++ src/__tests__/parser.test.ts | 50 ++++ src/__tests__/plugin/PluginContainer.test.ts | 28 ++ src/__tests__/renderRules.test.tsx | 148 +++++++++++ src/lib/AstRenderer.js | 71 ----- src/lib/AstRenderer.tsx | 54 ++++ src/lib/parser.js | 23 -- src/lib/parser.ts | 22 ++ src/lib/plugin/PluginContainer.js | 10 - src/lib/plugin/PluginContainer.ts | 13 + src/lib/plugin/blockPlugin.js | 166 ------------ src/lib/plugin/blockPlugin.ts | 142 ++++++++++ src/lib/renderRules.js | 237 ----------------- src/lib/renderRules.tsx | 263 +++++++++++++++++++ src/lib/{styles.js => styles.ts} | 10 - 15 files changed, 825 insertions(+), 517 deletions(-) create mode 100644 src/__tests__/AstRenderer.test.tsx create mode 100644 src/__tests__/parser.test.ts create mode 100644 src/__tests__/plugin/PluginContainer.test.ts create mode 100644 src/__tests__/renderRules.test.tsx delete mode 100644 src/lib/AstRenderer.js create mode 100644 src/lib/AstRenderer.tsx delete mode 100644 src/lib/parser.js create mode 100644 src/lib/parser.ts delete mode 100644 src/lib/plugin/PluginContainer.js create mode 100644 src/lib/plugin/PluginContainer.ts delete mode 100644 src/lib/plugin/blockPlugin.js create mode 100644 src/lib/plugin/blockPlugin.ts delete mode 100644 src/lib/renderRules.js create mode 100644 src/lib/renderRules.tsx rename src/lib/{styles.js => styles.ts} (96%) diff --git a/src/__tests__/AstRenderer.test.tsx b/src/__tests__/AstRenderer.test.tsx new file mode 100644 index 00000000..5fc09cc5 --- /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__/parser.test.ts b/src/__tests__/parser.test.ts new file mode 100644 index 00000000..2136ac1d --- /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/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/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..6c4fb849 --- /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.ts similarity index 96% rename from src/lib/styles.js rename to src/lib/styles.ts index 7f7a7ea3..99116081 100644 --- a/src/lib/styles.js +++ b/src/lib/styles.ts @@ -1,9 +1,6 @@ import { Platform, StyleSheet } from 'react-native'; import PlatformEnum from './data/PlatformEnum'; -/** - * - */ export const styles = StyleSheet.create({ root: {}, view: {}, @@ -69,15 +66,12 @@ export const styles = StyleSheet.create({ listItem: { flex: 1, flexWrap: 'wrap', - // backgroundColor: 'green', }, listUnordered: {}, - listUnorderedItem: { flexDirection: 'row', justifyContent: 'flex-start', }, - listUnorderedItemIcon: { marginLeft: 10, marginRight: 10, @@ -94,7 +88,6 @@ export const styles = StyleSheet.create({ fontSize: 20, lineHeight: 20, }, - listOrdered: {}, listOrderedItem: { flexDirection: 'row', @@ -138,9 +131,7 @@ export const styles = StyleSheet.create({ tableHeader: {}, tableHeaderCell: { flex: 1, - // color: '#000000', padding: 5, - // backgroundColor: 'green', }, tableRow: { borderBottomWidth: 1, @@ -162,7 +153,6 @@ export const styles = StyleSheet.create({ flex: 1, borderColor: '#000000', borderBottomWidth: 1, - }, u: { borderColor: '#000000', From bd4dcec681d515a649e7c70decd9c77549cee4c8 Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Sun, 8 Feb 2026 22:28:32 +0100 Subject: [PATCH 4/9] feat: convert Markdown component to functional with hooks - Replace class component with functional component using useMemo hooks - Remove deprecated componentWillMount and componentWillReceiveProps - Remove PropTypes, use TypeScript MarkdownProps interface instead - Delete hand-written index.d.ts (auto-generated by builder-bob now) - Export types: ASTNode, RenderFunction, RenderRules, MarkdownStyles, MarkdownProps - Set allowJs: false in tsconfig (all source is now TypeScript) - Add 25 Markdown component tests - Total: 16 test suites, 94 tests all passing --- src/__tests__/Markdown.test.tsx | 183 +++++++++++++++++++++++++++ src/index.d.ts | 86 ------------- src/index.js | 215 -------------------------------- src/index.tsx | 108 ++++++++++++++++ tsconfig.json | 2 +- 5 files changed, 292 insertions(+), 302 deletions(-) create mode 100644 src/__tests__/Markdown.test.tsx delete mode 100644 src/index.d.ts delete mode 100644 src/index.js create mode 100644 src/index.tsx diff --git a/src/__tests__/Markdown.test.tsx b/src/__tests__/Markdown.test.tsx new file mode 100644 index 00000000..f74cb59a --- /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/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..8af06ac9 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,108 @@ +import React, { 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) => { + md = md.use.apply(md, 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/tsconfig.json b/tsconfig.json index fe161c66..c2be89d1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, - "allowJs": true, + "allowJs": false, "noEmit": true }, "include": ["src"], From eb44c351c003adbea2fc895211e7b9a80ff7bc0c Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Sun, 8 Feb 2026 23:52:16 +0100 Subject: [PATCH 5/9] chore: add linting, integration tests, and polish - Fix all ESLint errors across source and test files - Add test file overrides in ESLint config (lenient on any in tests) - Disable react/prop-types rule (TypeScript handles this) - Fix unused React import and prefer-spread in index.tsx - Add integration test with 3 snapshot tests - Fix types path in package.json for builder-bob output - Bob build now produces clean CJS + ESM + TypeScript output - Total: 17 test suites, 99 tests all passing --- .eslintrc.js | 10 + package.json | 2 +- src/__tests__/AstRenderer.test.tsx | 2 +- src/__tests__/Markdown.test.tsx | 8 +- .../__snapshots__/integration.test.tsx.snap | 1918 +++++++++++++++++ src/__tests__/integration.test.tsx | 81 + src/__tests__/parser.test.ts | 8 +- src/__tests__/util/applyStyle.test.tsx | 1 - src/index.tsx | 5 +- 9 files changed, 2022 insertions(+), 13 deletions(-) create mode 100644 src/__tests__/__snapshots__/integration.test.tsx.snap create mode 100644 src/__tests__/integration.test.tsx diff --git a/.eslintrc.js b/.eslintrc.js index d83ffabd..0ea18741 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,6 +20,16 @@ module.exports = { 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/package.json b/package.json index e709cb15..dcbac3a1 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "source": "src/index.tsx", "main": "lib/commonjs/index.js", "module": "lib/module/index.js", - "types": "lib/typescript/src/index.d.ts", + "types": "lib/typescript/index.d.ts", "files": [ "src", "lib", diff --git a/src/__tests__/AstRenderer.test.tsx b/src/__tests__/AstRenderer.test.tsx index 5fc09cc5..9359f854 100644 --- a/src/__tests__/AstRenderer.test.tsx +++ b/src/__tests__/AstRenderer.test.tsx @@ -36,7 +36,7 @@ describe('rootRenderRule', () => { }); describe('AstRenderer', () => { - const textRule = jest.fn((node: ASTNode, children: any[], parent: any[], styles: any) => { + const textRule = jest.fn((node: ASTNode, _children: any[], _parent: any[], _styles: any) => { return React.createElement('Text', { key: node.key }, node.content); }); diff --git a/src/__tests__/Markdown.test.tsx b/src/__tests__/Markdown.test.tsx index f74cb59a..9c7e2dc1 100644 --- a/src/__tests__/Markdown.test.tsx +++ b/src/__tests__/Markdown.test.tsx @@ -102,7 +102,7 @@ describe('Markdown', () => { }); it('renders with custom renderer function', () => { - const customRenderer = (nodes: ASTNode[]) => ( + const customRenderer = (_nodes: ASTNode[]) => ( Custom Render @@ -126,7 +126,7 @@ describe('Markdown', () => { it('renders with plugins array', () => { // Simple no-op plugin - const noopPlugin = (md: MarkdownIt) => {}; + const noopPlugin = (_md: MarkdownIt) => {}; const container = new PluginContainer(noopPlugin); const tree = create({'# Hello'}); expect(tree.toJSON()).toBeTruthy(); @@ -134,7 +134,7 @@ describe('Markdown', () => { it('logs warning when both renderer and rules are provided', () => { const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); - const customRenderer = (nodes: ASTNode[]) => ; + const customRenderer = (_nodes: ASTNode[]) => ; create( null }}> {'# Hello'} @@ -146,7 +146,7 @@ describe('Markdown', () => { it('logs warning when both renderer and style are provided', () => { const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); - const customRenderer = (nodes: ASTNode[]) => ; + const customRenderer = (_nodes: ASTNode[]) => ; create( {'# Hello'} diff --git a/src/__tests__/__snapshots__/integration.test.tsx.snap b/src/__tests__/__snapshots__/integration.test.tsx.snap new file mode 100644 index 00000000..2121042f --- /dev/null +++ b/src/__tests__/__snapshots__/integration.test.tsx.snap @@ -0,0 +1,1918 @@ +// 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 index 2136ac1d..34d62bf1 100644 --- a/src/__tests__/parser.test.ts +++ b/src/__tests__/parser.test.ts @@ -6,7 +6,7 @@ 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[]) => { + const renderer = jest.fn((_nodes: ASTNode[]) => { return null as any; }); parser('# Hello', renderer, md); @@ -17,7 +17,7 @@ describe('parser', () => { }); it('parses "**bold**" and produces strong node', () => { - const renderer = jest.fn((nodes: ASTNode[]) => null as any); + 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 @@ -33,13 +33,13 @@ describe('parser', () => { }); it('parses empty string and calls renderer with empty array', () => { - const renderer = jest.fn((nodes: ASTNode[]) => null as any); + 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); + 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[]; diff --git a/src/__tests__/util/applyStyle.test.tsx b/src/__tests__/util/applyStyle.test.tsx index ae8b6731..723e7562 100644 --- a/src/__tests__/util/applyStyle.test.tsx +++ b/src/__tests__/util/applyStyle.test.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { create } from 'react-test-renderer'; import applyStyle from '../../lib/util/applyStyle'; describe('applyStyle', () => { diff --git a/src/index.tsx b/src/index.tsx index 8af06ac9..6fa2d7ee 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import type { ReactElement } from 'react'; import parser from './lib/parser'; import applyStyle from './lib/util/applyStyle'; @@ -70,7 +70,8 @@ export default function Markdown({ let md = markdownit; if (plugins.length > 0) { plugins.forEach((plugin) => { - md = md.use.apply(md, plugin.toArray() as [any, ...any[]]); + // eslint-disable-next-line @typescript-eslint/no-explicit-any, prefer-spread + md = md.use(...(plugin.toArray() as [any, ...any[]])); }); } return md; From 97ccd8a507aac25c49d40fd4dbd4fe0e90f9a61f Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Sun, 8 Feb 2026 23:55:52 +0100 Subject: [PATCH 6/9] docs: update README, add changelog, remove obsolete files for v4 Remove old example app, bin/ build scripts, export.json debug artifact, and legacy README.v1.3.6.md. Add CHANGELOG.md documenting all v4 breaking changes. Rewrite README.md with TypeScript examples, migration guide, and updated compatibility table. --- CHANGELOG.md | 40 + README.md | 317 +- README.v1.3.6.md | 291 - bin/copy-to-run.js | 17 - bin/data.json | 529 -- bin/example.js | 162 - bin/test.js | 13 - bin/watch.js | 25 - example/.babelrc | 3 - example/.buckconfig | 6 - example/.flowconfig | 54 - example/.gitattributes | 1 - example/.gitignore | 56 - example/.watchmanconfig | 1 - example/App.js | 152 - example/android/app/BUCK | 65 - example/android/app/build.gradle | 150 - example/android/app/proguard-rules.pro | 70 - .../android/app/src/main/AndroidManifest.xml | 26 - .../main/java/com/example/MainActivity.java | 15 - .../java/com/example/MainApplication.java | 45 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3418 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4842 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7718 -> 0 bytes .../app/src/main/res/values/strings.xml | 3 - .../app/src/main/res/values/styles.xml | 8 - example/android/build.gradle | 24 - example/android/gradle.properties | 20 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 52266 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - example/android/gradlew | 164 - example/android/gradlew.bat | 90 - example/android/keystores/BUCK | 8 - .../keystores/debug.keystore.properties | 4 - example/android/settings.gradle | 3 - example/app.json | 4 - example/index.js | 4 - example/ios/example-tvOS/Info.plist | 54 - example/ios/example-tvOSTests/Info.plist | 24 - example/ios/example.xcodeproj/project.pbxproj | 1468 ---- .../xcschemes/example-tvOS.xcscheme | 129 - .../xcshareddata/xcschemes/example.xcscheme | 129 - example/ios/example/AppDelegate.h | 14 - example/ios/example/AppDelegate.m | 35 - .../ios/example/Base.lproj/LaunchScreen.xib | 42 - .../AppIcon.appiconset/Contents.json | 38 - .../ios/example/Images.xcassets/Contents.json | 6 - example/ios/example/Info.plist | 56 - example/ios/example/main.m | 16 - example/ios/exampleTests/Info.plist | 24 - example/ios/exampleTests/exampleTests.m | 68 - example/package.json | 32 - .../react-native-markdown-renderer/index.d.ts | 86 - .../react-native-markdown-renderer/index.js | 215 - .../lib/AstRenderer.js | 71 - .../lib/data/PlatformEnum.js | 4 - .../lib/parser.js | 23 - .../lib/plugin/PluginContainer.js | 10 - .../lib/plugin/blockPlugin.js | 166 - .../lib/renderRules.js | 237 - .../lib/styles.js | 174 - .../lib/util/Token.js | 8 - .../lib/util/applyStyle.js | 22 - .../lib/util/cleanupTokens.js | 46 - .../lib/util/flattenInlineTokens.js | 14 - .../lib/util/getTokenTypeByToken.js | 44 - .../lib/util/getUniqueID.js | 6 - .../lib/util/groupTextTokens.js | 26 - .../lib/util/hasParents.js | 10 - .../lib/util/openUrl.js | 7 - .../lib/util/splitTextNonTextNodes.js | 14 - .../lib/util/stringToTokens.js | 10 - .../lib/util/tokensToAST.js | 72 - example/src/code.js | 29 - example/src/copy/all.js | 181 - example/src/copy/linkedimg.js | 43 - example/src/copyAll.js | 169 - example/src/copyAllCheckboxPlugin.js | 30 - example/src/customMarkdownStyle.js | 34 - example/src/pluginRules.js | 33 - example/yarn.lock | 5561 ------------ export.json | 7588 ----------------- 83 files changed, 169 insertions(+), 19275 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 README.v1.3.6.md delete mode 100644 bin/copy-to-run.js delete mode 100644 bin/data.json delete mode 100644 bin/example.js delete mode 100644 bin/test.js delete mode 100644 bin/watch.js delete mode 100644 example/.babelrc delete mode 100644 example/.buckconfig delete mode 100644 example/.flowconfig delete mode 100644 example/.gitattributes delete mode 100644 example/.gitignore delete mode 100644 example/.watchmanconfig delete mode 100644 example/App.js delete mode 100644 example/android/app/BUCK delete mode 100644 example/android/app/build.gradle delete mode 100644 example/android/app/proguard-rules.pro delete mode 100644 example/android/app/src/main/AndroidManifest.xml delete mode 100644 example/android/app/src/main/java/com/example/MainActivity.java delete mode 100644 example/android/app/src/main/java/com/example/MainApplication.java delete mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/values/strings.xml delete mode 100644 example/android/app/src/main/res/values/styles.xml delete mode 100644 example/android/build.gradle delete mode 100644 example/android/gradle.properties delete mode 100644 example/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 example/android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 example/android/gradlew delete mode 100644 example/android/gradlew.bat delete mode 100644 example/android/keystores/BUCK delete mode 100644 example/android/keystores/debug.keystore.properties delete mode 100644 example/android/settings.gradle delete mode 100644 example/app.json delete mode 100644 example/index.js delete mode 100644 example/ios/example-tvOS/Info.plist delete mode 100644 example/ios/example-tvOSTests/Info.plist delete mode 100644 example/ios/example.xcodeproj/project.pbxproj delete mode 100644 example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme delete mode 100644 example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme delete mode 100644 example/ios/example/AppDelegate.h delete mode 100644 example/ios/example/AppDelegate.m delete mode 100644 example/ios/example/Base.lproj/LaunchScreen.xib delete mode 100644 example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 example/ios/example/Images.xcassets/Contents.json delete mode 100644 example/ios/example/Info.plist delete mode 100644 example/ios/example/main.m delete mode 100644 example/ios/exampleTests/Info.plist delete mode 100644 example/ios/exampleTests/exampleTests.m delete mode 100644 example/package.json delete mode 100644 example/react-native-markdown-renderer/index.d.ts delete mode 100644 example/react-native-markdown-renderer/index.js delete mode 100644 example/react-native-markdown-renderer/lib/AstRenderer.js delete mode 100644 example/react-native-markdown-renderer/lib/data/PlatformEnum.js delete mode 100644 example/react-native-markdown-renderer/lib/parser.js delete mode 100644 example/react-native-markdown-renderer/lib/plugin/PluginContainer.js delete mode 100644 example/react-native-markdown-renderer/lib/plugin/blockPlugin.js delete mode 100644 example/react-native-markdown-renderer/lib/renderRules.js delete mode 100644 example/react-native-markdown-renderer/lib/styles.js delete mode 100644 example/react-native-markdown-renderer/lib/util/Token.js delete mode 100644 example/react-native-markdown-renderer/lib/util/applyStyle.js delete mode 100644 example/react-native-markdown-renderer/lib/util/cleanupTokens.js delete mode 100644 example/react-native-markdown-renderer/lib/util/flattenInlineTokens.js delete mode 100644 example/react-native-markdown-renderer/lib/util/getTokenTypeByToken.js delete mode 100644 example/react-native-markdown-renderer/lib/util/getUniqueID.js delete mode 100644 example/react-native-markdown-renderer/lib/util/groupTextTokens.js delete mode 100644 example/react-native-markdown-renderer/lib/util/hasParents.js delete mode 100644 example/react-native-markdown-renderer/lib/util/openUrl.js delete mode 100644 example/react-native-markdown-renderer/lib/util/splitTextNonTextNodes.js delete mode 100644 example/react-native-markdown-renderer/lib/util/stringToTokens.js delete mode 100644 example/react-native-markdown-renderer/lib/util/tokensToAST.js delete mode 100644 example/src/code.js delete mode 100644 example/src/copy/all.js delete mode 100644 example/src/copy/linkedimg.js delete mode 100644 example/src/copyAll.js delete mode 100644 example/src/copyAllCheckboxPlugin.js delete mode 100644 example/src/customMarkdownStyle.js delete mode 100644 example/src/pluginRules.js delete mode 100644 example/yarn.lock delete mode 100644 export.json 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/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 deleted file mode 100644 index 5d647565..00000000 --- a/example/.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -# OSX -# -.DS_Store - -# 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 -# -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 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/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 cde69bcccec65160d92116f20ffce4fce0b5245c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3418 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 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 bfa42f0e7b91d006d22352c9ff2f134e504e3c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4842 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 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 324e72cdd7480cb983fa1bcc7ce686e51ef87fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7718 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 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 b5166dad4d90021f6a0b45268c0755719f1d5cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52266 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 z 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 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 deleted file mode 100644 index 486d55b0..00000000 --- a/example/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "example", - "displayName": "example" -} \ No newline at end of file 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/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/package.json b/example/package.json deleted file mode 100644 index 2c51f9a8..00000000 --- a/example/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "example", - "version": "0.0.1", - "private": true, - "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" - }, - "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" - }, - "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" - }, - "jest": { - "preset": "react-native" - } -} 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/cleanupTokens.js b/example/react-native-markdown-renderer/lib/util/cleanupTokens.js deleted file mode 100644 index d49f4642..00000000 --- a/example/react-native-markdown-renderer/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/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/groupTextTokens.js b/example/react-native-markdown-renderer/lib/util/groupTextTokens.js deleted file mode 100644 index d62ded89..00000000 --- a/example/react-native-markdown-renderer/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/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/react-native-markdown-renderer/lib/util/tokensToAST.js b/example/react-native-markdown-renderer/lib/util/tokensToAST.js deleted file mode 100644 index 4428c29a..00000000 --- a/example/react-native-markdown-renderer/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/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/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 From d14755750fd8ca2cf6986f42d4cefd268e1a6f94 Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Mon, 9 Feb 2026 13:25:19 +0100 Subject: [PATCH 7/9] feat: add Expo example app demonstrating library usage Expo TypeScript app with markdown showcase covering headings, bold, italic, strikethrough, links, code blocks, blockquotes, tables, lists, and horizontal rules. Configured Metro to resolve the local library. Run with: cd example && npm start --- example/.gitignore | 41 ++++++++++++++++++++++ example/App.tsx | 78 +++++++++++++++++++++++++++++++++++++++++ example/app.json | 30 ++++++++++++++++ example/index.ts | 8 +++++ example/metro.config.js | 19 ++++++++++ example/package.json | 25 +++++++++++++ example/tsconfig.json | 6 ++++ 7 files changed, 207 insertions(+) create mode 100644 example/.gitignore create mode 100644 example/App.tsx create mode 100644 example/app.json create mode 100644 example/index.ts create mode 100644 example/metro.config.js create mode 100644 example/package.json create mode 100644 example/tsconfig.json diff --git a/example/.gitignore b/example/.gitignore new file mode 100644 index 00000000..d914c328 --- /dev/null +++ b/example/.gitignore @@ -0,0 +1,41 @@ +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# 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/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/app.json b/example/app.json new file mode 100644 index 00000000..67aafdf2 --- /dev/null +++ b/example/app.json @@ -0,0 +1,30 @@ +{ + "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.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/metro.config.js b/example/metro.config.js new file mode 100644 index 00000000..1167cc62 --- /dev/null +++ b/example/metro.config.js @@ -0,0 +1,19 @@ +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 +config.watchFolders = [libraryRoot]; + +// Ensure the library's dependencies resolve from the example's node_modules +config.resolver.nodeModulesPaths = [ + path.resolve(projectRoot, 'node_modules'), + path.resolve(libraryRoot, 'node_modules'), +]; + +module.exports = config; diff --git a/example/package.json b/example/package.json new file mode 100644 index 00000000..6b3cb57a --- /dev/null +++ b/example/package.json @@ -0,0 +1,25 @@ +{ + "name": "example", + "version": "1.0.0", + "main": "index.ts", + "scripts": { + "start": "expo start", + "android": "expo start --android", + "ios": "expo start --ios", + "web": "expo start --web" + }, + "dependencies": { + "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-markdown-renderer": "file:..", + "react-native-web": "^0.21.0" + }, + "devDependencies": { + "@types/react": "~19.1.0", + "typescript": "~5.9.2" + }, + "private": true +} 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 + } +} From 876eb6456663b3968f8305cb3fc04622b8f33b75 Mon Sep 17 00:00:00 2001 From: Mient-jan Stelling Date: Mon, 9 Feb 2026 16:02:02 +0100 Subject: [PATCH 8/9] fix: web compatibility for example app and list styles Add default lineHeight fallback in Platform.select for web platform. Fix Metro config to use extraNodeModules instead of file:.. symlink to resolve the library, avoiding main field resolution errors. --- example/metro.config.js | 19 ++++++++++++++++--- example/package.json | 1 - .../__snapshots__/integration.test.tsx.snap | 18 ++++++++++++------ src/lib/styles.ts | 9 ++++++++- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/example/metro.config.js b/example/metro.config.js index 1167cc62..42271d18 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -7,13 +7,26 @@ const libraryRoot = path.resolve(projectRoot, '..'); /** @type {import('expo/metro-config').MetroConfig} */ const config = getDefaultConfig(projectRoot); -// Watch the library source so changes are picked up +// Watch the library source so changes are picked up live config.watchFolders = [libraryRoot]; -// Ensure the library's dependencies resolve from the example's node_modules +// Only resolve node_modules from the example to avoid duplicate React config.resolver.nodeModulesPaths = [ path.resolve(projectRoot, 'node_modules'), - path.resolve(libraryRoot, '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 6b3cb57a..4dbdaa0f 100644 --- a/example/package.json +++ b/example/package.json @@ -14,7 +14,6 @@ "react": "19.1.0", "react-dom": "19.1.0", "react-native": "0.81.5", - "react-native-markdown-renderer": "file:..", "react-native-web": "^0.21.0" }, "devDependencies": { diff --git a/src/__tests__/__snapshots__/integration.test.tsx.snap b/src/__tests__/__snapshots__/integration.test.tsx.snap index 2121042f..43463ce4 100644 --- a/src/__tests__/__snapshots__/integration.test.tsx.snap +++ b/src/__tests__/__snapshots__/integration.test.tsx.snap @@ -200,8 +200,8 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = @@ -251,8 +251,8 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = @@ -311,6 +311,7 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = @@ -879,8 +881,8 @@ exports[`Integration renders with a custom render rule override 1`] = ` @@ -939,6 +941,7 @@ exports[`Integration renders with a custom render rule override 1`] = ` @@ -1524,8 +1528,8 @@ exports[`Integration renders with custom styles applied 1`] = ` @@ -1584,6 +1588,7 @@ exports[`Integration renders with custom styles applied 1`] = ` Date: Tue, 10 Feb 2026 13:37:04 +0100 Subject: [PATCH 9/9] style: align default styles with VS Code markdown preview Update spacing, colors, and typography to match VS Code's markdown preview rendering. Key changes: heading margins/weights/borders, paragraph spacing, blockquote left-border, code block/inline styling, list line-heights, table borders, link color, and base text size. Co-Authored-By: Claude Opus 4.6 --- .../__snapshots__/integration.test.tsx.snap | 838 +++++++++++++----- src/lib/renderRules.tsx | 4 +- src/lib/styles.ts | 160 ++-- 3 files changed, 707 insertions(+), 295 deletions(-) diff --git a/src/__tests__/__snapshots__/integration.test.tsx.snap b/src/__tests__/__snapshots__/integration.test.tsx.snap index 43463ce4..0156f7b5 100644 --- a/src/__tests__/__snapshots__/integration.test.tsx.snap +++ b/src/__tests__/__snapshots__/integration.test.tsx.snap @@ -6,18 +6,33 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = > This is a @@ -142,19 +185,24 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -171,8 +219,8 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -192,7 +240,9 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = Unordered item 1 @@ -253,13 +309,14 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = { "alignItems": "flex-start", "flexDirection": "row", + "marginTop": 4, } } > Unordered item 2 @@ -303,7 +365,9 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = Ordered item 1 @@ -365,13 +435,14 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = { "alignItems": "flex-start", "flexDirection": "row", + "marginTop": 4, } } > Ordered item 2 @@ -420,22 +496,28 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -446,11 +528,13 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = @@ -460,10 +544,10 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = @@ -474,13 +558,18 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > Blockquote text @@ -492,9 +581,9 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = style={ [ { - "borderColor": "#000000", - "borderRadius": 3, + "borderColor": "#d0d7de", "borderWidth": 1, + "marginBottom": 16, }, ] } @@ -502,7 +591,9 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = @@ -511,7 +602,7 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = [ { "borderBottomWidth": 1, - "borderColor": "#000000", + "borderColor": "#d0d7de", "flexDirection": "row", }, ] @@ -521,14 +612,23 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "fontWeight": "600", + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Header A @@ -539,14 +639,23 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "fontWeight": "600", + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Header B @@ -561,7 +670,7 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = [ { "borderBottomWidth": 1, - "borderColor": "#000000", + "borderColor": "#d0d7de", "flexDirection": "row", }, ] @@ -571,14 +680,22 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Cell 1 @@ -589,14 +706,22 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Cell 2 @@ -610,8 +735,10 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = style={ [ { - "backgroundColor": "#000000", - "height": 1, + "backgroundColor": "#d0d7de", + "height": 4, + "marginBottom": 24, + "marginTop": 24, }, ] } @@ -623,13 +750,18 @@ exports[`Integration renders a comprehensive markdown document (snapshot) 1`] = "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > Hard line break follows @@ -659,18 +791,33 @@ exports[`Integration renders with a custom render rule override 1`] = ` This is a @@ -772,19 +932,24 @@ exports[`Integration renders with a custom render rule override 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -801,8 +966,8 @@ exports[`Integration renders with a custom render rule override 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -822,7 +987,9 @@ exports[`Integration renders with a custom render rule override 1`] = ` Unordered item 1 @@ -883,13 +1056,14 @@ exports[`Integration renders with a custom render rule override 1`] = ` { "alignItems": "flex-start", "flexDirection": "row", + "marginTop": 4, } } > Unordered item 2 @@ -933,7 +1112,9 @@ exports[`Integration renders with a custom render rule override 1`] = ` Ordered item 1 @@ -995,13 +1182,14 @@ exports[`Integration renders with a custom render rule override 1`] = ` { "alignItems": "flex-start", "flexDirection": "row", + "marginTop": 4, } } > Ordered item 2 @@ -1050,22 +1243,28 @@ exports[`Integration renders with a custom render rule override 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -1076,11 +1275,13 @@ exports[`Integration renders with a custom render rule override 1`] = ` @@ -1090,10 +1291,10 @@ exports[`Integration renders with a custom render rule override 1`] = ` @@ -1104,13 +1305,18 @@ exports[`Integration renders with a custom render rule override 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > Blockquote text @@ -1122,9 +1328,9 @@ exports[`Integration renders with a custom render rule override 1`] = ` style={ [ { - "borderColor": "#000000", - "borderRadius": 3, + "borderColor": "#d0d7de", "borderWidth": 1, + "marginBottom": 16, }, ] } @@ -1132,7 +1338,9 @@ exports[`Integration renders with a custom render rule override 1`] = ` @@ -1141,7 +1349,7 @@ exports[`Integration renders with a custom render rule override 1`] = ` [ { "borderBottomWidth": 1, - "borderColor": "#000000", + "borderColor": "#d0d7de", "flexDirection": "row", }, ] @@ -1151,14 +1359,23 @@ exports[`Integration renders with a custom render rule override 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "fontWeight": "600", + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Header A @@ -1169,14 +1386,23 @@ exports[`Integration renders with a custom render rule override 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "fontWeight": "600", + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Header B @@ -1191,7 +1417,7 @@ exports[`Integration renders with a custom render rule override 1`] = ` [ { "borderBottomWidth": 1, - "borderColor": "#000000", + "borderColor": "#d0d7de", "flexDirection": "row", }, ] @@ -1201,14 +1427,22 @@ exports[`Integration renders with a custom render rule override 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Cell 1 @@ -1219,14 +1453,22 @@ exports[`Integration renders with a custom render rule override 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Cell 2 @@ -1240,8 +1482,10 @@ exports[`Integration renders with a custom render rule override 1`] = ` style={ [ { - "backgroundColor": "#000000", - "height": 1, + "backgroundColor": "#d0d7de", + "height": 4, + "marginBottom": 24, + "marginTop": 24, }, ] } @@ -1253,13 +1497,18 @@ exports[`Integration renders with a custom render rule override 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > Hard line break follows @@ -1282,16 +1531,30 @@ exports[`Integration renders with custom styles applied 1`] = ` > This is a @@ -1419,19 +1710,24 @@ exports[`Integration renders with custom styles applied 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -1448,8 +1744,8 @@ exports[`Integration renders with custom styles applied 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -1469,7 +1765,9 @@ exports[`Integration renders with custom styles applied 1`] = ` Unordered item 1 @@ -1530,13 +1834,14 @@ exports[`Integration renders with custom styles applied 1`] = ` { "alignItems": "flex-start", "flexDirection": "row", + "marginTop": 4, } } > Unordered item 2 @@ -1580,7 +1890,9 @@ exports[`Integration renders with custom styles applied 1`] = ` Ordered item 1 @@ -1642,13 +1960,14 @@ exports[`Integration renders with custom styles applied 1`] = ` { "alignItems": "flex-start", "flexDirection": "row", + "marginTop": 4, } } > Ordered item 2 @@ -1697,22 +2021,28 @@ exports[`Integration renders with custom styles applied 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > @@ -1723,11 +2053,13 @@ exports[`Integration renders with custom styles applied 1`] = ` @@ -1737,10 +2069,10 @@ exports[`Integration renders with custom styles applied 1`] = ` @@ -1751,13 +2083,18 @@ exports[`Integration renders with custom styles applied 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > Blockquote text @@ -1769,9 +2106,9 @@ exports[`Integration renders with custom styles applied 1`] = ` style={ [ { - "borderColor": "#000000", - "borderRadius": 3, + "borderColor": "#d0d7de", "borderWidth": 1, + "marginBottom": 16, }, ] } @@ -1779,7 +2116,9 @@ exports[`Integration renders with custom styles applied 1`] = ` @@ -1788,7 +2127,7 @@ exports[`Integration renders with custom styles applied 1`] = ` [ { "borderBottomWidth": 1, - "borderColor": "#000000", + "borderColor": "#d0d7de", "flexDirection": "row", }, ] @@ -1798,14 +2137,23 @@ exports[`Integration renders with custom styles applied 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "fontWeight": "600", + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Header A @@ -1816,14 +2164,23 @@ exports[`Integration renders with custom styles applied 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "fontWeight": "600", + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Header B @@ -1838,7 +2195,7 @@ exports[`Integration renders with custom styles applied 1`] = ` [ { "borderBottomWidth": 1, - "borderColor": "#000000", + "borderColor": "#d0d7de", "flexDirection": "row", }, ] @@ -1848,14 +2205,22 @@ exports[`Integration renders with custom styles applied 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Cell 1 @@ -1866,14 +2231,22 @@ exports[`Integration renders with custom styles applied 1`] = ` style={ [ { + "borderColor": "#d0d7de", + "borderWidth": 1, "flex": 1, - "padding": 5, + "paddingHorizontal": 13, + "paddingVertical": 6, }, ] } > Cell 2 @@ -1887,8 +2260,10 @@ exports[`Integration renders with custom styles applied 1`] = ` style={ [ { - "backgroundColor": "#000000", - "height": 1, + "backgroundColor": "#d0d7de", + "height": 4, + "marginBottom": 24, + "marginTop": 24, }, ] } @@ -1900,13 +2275,18 @@ exports[`Integration renders with custom styles applied 1`] = ` "flexDirection": "row", "flexWrap": "wrap", "justifyContent": "flex-start", - "marginBottom": 10, - "marginTop": 10, + "marginBottom": 16, + "marginTop": 0, } } > Hard line break follows diff --git a/src/lib/renderRules.tsx b/src/lib/renderRules.tsx index 6c4fb849..496b9a37 100644 --- a/src/lib/renderRules.tsx +++ b/src/lib/renderRules.tsx @@ -78,7 +78,7 @@ const renderRules: RenderRules = { heading1: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( - + {applyStyle(children as any, [styles.heading, styles.heading1], 'Text')} ); @@ -86,7 +86,7 @@ const renderRules: RenderRules = { heading2: (node: ASTNode, children: ReactNode[], parent: ASTNode[], styles: MarkdownStyles) => { return ( - + {applyStyle(children as any, [styles.heading, styles.heading2], 'Text')} ); diff --git a/src/lib/styles.ts b/src/lib/styles.ts index 4b968468..560525f6 100644 --- a/src/lib/styles.ts +++ b/src/lib/styles.ts @@ -1,68 +1,104 @@ 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: { - borderWidth: 1, - borderColor: '#CCCCCC', - backgroundColor: '#f5f5f5', - padding: 10, - borderRadius: 4, + backgroundColor: '#f6f8fa', + padding: 16, + borderRadius: 6, + fontFamily: monospaceFont, + fontSize: 13.6, + lineHeight: 20, + marginBottom: 16, }, codeInline: { - borderWidth: 1, - borderColor: '#CCCCCC', - backgroundColor: '#f5f5f5', - padding: 10, - borderRadius: 4, + backgroundColor: 'rgba(175,184,193,0.2)', + paddingHorizontal: 6, + paddingVertical: 3, + borderRadius: 6, + fontFamily: monospaceFont, + fontSize: 13.6, }, del: { - backgroundColor: '#000000', + textDecorationLine: 'line-through', }, em: { fontStyle: 'italic', }, headingContainer: { flexDirection: 'row', + marginTop: 24, + marginBottom: 16, + }, + heading: { + fontWeight: '600', }, - heading: {}, 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: 18, + fontSize: 20, + lineHeight: 25, }, heading4: { fontSize: 16, + lineHeight: 20, }, heading5: { - fontSize: 13, + fontSize: 14, + lineHeight: 18, }, heading6: { - fontSize: 11, + fontSize: 13.6, + lineHeight: 17, + color: '#656d76', }, hr: { - backgroundColor: '#000000', - height: 1, + backgroundColor: '#d0d7de', + height: 4, + marginTop: 24, + marginBottom: 24, }, blockquote: { - paddingHorizontal: 20, - paddingVertical: 10, - margin: 20, - backgroundColor: '#CCCCCC', + borderLeftWidth: 4, + borderLeftColor: '#d0d7de', + paddingHorizontal: 16, + marginBottom: 16, }, inlineCode: { - borderRadius: 3, - borderWidth: 1, - fontFamily: 'Courier', - fontWeight: 'bold', + borderRadius: 6, + backgroundColor: 'rgba(175,184,193,0.2)', + fontFamily: monospaceFont, + paddingHorizontal: 6, + paddingVertical: 3, + fontSize: 13.6, + }, + list: { + marginBottom: 16, }, - list: {}, listItem: { flex: 1, flexWrap: 'wrap', @@ -71,53 +107,34 @@ export const styles = StyleSheet.create({ listUnorderedItem: { flexDirection: 'row', alignItems: 'flex-start', + marginTop: 4, }, listUnorderedItemIcon: { marginLeft: 10, marginRight: 10, - ...Platform.select({ - [PlatformEnum.IOS]: { - lineHeight: 36, - }, - [PlatformEnum.ANDROID]: { - lineHeight: 30, - }, - default: { - lineHeight: 30, - }, - }), + lineHeight: 24, }, listUnorderedItemText: { - fontSize: 20, - lineHeight: 20, + fontSize: 16, + lineHeight: 24, }, listOrdered: {}, listOrderedItem: { flexDirection: 'row', alignItems: 'flex-start', + marginTop: 4, }, listOrderedItemIcon: { marginLeft: 10, marginRight: 10, - ...Platform.select({ - [PlatformEnum.IOS]: { - lineHeight: 36, - }, - [PlatformEnum.ANDROID]: { - lineHeight: 30, - }, - default: { - lineHeight: 30, - }, - }), + lineHeight: 24, }, listOrderedItemText: { - fontWeight: 'bold', - lineHeight: 20, + lineHeight: 24, }, paragraph: { - marginTop: 10, - marginBottom: 10, + marginTop: 0, + marginBottom: 16, flexWrap: 'wrap', flexDirection: 'row', alignItems: 'flex-start', @@ -132,40 +149,55 @@ export const styles = StyleSheet.create({ }, table: { borderWidth: 1, - borderColor: '#000000', - borderRadius: 3, + borderColor: '#d0d7de', + marginBottom: 16, + }, + tableHeader: { + backgroundColor: '#f6f8fa', }, - tableHeader: {}, tableHeaderCell: { flex: 1, - padding: 5, + paddingVertical: 6, + paddingHorizontal: 13, + borderWidth: 1, + borderColor: '#d0d7de', + fontWeight: '600', }, tableRow: { borderBottomWidth: 1, - borderColor: '#000000', + borderColor: '#d0d7de', flexDirection: 'row', }, tableRowCell: { flex: 1, - padding: 5, + paddingVertical: 6, + paddingHorizontal: 13, + borderWidth: 1, + borderColor: '#d0d7de', + }, + text: { + fontSize: 16, + lineHeight: 24, }, - text: {}, strikethrough: { textDecorationLine: 'line-through', }, link: { - textDecorationLine: 'underline', + color: '#0969da', }, blocklink: { flex: 1, - borderColor: '#000000', + borderColor: '#d0d7de', borderBottomWidth: 1, }, u: { - borderColor: '#000000', + borderColor: '#d0d7de', borderBottomWidth: 1, }, image: { flex: 1, }, + pre: { + marginBottom: 16, + }, });