diff --git a/tools/challenge-parser/.npmignore b/tools/challenge-parser/.npmignore deleted file mode 100644 index 14d50e1e8f..0000000000 --- a/tools/challenge-parser/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -__snapshots__ -fixtures -*.test.js \ No newline at end of file diff --git a/tools/challenge-parser/__snapshots__/challengeSeed-to-data.test.js.snap b/tools/challenge-parser/__snapshots__/challengeSeed-to-data.test.js.snap deleted file mode 100644 index d3a51ee16b..0000000000 --- a/tools/challenge-parser/__snapshots__/challengeSeed-to-data.test.js.snap +++ /dev/null @@ -1,24 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`challengeSeed-to-data plugin should have an output to match the snapshot 1`] = ` -Object { - "files": Object { - "indexjs": Object { - "contents": "function testFunction(arg) { - return arg; -} - -testFunction('hello'); -", - "editableRegionBoundaries": Array [], - "ext": "js", - "head": "console.log('before the test'); -", - "key": "indexjs", - "name": "index", - "tail": "console.info('after the test'); -", - }, - }, -} -`; diff --git a/tools/challenge-parser/__snapshots__/frontmatter-to-data.test.js.snap b/tools/challenge-parser/__snapshots__/frontmatter-to-data.test.js.snap deleted file mode 100644 index 7a92697ab3..0000000000 --- a/tools/challenge-parser/__snapshots__/frontmatter-to-data.test.js.snap +++ /dev/null @@ -1,10 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`frontmatter-to-data plugin should have an output to match the snapshot 1`] = ` -Object { - "challengeType": 0, - "id": "bd7123c8c441eddfaeb5bdef", - "title": "Say Hello to HTML Elements", - "videoUrl": "https://scrimba.com/p/pVMPUv/cE8Gpt2", -} -`; diff --git a/tools/challenge-parser/__snapshots__/solution-to-data.test.js.snap b/tools/challenge-parser/__snapshots__/solution-to-data.test.js.snap deleted file mode 100644 index 941da1d057..0000000000 --- a/tools/challenge-parser/__snapshots__/solution-to-data.test.js.snap +++ /dev/null @@ -1,23 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`challengeSeed-to-data plugin should have an output to match the snapshot 1`] = ` -Object { - "solutions": Array [ - Object { - "indexjs": Object { - "contents": "function testFunction(arg) { - return arg; -} - -testFunction('hello'); -", - "ext": "js", - "head": "", - "key": "indexjs", - "name": "index", - "tail": "", - }, - }, - ], -} -`; diff --git a/tools/challenge-parser/__snapshots__/tests-to-data.test.js.snap b/tools/challenge-parser/__snapshots__/tests-to-data.test.js.snap deleted file mode 100644 index 4ddbb5c4d9..0000000000 --- a/tools/challenge-parser/__snapshots__/tests-to-data.test.js.snap +++ /dev/null @@ -1,28 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`tests-to-data plugin should have an output to match the snapshot 1`] = ` -Object { - "tests": Array [ - Object { - "testString": "assert.isTrue((/hello(\\\\s)+world/gi).test($('h1').text()), 'Your h1 element should have the text \\"Hello World\\".');", - "text": "

Your h1 element should have the text \\"Hello World\\".

", - }, - ], -} -`; - -exports[`tests-to-data plugin should match the video snapshot 1`] = ` -Object { - "question": Object { - "answers": Array [ - "

inline code

", - "

some italics

", - "

code in code tags

", - ], - "solution": 3, - "text": "

Question line one

-
  var x = 'y';
-
", - }, -} -`; diff --git a/tools/challenge-parser/__snapshots__/text-to-data.test.js.snap b/tools/challenge-parser/__snapshots__/text-to-data.test.js.snap deleted file mode 100644 index 0fd00e173c..0000000000 --- a/tools/challenge-parser/__snapshots__/text-to-data.test.js.snap +++ /dev/null @@ -1,17 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`text-to-data should have an output to match the snapshot 1`] = ` -Object { - "description": "
-

Welcome to freeCodeCamp's HTML coding challenges. These will walk you through web development step-by-step.

-

Lorem Ipsum with some code

-

-

Some text in a blockquote

-

Some text in a blockquote, with code

-

-

<p>We aim to preserve this</p>
-

-
", - "instructions": "", -} -`; diff --git a/tools/challenge-parser/challengeSeed-to-data.js b/tools/challenge-parser/challengeSeed-to-data.js deleted file mode 100644 index c7170131dc..0000000000 --- a/tools/challenge-parser/challengeSeed-to-data.js +++ /dev/null @@ -1,124 +0,0 @@ -const visit = require('unist-util-visit'); -const { selectAll, select } = require('hast-util-select'); - -const { sectionFilter } = require('./utils'); - -const seedRE = /(.+)-seed$/; -const headRE = /(.+)-setup$/; -const tailRE = /(.+)-teardown$/; - -const editableRegionMarker = '--fcc-editable-region--'; - -function defaultFile(lang) { - return { - key: `index${lang}`, - ext: lang, - name: 'index', - contents: '', - head: '', - tail: '' - }; -} -function createCodeGetter(codeKey, regEx, seeds) { - return container => { - const { - properties: { id } - } = container; - const lang = id.match(regEx)[1]; - const key = `index${lang}`; - const code = select('code', container).children[0].value; - if (key in seeds) { - seeds[key] = { - ...seeds[key], - [codeKey]: code - }; - } else { - seeds[key] = { - ...defaultFile(lang), - [codeKey]: code - }; - } - }; -} - -// TODO: any reason to worry about CRLF? - -function findRegionMarkers(file) { - const lines = file.contents.split('\n'); - const editableLines = lines - .map((line, id) => (line.trim() === editableRegionMarker ? id : -1)) - .filter(id => id >= 0); - - if (editableLines.length > 2) { - throw Error('Editable region has too many markers' + editableLines); - } - - if (editableLines.length === 0) { - return null; - } else if (editableLines.length === 1) { - throw Error(`Editable region not closed`); - } else { - return editableLines; - } -} - -function removeLines(contents, toRemove) { - const lines = contents.split('\n'); - return lines.filter((_, id) => !toRemove.includes(id)).join('\n'); -} - -function createPlugin() { - return function transformer(tree, file) { - function visitor(node) { - if (sectionFilter(node, 'challengeSeed')) { - let seeds = {}; - const codeDivs = selectAll('div', node); - const seedContainers = codeDivs.filter(({ properties: { id } }) => - seedRE.test(id) - ); - seedContainers.forEach(createCodeGetter('contents', seedRE, seeds)); - - const headContainers = codeDivs.filter(({ properties: { id } }) => - headRE.test(id) - ); - headContainers.forEach(createCodeGetter('head', headRE, seeds)); - - const tailContainers = codeDivs.filter(({ properties: { id } }) => - tailRE.test(id) - ); - tailContainers.forEach(createCodeGetter('tail', tailRE, seeds)); - - file.data = { - ...file.data, - files: seeds - }; - - // TODO: make this readable. - - Object.keys(seeds).forEach(key => { - const fileData = seeds[key]; - const editRegionMarkers = findRegionMarkers(fileData); - if (editRegionMarkers) { - fileData.contents = removeLines( - fileData.contents, - editRegionMarkers - ); - - if (editRegionMarkers[1] <= editRegionMarkers[0]) { - throw Error('Editable region must be non zero'); - } - fileData.editableRegionBoundaries = editRegionMarkers; - } else { - fileData.editableRegionBoundaries = []; - } - }); - // TODO: TESTS! - } - } - visit(tree, 'element', visitor); - }; -} - -exports.challengeSeedToData = createPlugin; -exports.createCodeGetter = createCodeGetter; -exports.defaultFile = defaultFile; diff --git a/tools/challenge-parser/challengeSeed-to-data.test.js b/tools/challenge-parser/challengeSeed-to-data.test.js deleted file mode 100644 index 2cc99df3e0..0000000000 --- a/tools/challenge-parser/challengeSeed-to-data.test.js +++ /dev/null @@ -1,58 +0,0 @@ -/* global describe it expect beforeEach */ -const isArray = require('lodash/isArray'); - -const mockAST = require('./fixtures/challenge-html-ast.json'); -const { challengeSeedToData } = require('./challengeSeed-to-data'); -const { isObject } = require('lodash'); - -describe('challengeSeed-to-data plugin', () => { - const plugin = challengeSeedToData(); - let file = { data: {} }; - - beforeEach(() => { - file = { data: {} }; - }); - - it('returns a function', () => { - expect(typeof plugin).toEqual('function'); - }); - - it('adds a `files` property to `file.data`', () => { - plugin(mockAST, file); - expect('files' in file.data).toBe(true); - }); - - it('ensures that the `files` property is an object', () => { - plugin(mockAST, file); - expect(isObject(file.data.files)).toBe(true); - }); - - it('adds test objects to the files array following a schema', () => { - expect.assertions(15); - plugin(mockAST, file); - const { - data: { files } - } = file; - const testObject = files.indexjs; - expect(Object.keys(testObject).length).toEqual(7); - expect(testObject).toHaveProperty('key'); - expect(typeof testObject['key']).toBe('string'); - expect(testObject).toHaveProperty('ext'); - expect(typeof testObject['ext']).toBe('string'); - expect(testObject).toHaveProperty('name'); - expect(typeof testObject['name']).toBe('string'); - expect(testObject).toHaveProperty('contents'); - expect(typeof testObject['contents']).toBe('string'); - expect(testObject).toHaveProperty('head'); - expect(typeof testObject['head']).toBe('string'); - expect(testObject).toHaveProperty('tail'); - expect(typeof testObject['tail']).toBe('string'); - expect(testObject).toHaveProperty('editableRegionBoundaries'); - expect(isArray(testObject['editableRegionBoundaries'])).toBe(true); - }); - - it('should have an output to match the snapshot', () => { - plugin(mockAST, file); - expect(file.data).toMatchSnapshot(); - }); -}); diff --git a/tools/challenge-parser/fixtures/adjacent-tags-ast.json b/tools/challenge-parser/fixtures/adjacent-tags-ast.json deleted file mode 100644 index 332bbf93b4..0000000000 --- a/tools/challenge-parser/fixtures/adjacent-tags-ast.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "type": "root", - "children": [{ - "type": "element", - "tagName": "h2", - "properties": {}, - "children": [{ - "type": "text", - "value": "Description", - "position": { - "start": { - "line": 1, - "column": 4, - "offset": 3 - }, - "end": { - "line": 1, - "column": 15, - "offset": 14 - } - } - }], - "position": { - "start": { - "line": 1, - "column": 1, - "offset": 0 - }, - "end": { - "line": 1, - "column": 15, - "offset": 14 - } - } - }, { - "type": "text", - "value": "\n" - }, { - "type": "element", - "tagName": "section", - "properties": { - "id": "description" - }, - "children": [{ - "type": "text", - "value": "\n", - "position": { - "start": { - "line": 3, - "column": 27, - "offset": 42 - }, - "end": { - "line": 4, - "column": 1, - "offset": 43 - } - } - }, { - "type": "element", - "tagName": "code", - "properties": {}, - "children": [{ - "type": "text", - "value": "code", - "position": { - "start": { - "line": 4, - "column": 7, - "offset": 49 - }, - "end": { - "line": 4, - "column": 11, - "offset": 53 - } - } - }], - "position": { - "start": { - "line": 4, - "column": 1, - "offset": 43 - }, - "end": { - "line": 4, - "column": 18, - "offset": 60 - } - } - }, { - "type": "text", - "value": " ", - "position": { - "start": { - "line": 4, - "column": 18, - "offset": 60 - }, - "end": { - "line": 4, - "column": 19, - "offset": 61 - } - } - }, { - "type": "element", - "tagName": "tag", - "properties": {}, - "children": [{ - "type": "text", - "value": "with more after a space", - "position": { - "start": { - "line": 4, - "column": 24, - "offset": 66 - }, - "end": { - "line": 4, - "column": 47, - "offset": 89 - } - } - }], - "position": { - "start": { - "line": 4, - "column": 19, - "offset": 61 - }, - "end": { - "line": 4, - "column": 53, - "offset": 95 - } - } - }, { - "type": "text", - "value": "\n" - }, { - "type": "element", - "tagName": "p", - "properties": {}, - "children": [{ - "type": "text", - "value": "after many new lines another pair of ", - "position": { - "start": { - "line": 9, - "column": 1, - "offset": 100 - }, - "end": { - "line": 9, - "column": 38, - "offset": 137 - } - } - }, { - "type": "element", - "tagName": "strong", - "properties": {}, - "children": [{ - "type": "text", - "value": "elements", - "position": { - "start": { - "line": 9, - "column": 46, - "offset": 145 - }, - "end": { - "line": 9, - "column": 54, - "offset": 153 - } - } - }], - "position": { - "start": { - "line": 9, - "column": 38, - "offset": 137 - }, - "end": { - "line": 9, - "column": 63, - "offset": 162 - } - } - }, { - "type": "text", - "value": " ", - "position": { - "start": { - "line": 9, - "column": 63, - "offset": 162 - }, - "end": { - "line": 9, - "column": 64, - "offset": 163 - } - } - }, { - "type": "element", - "tagName": "em", - "properties": {}, - "children": [{ - "type": "text", - "value": "with a space", - "position": { - "start": { - "line": 9, - "column": 68, - "offset": 167 - }, - "end": { - "line": 9, - "column": 80, - "offset": 179 - } - } - }], - "position": { - "start": { - "line": 9, - "column": 64, - "offset": 163 - }, - "end": { - "line": 9, - "column": 85, - "offset": 184 - } - } - }], - "position": { - "start": { - "line": 9, - "column": 1, - "offset": 100 - }, - "end": { - "line": 9, - "column": 85, - "offset": 184 - } - } - }, { - "type": "text", - "value": "\n" - }], - "position": { - "start": { - "line": 3, - "column": 1, - "offset": 16 - }, - "end": { - "line": 10, - "column": 11, - "offset": 195 - } - } - }], - "data": { - "quirksMode": false - }, - "position": { - "start": { - "line": 1, - "column": 1, - "offset": 0 - }, - "end": { - "line": 1, - "column": 1, - "offset": 0 - } - } -} diff --git a/tools/challenge-parser/fixtures/challenge-html-ast.json b/tools/challenge-parser/fixtures/challenge-html-ast.json deleted file mode 100644 index b11e907cc5..0000000000 --- a/tools/challenge-parser/fixtures/challenge-html-ast.json +++ /dev/null @@ -1,1058 +0,0 @@ -{ - "type": "root", - "children": [ - { - "type": "element", - "tagName": "h2", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Description", - "position": { - "start": { - "line": 8, - "column": 4, - "offset": 139 - }, - "end": { - "line": 8, - "column": 15, - "offset": 150 - } - } - } - ], - "position": { - "start": { - "line": 8, - "column": 1, - "offset": 136 - }, - "end": { - "line": 8, - "column": 15, - "offset": 150 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "section", - "properties": { - "id": "description" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "p", - "properties": {}, - "children": [ - { - "type": "text", - "value": - "Welcome to freeCodeCamp's HTML coding challenges. These will walk you through web development step-by-step.", - "position": { - "start": { - "line": 11, - "column": 1, - "offset": 179 - }, - "end": { - "line": 11, - "column": 108, - "offset": 286 - } - } - } - ], - "position": { - "start": { - "line": 11, - "column": 1, - "offset": 179 - }, - "end": { - "line": 11, - "column": 108, - "offset": 286 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "p", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Lorem Ipsum with ", - "position": { - "start": { - "line": 13, - "column": 1, - "offset": 288 - }, - "end": { - "line": 13, - "column": 18, - "offset": 305 - } - } - }, - { - "type": "element", - "tagName": "code", - "properties": {}, - "children": [ - { - "type": "text", - "value": "some code" - } - ], - "position": { - "start": { - "line": 13, - "column": 18, - "offset": 305 - }, - "end": { - "line": 13, - "column": 29, - "offset": 316 - } - } - } - ], - "position": { - "start": { - "line": 13, - "column": 1, - "offset": 288 - }, - "end": { - "line": 13, - "column": 29, - "offset": 316 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "blockquote", - "properties": {}, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "p", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Some text in a blockquote", - "position": { - "start": { - "line": 15, - "column": 3, - "offset": 320 - }, - "end": { - "line": 15, - "column": 28, - "offset": 345 - } - } - } - ], - "position": { - "start": { - "line": 15, - "column": 3, - "offset": 320 - }, - "end": { - "line": 15, - "column": 28, - "offset": 345 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "p", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Some text in a blockquote, with ", - "position": { - "start": { - "line": 17, - "column": 3, - "offset": 349 - }, - "end": { - "line": 17, - "column": 35, - "offset": 381 - } - } - }, - { - "type": "element", - "tagName": "code", - "properties": {}, - "children": [ - { - "type": "text", - "value": "code" - } - ], - "position": { - "start": { - "line": 17, - "column": 35, - "offset": 381 - }, - "end": { - "line": 17, - "column": 41, - "offset": 387 - } - } - } - ], - "position": { - "start": { - "line": 17, - "column": 3, - "offset": 349 - }, - "end": { - "line": 17, - "column": 41, - "offset": 387 - } - } - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 15, - "column": 1, - "offset": 318 - }, - "end": { - "line": 17, - "column": 41, - "offset": 387 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "pre", - "properties": {}, - "children": [ - { - "type": "element", - "tagName": "code", - "properties": { - "className": ["language-html"] - }, - "children": [ - { - "type": "text", - "value": "

