diff --git a/.gitignore b/.gitignore index 046e0cc..9757815 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /experiments/ node_modules/ +.turbo \ No newline at end of file diff --git a/docs/experiments/parsers/v5/example.js b/docs/experiments/parsers/v5/example.js index 2bbfe32..fece6ac 100644 --- a/docs/experiments/parsers/v5/example.js +++ b/docs/experiments/parsers/v5/example.js @@ -110,10 +110,10 @@ async function main() { if (match('name')) author.name = tail().trim() else if (match('email')) author.email = tail().trim() else { - if (!author['#text']) author['#text'] = [level(), line(l + 1)] + if (!author['#text']) author['#text'] = [line(l + 1)] // Loop through all remaining lines to avoid re-matching name or email above. while(await next(l)) { - author['#text'].push(level(), line(l + 1)) + author['#text'].push(line(l + 1)) } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b96ca1..d2a7ff3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,20 +12,6 @@ importers: jest: 29.4.1 turbo: 1.7.3 - experiments/lesson-plans: - specifiers: - '@terrace/core': workspace:* - ejs: ^3.1.8 - humanize-duration: ^3.27.3 - nunjucks: ^3.2.3 - parse-duration: ^1.0.2 - dependencies: - '@terrace/core': link:../../packages/js/core - ejs: 3.1.8 - humanize-duration: 3.28.0 - nunjucks: 3.2.3 - parse-duration: 1.0.2 - packages/js/core: specifiers: vite: ^3.2.3 @@ -766,10 +752,6 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /a-sync-waterfall/1.0.1: - resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} - dev: false - /acorn/8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -800,6 +782,7 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true /ansi-styles/5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -820,18 +803,10 @@ packages: sprintf-js: 1.0.3 dev: true - /asap/2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - /assertion-error/1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /async/3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: false - /babel-jest/29.4.1_@babel+core@7.20.12: resolution: {integrity: sha512-xBZa/pLSsF/1sNpkgsiT3CmY7zV1kAsZ9OxxtrFqYucnOuRftXAfcJqcDVyOPeN4lttWTwhLdu0T9f8uvoPEUg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -906,18 +881,14 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - - /brace-expansion/2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false + dev: true /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -994,6 +965,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} @@ -1042,6 +1014,7 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} @@ -1049,14 +1022,11 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - /commander/5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: false + dev: true /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -1113,14 +1083,6 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /ejs/3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.5 - dev: false - /electron-to-chromium/1.4.286: resolution: {integrity: sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ==} dev: true @@ -1412,12 +1374,6 @@ packages: bser: 2.1.1 dev: true - /filelist/1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - dev: false - /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -1501,6 +1457,7 @@ packages: /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} @@ -1518,10 +1475,6 @@ packages: engines: {node: '>=10.17.0'} dev: true - /humanize-duration/3.28.0: - resolution: {integrity: sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A==} - dev: false - /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -1627,17 +1580,6 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jake/10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.4 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: false - /jest-changed-files/29.4.0: resolution: {integrity: sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2193,13 +2135,7 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - - /minimatch/5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false + dev: true /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -2235,21 +2171,6 @@ packages: path-key: 3.1.1 dev: true - /nunjucks/3.2.3: - resolution: {integrity: sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==} - engines: {node: '>= 6.9.0'} - hasBin: true - peerDependencies: - chokidar: ^3.3.0 - peerDependenciesMeta: - chokidar: - optional: true - dependencies: - a-sync-waterfall: 1.0.1 - asap: 2.0.6 - commander: 5.1.0 - dev: false - /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -2289,10 +2210,6 @@ packages: engines: {node: '>=6'} dev: true - /parse-duration/1.0.2: - resolution: {integrity: sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==} - dev: false - /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -2539,6 +2456,7 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} diff --git a/test/basic.test.tce b/test/basic.test.tce deleted file mode 100644 index 2505afa..0000000 --- a/test/basic.test.tce +++ /dev/null @@ -1,7 +0,0 @@ -#schema test - -input - key value - -output - level: 0 | head: key | tail: value | line: key value diff --git a/test/test-runner.test.js b/test/test-runner.test.js index f19beb9..84c0473 100644 --- a/test/test-runner.test.js +++ b/test/test-runner.test.js @@ -3,34 +3,41 @@ import fs from 'node:fs/promises' import { useDocument } from '@terrace/core' import { createReadlineReader } from '@terrace/core/readers/node-readline' -async function loadTest(path) { +async function loadTests(path) { const { next, level, head, tail, line, match } = useDocument(createReadlineReader(path)) - const test = { input: [], output: [] } + const tests = {} while (await next()) { - if (match('input')) { - const rootLevel = level() - while (await next(rootLevel)) { - test.input.push(line(rootLevel)) - } - } + if (!head() || match('#schema')) continue + const rootLevel = level() - if (match('output')) { - const rootLevel = level() - while (await next(rootLevel)) { - test.input.push(line(rootLevel)) + const test = tests[tail().trim()] = { input: [], output: [] } + + while (await next(rootLevel)) { + const testLevel = level() + if (match('input')) { + while (await next(testLevel)) { + test.input.push(line(testLevel)) + } + } + + if (match('output')) { + while (await next(testLevel)) { + test.output.push(line(testLevel)) + } } } } - return { input: test.input.join('\n'), output: test.output.join('\n') } + + return tests } it('Runs a basic test', async () => { - const { input, output } = await loadTest('./basic.test.tce', 'utf-8') + const tests = await loadTests('./tests.tce', 'utf-8') - console.log(input) + console.log(tests) expect(1).to.equal(1) }) diff --git a/test/tests.tce b/test/tests.tce new file mode 100644 index 0000000..0d2addb --- /dev/null +++ b/test/tests.tce @@ -0,0 +1,8 @@ +#schema test + +test Basic + input + key value + + output + level: 0 | head: key | tail: value | line: key value