We aim to preserve this

\n" - } - ], - "position": { - "start": { - "line": 19, - "column": 1, - "offset": 389 - }, - "end": { - "line": 21, - "column": 4, - "offset": 431 - } - } - } - ], - "position": { - "start": { - "line": 19, - "column": 1, - "offset": 389 - }, - "end": { - "line": 21, - "column": 4, - "offset": 431 - } - } - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 9, - "column": 1, - "offset": 151 - }, - "end": { - "line": 22, - "column": 11, - "offset": 442 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "h2", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Instructions", - "position": { - "start": { - "line": 24, - "column": 4, - "offset": 447 - }, - "end": { - "line": 24, - "column": 16, - "offset": 459 - } - } - } - ], - "position": { - "start": { - "line": 24, - "column": 1, - "offset": 444 - }, - "end": { - "line": 24, - "column": 16, - "offset": 459 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "section", - "properties": { - "id": "instructions" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 25, - "column": 1, - "offset": 460 - }, - "end": { - "line": 29, - "column": 11, - "offset": 590 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "h2", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Tests", - "position": { - "start": { - "line": 31, - "column": 4, - "offset": 595 - }, - "end": { - "line": 31, - "column": 9, - "offset": 600 - } - } - } - ], - "position": { - "start": { - "line": 31, - "column": 1, - "offset": 592 - }, - "end": { - "line": 31, - "column": 9, - "offset": 600 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "section", - "properties": { - "id": "tests" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "pre", - "properties": {}, - "children": [ - { - "type": "element", - "tagName": "code", - "properties": { - "className": ["language-yml"] - }, - "children": [ - { - "type": "text", - "value": - "tests:\n - text: Your h1 element should have the text \"Hello World\".\n testString: assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'Your h1 element should have the text \"Hello World\".');\n" - } - ], - "position": { - "start": { - "line": 34, - "column": 1, - "offset": 623 - }, - "end": { - "line": 38, - "column": 4, - "offset": 858 - } - } - } - ], - "position": { - "start": { - "line": 34, - "column": 1, - "offset": 623 - }, - "end": { - "line": 38, - "column": 4, - "offset": 858 - } - } - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 32, - "column": 1, - "offset": 601 - }, - "end": { - "line": 40, - "column": 11, - "offset": 870 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "h2", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Challenge Seed", - "position": { - "start": { - "line": 42, - "column": 4, - "offset": 875 - }, - "end": { - "line": 42, - "column": 18, - "offset": 889 - } - } - } - ], - "position": { - "start": { - "line": 42, - "column": 1, - "offset": 872 - }, - "end": { - "line": 42, - "column": 18, - "offset": 889 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "section", - "properties": { - "id": "challengeSeed" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "div", - "properties": { - "id": "js-seed" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "pre", - "properties": {}, - "children": [ - { - "type": "element", - "tagName": "code", - "properties": { - "className": ["language-js"] - }, - "children": [ - { - "type": "text", - "value": - "function testFunction(arg) {\n return arg;\n}\n\ntestFunction('hello');\n" - } - ], - "position": { - "start": { - "line": 47, - "column": 1, - "offset": 940 - }, - "end": { - "line": 53, - "column": 4, - "offset": 1018 - } - } - } - ], - "position": { - "start": { - "line": 47, - "column": 1, - "offset": 940 - }, - "end": { - "line": 53, - "column": 4, - "offset": 1018 - } - } - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 45, - "column": 1, - "offset": 920 - }, - "end": { - "line": 55, - "column": 7, - "offset": 1026 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "h3", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Before Test", - "position": { - "start": { - "line": 57, - "column": 5, - "offset": 1032 - }, - "end": { - "line": 57, - "column": 16, - "offset": 1043 - } - } - } - ], - "position": { - "start": { - "line": 57, - "column": 1, - "offset": 1028 - }, - "end": { - "line": 57, - "column": 16, - "offset": 1043 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "div", - "properties": { - "id": "js-setup" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "pre", - "properties": {}, - "children": [ - { - "type": "element", - "tagName": "code", - "properties": { - "className": ["language-js"] - }, - "children": [ - { - "type": "text", - "value": "console.log('before the test');\n" - } - ], - "position": { - "start": { - "line": 60, - "column": 1, - "offset": 1065 - }, - "end": { - "line": 62, - "column": 4, - "offset": 1106 - } - } - } - ], - "position": { - "start": { - "line": 60, - "column": 1, - "offset": 1065 - }, - "end": { - "line": 62, - "column": 4, - "offset": 1106 - } - } - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 58, - "column": 1, - "offset": 1044 - }, - "end": { - "line": 64, - "column": 7, - "offset": 1114 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "h3", - "properties": {}, - "children": [ - { - "type": "text", - "value": "After Test", - "position": { - "start": { - "line": 66, - "column": 5, - "offset": 1120 - }, - "end": { - "line": 66, - "column": 15, - "offset": 1130 - } - } - } - ], - "position": { - "start": { - "line": 66, - "column": 1, - "offset": 1116 - }, - "end": { - "line": 66, - "column": 15, - "offset": 1130 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "div", - "properties": { - "id": "js-teardown" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "pre", - "properties": {}, - "children": [ - { - "type": "element", - "tagName": "code", - "properties": { - "className": ["language-js"] - }, - "children": [ - { - "type": "text", - "value": "console.info('after the test');\n" - } - ], - "position": { - "start": { - "line": 69, - "column": 1, - "offset": 1155 - }, - "end": { - "line": 71, - "column": 4, - "offset": 1196 - } - } - } - ], - "position": { - "start": { - "line": 69, - "column": 1, - "offset": 1155 - }, - "end": { - "line": 71, - "column": 4, - "offset": 1196 - } - } - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 67, - "column": 1, - "offset": 1131 - }, - "end": { - "line": 73, - "column": 7, - "offset": 1204 - } - } - }, - { - "type": "text", - "value": "\n", - "position": { - "start": { - "line": 73, - "column": 7, - "offset": 1204 - }, - "end": { - "line": 74, - "column": 1, - "offset": 1205 - } - } - } - ], - "position": { - "start": { - "line": 43, - "column": 1, - "offset": 890 - }, - "end": { - "line": 74, - "column": 11, - "offset": 1215 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "h2", - "properties": {}, - "children": [ - { - "type": "text", - "value": "Solution", - "position": { - "start": { - "line": 76, - "column": 4, - "offset": 1220 - }, - "end": { - "line": 76, - "column": 12, - "offset": 1228 - } - } - } - ], - "position": { - "start": { - "line": 76, - "column": 1, - "offset": 1217 - }, - "end": { - "line": 76, - "column": 12, - "offset": 1228 - } - } - }, - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "section", - "properties": { - "id": "solution" - }, - "children": [ - { - "type": "text", - "value": "\n" - }, - { - "type": "element", - "tagName": "pre", - "properties": {}, - "children": [ - { - "type": "element", - "tagName": "code", - "properties": { - "className": ["language-js"] - }, - "children": [ - { - "type": "text", - "value": - "function testFunction(arg) {\n return arg;\n}\n\ntestFunction('hello');\n" - } - ], - "position": { - "start": { - "line": 79, - "column": 1, - "offset": 1254 - }, - "end": { - "line": 85, - "column": 4, - "offset": 1332 - } - } - } - ], - "position": { - "start": { - "line": 79, - "column": 1, - "offset": 1254 - }, - "end": { - "line": 85, - "column": 4, - "offset": 1332 - } - } - }, - { - "type": "text", - "value": "\n" - } - ], - "position": { - "start": { - "line": 77, - "column": 1, - "offset": 1229 - }, - "end": { - "line": 86, - "column": 11, - "offset": 1343 - } - } - } - ], - "data": { - "quirksMode": false - }, - "position": { - "start": { - "line": 1, - "column": 1, - "offset": 0 - }, - "end": { - "line": 86, - "column": 11, - "offset": 1343 - } - } -} diff --git a/tools/challenge-parser/fixtures/challenge-md-ast.json b/tools/challenge-parser/fixtures/challenge-md-ast.json deleted file mode 100644 index 6c35954616..0000000000 --- a/tools/challenge-parser/fixtures/challenge-md-ast.json +++ /dev/null @@ -1,915 +0,0 @@ -{ - "type": "root", - "children": [ - { - "type": "yaml", - "value": - "id: bd7123c8c441eddfaeb5bdef\ntitle: Say Hello to HTML Elements\nchallengeType: 0\nvideoUrl: https://scrimba.com/p/pVMPUv/cE8Gpt2", - "position": { - "start": { - "line": 1, - "column": 1, - "offset": 0 - }, - "end": { - "line": 6, - "column": 4, - "offset": 134 - }, - "indent": [1, 1, 1, 1, 1] - } - }, - { - "type": "heading", - "depth": 2, - "children": [ - { - "type": "text", - "value": "Description", - "position": { - "start": { - "line": 8, - "column": 4, - "offset": 139 - }, - "end": { - "line": 8, - "column": 15, - "offset": 150 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 8, - "column": 1, - "offset": 136 - }, - "end": { - "line": 8, - "column": 15, - "offset": 150 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 9, - "column": 1, - "offset": 151 - }, - "end": { - "line": 9, - "column": 27, - "offset": 177 - }, - "indent": [] - } - }, - { - "type": "paragraph", - "children": [ - { - "type": "text", - "value": - "Welcome to freeCodeCamp's HTML coding challenges. These will walk you through web development step-by-step.", - "position": { - "start": { - "line": 11, - "column": 1, - "offset": 179 - }, - "end": { - "line": 11, - "column": 108, - "offset": 286 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 11, - "column": 1, - "offset": 179 - }, - "end": { - "line": 11, - "column": 108, - "offset": 286 - }, - "indent": [] - } - }, - { - "type": "paragraph", - "children": [ - { - "type": "text", - "value": "Lorem Ipsum with ", - "position": { - "start": { - "line": 13, - "column": 1, - "offset": 288 - }, - "end": { - "line": 13, - "column": 18, - "offset": 305 - }, - "indent": [] - } - }, - { - "type": "inlineCode", - "value": "some code", - "position": { - "start": { - "line": 13, - "column": 18, - "offset": 305 - }, - "end": { - "line": 13, - "column": 29, - "offset": 316 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 13, - "column": 1, - "offset": 288 - }, - "end": { - "line": 13, - "column": 29, - "offset": 316 - }, - "indent": [] - } - }, - { - "type": "blockquote", - "children": [ - { - "type": "paragraph", - "children": [ - { - "type": "text", - "value": "Some text in a blockquote", - "position": { - "start": { - "line": 15, - "column": 3, - "offset": 320 - }, - "end": { - "line": 15, - "column": 28, - "offset": 345 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 15, - "column": 3, - "offset": 320 - }, - "end": { - "line": 15, - "column": 28, - "offset": 345 - }, - "indent": [] - } - }, - { - "type": "paragraph", - "children": [ - { - "type": "text", - "value": "Some text in a blockquote, with ", - "position": { - "start": { - "line": 17, - "column": 3, - "offset": 349 - }, - "end": { - "line": 17, - "column": 35, - "offset": 381 - }, - "indent": [] - } - }, - { - "type": "inlineCode", - "value": "code", - "position": { - "start": { - "line": 17, - "column": 35, - "offset": 381 - }, - "end": { - "line": 17, - "column": 41, - "offset": 387 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 17, - "column": 3, - "offset": 349 - }, - "end": { - "line": 17, - "column": 41, - "offset": 387 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 15, - "column": 1, - "offset": 318 - }, - "end": { - "line": 17, - "column": 41, - "offset": 387 - }, - "indent": [1, 1] - } - }, - { - "type": "code", - "lang": "html", - "value": "

We aim to preserve this

", - "position": { - "start": { - "line": 19, - "column": 1, - "offset": 389 - }, - "end": { - "line": 21, - "column": 4, - "offset": 431 - }, - "indent": [1, 1] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 22, - "column": 1, - "offset": 432 - }, - "end": { - "line": 22, - "column": 11, - "offset": 442 - }, - "indent": [] - } - }, - { - "type": "heading", - "depth": 2, - "children": [ - { - "type": "text", - "value": "Instructions", - "position": { - "start": { - "line": 24, - "column": 4, - "offset": 447 - }, - "end": { - "line": 24, - "column": 16, - "offset": 459 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 24, - "column": 1, - "offset": 444 - }, - "end": { - "line": 24, - "column": 16, - "offset": 459 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 25, - "column": 1, - "offset": 460 - }, - "end": { - "line": 25, - "column": 28, - "offset": 487 - }, - "indent": [] - } - }, - { - "type": "paragraph", - "children": [ - { - "type": "text", - "value": "To pass the test on this challenge, change your ", - "position": { - "start": { - "line": 27, - "column": 1, - "offset": 489 - }, - "end": { - "line": 27, - "column": 49, - "offset": 537 - }, - "indent": [] - } - }, - { - "type": "inlineCode", - "value": "h1", - "position": { - "start": { - "line": 27, - "column": 49, - "offset": 537 - }, - "end": { - "line": 27, - "column": 53, - "offset": 541 - }, - "indent": [] - } - }, - { - "type": "text", - "value": " element's text to say \"Hello World\".", - "position": { - "start": { - "line": 27, - "column": 53, - "offset": 541 - }, - "end": { - "line": 27, - "column": 90, - "offset": 578 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 27, - "column": 1, - "offset": 489 - }, - "end": { - "line": 27, - "column": 90, - "offset": 578 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 29, - "column": 1, - "offset": 580 - }, - "end": { - "line": 29, - "column": 11, - "offset": 590 - }, - "indent": [] - } - }, - { - "type": "heading", - "depth": 2, - "children": [ - { - "type": "text", - "value": "Tests", - "position": { - "start": { - "line": 31, - "column": 4, - "offset": 595 - }, - "end": { - "line": 31, - "column": 9, - "offset": 600 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 31, - "column": 1, - "offset": 592 - }, - "end": { - "line": 31, - "column": 9, - "offset": 600 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 32, - "column": 1, - "offset": 601 - }, - "end": { - "line": 32, - "column": 21, - "offset": 621 - }, - "indent": [] - } - }, - { - "type": "code", - "lang": "yml", - "value": - "tests:\n - text: Your h1 element should have the text \"Hello World\".\n testString: assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'Your h1 element should have the text \"Hello World\".');", - "position": { - "start": { - "line": 34, - "column": 1, - "offset": 623 - }, - "end": { - "line": 38, - "column": 4, - "offset": 858 - }, - "indent": [1, 1, 1, 1] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 40, - "column": 1, - "offset": 860 - }, - "end": { - "line": 40, - "column": 11, - "offset": 870 - }, - "indent": [] - } - }, - { - "type": "heading", - "depth": 2, - "children": [ - { - "type": "text", - "value": "Challenge Seed", - "position": { - "start": { - "line": 42, - "column": 4, - "offset": 875 - }, - "end": { - "line": 42, - "column": 18, - "offset": 889 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 42, - "column": 1, - "offset": 872 - }, - "end": { - "line": 42, - "column": 18, - "offset": 889 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 43, - "column": 1, - "offset": 890 - }, - "end": { - "line": 43, - "column": 29, - "offset": 918 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 45, - "column": 1, - "offset": 920 - }, - "end": { - "line": 45, - "column": 19, - "offset": 938 - }, - "indent": [] - } - }, - { - "type": "code", - "lang": "js", - "value": - "function testFunction(arg) {\n return arg;\n}\n\ntestFunction('hello');", - "position": { - "start": { - "line": 47, - "column": 1, - "offset": 940 - }, - "end": { - "line": 53, - "column": 4, - "offset": 1018 - }, - "indent": [1, 1, 1, 1, 1, 1] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 55, - "column": 1, - "offset": 1020 - }, - "end": { - "line": 55, - "column": 7, - "offset": 1026 - }, - "indent": [] - } - }, - { - "type": "heading", - "depth": 3, - "children": [ - { - "type": "text", - "value": "Before Test", - "position": { - "start": { - "line": 57, - "column": 5, - "offset": 1032 - }, - "end": { - "line": 57, - "column": 16, - "offset": 1043 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 57, - "column": 1, - "offset": 1028 - }, - "end": { - "line": 57, - "column": 16, - "offset": 1043 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 58, - "column": 1, - "offset": 1044 - }, - "end": { - "line": 58, - "column": 20, - "offset": 1063 - }, - "indent": [] - } - }, - { - "type": "code", - "lang": "js", - "value": "console.log('before the test');", - "position": { - "start": { - "line": 60, - "column": 1, - "offset": 1065 - }, - "end": { - "line": 62, - "column": 4, - "offset": 1106 - }, - "indent": [1, 1] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 64, - "column": 1, - "offset": 1108 - }, - "end": { - "line": 64, - "column": 7, - "offset": 1114 - }, - "indent": [] - } - }, - { - "type": "heading", - "depth": 3, - "children": [ - { - "type": "text", - "value": "After Test", - "position": { - "start": { - "line": 66, - "column": 5, - "offset": 1120 - }, - "end": { - "line": 66, - "column": 15, - "offset": 1130 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 66, - "column": 1, - "offset": 1116 - }, - "end": { - "line": 66, - "column": 15, - "offset": 1130 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 67, - "column": 1, - "offset": 1131 - }, - "end": { - "line": 67, - "column": 23, - "offset": 1153 - }, - "indent": [] - } - }, - { - "type": "code", - "lang": "js", - "value": "console.info('after the test');", - "position": { - "start": { - "line": 69, - "column": 1, - "offset": 1155 - }, - "end": { - "line": 71, - "column": 4, - "offset": 1196 - }, - "indent": [1, 1] - } - }, - { - "type": "html", - "value": "
\n
", - "position": { - "start": { - "line": 73, - "column": 1, - "offset": 1198 - }, - "end": { - "line": 74, - "column": 11, - "offset": 1215 - }, - "indent": [1] - } - }, - { - "type": "heading", - "depth": 2, - "children": [ - { - "type": "text", - "value": "Solution", - "position": { - "start": { - "line": 76, - "column": 4, - "offset": 1220 - }, - "end": { - "line": 76, - "column": 12, - "offset": 1228 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 76, - "column": 1, - "offset": 1217 - }, - "end": { - "line": 76, - "column": 12, - "offset": 1228 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 77, - "column": 1, - "offset": 1229 - }, - "end": { - "line": 77, - "column": 24, - "offset": 1252 - }, - "indent": [] - } - }, - { - "type": "code", - "lang": "js", - "value": - "function testFunction(arg) {\n return arg;\n}\n\ntestFunction('hello');", - "position": { - "start": { - "line": 79, - "column": 1, - "offset": 1254 - }, - "end": { - "line": 85, - "column": 4, - "offset": 1332 - }, - "indent": [1, 1, 1, 1, 1, 1] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 86, - "column": 1, - "offset": 1333 - }, - "end": { - "line": 86, - "column": 11, - "offset": 1343 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 1, - "column": 1, - "offset": 0 - }, - "end": { - "line": 86, - "column": 11, - "offset": 1343 - } - } -} diff --git a/tools/challenge-parser/fixtures/video-challenge-md-ast.json b/tools/challenge-parser/fixtures/video-challenge-md-ast.json deleted file mode 100644 index 9161b038d3..0000000000 --- a/tools/challenge-parser/fixtures/video-challenge-md-ast.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "type": "root", - "children": [ - { - "type": "yaml", - "value": "id: 5e9a093a74c4063ca6f7c151\ntitle: Jupyter Notebooks Importing and Exporting Data\nchallengeType: 11\nvideoId: k1msxD3JIxE", - "position": { - "start": { - "line": 1, - "column": 1, - "offset": 0 - }, - "end": { - "line": 6, - "column": 4, - "offset": 129 - }, - "indent": [ - 1, - 1, - 1, - 1, - 1 - ] - } - }, - { - "type": "heading", - "depth": 2, - "children": [ - { - "type": "text", - "value": "Description", - "position": { - "start": { - "line": 8, - "column": 4, - "offset": 134 - }, - "end": { - "line": 8, - "column": 15, - "offset": 145 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 8, - "column": 1, - "offset": 131 - }, - "end": { - "line": 8, - "column": 15, - "offset": 145 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
\n
", - "position": { - "start": { - "line": 9, - "column": 1, - "offset": 146 - }, - "end": { - "line": 10, - "column": 11, - "offset": 183 - }, - "indent": [ - 1 - ] - } - }, - { - "type": "heading", - "depth": 2, - "children": [ - { - "type": "text", - "value": "Tests", - "position": { - "start": { - "line": 12, - "column": 4, - "offset": 188 - }, - "end": { - "line": 12, - "column": 9, - "offset": 193 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 12, - "column": 1, - "offset": 185 - }, - "end": { - "line": 12, - "column": 9, - "offset": 193 - }, - "indent": [] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 13, - "column": 1, - "offset": 194 - }, - "end": { - "line": 13, - "column": 21, - "offset": 214 - }, - "indent": [] - } - }, - { - "type": "code", - "lang": "yml", - "value": "question:\n text: |\n Question line one\n ```js\n var x = 'y';\n ```\n\n answers:\n - inline `code`\n - some *italics*\n - code in code tags\n solution: 3", - "position": { - "start": { - "line": 15, - "column": 1, - "offset": 216 - }, - "end": { - "line": 28, - "column": 4, - "offset": 411 - }, - "indent": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - } - }, - { - "type": "html", - "value": "
", - "position": { - "start": { - "line": 30, - "column": 1, - "offset": 413 - }, - "end": { - "line": 30, - "column": 11, - "offset": 423 - }, - "indent": [] - } - } - ], - "position": { - "start": { - "line": 1, - "column": 1, - "offset": 0 - }, - "end": { - "line": 32, - "column": 1, - "offset": 425 - } - } -} diff --git a/tools/challenge-parser/frontmatter-to-data.js b/tools/challenge-parser/frontmatter-to-data.js deleted file mode 100644 index 5a23cc12a0..0000000000 --- a/tools/challenge-parser/frontmatter-to-data.js +++ /dev/null @@ -1,18 +0,0 @@ -const visit = require('unist-util-visit'); -const YAML = require('js-yaml'); - -function plugin() { - return transformer; - - function transformer(tree, file) { - visit(tree, 'yaml', visitor); - - function visitor(node) { - const frontmatter = YAML.load(node.value); - - file.data = { ...file.data, ...frontmatter }; - } - } -} - -module.exports = plugin; diff --git a/tools/challenge-parser/frontmatter-to-data.test.js b/tools/challenge-parser/frontmatter-to-data.test.js deleted file mode 100644 index aedd072a3a..0000000000 --- a/tools/challenge-parser/frontmatter-to-data.test.js +++ /dev/null @@ -1,62 +0,0 @@ -/* global describe it expect beforeEach */ -const { isObject } = require('lodash'); - -const mockAST = require('./fixtures/challenge-md-ast.json'); -const frontmatterToData = require('./frontmatter-to-data'); - -describe('frontmatter-to-data plugin', () => { - const plugin = frontmatterToData(); - let file = { data: {} }; - beforeEach(() => { - file = { data: {} }; - }); - - it('should return a plugin which is a function', () => { - expect(typeof plugin).toEqual('function'); - }); - - it('should maintain an object for the `file.data` property', () => { - plugin(mockAST, file); - expect(isObject(file.data)).toBe(true); - }); - - it('should add all keys from frontmatter to the `file.data` property', () => { - const expectedKeys = ['id', 'title', 'challengeType', 'videoUrl']; - plugin(mockAST, file); - const actualKeys = Object.keys(file.data); - expect(actualKeys).toEqual(expectedKeys); - }); - - it('should not mutate any type held in the frontmatter', () => { - expect.assertions(4); - plugin(mockAST, file); - const { id, title, challengeType, videoUrl } = file.data; - expect(typeof id).toEqual('string'); - expect(typeof title).toEqual('string'); - expect(typeof challengeType).toEqual('number'); - expect(typeof videoUrl).toEqual('string'); - }); - - it('should trim extra whitespace from keys and values', () => { - expect.assertions(7); - plugin(mockAST, file); - const whitespaceRE = /(^\s\S+|\S\s$)/; - const keys = Object.keys(file.data); - keys.forEach(key => expect(whitespaceRE.test(key)).toBe(false)); - const values = keys.map(key => file.data[key]); - values - .filter(value => typeof value === 'string') - .forEach(value => expect(whitespaceRE.test(value)).toBe(false)); - }); - - it('should not mutate url strings', () => { - const expectedUrl = 'https://scrimba.com/p/pVMPUv/cE8Gpt2'; - plugin(mockAST, file); - expect(file.data.videoUrl).toEqual(expectedUrl); - }); - - it('should have an output to match the snapshot', () => { - plugin(mockAST, file); - expect(file.data).toMatchSnapshot(); - }); -}); diff --git a/tools/challenge-parser/index.js b/tools/challenge-parser/index.js deleted file mode 100644 index 83b6d0bfb1..0000000000 --- a/tools/challenge-parser/index.js +++ /dev/null @@ -1,40 +0,0 @@ -const unified = require('unified'); -const vfile = require('to-vfile'); -const markdown = require('remark-parse'); -const remark2rehype = require('remark-rehype'); -const html = require('rehype-stringify'); -const frontmatter = require('remark-frontmatter'); -const raw = require('rehype-raw'); - -const frontmatterToData = require('./frontmatter-to-data'); -const textToData = require('./text-to-data'); -const testsToData = require('./tests-to-data'); -const { challengeSeedToData } = require('./challengeSeed-to-data'); -const solutionsToData = require('./solution-to-data'); - -const processor = unified() - .use(markdown) - .use(frontmatter, ['yaml']) - .use(frontmatterToData) - .use(testsToData) - .use(remark2rehype, { allowDangerousHTML: true }) - .use(raw) - .use(solutionsToData) - .use(textToData, ['description', 'instructions']) - .use(challengeSeedToData) - // the plugins below are just to stop the processor from throwing - // we need to write a compiler that can create graphql nodes - .use(html); - -exports.parseMarkdown = function parseMarkdown(filename) { - return new Promise((resolve, reject) => - processor.process(vfile.readSync(filename), function(err, file) { - if (err) { - err.message += ' in file ' + filename; - reject(err); - } - delete file.contents; - return resolve(file.data); - }) - ); -}; diff --git a/tools/challenge-parser/package-lock.json b/tools/challenge-parser/package-lock.json index 26e6e80cca..a9eb0a6513 100644 --- a/tools/challenge-parser/package-lock.json +++ b/tools/challenge-parser/package-lock.json @@ -1,245 +1,9 @@ { - "name": "@freecodecamp/challenge-parser", - "version": "2.0.0", + "name": "challenge-mdx-parser", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helpers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", - "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@mdx-js/util": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.19.tgz", - "integrity": "sha512-bkkQNSHz3xSr3KRHUQ2Qk2XhewvvXAOUqjIUKwcQuL4ijOA4tUHZfUgXExi5CpMysrX7izcsyICtXjZHlfJUjg==" - }, "@types/mdast": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", @@ -249,9 +13,9 @@ } }, "@types/node": { - "version": "14.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz", - "integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==" + "version": "14.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", + "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" }, "@types/unist": { "version": "2.0.3", @@ -276,14 +40,6 @@ "vfile-message": "*" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -302,31 +58,17 @@ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" }, - "bcp-47-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-1.0.2.tgz", - "integrity": "sha512-LugfCkkRdq/h8vVcQjhKxgm+c84AKHMvyNkFyy/jxCnTsEqj2lULoEm9ooUWbwWDwL2rok9GoQXMu7iETJO+uw==" - }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true }, "ccount": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==" }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", @@ -352,36 +94,16 @@ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "comma-separated-tokens": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, "css-selector-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==" + "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", + "dev": true }, "debug": { "version": "4.2.0", @@ -391,24 +113,6 @@ "ms": "2.1.2" } }, - "detab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz", - "integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "direction": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", - "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -437,16 +141,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -455,73 +149,11 @@ "function-bind": "^1.1.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "hast-to-hyperscript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-5.0.0.tgz", - "integrity": "sha512-DLl3eYTz8uwwzEubDUdCChsR5t5b2ne+yvHrA2h58Suq/JnN3+Gsb9Tc4iZoCCsykmFUc6UUpwxTmQXs0akSeg==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "property-information": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.2.1", - "unist-util-is": "^2.0.0", - "web-namespaces": "^1.1.2" - }, - "dependencies": { - "unist-util-is": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.3.tgz", - "integrity": "sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==" - } - } - }, - "hast-util-from-parse5": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-4.0.2.tgz", - "integrity": "sha512-I6dtjsGtDqz4fmGSiFClFyiXdKhj5bPceS6intta7k/VDuiKz9P61C6hO6WMiNNmEm1b/EtBH8f+juvz4o0uwQ==", - "requires": { - "ccount": "^1.0.3", - "hastscript": "^4.0.0", - "property-information": "^4.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } - }, - "hast-util-has-property": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz", - "integrity": "sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==" - }, "hast-util-is-element": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" }, - "hast-util-parse-selector": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", - "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" - }, - "hast-util-raw": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-4.0.0.tgz", - "integrity": "sha512-5xYHyEJMCf8lX/NT4iA5z6N43yoFsrJqXJ5GWwAbLn815URbIz+UNNFEgid33F9paZuDlqVKvB+K3Aqu5+DdSw==", - "requires": { - "hast-util-from-parse5": "^4.0.2", - "hast-util-to-parse5": "^4.0.1", - "html-void-elements": "^1.0.1", - "parse5": "^5.0.0", - "unist-util-position": "^3.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", - "zwitch": "^1.0.0" - } - }, "hast-util-sanitize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-3.0.0.tgz", @@ -530,37 +162,6 @@ "xtend": "^4.0.0" } }, - "hast-util-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-2.1.0.tgz", - "integrity": "sha512-wPnaITEMGvTvzA9GUQhj7qyOVLceQfxol3Zj+2BrhuMQNt7/W1Za76ZDspNeRKAZmT4aFikNa2SwuJ7MaQC6LQ==", - "requires": { - "bcp-47-match": "^1.0.0", - "comma-separated-tokens": "^1.0.2", - "css-selector-parser": "^1.3.0", - "direction": "^1.0.2", - "hast-util-has-property": "^1.0.0", - "hast-util-is-element": "^1.0.0", - "hast-util-to-string": "^1.0.1", - "hast-util-whitespace": "^1.0.0", - "not": "^0.1.0", - "nth-check": "^1.0.1", - "property-information": "^4.0.0", - "space-separated-tokens": "^1.1.0", - "unist-util-visit": "^1.3.1", - "zwitch": "^1.0.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - } - } - }, "hast-util-to-html": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.1.tgz", @@ -585,52 +186,14 @@ "requires": { "xtend": "^4.0.0" } - }, - "stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - } } } }, - "hast-util-to-parse5": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-4.0.1.tgz", - "integrity": "sha512-U/61W+fsNfBpCyJBB5Pt3l5ypIfgXqEyW9pyrtxF7XrqDJHzcFrYpnC94d0JDYjvobLpYCzcU9srhMRPEO1YXw==", - "requires": { - "hast-to-hyperscript": "^5.0.0", - "property-information": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", - "zwitch": "^1.0.0" - } - }, - "hast-util-to-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz", - "integrity": "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==" - }, "hast-util-whitespace": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==" }, - "hastscript": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-4.1.0.tgz", - "integrity": "sha512-bOTn9hEfzewvHyXdbYGKqOr/LOz+2zYhKbC17U2YAjd16mnjqB1BQ0nooM/RdMy/htVyli0NAznXiBtwDi1cmQ==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.2.0", - "property-information": "^4.0.0", - "space-separated-tokens": "^1.0.0" - } - }, "html-void-elements": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", @@ -641,21 +204,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, "is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=" - }, "is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", @@ -670,14 +223,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" }, - "is-core-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", - "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", - "requires": { - "has": "^1.0.3" - } - }, "is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", @@ -689,24 +234,9 @@ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" - }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, "js-yaml": { "version": "3.14.0", @@ -717,19 +247,6 @@ "esprima": "^4.0.0" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", @@ -745,15 +262,13 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" - }, "markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "requires": { + "repeat-string": "^1.0.0" + } }, "mdast-builder": { "version": "1.1.1", @@ -763,24 +278,6 @@ "@types/unist": "^2.0.3" } }, - "mdast-util-compact": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", - "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", - "requires": { - "unist-util-visit": "^1.1.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - } - } - }, "mdast-util-definitions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", @@ -789,6 +286,89 @@ "unist-util-visit": "^2.0.0" } }, + "mdast-util-directive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-1.0.0.tgz", + "integrity": "sha512-04nOvmHrQfcgPQDAn9x0gW05vhqXmkGPP9G7o8BE+7Oy16oyTAgJpJyVFTscPyEzfsP7p7LSKJAXWqTCBvPjuw==", + "requires": { + "mdast-util-to-markdown": "^0.5.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "stringify-entities": "^3.1.0", + "unist-util-visit-parents": "^3.0.0" + }, + "dependencies": { + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "mdast-util-from-markdown": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.0.tgz", + "integrity": "sha512-x9b9ekG2IfeqHSUPhn4+o8SeXqual0/ZHzzugV/cC21L6s1KyKAwIHKBJ1NN9ZstIlY8YAefELRSWfJMby4a9Q==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^1.0.0", + "micromark": "~2.10.0", + "parse-entities": "^2.0.0" + } + }, + "mdast-util-frontmatter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", + "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "requires": { + "micromark-extension-frontmatter": "^0.2.0" + } + }, + "mdast-util-gfm": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.0.tgz", + "integrity": "sha512-HLfygQL6HdhJhFbLta4Ki9hClrzyAxRjyRvpm5caN65QZL+NyHPmqFlnF9vm1Rn58JT2+AbLwNcEDY4MEvkk8Q==", + "requires": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0" + } + }, + "mdast-util-gfm-autolink-literal": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.1.tgz", + "integrity": "sha512-gJ2xSpqKCetSr22GEWpZH3f5ffb4pPn/72m4piY0v7T/S+O7n7rw+sfoPLhb2b4O7WdnERoYdALRcmD68FMtlw==" + }, + "mdast-util-gfm-strikethrough": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.2.tgz", + "integrity": "sha512-T37ZbaokJcRbHROXmoVAieWnesPD5N21tv2ifYzaGRLbkh1gknItUGhZzHefUn5Zc/eaO/iTDSAFOBrn/E8kWw==", + "requires": { + "mdast-util-to-markdown": "^0.5.0" + } + }, + "mdast-util-gfm-table": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.4.tgz", + "integrity": "sha512-T4xFSON9kUb/IpYA5N+KGWcsdGczAvILvKiXQwUGind6V9fvjPCR9yhZnIeaLdBWXaz3m/Gq77ZtuLMjtFR4IQ==", + "requires": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "^0.5.0" + } + }, + "mdast-util-gfm-task-list-item": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.3.tgz", + "integrity": "sha512-9adbEPNB7oxvwiHErO6v+3D+YyM42G0LHCnBId8trm5mkvjsm8vt9zxo0yGZxih/8luk9uZq8Smf31sDIqrmkA==", + "requires": { + "mdast-util-to-markdown": "^0.5.0" + } + }, "mdast-util-to-hast": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.2.tgz", @@ -804,15 +384,70 @@ "unist-util-visit": "^2.0.0" } }, + "mdast-util-to-markdown": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.2.tgz", + "integrity": "sha512-kPPJ98HguKsWuUgR1oVR7oyVIdcSmOEYPL2g0rGTkJLDJrV2JSEq+F6b+mPtpQCexmD7Vdd7MES34rQUGCIMTw==", + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==" + }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "micromark": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz", + "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==", + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromark-extension-directive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-1.0.0.tgz", + "integrity": "sha512-6FjvznI5GpUysZqGtTEMeDaC/D3FdWFVc3CC5gDZB3fBtqiaIRBhCNg4fbqvrFSC0T2eqRbO2dJ7ZFU86gAtEQ==", + "requires": { + "micromark": "~2.10.0", + "parse-entities": "^2.0.0" + } + }, + "micromark-extension-frontmatter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", + "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "requires": { + "fault": "^1.0.0" + } + }, + "micromark-extension-gfm-strikethrough": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.1.tgz", + "integrity": "sha512-2+5qpceAqPysnjM0bpONY/3Jdnt7PJpns7rEtlwoThV2OOE7ReoQ07lYSAL8y/1sW5NnmF8XylvBdSlGsphEpQ==", + "requires": { + "micromark": "~2.10.0" + } + }, + "micromark-extension-gfm-table": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.1.tgz", + "integrity": "sha512-xVpqOnfFaa2OtC/Y7rlt4tdVFlUHdoLH3RXAZgb/KP3DDyKsAOx6BRS3UxiiyvmD/p2l6VUpD4bMIniuP4o4JA==", + "requires": { + "micromark": "~2.10.0" + } }, "ms": { "version": "2.1.2", @@ -822,21 +457,18 @@ "not": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", - "integrity": "sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0=" + "integrity": "sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0=", + "dev": true }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, "requires": { "boolbase": "~1.0.0" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -846,9 +478,9 @@ } }, "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "requires": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -858,161 +490,30 @@ "is-hexadecimal": "^1.0.0" } }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "property-information": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-4.2.0.tgz", - "integrity": "sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ==", - "requires": { - "xtend": "^4.0.1" - } - }, - "rehype-raw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-3.0.0.tgz", - "integrity": "sha512-U8OBB1DwrsxK5trvrhZLaJWrFkTFtOaLV7z8O7OAnwJ/+VTNBEaTUgJfMihSxB063m7/eNVA4+yZnDVuTxeTrQ==", - "requires": { - "hast-util-raw": "^4.0.0" - } - }, - "rehype-stringify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-4.0.0.tgz", - "integrity": "sha512-ZWBQg2fW3/75jms314hu4YIqqlAwXdbzpmwd4ez/q4nKA/zKnVUKso0xe6PfGr5Xy5GXpn4uDr9gAYgBXam7vA==", - "requires": { - "hast-util-to-html": "^4.0.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "hast-util-to-html": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz", - "integrity": "sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg==", - "requires": { - "ccount": "^1.0.0", - "comma-separated-tokens": "^1.0.1", - "hast-util-is-element": "^1.0.0", - "hast-util-whitespace": "^1.0.0", - "html-void-elements": "^1.0.0", - "property-information": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "stringify-entities": "^1.0.1", - "unist-util-is": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "unist-util-is": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.3.tgz", - "integrity": "sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==" - } - } - }, "remark": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz", - "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "requires": { - "remark-parse": "^8.0.0", - "remark-stringify": "^8.0.0", - "unified": "^9.0.0" + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" }, "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "requires": { - "repeat-string": "^1.0.0" - } - }, - "mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" + "mdast-util-from-markdown": "^0.8.0" } }, "remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz", + "integrity": "sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==", "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - } - }, - "stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" + "mdast-util-to-markdown": "^0.5.0" } }, "unified": { @@ -1027,58 +528,25 @@ "trough": "^1.0.0", "vfile": "^4.0.0" } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", - "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==" - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } } } }, - "remark-frontmatter": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.3.3.tgz", - "integrity": "sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag==", + "remark-directive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-1.0.1.tgz", + "integrity": "sha512-x6rZs0qa0zu9gW7Avd+rRxHJL2K9TGk+c51NaLfQgCNI7SxwBycRJ3w5mMkjkIjO6O9/qdx0ntu48byCSgF96Q==", "requires": { - "fault": "^1.0.1", - "xtend": "^4.0.1" + "mdast-util-directive": "^1.0.0", + "micromark-extension-directive": "^1.0.0" + } + }, + "remark-frontmatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", + "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "requires": { + "mdast-util-frontmatter": "^0.2.0", + "micromark-extension-frontmatter": "^0.2.0" } }, "remark-html": { @@ -1092,212 +560,12 @@ "xtend": "^4.0.1" } }, - "remark-mdx": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.19.tgz", - "integrity": "sha512-UKK1CFatVPNhgjsIlNQ3GjVl3+6O7x7Hag6oyntFTg8s7sgq+rhWaSfM/6lW5UWU6hzkj520KYBuBlsaSriGtA==", - "requires": { - "@babel/core": "7.11.6", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.11.0", - "@babel/plugin-syntax-jsx": "7.10.4", - "@mdx-js/util": "1.6.19", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", - "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==" - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, "remark-parse": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", - "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "remark-rehype": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-3.0.2.tgz", - "integrity": "sha512-KDRCnMzRyyCDr0I14Kfk5094W7jjhQwAIJ1C6NniGNjp2OIhcrtqRaiTZCoyEtoYILXTmZKmuOnL5yYGaEFFJA==", - "requires": { - "mdast-util-to-hast": "^3.0.0" - }, - "dependencies": { - "mdast-util-definitions": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz", - "integrity": "sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==", - "requires": { - "unist-util-visit": "^1.0.0" - } - }, - "mdast-util-to-hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz", - "integrity": "sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA==", - "requires": { - "collapse-white-space": "^1.0.0", - "detab": "^2.0.0", - "mdast-util-definitions": "^1.2.0", - "mdurl": "^1.0.1", - "trim": "0.0.1", - "trim-lines": "^1.0.0", - "unist-builder": "^1.0.1", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.0", - "xtend": "^4.0.1" - } - }, - "unist-builder": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz", - "integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==", - "requires": { - "object-assign": "^4.1.0" - } - }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - } - } - }, - "remark-stringify": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", - "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", - "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^1.1.0", - "mdast-util-compact": "^1.0.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^1.0.1", - "unherit": "^1.0.4", - "xtend": "^4.0.1" + "mdast-util-from-markdown": "^0.8.0" } }, "repeat-string": { @@ -1310,30 +578,6 @@ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, - "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "requires": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", @@ -1344,79 +588,47 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", "requires": { "character-entities-html4": "^1.0.0", "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "xtend": "^4.0.0" } }, - "style-to-object": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.2.3.tgz", - "integrity": "sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, "to-vfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", - "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-5.0.3.tgz", + "integrity": "sha512-z1Lfx60yAMDMmr+f426Y4yECsHdl8GVEAE+LymjRF5oOIZ7T4N20IxWNAxXLMRzP9jSSll38Z0fKVAhVLsdLOw==", "requires": { "is-buffer": "^2.0.0", - "vfile": "^4.0.0" + "vfile": "^3.0.0" }, "dependencies": { "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" }, "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", "requires": { - "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" } }, "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "unist-util-stringify-position": "^1.1.1" } } } @@ -1426,11 +638,6 @@ "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" }, - "trim-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.3.tgz", - "integrity": "sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==" - }, "trim-trailing-lines": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", @@ -1463,6 +670,37 @@ "trough": "^1.0.0", "vfile": "^3.0.0", "x-is-string": "^0.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + } } }, "unist-builder": { @@ -1490,6 +728,19 @@ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-0.4.0.tgz", "integrity": "sha1-iQwsGzv+g/sA5BKbjkz+ZFJw+dE=" }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "remark": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/remark/-/remark-5.1.0.tgz", @@ -1531,6 +782,17 @@ "unherit": "^1.0.4" } }, + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "unified": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/unified/-/unified-4.2.1.tgz", @@ -1544,6 +806,14 @@ "vfile": "^1.0.0" } }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, "unist-util-visit": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", @@ -1556,6 +826,11 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=" + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" } } }, @@ -1615,24 +890,6 @@ "unist-util-is": "^4.0.0" } }, - "unist-util-remove-position": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", - "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", - "requires": { - "unist-util-visit": "^1.1.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - } - } - }, "unist-util-select": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-3.0.1.tgz", @@ -1647,9 +904,12 @@ } }, "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } }, "unist-util-visit": { "version": "2.0.3", @@ -1662,9 +922,9 @@ }, "dependencies": { "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", + "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" @@ -1693,34 +953,26 @@ } }, "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", "requires": { + "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } }, - "vfile-location": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", - "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" - }, "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { - "unist-util-stringify-position": "^1.1.1" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/tools/challenge-parser/package.json b/tools/challenge-parser/package.json index ffb013bbc9..4b86c55bed 100644 --- a/tools/challenge-parser/package.json +++ b/tools/challenge-parser/package.json @@ -1,40 +1,37 @@ { - "name": "@freecodecamp/challenge-parser", - "version": "2.0.0", - "description": "", + "name": "challenge-parser", + "version": "0.0.1", + "description": "converts mdx files to challenge objects", "main": "index.js", - "publishConfig": { - "access": "public" + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "", - "license": "ISC", "devDependencies": { "unist-util-select": "^3.0.1" }, "dependencies": { - "hast-util-select": "^2.1.0", "hast-util-to-html": "^7.1.1", "js-yaml": "^3.12.0", - "lodash": "^4.17.20", + "lodash": "^4.17.19", "mdast-builder": "^1.1.1", + "mdast-util-gfm": "^0.1.0", "mdast-util-to-hast": "^9.1.1", - "rehype-raw": "^3.0.0", - "rehype-stringify": "^4.0.0", - "remark": "^12.0.1", - "remark-frontmatter": "^1.3.3", + "micromark-extension-gfm-strikethrough": "^0.6.1", + "micromark-extension-gfm-table": "^0.4.1", + "remark": "^13.0.0", + "remark-directive": "^1.0.1", + "remark-frontmatter": "^3.0.0", "remark-html": "^12.0.0", - "remark-mdx": "^1.6.14", - "remark-parse": "^5.0.0", - "remark-rehype": "^3.0.2", - "remark-stringify": "^6.0.4", - "to-vfile": "^6.1.0", - "unified": "^7.1.0", + "remark-parse": "^9.0.0", + "to-vfile": "^5.0.1", + "unified": "^7.0.0", "unist-util-find": "^1.0.1", "unist-util-find-after": "^3.0.0", "unist-util-find-all-after": "^3.0.1", "unist-util-find-all-between": "^2.0.0", "unist-util-is": "^4.0.2", "unist-util-modify-children": "^2.0.0", + "unist-util-position": "^3.1.0", "unist-util-remove": "^2.0.0", "unist-util-visit": "^2.0.3", "unist-util-visit-children": "^1.1.4" diff --git a/tools/challenge-parser/parser/package-lock.json b/tools/challenge-parser/parser/package-lock.json deleted file mode 100644 index a9eb0a6513..0000000000 --- a/tools/challenge-parser/parser/package-lock.json +++ /dev/null @@ -1,997 +0,0 @@ -{ - "name": "challenge-mdx-parser", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", - "requires": { - "@types/unist": "*" - } - }, - "@types/node": { - "version": "14.11.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", - "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" - }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - }, - "@types/vfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", - "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", - "requires": { - "@types/node": "*", - "@types/unist": "*", - "@types/vfile-message": "*" - } - }, - "@types/vfile-message": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz", - "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==", - "requires": { - "vfile-message": "*" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-iterate": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.4.tgz", - "integrity": "sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA==" - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "ccount": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", - "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==" - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "css-selector-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "requires": { - "ms": "2.1.2" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "requires": { - "format": "^0.2.0" - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "hast-util-is-element": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", - "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" - }, - "hast-util-sanitize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-3.0.0.tgz", - "integrity": "sha512-gxsM24ARtuulsrWEj8QtVM6FNeAEHklF/t7TEIWvX1wuQcoAQtJtEUcT8t0os4uxCUqh1epX/gTi8fp8gNKvCA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "hast-util-to-html": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.1.tgz", - "integrity": "sha512-Ujqj0hGuo3dIQKilkbauAv5teOqPvhaSLEgs1lgApFT0812e114KiffV8XfE4ttR8dRPqxNOIJOMu6SKOVOGlg==", - "requires": { - "ccount": "^1.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-is-element": "^1.0.0", - "hast-util-whitespace": "^1.0.0", - "html-void-elements": "^1.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0", - "stringify-entities": "^3.0.1", - "unist-util-is": "^4.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - } - } - }, - "hast-util-whitespace": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", - "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==" - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "lodash.iteratee": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.iteratee/-/lodash.iteratee-4.7.0.tgz", - "integrity": "sha1-vkF32yiajMw8CZDx2ya1si/BVUw=" - }, - "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" - }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "requires": { - "repeat-string": "^1.0.0" - } - }, - "mdast-builder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-builder/-/mdast-builder-1.1.1.tgz", - "integrity": "sha512-a3KBk/LmYD6wKsWi8WJrGU/rXR4yuF4Men0JO0z6dSZCm5FrXXWTRDjqK0vGSqa+1M6p9edeuypZAZAzSehTUw==", - "requires": { - "@types/unist": "^2.0.3" - } - }, - "mdast-util-definitions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", - "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-directive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-1.0.0.tgz", - "integrity": "sha512-04nOvmHrQfcgPQDAn9x0gW05vhqXmkGPP9G7o8BE+7Oy16oyTAgJpJyVFTscPyEzfsP7p7LSKJAXWqTCBvPjuw==", - "requires": { - "mdast-util-to-markdown": "^0.5.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "stringify-entities": "^3.1.0", - "unist-util-visit-parents": "^3.0.0" - }, - "dependencies": { - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "mdast-util-from-markdown": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.0.tgz", - "integrity": "sha512-x9b9ekG2IfeqHSUPhn4+o8SeXqual0/ZHzzugV/cC21L6s1KyKAwIHKBJ1NN9ZstIlY8YAefELRSWfJMby4a9Q==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^1.0.0", - "micromark": "~2.10.0", - "parse-entities": "^2.0.0" - } - }, - "mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", - "requires": { - "micromark-extension-frontmatter": "^0.2.0" - } - }, - "mdast-util-gfm": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.0.tgz", - "integrity": "sha512-HLfygQL6HdhJhFbLta4Ki9hClrzyAxRjyRvpm5caN65QZL+NyHPmqFlnF9vm1Rn58JT2+AbLwNcEDY4MEvkk8Q==", - "requires": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0" - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.1.tgz", - "integrity": "sha512-gJ2xSpqKCetSr22GEWpZH3f5ffb4pPn/72m4piY0v7T/S+O7n7rw+sfoPLhb2b4O7WdnERoYdALRcmD68FMtlw==" - }, - "mdast-util-gfm-strikethrough": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.2.tgz", - "integrity": "sha512-T37ZbaokJcRbHROXmoVAieWnesPD5N21tv2ifYzaGRLbkh1gknItUGhZzHefUn5Zc/eaO/iTDSAFOBrn/E8kWw==", - "requires": { - "mdast-util-to-markdown": "^0.5.0" - } - }, - "mdast-util-gfm-table": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.4.tgz", - "integrity": "sha512-T4xFSON9kUb/IpYA5N+KGWcsdGczAvILvKiXQwUGind6V9fvjPCR9yhZnIeaLdBWXaz3m/Gq77ZtuLMjtFR4IQ==", - "requires": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "^0.5.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.3.tgz", - "integrity": "sha512-9adbEPNB7oxvwiHErO6v+3D+YyM42G0LHCnBId8trm5mkvjsm8vt9zxo0yGZxih/8luk9uZq8Smf31sDIqrmkA==", - "requires": { - "mdast-util-to-markdown": "^0.5.0" - } - }, - "mdast-util-to-hast": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.2.tgz", - "integrity": "sha512-OpkFLBC2VnNAb2FNKcKWu9FMbJhQKog+FCT8nuKmQNIKXyT1n3SIskE7uWDep6x+cA20QXlK5AETHQtYmQmxtQ==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^3.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.2.tgz", - "integrity": "sha512-kPPJ98HguKsWuUgR1oVR7oyVIdcSmOEYPL2g0rGTkJLDJrV2JSEq+F6b+mPtpQCexmD7Vdd7MES34rQUGCIMTw==", - "requires": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - } - }, - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "micromark": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz", - "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==", - "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "micromark-extension-directive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-1.0.0.tgz", - "integrity": "sha512-6FjvznI5GpUysZqGtTEMeDaC/D3FdWFVc3CC5gDZB3fBtqiaIRBhCNg4fbqvrFSC0T2eqRbO2dJ7ZFU86gAtEQ==", - "requires": { - "micromark": "~2.10.0", - "parse-entities": "^2.0.0" - } - }, - "micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", - "requires": { - "fault": "^1.0.0" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.1.tgz", - "integrity": "sha512-2+5qpceAqPysnjM0bpONY/3Jdnt7PJpns7rEtlwoThV2OOE7ReoQ07lYSAL8y/1sW5NnmF8XylvBdSlGsphEpQ==", - "requires": { - "micromark": "~2.10.0" - } - }, - "micromark-extension-gfm-table": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.1.tgz", - "integrity": "sha512-xVpqOnfFaa2OtC/Y7rlt4tdVFlUHdoLH3RXAZgb/KP3DDyKsAOx6BRS3UxiiyvmD/p2l6VUpD4bMIniuP4o4JA==", - "requires": { - "micromark": "~2.10.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "not": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", - "integrity": "sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0=", - "dev": true - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "requires": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - }, - "dependencies": { - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "requires": { - "mdast-util-from-markdown": "^0.8.0" - } - }, - "remark-stringify": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz", - "integrity": "sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==", - "requires": { - "mdast-util-to-markdown": "^0.5.0" - } - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "remark-directive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-1.0.1.tgz", - "integrity": "sha512-x6rZs0qa0zu9gW7Avd+rRxHJL2K9TGk+c51NaLfQgCNI7SxwBycRJ3w5mMkjkIjO6O9/qdx0ntu48byCSgF96Q==", - "requires": { - "mdast-util-directive": "^1.0.0", - "micromark-extension-directive": "^1.0.0" - } - }, - "remark-frontmatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", - "requires": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" - } - }, - "remark-html": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-12.0.0.tgz", - "integrity": "sha512-M104NMHs48+uswChJkCDXCdabzxAinpHikpt6kS3gmGMyIvPZ5kn53tB9shFsL2O4HUJ9DIEsah1SX1Ve5FXHA==", - "requires": { - "hast-util-sanitize": "^3.0.0", - "hast-util-to-html": "^7.0.0", - "mdast-util-to-hast": "^9.0.0", - "xtend": "^4.0.1" - } - }, - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "requires": { - "mdast-util-from-markdown": "^0.8.0" - } - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "to-vfile": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-5.0.3.tgz", - "integrity": "sha512-z1Lfx60yAMDMmr+f426Y4yECsHdl8GVEAE+LymjRF5oOIZ7T4N20IxWNAxXLMRzP9jSSll38Z0fKVAhVLsdLOw==", - "requires": { - "is-buffer": "^2.0.0", - "vfile": "^3.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" - }, - "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", - "requires": { - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - } - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "trim-trailing-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", - "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==" - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unified": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", - "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", - "requires": { - "@types/unist": "^2.0.0", - "@types/vfile": "^3.0.0", - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^3.0.0", - "x-is-string": "^0.1.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" - }, - "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", - "requires": { - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - } - } - }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-find": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unist-util-find/-/unist-util-find-1.0.1.tgz", - "integrity": "sha1-EGK7tpKMepfGrcibU3RdTEbCIqI=", - "requires": { - "lodash.iteratee": "^4.5.0", - "remark": "^5.0.1", - "unist-util-visit": "^1.1.0" - }, - "dependencies": { - "longest-streak": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-1.0.0.tgz", - "integrity": "sha1-0GWXxNTDG1LMsfXY+P5xSOr9aWU=" - }, - "markdown-table": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-0.4.0.tgz", - "integrity": "sha1-iQwsGzv+g/sA5BKbjkz+ZFJw+dE=" - }, - "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "remark": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-5.1.0.tgz", - "integrity": "sha1-y0Y709vLS5l5STXu4c9x16jjBow=", - "requires": { - "remark-parse": "^1.1.0", - "remark-stringify": "^1.1.0", - "unified": "^4.1.1" - } - }, - "remark-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-1.1.0.tgz", - "integrity": "sha1-w8oQ+ajaBGFcKPCapOMEUQUm7CE=", - "requires": { - "collapse-white-space": "^1.0.0", - "extend": "^3.0.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0" - } - }, - "remark-stringify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-1.1.0.tgz", - "integrity": "sha1-pxBeJbnuK/mkm3XSxCPxGwauIJI=", - "requires": { - "ccount": "^1.0.0", - "extend": "^3.0.0", - "longest-streak": "^1.0.0", - "markdown-table": "^0.4.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "stringify-entities": "^1.0.1", - "unherit": "^1.0.4" - } - }, - "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "unified": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-4.2.1.tgz", - "integrity": "sha1-dv9Dqo2kMPbn5KVchOusKtLPzS4=", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "has": "^1.0.1", - "once": "^1.3.3", - "trough": "^1.0.0", - "vfile": "^1.0.0" - } - }, - "unist-util-remove-position": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", - "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", - "requires": { - "unist-util-visit": "^1.1.0" - } - }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "vfile": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", - "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=" - }, - "vfile-location": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", - "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" - } - } - }, - "unist-util-find-after": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz", - "integrity": "sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-find-all-after": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", - "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-find-all-between": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-find-all-between/-/unist-util-find-all-between-2.1.0.tgz", - "integrity": "sha512-OCCUtDD8UHKeODw3TPXyFDxPCbpgBzbGTTaDpR68nvxkwiVcawBqMVrokfBMvUi7ij2F5q7S4s4Jq5dvkcBt+w==", - "requires": { - "unist-util-find": "^1.0.1", - "unist-util-is": "^4.0.2" - } - }, - "unist-util-generated": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", - "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==" - }, - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-modify-children": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz", - "integrity": "sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg==", - "requires": { - "array-iterate": "^1.0.0" - } - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "unist-util-remove": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", - "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-select": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-3.0.1.tgz", - "integrity": "sha512-VQpTuqZVJlRbosQdnLdTPIIqwZeU70YZ5aMBOqtFNGeeCdYn6ORZt/9RiaVlbl06ocuf58SVMoFa7a13CSGPMA==", - "dev": true, - "requires": { - "css-selector-parser": "^1.0.0", - "not": "^0.1.0", - "nth-check": "^1.0.0", - "unist-util-is": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "dependencies": { - "unist-util-visit-parents": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", - "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "unist-util-visit-children": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz", - "integrity": "sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ==" - }, - "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "requires": { - "unist-util-is": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" - } - } - }, - "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" - } - } -} diff --git a/tools/challenge-parser/parser/package.json b/tools/challenge-parser/parser/package.json deleted file mode 100644 index 4b86c55bed..0000000000 --- a/tools/challenge-parser/parser/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "challenge-parser", - "version": "0.0.1", - "description": "converts mdx files to challenge objects", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "devDependencies": { - "unist-util-select": "^3.0.1" - }, - "dependencies": { - "hast-util-to-html": "^7.1.1", - "js-yaml": "^3.12.0", - "lodash": "^4.17.19", - "mdast-builder": "^1.1.1", - "mdast-util-gfm": "^0.1.0", - "mdast-util-to-hast": "^9.1.1", - "micromark-extension-gfm-strikethrough": "^0.6.1", - "micromark-extension-gfm-table": "^0.4.1", - "remark": "^13.0.0", - "remark-directive": "^1.0.1", - "remark-frontmatter": "^3.0.0", - "remark-html": "^12.0.0", - "remark-parse": "^9.0.0", - "to-vfile": "^5.0.1", - "unified": "^7.0.0", - "unist-util-find": "^1.0.1", - "unist-util-find-after": "^3.0.0", - "unist-util-find-all-after": "^3.0.1", - "unist-util-find-all-between": "^2.0.0", - "unist-util-is": "^4.0.2", - "unist-util-modify-children": "^2.0.0", - "unist-util-position": "^3.1.0", - "unist-util-remove": "^2.0.0", - "unist-util-visit": "^2.0.3", - "unist-util-visit-children": "^1.1.4" - } -} diff --git a/tools/challenge-parser/solution-to-data.js b/tools/challenge-parser/solution-to-data.js deleted file mode 100644 index cd3fc5ae6c..0000000000 --- a/tools/challenge-parser/solution-to-data.js +++ /dev/null @@ -1,55 +0,0 @@ -const visit = require('unist-util-visit'); -const { selectAll } = require('hast-util-select'); - -const { sectionFilter } = require('./utils'); -const { createCodeGetter, defaultFile } = require('./challengeSeed-to-data'); -const { isEmpty } = require('lodash'); - -const solutionRE = /(.+)-solution$/; - -function indexByKey(obj) { - return { [obj.key]: { ...obj } }; -} - -function createPlugin() { - return function transformer(tree, file) { - function visitor(node) { - if (sectionFilter(node, 'solution')) { - // fallback for single-file challenges - const rawSolutions = selectAll('code', node).map(element => ({ - lang: element.properties.className[0].split('-')[1], - contents: element.children[0].value - })); - - const solutionFiles = {}; - - const codeDivs = selectAll('div', node); - const solutionContainers = codeDivs.filter(({ properties: { id } }) => - solutionRE.test(id) - ); - solutionContainers.forEach( - createCodeGetter('contents', solutionRE, solutionFiles) - ); - - const solutionsAsFiles = rawSolutions - .map(({ lang, contents }) => ({ - ...defaultFile(lang), - contents - })) - .map(indexByKey); - - const solutions = isEmpty(solutionFiles) - ? solutionsAsFiles - : [solutionFiles]; - - file.data = { - ...file.data, - solutions - }; - } - } - visit(tree, 'element', visitor); - }; -} - -module.exports = createPlugin; diff --git a/tools/challenge-parser/solution-to-data.test.js b/tools/challenge-parser/solution-to-data.test.js deleted file mode 100644 index 762a9186ff..0000000000 --- a/tools/challenge-parser/solution-to-data.test.js +++ /dev/null @@ -1,38 +0,0 @@ -/* global describe it expect beforeEach */ -const mockAST = require('./fixtures/challenge-html-ast.json'); -const solutionToData = require('./solution-to-data'); -const { isObject } = require('lodash'); - -describe('challengeSeed-to-data plugin', () => { - const plugin = solutionToData(); - let file = { data: {} }; - - beforeEach(() => { - file = { data: {} }; - }); - - it('returns a function', () => { - expect(typeof plugin).toEqual('function'); - }); - - it('adds a `solutions` property to `file.data`', () => { - plugin(mockAST, file); - expect('solutions' in file.data).toBe(true); - }); - - it('ensures that the `solutions` property is an array', () => { - plugin(mockAST, file); - expect(Array.isArray(file.data.solutions)).toBe(true); - }); - - it('each entry in the `solutions` array is an object', () => { - plugin(mockAST, file); - - expect(file.data.solutions.every(el => isObject(el))).toBe(true); - }); - - it('should have an output to match the snapshot', () => { - plugin(mockAST, file); - expect(file.data).toMatchSnapshot(); - }); -}); diff --git a/tools/challenge-parser/tests-to-data.js b/tools/challenge-parser/tests-to-data.js deleted file mode 100644 index bd957a4bcd..0000000000 --- a/tools/challenge-parser/tests-to-data.js +++ /dev/null @@ -1,55 +0,0 @@ -const visit = require('unist-util-visit'); -const YAML = require('js-yaml'); -const unified = require('unified'); -const markdown = require('remark-parse'); -const remark2rehype = require('remark-rehype'); -const html = require('rehype-stringify'); -const raw = require('rehype-raw'); - -const processor = unified() - .use(markdown) - .use(remark2rehype, { allowDangerousHTML: true }) - .use(raw) - .use(html); - -function mdToHTML(str) { - return processor.processSync(str).toString(); -} - -function plugin() { - return transformer; - - function transformer(tree, file) { - visit(tree, 'code', visitor); - - function visitor(node) { - const { lang, value } = node; - if (lang === 'yml') { - const tests = YAML.load(value); - if (tests.question) { - // mdToHTML can not parse numbers. If an answer is a number - // (i.e. 5, not '5') it has to be converted. - tests.question.answers = tests.question.answers.map(answer => - mdToHTML(answer.toString()) - ); - tests.question.text = mdToHTML(tests.question.text); - } - // since tests are overloaded (they're both a list of projects and - // actual tests), it's necessary to check which they are: - if (tests.tests && tests.tests[0] && tests.tests[0].text) { - tests.tests = tests.tests.map(({ text, testString }) => ({ - text: mdToHTML(text), - testString - })); - } - file.data = { - ...file.data, - ...tests - }; - } - } - } -} - -module.exports = plugin; -module.exports.mdToHTML = mdToHTML; diff --git a/tools/challenge-parser/tests-to-data.test.js b/tools/challenge-parser/tests-to-data.test.js deleted file mode 100644 index 4bb16f8bb3..0000000000 --- a/tools/challenge-parser/tests-to-data.test.js +++ /dev/null @@ -1,84 +0,0 @@ -/* global describe it expect beforeEach */ -const mockAST = require('./fixtures/challenge-md-ast.json'); -const mockVideoAST = require('./fixtures/video-challenge-md-ast.json'); -const testsToData = require('./tests-to-data'); - -const { mdToHTML } = testsToData; - -describe('mdToHTML', () => { - it('converts Markdown to HTML', () => { - // a line of text on its own is parsed as a paragraph, hence the p tags - expect(mdToHTML('*it*')).toBe('

it

'); - }); - - it('preserves code language', () => { - expect(mdToHTML('```js\n var x = "y";\n```')).toBe( - '
 var x = "y";\n
' - ); - }); -}); - -describe('tests-to-data plugin', () => { - const plugin = testsToData(); - let file = { data: {} }; - - beforeEach(() => { - file = { data: {} }; - }); - - it('returns a function', () => { - expect(typeof plugin).toEqual('function'); - }); - - it('adds a `tests` property to `file.data`', () => { - plugin(mockAST, file); - - expect('tests' in file.data).toBe(true); - }); - - it('adds test objects to the tests array following a schema', () => { - expect.assertions(3); - plugin(mockAST, file); - const testObject = file.data.tests[0]; - expect(Object.keys(testObject).length).toBe(2); - expect(testObject).toHaveProperty('testString'); - expect(testObject).toHaveProperty('text'); - }); - - it('should generate a question object from a video challenge AST', () => { - expect.assertions(4); - plugin(mockVideoAST, file); - const testObject = file.data.question; - expect(Object.keys(testObject).length).toBe(3); - expect(testObject).toHaveProperty('text'); - expect(testObject).toHaveProperty('solution'); - expect(testObject).toHaveProperty('answers'); - }); - - it('should convert question and answer markdown into html', () => { - plugin(mockVideoAST, file); - const testObject = file.data.question; - expect(Object.keys(testObject).length).toBe(3); - expect(testObject.text).toBe( - '

Question line one

\n' + - `
  var x = 'y';\n` +
-        '
' - ); - expect(testObject.solution).toBe(3); - expect(testObject.answers[0]).toBe('

inline code

'); - expect(testObject.answers[1]).toBe('

some italics

'); - expect(testObject.answers[2]).toBe( - '

code in code tags

' - ); - }); - - it('should have an output to match the snapshot', () => { - plugin(mockAST, file); - expect(file.data).toMatchSnapshot(); - }); - - it('should match the video snapshot', () => { - plugin(mockVideoAST, file); - expect(file.data).toMatchSnapshot(); - }); -}); diff --git a/tools/challenge-parser/text-to-data.js b/tools/challenge-parser/text-to-data.js deleted file mode 100644 index e89d1811cf..0000000000 --- a/tools/challenge-parser/text-to-data.js +++ /dev/null @@ -1,82 +0,0 @@ -const visit = require('unist-util-visit'); -const toHTML = require('hast-util-to-html'); - -const { sectionFilter } = require('./utils'); - -function createPNode() { - return { - type: 'element', - tagName: 'p', - children: [], - properties: {} - }; -} -function createBlankLineNode() { - return { - type: 'text', - value: '\n' - }; -} - -function textToData(sectionIds) { - if (!sectionIds || !Array.isArray(sectionIds) || sectionIds.length <= 0) { - throw new Error("textToData must have an array of section id's supplied"); - } - function transformer(tree, file) { - visit(tree, 'element', visitor); - function visitor(node) { - sectionIds.forEach(sectionId => { - if (sectionFilter(node, sectionId)) { - const newChildren = []; - let currentParagraph = null; - node.children.forEach(child => { - if (child.type !== 'text') { - if (child.type === 'element' && child.tagName === 'p') { - newChildren.push(child); - currentParagraph = null; - } else { - if (!currentParagraph) { - currentParagraph = createPNode(); - newChildren.push(currentParagraph); - } - currentParagraph.children.push(child); - } - } else { - const lines = child.value.split('\n'); - if (lines.filter(Boolean).length > 0) { - lines.forEach((line, index) => { - if (line === '') { - currentParagraph = null; - } else { - if (!currentParagraph || index > 0) { - newChildren.push(createBlankLineNode()); - currentParagraph = createPNode(); - newChildren.push(currentParagraph); - } - currentParagraph.children.push({ ...child, value: line }); - } - }); - } else { - currentParagraph = null; - newChildren.push(createBlankLineNode()); - } - } - }); - const hasData = newChildren.some( - node => node.type !== 'text' || !/^\s*$/.test(node.value) - ); - const textArray = hasData - ? toHTML({ ...node, children: newChildren }) - : ''; - file.data = { - ...file.data, - [sectionId]: textArray - }; - } - }); - } - } - return transformer; -} - -module.exports = textToData; diff --git a/tools/challenge-parser/text-to-data.test.js b/tools/challenge-parser/text-to-data.test.js deleted file mode 100644 index 7fd0d7cd01..0000000000 --- a/tools/challenge-parser/text-to-data.test.js +++ /dev/null @@ -1,90 +0,0 @@ -/* global describe it expect */ -const mockAST = require('./fixtures/challenge-html-ast.json'); -const adjacentTagsAST = require('./fixtures/adjacent-tags-ast.json'); -const textToData = require('./text-to-data'); - -describe('text-to-data', () => { - const expectedField = 'description'; - const otherExpectedField = 'instructions'; - const unexpectedField = 'does-not-exist'; - let file = { data: {} }; - - beforeEach(() => { - file = { data: {} }; - }); - - it('should take return a function', () => { - const plugin = textToData(['a-section-id']); - - expect(typeof plugin).toEqual('function'); - }); - - it('throws when no argument or the incorrect argument is supplied', () => { - expect.assertions(5); - const expectedError = - "textToData must have an array of section id's supplied"; - expect(() => { - textToData(); - }).toThrow(expectedError); - expect(() => { - textToData(''); - }).toThrow(expectedError); - expect(() => { - textToData({}); - }).toThrow(expectedError); - expect(() => { - textToData(1); - }).toThrow(expectedError); - expect(() => { - textToData([]); - }).toThrow(expectedError); - }); - - it("should only add a value for 'found' section id's", () => { - const plugin = textToData([expectedField, unexpectedField]); - plugin(mockAST, file); - expect(expectedField in file.data && !(unexpectedField in file.data)).toBe( - true - ); - }); - - it('should add a string relating to the section id to `file.data`', () => { - const plugin = textToData([expectedField]); - plugin(mockAST, file); - const expectedText = 'Welcome to freeCodeCamp'; - expect(file.data[expectedField].includes(expectedText)).toBe(true); - }); - - // eslint-disable-next-line max-len - it('should add an empty string relating to the section id without data to `file.data`', () => { - const plugin = textToData([otherExpectedField]); - plugin(mockAST, file); - expect(file.data[otherExpectedField]).toEqual(''); - }); - - it('should preserve nested html', () => { - const plugin = textToData([expectedField]); - plugin(mockAST, file); - const expectedText = `
-

Some text in a blockquote

-

Some text in a blockquote, with code

-
`; - expect(file.data[expectedField].includes(expectedText)).toBe(true); - }); - - // eslint-disable-next-line max-len - it('should not add paragraphs when html elements are separated by whitespace', () => { - const plugin = textToData([expectedField]); - plugin(adjacentTagsAST, file); - const expectedText1 = `code with more after a space`; - const expectedText2 = `another pair of elements with a space`; - expect(file.data[expectedField].includes(expectedText1)).toBe(true); - expect(file.data[expectedField].includes(expectedText2)).toBe(true); - }); - - it('should have an output to match the snapshot', () => { - const plugin = textToData([expectedField, otherExpectedField]); - plugin(mockAST, file); - expect(file.data).toMatchSnapshot(); - }); -}); diff --git a/tools/challenge-parser/utils/index.js b/tools/challenge-parser/utils/index.js deleted file mode 100644 index 6c27bc3251..0000000000 --- a/tools/challenge-parser/utils/index.js +++ /dev/null @@ -1,6 +0,0 @@ -exports.sectionFilter = ( - { type, tagName, properties: { id = '' } }, - sectionId -) => { - return type === 'element' && tagName === 'section' && id === sectionId; -};