From 99c79094455085fbecd812032ed9563b2e07d0d3 Mon Sep 17 00:00:00 2001 From: yrb <84300040@qq.com> Date: Thu, 23 Mar 2023 16:36:27 +0800 Subject: [PATCH 1/2] '0323' --- .../23-03-23/demo01.html" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "\346\235\250\350\215\243\346\237\217/23-03-23/demo01.html" diff --git "a/\346\235\250\350\215\243\346\237\217/23-03-23/demo01.html" "b/\346\235\250\350\215\243\346\237\217/23-03-23/demo01.html" new file mode 100644 index 0000000..df07c34 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-03-23/demo01.html" @@ -0,0 +1,48 @@ + + + + + + + Document + + + +
+
+ +
+
+

{{text_set}}

+

{{price}}

+
+ +
+ + + + -- Gitee From 2bd43da2f3f73de3c7c73c380b7f1e3cdeb855bc Mon Sep 17 00:00:00 2001 From: unknown <84300040@qq.com> Date: Sun, 23 Apr 2023 11:07:31 +0800 Subject: [PATCH 2/2] '230423' --- .../zy - .html" | 155 - .../zy - \345\211\257\346\234\254.html" | 217 - .../zy.html" | 98 - g.html | 52 - vue/vue.zip | Bin 178088 -> 0 bytes .../zy2.html" | 62 - "vue/\344\275\234\344\270\2321st/demo.css" | 23 - "vue/\344\275\234\344\270\2321st/demo.html" | 252 - "vue/\344\275\234\344\270\2321st/zelda.webp" | Bin 69212 -> 0 bytes "vue/\344\275\234\344\270\2322nd/demo2.css" | 35 - "vue/\344\275\234\344\270\2322nd/demo2.html" | 73 - "vue/\344\275\234\344\270\2322nd/zelda.webp" | Bin 69212 -> 0 bytes "vue/\344\275\234\344\270\2323rd/demo.html" | 140 - "vue/\344\275\234\344\270\2323rd/zelda.webp" | Bin 69212 -> 0 bytes "vue/\344\275\234\344\270\2324th/demo.css" | 11 - "vue/\344\275\234\344\270\2324th/demo.html" | 111 - "vue/\344\275\234\344\270\2324th/zelda.webp" | Bin 69212 -> 0 bytes .../demo.css" | 36 - .../demo.html" | 68 - ...34a03958372440cb471aa7021b22c9ec6e800.jpg" | Bin 26922 -> 0 bytes "vue\346\241\206\346\236\266/zy1.html" | 55 - zml/mm.html | 88 - .../2\345\210\227\350\241\250/.keep" | 0 .../homework_list.html" | 94 - .../.keep" | 0 .../homework.html" | 139 - .../1.jpg" | Bin 19825 -> 0 bytes .../goods.html" | 145 - .../goods.css" | 85 - .../goods.html" | 52 - .../goods.css" | 66 - .../goods.html" | 63 - .../goods.css" | 66 - .../goods.html" | 90 - .../index.html" | 66 - .../20230323-Apple Store/iPhone.html" | 80 - .../20230325-Apple Store2/iphone.html" | 96 - .../20230327-Apple Store3/iphone.html" | 126 - .../20230330-Apple Store4/iphone.html" | 164 - .../demo.html" | 92 - .../demo.html" | 107 - .../demo.html" | 141 - .../demo.html" | 172 - .../20230401-VueAndAjax/app.js" | 49 - .../20230401-VueAndAjax/goods.js" | 46 - .../20230401-VueAndAjax/goods.sql" | 44 - .../20230401-VueAndAjax/public/index.html" | 164 - .../demo.html" | 85 - .../App.vue" | 56 - .../components/goods/center.vue" | 126 - .../components/goods/top.vue" | 25 - .../\346\224\266\346\254\276\347\240\201.jpg" | Bin 124259 -> 0 bytes .../23-03-25/demo.html" | 48 + .../23-03-26/demo.html" | 58 + .../23-03-30/demo.html" | 98 + .../23-04-06/demo/class/.gitignore" | 28 + .../demo/class/.vscode/extensions.json" | 3 + .../23-04-06/demo/class/README.md" | 29 + .../23-04-06/demo/class/index.html" | 13 + .../23-04-06/demo/class/package-lock.json" | 750 + .../23-04-06/demo/class/package.json" | 17 + .../23-04-06/demo/class/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-06/demo/class/src/App.vue" | 47 + .../23-04-06/demo/class/src/assets/base.css" | 74 + .../23-04-06/demo/class/src/assets/logo.svg" | 1 + .../23-04-06/demo/class/src/assets/main.css" | 35 + .../demo/class/src/components/HelloWorld.vue" | 0 .../demo/class/src/components/TheWelcome.vue" | 0 .../class/src/components/WelcomeItem.vue" | 0 .../src/components/icons/IconCommunity.vue" | 0 .../components/icons/IconDocumentation.vue" | 0 .../src/components/icons/IconEcosystem.vue" | 0 .../src/components/icons/IconSupport.vue" | 0 .../src/components/icons/IconTooling.vue" | 0 .../demo/class/src/components/newWorld.vue" | 0 .../23-04-06/demo/class/src/main.js" | 2 +- .../23-04-06/demo/class/vite.config.js" | 14 + .../23-04-08/node_modules/.bin/nanoid" | 12 + .../23-04-08/node_modules/.bin/nanoid.cmd" | 17 + .../23-04-08/node_modules/.bin/nanoid.ps1" | 28 + .../23-04-08/node_modules/.bin/parser" | 12 + .../23-04-08/node_modules/.bin/parser.cmd" | 17 + .../23-04-08/node_modules/.bin/parser.ps1" | 28 + .../23-04-08/node_modules/.package-lock.json" | 201 + .../node_modules/@babel/parser/CHANGELOG.md" | 1073 + .../node_modules/@babel/parser/LICENSE" | 19 + .../node_modules/@babel/parser/README.md" | 19 + .../@babel/parser/bin/babel-parser.js" | 15 + .../node_modules/@babel/parser/index.cjs" | 5 + .../node_modules/@babel/parser/lib/index.js" | 14342 +++++ .../@babel/parser/lib/index.js.map" | 1 + .../node_modules/@babel/parser/package.json" | 46 + .../@babel/parser/typings/babel-parser.d.ts" | 239 + .../node_modules/@vue/compiler-core/LICENSE" | 21 + .../@vue/compiler-core/README.md" | 1 + .../compiler-core/dist/compiler-core.cjs.js" | 5857 ++ .../dist/compiler-core.cjs.prod.js" | 5734 ++ .../compiler-core/dist/compiler-core.d.ts" | 1202 + .../dist/compiler-core.esm-bundler.js" | 4922 ++ .../node_modules/@vue/compiler-core/index.js" | 7 + .../@vue/compiler-core/package.json" | 43 + .../node_modules/@vue/compiler-dom/LICENSE" | 21 + .../node_modules/@vue/compiler-dom/README.md" | 1 + .../compiler-dom/dist/compiler-dom.cjs.js" | 3141 + .../dist/compiler-dom.cjs.prod.js" | 3079 + .../@vue/compiler-dom/dist/compiler-dom.d.ts" | 66 + .../dist/compiler-dom.esm-browser.js" | 5556 ++ .../dist/compiler-dom.esm-browser.prod.js" | 1 + .../dist/compiler-dom.esm-bundler.js" | 483 + .../compiler-dom/dist/compiler-dom.global.js" | 5707 ++ .../dist/compiler-dom.global.prod.js" | 1 + .../node_modules/@vue/compiler-dom/index.js" | 7 + .../@vue/compiler-dom/package.json" | 43 + .../node_modules/@vue/compiler-sfc/LICENSE" | 21 + .../node_modules/@vue/compiler-sfc/README.md" | 80 + .../compiler-sfc/dist/compiler-sfc.cjs.js" | 17840 ++++++ .../@vue/compiler-sfc/dist/compiler-sfc.d.ts" | 317 + .../dist/compiler-sfc.esm-browser.js" | 49827 ++++++++++++++++ .../@vue/compiler-sfc/package.json" | 59 + .../node_modules/@vue/compiler-ssr/LICENSE" | 21 + .../node_modules/@vue/compiler-ssr/README.md" | 1 + .../compiler-ssr/dist/compiler-ssr.cjs.js" | 1274 + .../@vue/compiler-ssr/dist/compiler-ssr.d.ts" | 6 + .../@vue/compiler-ssr/package.json" | 34 + .../@vue/reactivity-transform/LICENSE" | 21 + .../@vue/reactivity-transform/README.md" | 121 + .../dist/reactivity-transform.cjs.js" | 606 + .../dist/reactivity-transform.d.ts" | 44 + .../@vue/reactivity-transform/package.json" | 41 + .../node_modules/@vue/reactivity/LICENSE" | 21 + .../node_modules/@vue/reactivity/README.md" | 19 + .../@vue/reactivity/dist/reactivity.cjs.js" | 1303 + .../reactivity/dist/reactivity.cjs.prod.js" | 1226 + .../@vue/reactivity/dist/reactivity.d.ts" | 351 + .../dist/reactivity.esm-browser.js" | 1317 + .../dist/reactivity.esm-browser.prod.js" | 1 + .../dist/reactivity.esm-bundler.js" | 1279 + .../reactivity/dist/reactivity.global.js" | 1359 + .../dist/reactivity.global.prod.js" | 1 + .../node_modules/@vue/reactivity/index.js" | 7 + .../@vue/reactivity/package.json" | 41 + .../node_modules/@vue/runtime-core/LICENSE" | 21 + .../node_modules/@vue/runtime-core/README.md" | 28 + .../runtime-core/dist/runtime-core.cjs.js" | 8010 +++ .../dist/runtime-core.cjs.prod.js" | 6271 ++ .../@vue/runtime-core/dist/runtime-core.d.ts" | 2033 + .../dist/runtime-core.esm-bundler.js" | 7976 +++ .../node_modules/@vue/runtime-core/index.js" | 7 + .../@vue/runtime-core/package.json" | 38 + .../node_modules/@vue/runtime-dom/LICENSE" | 21 + .../node_modules/@vue/runtime-dom/README.md" | 13 + .../@vue/runtime-dom/dist/runtime-dom.cjs.js" | 1664 + .../runtime-dom/dist/runtime-dom.cjs.prod.js" | 1565 + .../@vue/runtime-dom/dist/runtime-dom.d.ts" | 1543 + .../dist/runtime-dom.esm-browser.js" | 11014 ++++ .../dist/runtime-dom.esm-browser.prod.js" | 1 + .../dist/runtime-dom.esm-bundler.js" | 1700 + .../runtime-dom/dist/runtime-dom.global.js" | 11149 ++++ .../dist/runtime-dom.global.prod.js" | 1 + .../node_modules/@vue/runtime-dom/index.js" | 7 + .../@vue/runtime-dom/package.json" | 42 + .../@vue/server-renderer/LICENSE" | 21 + .../@vue/server-renderer/README.md" | 178 + .../dist/server-renderer.cjs.js" | 1106 + .../dist/server-renderer.cjs.prod.js" | 843 + .../dist/server-renderer.d.ts" | 101 + .../dist/server-renderer.esm-browser.js" | 8239 +++ .../dist/server-renderer.esm-browser.prod.js" | 1 + .../dist/server-renderer.esm-bundler.js" | 1013 + .../@vue/server-renderer/index.js" | 7 + .../@vue/server-renderer/package.json" | 41 + .../node_modules/@vue/shared/LICENSE" | 21 + .../node_modules/@vue/shared/README.md" | 3 + .../@vue/shared/dist/shared.cjs.js" | 664 + .../@vue/shared/dist/shared.cjs.prod.js" | 663 + .../@vue/shared/dist/shared.d.ts" | 363 + .../@vue/shared/dist/shared.esm-bundler.js" | 600 + .../node_modules/@vue/shared/index.js" | 7 + .../node_modules/@vue/shared/package.json" | 33 + .../23-04-08/node_modules/csstype/LICENSE" | 19 + .../23-04-08/node_modules/csstype/README.md" | 220 + .../23-04-08/node_modules/csstype/index.d.ts" | 37558 ++++++++++++ .../node_modules/csstype/index.js.flow" | 6194 ++ .../node_modules/csstype/package.json" | 56 + .../node_modules/estree-walker/CHANGELOG.md" | 92 + .../node_modules/estree-walker/LICENSE" | 7 + .../node_modules/estree-walker/README.md" | 48 + .../estree-walker/dist/esm/estree-walker.js" | 333 + .../estree-walker/dist/esm/package.json" | 1 + .../estree-walker/dist/umd/estree-walker.js" | 344 + .../node_modules/estree-walker/package.json" | 37 + .../node_modules/estree-walker/src/async.js" | 118 + .../node_modules/estree-walker/src/index.js" | 35 + .../estree-walker/src/package.json" | 1 + .../node_modules/estree-walker/src/sync.js" | 118 + .../node_modules/estree-walker/src/walker.js" | 61 + .../estree-walker/types/async.d.ts" | 53 + .../estree-walker/types/index.d.ts" | 56 + .../estree-walker/types/sync.d.ts" | 53 + .../estree-walker/types/tsconfig.tsbuildinfo" | 345 + .../estree-walker/types/walker.d.ts" | 37 + .../node_modules/magic-string/LICENSE" | 7 + .../node_modules/magic-string/README.md" | 252 + .../magic-string/dist/magic-string.cjs.js" | 1311 + .../dist/magic-string.cjs.js.map" | 1 + .../magic-string/dist/magic-string.es.js" | 1305 + .../magic-string/dist/magic-string.es.js.map" | 1 + .../magic-string/dist/magic-string.umd.js" | 1371 + .../dist/magic-string.umd.js.map" | 1 + .../node_modules/magic-string/index.d.ts" | 221 + .../node_modules/magic-string/package.json" | 52 + .../23-04-08/node_modules/nanoid/LICENSE" | 20 + .../23-04-08/node_modules/nanoid/README.md" | 39 + .../nanoid/async/index.browser.cjs" | 34 + .../nanoid/async/index.browser.js" | 34 + .../node_modules/nanoid/async/index.cjs" | 35 + .../node_modules/nanoid/async/index.d.ts" | 56 + .../node_modules/nanoid/async/index.js" | 35 + .../nanoid/async/index.native.js" | 26 + .../node_modules/nanoid/async/package.json" | 12 + .../node_modules/nanoid/bin/nanoid.cjs" | 55 + .../node_modules/nanoid/index.browser.cjs" | 34 + .../node_modules/nanoid/index.browser.js" | 34 + .../23-04-08/node_modules/nanoid/index.cjs" | 45 + .../23-04-08/node_modules/nanoid/index.d.ts" | 91 + .../23-04-08/node_modules/nanoid/index.js" | 45 + .../23-04-08/node_modules/nanoid/nanoid.js" | 1 + .../node_modules/nanoid/non-secure/index.cjs" | 21 + .../nanoid/non-secure/index.d.ts" | 33 + .../node_modules/nanoid/non-secure/index.js" | 21 + .../nanoid/non-secure/package.json" | 6 + .../node_modules/nanoid/package.json" | 66 + .../nanoid/url-alphabet/index.cjs" | 3 + .../nanoid/url-alphabet/index.js" | 3 + .../nanoid/url-alphabet/package.json" | 6 + .../23-04-08/node_modules/picocolors/LICENSE" | 15 + .../node_modules/picocolors/README.md" | 21 + .../node_modules/picocolors/package.json" | 25 + .../picocolors/picocolors.browser.js" | 4 + .../node_modules/picocolors/picocolors.d.ts" | 5 + .../node_modules/picocolors/picocolors.js" | 58 + .../node_modules/picocolors/types.ts" | 30 + .../23-04-08/node_modules/postcss/LICENSE" | 20 + .../23-04-08/node_modules/postcss/README.md" | 44 + .../node_modules/postcss/lib/at-rule.d.ts" | 106 + .../node_modules/postcss/lib/at-rule.js" | 25 + .../node_modules/postcss/lib/comment.d.ts" | 56 + .../node_modules/postcss/lib/comment.js" | 13 + .../node_modules/postcss/lib/container.d.ts" | 442 + .../node_modules/postcss/lib/container.js" | 439 + .../postcss/lib/css-syntax-error.d.ts" | 239 + .../postcss/lib/css-syntax-error.js" | 100 + .../postcss/lib/declaration.d.ts" | 124 + .../node_modules/postcss/lib/declaration.js" | 24 + .../node_modules/postcss/lib/document.d.ts" | 57 + .../node_modules/postcss/lib/document.js" | 33 + .../node_modules/postcss/lib/fromJSON.d.ts" | 5 + .../node_modules/postcss/lib/fromJSON.js" | 54 + .../node_modules/postcss/lib/input.d.ts" | 185 + .../node_modules/postcss/lib/input.js" | 248 + .../postcss/lib/lazy-result.d.ts" | 176 + .../node_modules/postcss/lib/lazy-result.js" | 550 + .../node_modules/postcss/lib/list.d.ts" | 51 + .../node_modules/postcss/lib/list.js" | 58 + .../postcss/lib/map-generator.js" | 338 + .../postcss/lib/no-work-result.d.ts" | 37 + .../postcss/lib/no-work-result.js" | 135 + .../node_modules/postcss/lib/node.d.ts" | 478 + .../node_modules/postcss/lib/node.js" | 379 + .../node_modules/postcss/lib/parse.d.ts" | 5 + .../node_modules/postcss/lib/parse.js" | 42 + .../node_modules/postcss/lib/parser.js" | 603 + .../node_modules/postcss/lib/postcss.d.ts" | 473 + .../node_modules/postcss/lib/postcss.js" | 101 + .../node_modules/postcss/lib/postcss.mjs" | 30 + .../postcss/lib/previous-map.d.ts" | 72 + .../node_modules/postcss/lib/previous-map.js" | 142 + .../node_modules/postcss/lib/processor.d.ts" | 102 + .../node_modules/postcss/lib/processor.js" | 67 + .../node_modules/postcss/lib/result.d.ts" | 196 + .../node_modules/postcss/lib/result.js" | 42 + .../node_modules/postcss/lib/root.d.ts" | 73 + .../node_modules/postcss/lib/root.js" | 61 + .../node_modules/postcss/lib/rule.d.ts" | 104 + .../node_modules/postcss/lib/rule.js" | 27 + .../postcss/lib/stringifier.d.ts" | 37 + .../node_modules/postcss/lib/stringifier.js" | 353 + .../node_modules/postcss/lib/stringify.d.ts" | 5 + .../node_modules/postcss/lib/stringify.js" | 11 + .../node_modules/postcss/lib/symbols.js" | 5 + .../postcss/lib/terminal-highlight.js" | 70 + .../node_modules/postcss/lib/tokenize.js" | 266 + .../node_modules/postcss/lib/warn-once.js" | 13 + .../node_modules/postcss/lib/warning.d.ts" | 138 + .../node_modules/postcss/lib/warning.js" | 37 + .../node_modules/postcss/package.json" | 85 + .../node_modules/source-map-js/CHANGELOG.md" | 320 + .../node_modules/source-map-js/LICENSE" | 28 + .../node_modules/source-map-js/README.md" | 758 + .../source-map-js/lib/array-set.js" | 121 + .../source-map-js/lib/base64-vlq.js" | 140 + .../node_modules/source-map-js/lib/base64.js" | 67 + .../source-map-js/lib/binary-search.js" | 111 + .../source-map-js/lib/mapping-list.js" | 79 + .../source-map-js/lib/quick-sort.js" | 132 + .../source-map-js/lib/source-map-consumer.js" | 1184 + .../lib/source-map-generator.js" | 425 + .../source-map-js/lib/source-node.js" | 413 + .../node_modules/source-map-js/lib/util.js" | 594 + .../node_modules/source-map-js/package.json" | 71 + .../source-map-js/source-map.d.ts" | 115 + .../node_modules/source-map-js/source-map.js" | 8 + .../node_modules/source-map/CHANGELOG.md" | 301 + .../23-04-08/node_modules/source-map/LICENSE" | 28 + .../node_modules/source-map/README.md" | 742 + .../source-map/dist/source-map.debug.js" | 3234 + .../source-map/dist/source-map.js" | 3233 + .../source-map/dist/source-map.min.js" | 2 + .../source-map/dist/source-map.min.js.map" | 1 + .../node_modules/source-map/lib/array-set.js" | 121 + .../source-map/lib/base64-vlq.js" | 140 + .../node_modules/source-map/lib/base64.js" | 67 + .../source-map/lib/binary-search.js" | 111 + .../source-map/lib/mapping-list.js" | 79 + .../source-map/lib/quick-sort.js" | 114 + .../source-map/lib/source-map-consumer.js" | 1145 + .../source-map/lib/source-map-generator.js" | 425 + .../source-map/lib/source-node.js" | 413 + .../node_modules/source-map/lib/util.js" | 488 + .../node_modules/source-map/package.json" | 73 + .../node_modules/source-map/source-map.d.ts" | 98 + .../node_modules/source-map/source-map.js" | 8 + .../sourcemap-codec/CHANGELOG.md" | 64 + .../node_modules/sourcemap-codec/LICENSE" | 21 + .../node_modules/sourcemap-codec/README.md" | 63 + .../dist/sourcemap-codec.es.js" | 124 + .../dist/sourcemap-codec.es.js.map" | 1 + .../dist/sourcemap-codec.umd.js" | 135 + .../dist/sourcemap-codec.umd.js.map" | 1 + .../dist/types/sourcemap-codec.d.ts" | 5 + .../sourcemap-codec/package.json" | 53 + .../23-04-08/node_modules/vue/LICENSE" | 21 + .../23-04-08/node_modules/vue/README.md" | 54 + .../node_modules/vue/compiler-sfc/index.d.ts" | 1 + .../node_modules/vue/compiler-sfc/index.js" | 1 + .../node_modules/vue/compiler-sfc/index.mjs" | 1 + .../vue/compiler-sfc/package.json" | 5 + .../node_modules/vue/dist/vue.cjs.js" | 80 + .../node_modules/vue/dist/vue.cjs.prod.js" | 68 + .../23-04-08/node_modules/vue/dist/vue.d.ts" | 9 + .../node_modules/vue/dist/vue.esm-browser.js" | 16172 +++++ .../vue/dist/vue.esm-browser.prod.js" | 1 + .../node_modules/vue/dist/vue.esm-bundler.js" | 71 + .../node_modules/vue/dist/vue.global.js" | 0 .../node_modules/vue/dist/vue.global.prod.js" | 1 + .../vue/dist/vue.runtime.esm-browser.js" | 11037 ++++ .../vue/dist/vue.runtime.esm-browser.prod.js" | 1 + .../vue/dist/vue.runtime.esm-bundler.js" | 22 + .../vue/dist/vue.runtime.global.js" | 5054 +- .../vue/dist/vue.runtime.global.prod.js" | 1 + .../23-04-08/node_modules/vue/index.js" | 7 + .../23-04-08/node_modules/vue/index.mjs" | 1 + .../node_modules/vue/macros-global.d.ts" | 19 + .../23-04-08/node_modules/vue/macros.d.ts" | 112 + .../23-04-08/node_modules/vue/package.json" | 77 + .../node_modules/vue/ref-macros.d.ts" | 2 + .../vue/server-renderer/index.d.ts" | 1 + .../vue/server-renderer/index.js" | 1 + .../vue/server-renderer/index.mjs" | 1 + .../vue/server-renderer/package.json" | 5 + .../23-04-08/package-lock.json" | 206 + .../23-04-08/package.json" | 5 + .../23-04-08/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-08/vue-project/README.md" | 29 + .../23-04-08/vue-project/index.html" | 13 + .../23-04-08/vue-project/package-lock.json" | 750 + .../23-04-08/vue-project/package.json" | 17 + .../23-04-08/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-08/vue-project/src/App.vue" | 33 + .../23-04-08/vue-project/src/assets/base.css" | 74 + .../23-04-08/vue-project/src/assets/logo.svg" | 1 + .../23-04-08/vue-project/src/assets/main.css" | 35 + .../src/components/HelloWorld.vue" | 43 + .../src/components/TheWelcome.vue" | 86 + .../src/components/WelcomeItem.vue" | 86 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../vue-project/src/components/news/left.vue" | 20 + .../src/components/news/right.vue" | 55 + .../src/components/news/shuju.vue" | 34 + .../vue-project/src/components/news/top.vue" | 28 + .../23-04-08/vue-project/src/main.js" | 5 + .../23-04-08/vue-project/vite.config.js" | 14 + .../23-04-10/node_modules/.bin/nanoid" | 12 + .../23-04-10/node_modules/.bin/nanoid.cmd" | 17 + .../23-04-10/node_modules/.bin/nanoid.ps1" | 28 + .../23-04-10/node_modules/.bin/parser" | 12 + .../23-04-10/node_modules/.bin/parser.cmd" | 17 + .../23-04-10/node_modules/.bin/parser.ps1" | 28 + .../23-04-10/node_modules/.package-lock.json" | 201 + .../node_modules/@babel/parser/CHANGELOG.md" | 1073 + .../node_modules/@babel/parser/LICENSE" | 19 + .../node_modules/@babel/parser/README.md" | 19 + .../@babel/parser/bin/babel-parser.js" | 15 + .../node_modules/@babel/parser/index.cjs" | 5 + .../node_modules/@babel/parser/lib/index.js" | 14342 +++++ .../@babel/parser/lib/index.js.map" | 1 + .../node_modules/@babel/parser/package.json" | 46 + .../@babel/parser/typings/babel-parser.d.ts" | 239 + .../node_modules/@vue/compiler-core/LICENSE" | 21 + .../@vue/compiler-core/README.md" | 1 + .../compiler-core/dist/compiler-core.cjs.js" | 5857 ++ .../dist/compiler-core.cjs.prod.js" | 5734 ++ .../compiler-core/dist/compiler-core.d.ts" | 1202 + .../dist/compiler-core.esm-bundler.js" | 4922 ++ .../node_modules/@vue/compiler-core/index.js" | 7 + .../@vue/compiler-core/package.json" | 43 + .../node_modules/@vue/compiler-dom/LICENSE" | 21 + .../node_modules/@vue/compiler-dom/README.md" | 1 + .../compiler-dom/dist/compiler-dom.cjs.js" | 3141 + .../dist/compiler-dom.cjs.prod.js" | 3079 + .../@vue/compiler-dom/dist/compiler-dom.d.ts" | 66 + .../dist/compiler-dom.esm-browser.js" | 5556 ++ .../dist/compiler-dom.esm-browser.prod.js" | 1 + .../dist/compiler-dom.esm-bundler.js" | 483 + .../compiler-dom/dist/compiler-dom.global.js" | 5707 ++ .../dist/compiler-dom.global.prod.js" | 1 + .../node_modules/@vue/compiler-dom/index.js" | 7 + .../@vue/compiler-dom/package.json" | 43 + .../node_modules/@vue/compiler-sfc/LICENSE" | 21 + .../node_modules/@vue/compiler-sfc/README.md" | 80 + .../compiler-sfc/dist/compiler-sfc.cjs.js" | 17840 ++++++ .../@vue/compiler-sfc/dist/compiler-sfc.d.ts" | 317 + .../dist/compiler-sfc.esm-browser.js" | 49827 ++++++++++++++++ .../@vue/compiler-sfc/package.json" | 59 + .../node_modules/@vue/compiler-ssr/LICENSE" | 21 + .../node_modules/@vue/compiler-ssr/README.md" | 1 + .../compiler-ssr/dist/compiler-ssr.cjs.js" | 1274 + .../@vue/compiler-ssr/dist/compiler-ssr.d.ts" | 6 + .../@vue/compiler-ssr/package.json" | 34 + .../@vue/reactivity-transform/LICENSE" | 21 + .../@vue/reactivity-transform/README.md" | 121 + .../dist/reactivity-transform.cjs.js" | 606 + .../dist/reactivity-transform.d.ts" | 44 + .../@vue/reactivity-transform/package.json" | 41 + .../node_modules/@vue/reactivity/LICENSE" | 21 + .../node_modules/@vue/reactivity/README.md" | 19 + .../@vue/reactivity/dist/reactivity.cjs.js" | 1303 + .../reactivity/dist/reactivity.cjs.prod.js" | 1226 + .../@vue/reactivity/dist/reactivity.d.ts" | 351 + .../dist/reactivity.esm-browser.js" | 1317 + .../dist/reactivity.esm-browser.prod.js" | 1 + .../dist/reactivity.esm-bundler.js" | 1279 + .../reactivity/dist/reactivity.global.js" | 1359 + .../dist/reactivity.global.prod.js" | 1 + .../node_modules/@vue/reactivity/index.js" | 7 + .../@vue/reactivity/package.json" | 41 + .../node_modules/@vue/runtime-core/LICENSE" | 21 + .../node_modules/@vue/runtime-core/README.md" | 28 + .../runtime-core/dist/runtime-core.cjs.js" | 8010 +++ .../dist/runtime-core.cjs.prod.js" | 6271 ++ .../@vue/runtime-core/dist/runtime-core.d.ts" | 2033 + .../dist/runtime-core.esm-bundler.js" | 7976 +++ .../node_modules/@vue/runtime-core/index.js" | 7 + .../@vue/runtime-core/package.json" | 38 + .../node_modules/@vue/runtime-dom/LICENSE" | 21 + .../node_modules/@vue/runtime-dom/README.md" | 13 + .../@vue/runtime-dom/dist/runtime-dom.cjs.js" | 1664 + .../runtime-dom/dist/runtime-dom.cjs.prod.js" | 1565 + .../@vue/runtime-dom/dist/runtime-dom.d.ts" | 1543 + .../dist/runtime-dom.esm-browser.js" | 11014 ++++ .../dist/runtime-dom.esm-browser.prod.js" | 1 + .../dist/runtime-dom.esm-bundler.js" | 1700 + .../runtime-dom/dist/runtime-dom.global.js" | 11149 ++++ .../dist/runtime-dom.global.prod.js" | 1 + .../node_modules/@vue/runtime-dom/index.js" | 7 + .../@vue/runtime-dom/package.json" | 42 + .../@vue/server-renderer/LICENSE" | 21 + .../@vue/server-renderer/README.md" | 178 + .../dist/server-renderer.cjs.js" | 1106 + .../dist/server-renderer.cjs.prod.js" | 843 + .../dist/server-renderer.d.ts" | 101 + .../dist/server-renderer.esm-browser.js" | 8239 +++ .../dist/server-renderer.esm-browser.prod.js" | 1 + .../dist/server-renderer.esm-bundler.js" | 1013 + .../@vue/server-renderer/index.js" | 7 + .../@vue/server-renderer/package.json" | 41 + .../node_modules/@vue/shared/LICENSE" | 21 + .../node_modules/@vue/shared/README.md" | 3 + .../@vue/shared/dist/shared.cjs.js" | 664 + .../@vue/shared/dist/shared.cjs.prod.js" | 663 + .../@vue/shared/dist/shared.d.ts" | 363 + .../@vue/shared/dist/shared.esm-bundler.js" | 600 + .../node_modules/@vue/shared/index.js" | 7 + .../node_modules/@vue/shared/package.json" | 33 + .../23-04-10/node_modules/csstype/LICENSE" | 19 + .../23-04-10/node_modules/csstype/README.md" | 220 + .../23-04-10/node_modules/csstype/index.d.ts" | 37558 ++++++++++++ .../node_modules/csstype/index.js.flow" | 6194 ++ .../node_modules/csstype/package.json" | 56 + .../node_modules/estree-walker/CHANGELOG.md" | 92 + .../node_modules/estree-walker/LICENSE" | 7 + .../node_modules/estree-walker/README.md" | 48 + .../estree-walker/dist/esm/estree-walker.js" | 333 + .../estree-walker/dist/esm/package.json" | 1 + .../estree-walker/dist/umd/estree-walker.js" | 344 + .../node_modules/estree-walker/package.json" | 37 + .../node_modules/estree-walker/src/async.js" | 118 + .../node_modules/estree-walker/src/index.js" | 35 + .../estree-walker/src/package.json" | 1 + .../node_modules/estree-walker/src/sync.js" | 118 + .../node_modules/estree-walker/src/walker.js" | 61 + .../estree-walker/types/async.d.ts" | 53 + .../estree-walker/types/index.d.ts" | 56 + .../estree-walker/types/sync.d.ts" | 53 + .../estree-walker/types/tsconfig.tsbuildinfo" | 345 + .../estree-walker/types/walker.d.ts" | 37 + .../node_modules/magic-string/LICENSE" | 7 + .../node_modules/magic-string/README.md" | 252 + .../magic-string/dist/magic-string.cjs.js" | 1311 + .../dist/magic-string.cjs.js.map" | 1 + .../magic-string/dist/magic-string.es.js" | 1305 + .../magic-string/dist/magic-string.es.js.map" | 1 + .../magic-string/dist/magic-string.umd.js" | 1371 + .../dist/magic-string.umd.js.map" | 1 + .../node_modules/magic-string/index.d.ts" | 221 + .../node_modules/magic-string/package.json" | 52 + .../23-04-10/node_modules/nanoid/LICENSE" | 20 + .../23-04-10/node_modules/nanoid/README.md" | 39 + .../nanoid/async/index.browser.cjs" | 34 + .../nanoid/async/index.browser.js" | 34 + .../node_modules/nanoid/async/index.cjs" | 35 + .../node_modules/nanoid/async/index.d.ts" | 56 + .../node_modules/nanoid/async/index.js" | 35 + .../nanoid/async/index.native.js" | 26 + .../node_modules/nanoid/async/package.json" | 12 + .../node_modules/nanoid/bin/nanoid.cjs" | 55 + .../node_modules/nanoid/index.browser.cjs" | 34 + .../node_modules/nanoid/index.browser.js" | 34 + .../23-04-10/node_modules/nanoid/index.cjs" | 45 + .../23-04-10/node_modules/nanoid/index.d.ts" | 91 + .../23-04-10/node_modules/nanoid/index.js" | 45 + .../23-04-10/node_modules/nanoid/nanoid.js" | 1 + .../node_modules/nanoid/non-secure/index.cjs" | 21 + .../nanoid/non-secure/index.d.ts" | 33 + .../node_modules/nanoid/non-secure/index.js" | 21 + .../nanoid/non-secure/package.json" | 6 + .../node_modules/nanoid/package.json" | 66 + .../nanoid/url-alphabet/index.cjs" | 3 + .../nanoid/url-alphabet/index.js" | 3 + .../nanoid/url-alphabet/package.json" | 6 + .../23-04-10/node_modules/picocolors/LICENSE" | 15 + .../node_modules/picocolors/README.md" | 21 + .../node_modules/picocolors/package.json" | 25 + .../picocolors/picocolors.browser.js" | 4 + .../node_modules/picocolors/picocolors.d.ts" | 5 + .../node_modules/picocolors/picocolors.js" | 58 + .../node_modules/picocolors/types.ts" | 30 + .../23-04-10/node_modules/postcss/LICENSE" | 20 + .../23-04-10/node_modules/postcss/README.md" | 44 + .../node_modules/postcss/lib/at-rule.d.ts" | 106 + .../node_modules/postcss/lib/at-rule.js" | 25 + .../node_modules/postcss/lib/comment.d.ts" | 56 + .../node_modules/postcss/lib/comment.js" | 13 + .../node_modules/postcss/lib/container.d.ts" | 442 + .../node_modules/postcss/lib/container.js" | 439 + .../postcss/lib/css-syntax-error.d.ts" | 239 + .../postcss/lib/css-syntax-error.js" | 100 + .../postcss/lib/declaration.d.ts" | 124 + .../node_modules/postcss/lib/declaration.js" | 24 + .../node_modules/postcss/lib/document.d.ts" | 57 + .../node_modules/postcss/lib/document.js" | 33 + .../node_modules/postcss/lib/fromJSON.d.ts" | 5 + .../node_modules/postcss/lib/fromJSON.js" | 54 + .../node_modules/postcss/lib/input.d.ts" | 185 + .../node_modules/postcss/lib/input.js" | 248 + .../postcss/lib/lazy-result.d.ts" | 176 + .../node_modules/postcss/lib/lazy-result.js" | 550 + .../node_modules/postcss/lib/list.d.ts" | 51 + .../node_modules/postcss/lib/list.js" | 58 + .../postcss/lib/map-generator.js" | 338 + .../postcss/lib/no-work-result.d.ts" | 37 + .../postcss/lib/no-work-result.js" | 135 + .../node_modules/postcss/lib/node.d.ts" | 478 + .../node_modules/postcss/lib/node.js" | 379 + .../node_modules/postcss/lib/parse.d.ts" | 5 + .../node_modules/postcss/lib/parse.js" | 42 + .../node_modules/postcss/lib/parser.js" | 603 + .../node_modules/postcss/lib/postcss.d.ts" | 473 + .../node_modules/postcss/lib/postcss.js" | 101 + .../node_modules/postcss/lib/postcss.mjs" | 30 + .../postcss/lib/previous-map.d.ts" | 72 + .../node_modules/postcss/lib/previous-map.js" | 142 + .../node_modules/postcss/lib/processor.d.ts" | 102 + .../node_modules/postcss/lib/processor.js" | 67 + .../node_modules/postcss/lib/result.d.ts" | 196 + .../node_modules/postcss/lib/result.js" | 42 + .../node_modules/postcss/lib/root.d.ts" | 73 + .../node_modules/postcss/lib/root.js" | 61 + .../node_modules/postcss/lib/rule.d.ts" | 104 + .../node_modules/postcss/lib/rule.js" | 27 + .../postcss/lib/stringifier.d.ts" | 37 + .../node_modules/postcss/lib/stringifier.js" | 353 + .../node_modules/postcss/lib/stringify.d.ts" | 5 + .../node_modules/postcss/lib/stringify.js" | 11 + .../node_modules/postcss/lib/symbols.js" | 5 + .../postcss/lib/terminal-highlight.js" | 70 + .../node_modules/postcss/lib/tokenize.js" | 266 + .../node_modules/postcss/lib/warn-once.js" | 13 + .../node_modules/postcss/lib/warning.d.ts" | 138 + .../node_modules/postcss/lib/warning.js" | 37 + .../node_modules/postcss/package.json" | 85 + .../node_modules/source-map-js/CHANGELOG.md" | 320 + .../node_modules/source-map-js/LICENSE" | 28 + .../node_modules/source-map-js/README.md" | 758 + .../source-map-js/lib/array-set.js" | 121 + .../source-map-js/lib/base64-vlq.js" | 140 + .../node_modules/source-map-js/lib/base64.js" | 67 + .../source-map-js/lib/binary-search.js" | 111 + .../source-map-js/lib/mapping-list.js" | 79 + .../source-map-js/lib/quick-sort.js" | 132 + .../source-map-js/lib/source-map-consumer.js" | 1184 + .../lib/source-map-generator.js" | 425 + .../source-map-js/lib/source-node.js" | 413 + .../node_modules/source-map-js/lib/util.js" | 594 + .../node_modules/source-map-js/package.json" | 71 + .../source-map-js/source-map.d.ts" | 115 + .../node_modules/source-map-js/source-map.js" | 8 + .../node_modules/source-map/CHANGELOG.md" | 301 + .../23-04-10/node_modules/source-map/LICENSE" | 28 + .../node_modules/source-map/README.md" | 742 + .../source-map/dist/source-map.debug.js" | 3234 + .../source-map/dist/source-map.js" | 3233 + .../source-map/dist/source-map.min.js" | 2 + .../source-map/dist/source-map.min.js.map" | 1 + .../node_modules/source-map/lib/array-set.js" | 121 + .../source-map/lib/base64-vlq.js" | 140 + .../node_modules/source-map/lib/base64.js" | 67 + .../source-map/lib/binary-search.js" | 111 + .../source-map/lib/mapping-list.js" | 79 + .../source-map/lib/quick-sort.js" | 114 + .../source-map/lib/source-map-consumer.js" | 1145 + .../source-map/lib/source-map-generator.js" | 425 + .../source-map/lib/source-node.js" | 413 + .../node_modules/source-map/lib/util.js" | 488 + .../node_modules/source-map/package.json" | 73 + .../node_modules/source-map/source-map.d.ts" | 98 + .../node_modules/source-map/source-map.js" | 8 + .../sourcemap-codec/CHANGELOG.md" | 64 + .../node_modules/sourcemap-codec/LICENSE" | 21 + .../node_modules/sourcemap-codec/README.md" | 63 + .../dist/sourcemap-codec.es.js" | 124 + .../dist/sourcemap-codec.es.js.map" | 1 + .../dist/sourcemap-codec.umd.js" | 135 + .../dist/sourcemap-codec.umd.js.map" | 1 + .../dist/types/sourcemap-codec.d.ts" | 5 + .../sourcemap-codec/package.json" | 53 + .../23-04-10/node_modules/vue/LICENSE" | 21 + .../23-04-10/node_modules/vue/README.md" | 54 + .../node_modules/vue/compiler-sfc/index.d.ts" | 1 + .../node_modules/vue/compiler-sfc/index.js" | 1 + .../node_modules/vue/compiler-sfc/index.mjs" | 1 + .../vue/compiler-sfc/package.json" | 5 + .../node_modules/vue/dist/vue.cjs.js" | 80 + .../node_modules/vue/dist/vue.cjs.prod.js" | 68 + .../23-04-10/node_modules/vue/dist/vue.d.ts" | 9 + .../node_modules/vue/dist/vue.esm-browser.js" | 16172 +++++ .../vue/dist/vue.esm-browser.prod.js" | 1 + .../node_modules/vue/dist/vue.esm-bundler.js" | 71 + .../node_modules/vue/dist/vue.global.js" | 0 .../node_modules/vue/dist/vue.global.prod.js" | 1 + .../vue/dist/vue.runtime.esm-browser.js" | 11037 ++++ .../vue/dist/vue.runtime.esm-browser.prod.js" | 1 + .../vue/dist/vue.runtime.esm-bundler.js" | 22 + .../vue/dist/vue.runtime.global.js" | 11173 ++++ .../vue/dist/vue.runtime.global.prod.js" | 1 + .../23-04-10/node_modules/vue/index.js" | 7 + .../23-04-10/node_modules/vue/index.mjs" | 1 + .../node_modules/vue/macros-global.d.ts" | 19 + .../23-04-10/node_modules/vue/macros.d.ts" | 112 + .../23-04-10/node_modules/vue/package.json" | 77 + .../node_modules/vue/ref-macros.d.ts" | 2 + .../vue/server-renderer/index.d.ts" | 1 + .../vue/server-renderer/index.js" | 1 + .../vue/server-renderer/index.mjs" | 1 + .../vue/server-renderer/package.json" | 5 + .../23-04-10/package-lock.json" | 206 + .../23-04-10/package.json" | 5 + .../23-04-10/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-10/vue-project/README.md" | 29 + .../23-04-10/vue-project/index.html" | 13 + .../23-04-10/vue-project/package-lock.json" | 750 + .../23-04-10/vue-project/package.json" | 17 + .../23-04-10/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-10/vue-project/src/App.vue" | 50 + .../23-04-10/vue-project/src/assets/base.css" | 74 + .../23-04-10/vue-project/src/assets/logo.svg" | 1 + .../23-04-10/vue-project/src/assets/main.css" | 35 + .../vue-project/src/components/demo/left.vue" | 28 + .../src/components/demo/right.vue" | 49 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../vue-project/src/components/news/left.vue" | 20 + .../src/components/news/right.vue" | 55 + .../src/components/news/shuju.vue" | 34 + .../vue-project/src/components/news/top.vue" | 28 + .../23-04-10/vue-project/src/main.js" | 5 + .../23-04-10/vue-project/vite.config.js" | 14 + .../23-04-12/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-12/vue-project/README.md" | 29 + .../23-04-12/vue-project/index.html" | 13 + .../23-04-12/vue-project/package-lock.json" | 750 + .../23-04-12/vue-project/package.json" | 17 + .../23-04-12/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-12/vue-project/src/App.vue" | 55 + .../23-04-12/vue-project/src/assets/base.css" | 74 + .../23-04-12/vue-project/src/assets/logo.svg" | 1 + .../23-04-12/vue-project/src/assets/main.css" | 35 + .../src/components/HelloWorld.vue" | 43 + .../src/components/TheWelcome.vue" | 86 + .../src/components/WelcomeItem.vue" | 86 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../src/components/news/right.vue" | 14 + .../23-04-12/vue-project/src/main.js" | 6 + .../23-04-12/vue-project/vite.config.js" | 14 + .../23-04-13/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-13/vue-project/README.md" | 29 + .../23-04-13/vue-project/index.html" | 13 + .../23-04-13/vue-project/package-lock.json" | 750 + .../23-04-13/vue-project/package.json" | 17 + .../23-04-13/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-13/vue-project/src/App.vue" | 46 + .../23-04-13/vue-project/src/assets/base.css" | 74 + .../23-04-13/vue-project/src/assets/logo.svg" | 1 + .../23-04-13/vue-project/src/assets/main.css" | 35 + .../src/components/HelloWorld.vue" | 43 + .../src/components/TheWelcome.vue" | 86 + .../src/components/WelcomeItem.vue" | 86 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../vue-project/src/components/nes.vue" | 13 + .../23-04-13/vue-project/src/main.js" | 5 + .../23-04-13/vue-project/vite.config.js" | 14 + .../23-04-15/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-15/vue-project/README.md" | 29 + .../23-04-15/vue-project/index.html" | 13 + .../23-04-15/vue-project/package-lock.json" | 756 + .../23-04-15/vue-project/package.json" | 18 + .../23-04-15/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-15/vue-project/src/App.vue" | 26 + .../23-04-15/vue-project/src/assets/base.css" | 74 + .../23-04-15/vue-project/src/assets/logo.svg" | 1 + .../23-04-15/vue-project/src/assets/main.css" | 35 + .../src/components/HelloWorld.vue" | 43 + .../src/components/TheWelcome.vue" | 86 + .../src/components/WelcomeItem.vue" | 86 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../vue-project/src/components/mid.vue" | 18 + .../vue-project/src/components/top.vue" | 31 + .../23-04-15/vue-project/src/main.js" | 5 + .../23-04-15/vue-project/utits/eventBus.js" | 3 + .../23-04-15/vue-project/vite.config.js" | 14 + .../23-04-19/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-19/vue-project/README.md" | 29 + .../23-04-19/vue-project/index.html" | 13 + .../23-04-19/vue-project/package-lock.json" | 767 + .../23-04-19/vue-project/package.json" | 18 + .../23-04-19/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-19/vue-project/src/App.vue" | 48 + .../23-04-19/vue-project/src/assets/base.css" | 74 + .../23-04-19/vue-project/src/assets/logo.svg" | 1 + .../23-04-19/vue-project/src/assets/main.css" | 35 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../src/components/indess/num1.vue" | 7 + .../src/components/indess/num2.vue" | 7 + .../src/components/indess/num3.vue" | 7 + .../23-04-19/vue-project/src/main.js" | 11 + .../23-04-19/vue-project/src/router/index.js" | 28 + .../vue-project/src/views/AboutView.vue" | 15 + .../vue-project/src/views/HomeView.vue" | 9 + .../23-04-19/vue-project/vite.config.js" | 14 + .../23-04-20/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-20/vue-project/README.md" | 29 + .../23-04-20/vue-project/index.html" | 13 + .../23-04-20/vue-project/package-lock.json" | 710 + .../23-04-20/vue-project/package.json" | 18 + .../23-04-20/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-20/vue-project/src/App.vue" | 12 + .../23-04-20/vue-project/src/assets/base.css" | 74 + .../23-04-20/vue-project/src/assets/logo.svg" | 1 + .../23-04-20/vue-project/src/assets/main.css" | 35 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../vue-project/src/components/shop.vue" | 12 + .../vue-project/src/components/shop1.vue" | 7 + .../vue-project/src/components/shop2.vue" | 7 + .../vue-project/src/components/shop3.vue" | 7 + .../23-04-20/vue-project/src/main.js" | 11 + .../23-04-20/vue-project/src/router/index.js" | 36 + .../vue-project/src/views/AboutView.vue" | 15 + .../vue-project/src/views/HomeView.vue" | 9 + .../23-04-20/vue-project/vite.config.js" | 14 + .../23-04-22/vue-project/.gitignore" | 28 + .../vue-project/.vscode/extensions.json" | 3 + .../23-04-22/vue-project/README.md" | 29 + .../23-04-22/vue-project/index.html" | 13 + .../23-04-22/vue-project/package-lock.json" | 710 + .../23-04-22/vue-project/package.json" | 18 + .../23-04-22/vue-project/public/favicon.ico" | Bin 0 -> 4286 bytes .../23-04-22/vue-project/src/App.vue" | 14 + .../23-04-22/vue-project/src/assets/base.css" | 74 + .../23-04-22/vue-project/src/assets/logo.svg" | 1 + .../23-04-22/vue-project/src/assets/main.css" | 35 + .../src/components/HelloWorld.vue" | 43 + .../src/components/TheWelcome.vue" | 86 + .../src/components/WelcomeItem.vue" | 85 + .../src/components/icons/IconCommunity.vue" | 7 + .../components/icons/IconDocumentation.vue" | 7 + .../src/components/icons/IconEcosystem.vue" | 7 + .../src/components/icons/IconSupport.vue" | 7 + .../src/components/icons/IconTooling.vue" | 19 + .../23-04-22/vue-project/src/main.js" | 11 + .../23-04-22/vue-project/src/router/index.js" | 36 + .../vue-project/src/views/houtai.vue" | 15 + .../23-04-22/vue-project/src/views/login.vue" | 22 + .../23-04-22/vue-project/vite.config.js" | 14 + "\346\236\227\346\242\205\346\240\252/.keep" | 0 .../work1.html" | 79 - .../work2.html" | 96 - .../Vue 03-23/demo1.html" | 68 - "\347\216\213\345\205\250\344\270\232/.keep" | 0 .../zuoye.html" | 42 - 863 files changed, 620242 insertions(+), 9221 deletions(-) delete mode 100644 "20230323-Vue\346\241\206\346\236\266/zy - .html" delete mode 100644 "20230323-Vue\346\241\206\346\236\266/zy - \345\211\257\346\234\254.html" delete mode 100644 "20230323-Vue\346\241\206\346\236\266/zy.html" delete mode 100644 g.html delete mode 100644 vue/vue.zip delete mode 100644 "vue/vue\345\210\227\350\241\250\345\244\204\347\220\206/zy2.html" delete mode 100644 "vue/\344\275\234\344\270\2321st/demo.css" delete mode 100644 "vue/\344\275\234\344\270\2321st/demo.html" delete mode 100644 "vue/\344\275\234\344\270\2321st/zelda.webp" delete mode 100644 "vue/\344\275\234\344\270\2322nd/demo2.css" delete mode 100644 "vue/\344\275\234\344\270\2322nd/demo2.html" delete mode 100644 "vue/\344\275\234\344\270\2322nd/zelda.webp" delete mode 100644 "vue/\344\275\234\344\270\2323rd/demo.html" delete mode 100644 "vue/\344\275\234\344\270\2323rd/zelda.webp" delete mode 100644 "vue/\344\275\234\344\270\2324th/demo.css" delete mode 100644 "vue/\344\275\234\344\270\2324th/demo.html" delete mode 100644 "vue/\344\275\234\344\270\2324th/zelda.webp" delete mode 100644 "vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.css" delete mode 100644 "vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.html" delete mode 100644 "vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/e2a34a03958372440cb471aa7021b22c9ec6e800.jpg" delete mode 100644 "vue\346\241\206\346\236\266/zy1.html" delete mode 100644 zml/mm.html delete mode 100644 "\344\275\234\344\270\232/2\345\210\227\350\241\250/.keep" delete mode 100644 "\344\275\234\344\270\232/2\345\210\227\350\241\250/homework_list.html" delete mode 100644 "\344\275\234\344\270\232/4\350\256\241\347\256\227\345\261\236\346\200\247/.keep" delete mode 100644 "\344\275\234\344\270\232/4\350\256\241\347\256\227\345\261\236\346\200\247/homework.html" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/1.jpg" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/goods.html" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.css" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.html" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.css" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.html" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.css" delete mode 100644 "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.html" delete mode 100644 "\344\275\234\344\270\232/\346\250\241\346\235\277\344\270\216\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\344\275\234\344\270\232/index.html" delete mode 100644 "\345\221\250\350\212\267\350\216\271/20230323-Apple Store/iPhone.html" delete mode 100644 "\345\221\250\350\212\267\350\216\271/20230325-Apple Store2/iphone.html" delete mode 100644 "\345\221\250\350\212\267\350\216\271/20230327-Apple Store3/iphone.html" delete mode 100644 "\345\221\250\350\212\267\350\216\271/20230330-Apple Store4/iphone.html" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230323-Vue\346\241\206\346\236\266/demo.html" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230325-Vue\345\210\227\350\241\250\345\244\204\347\220\206/demo.html" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230327-Vue\345\242\236\345\210\240/demo.html" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230330-Vue\347\233\221\345\220\254/demo.html" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/app.js" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.js" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.sql" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/public/index.html" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230403-Vue\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\350\241\250\345\215\225\351\252\214\350\257\201/demo.html" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/App.vue" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/center.vue" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/top.vue" delete mode 100644 "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/\346\224\266\346\254\276\347\240\201.jpg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-03-25/demo.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-03-26/demo.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-03-30/demo.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/main.css" rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/HelloWorld.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/HelloWorld.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/TheWelcome.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/TheWelcome.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/WelcomeItem.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/WelcomeItem.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconCommunity.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconCommunity.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconDocumentation.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconDocumentation.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconEcosystem.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconEcosystem.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconSupport.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconSupport.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconTooling.vue" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconTooling.vue" (100%) rename "\344\275\234\344\270\232/.keep" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/newWorld.vue" (100%) rename "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/main.js" => "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/main.js" (75%) create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.cmd" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.ps1" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.cmd" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.ps1" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/bin/babel-parser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/typings/babel-parser.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/dist/compiler-core.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-core/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.global.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/dist/compiler-dom.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-dom/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-sfc/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-sfc/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-sfc/dist/compiler-sfc.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-sfc/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-ssr/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-ssr/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-ssr/dist/compiler-ssr.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/compiler-ssr/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity-transform/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity-transform/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity-transform/dist/reactivity-transform.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity-transform/dist/reactivity-transform.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity-transform/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.global.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/dist/reactivity.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/reactivity/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/dist/runtime-core.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/dist/runtime-core.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-core/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.global.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/dist/runtime-dom.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/runtime-dom/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/dist/server-renderer.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/dist/server-renderer.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/dist/server-renderer.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/dist/server-renderer.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/server-renderer/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/dist/shared.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/dist/shared.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/dist/shared.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/dist/shared.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@vue/shared/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/csstype/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/csstype/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/csstype/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/csstype/index.js.flow" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/csstype/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/dist/esm/estree-walker.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/dist/esm/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/dist/umd/estree-walker.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/src/async.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/src/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/src/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/src/sync.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/src/walker.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/types/async.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/types/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/types/sync.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/types/tsconfig.tsbuildinfo" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/estree-walker/types/walker.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/dist/magic-string.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/dist/magic-string.cjs.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/dist/magic-string.es.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/dist/magic-string.es.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/dist/magic-string.umd.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/dist/magic-string.umd.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/magic-string/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/async/index.browser.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/async/index.browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/async/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/async/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/async/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/async/index.native.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/async/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/bin/nanoid.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/index.browser.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/index.browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/nanoid.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/non-secure/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/non-secure/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/non-secure/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/non-secure/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/url-alphabet/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/url-alphabet/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/nanoid/url-alphabet/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/picocolors/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/picocolors/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/picocolors/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/picocolors/picocolors.browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/picocolors/picocolors.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/picocolors/picocolors.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/picocolors/types.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/at-rule.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/at-rule.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/comment.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/comment.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/container.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/container.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/css-syntax-error.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/css-syntax-error.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/declaration.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/declaration.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/document.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/document.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/fromJSON.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/fromJSON.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/input.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/input.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/lazy-result.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/lazy-result.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/list.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/list.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/map-generator.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/no-work-result.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/no-work-result.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/node.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/node.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/parse.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/parse.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/parser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/postcss.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/postcss.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/postcss.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/previous-map.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/previous-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/processor.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/processor.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/result.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/result.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/root.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/root.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/rule.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/rule.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/stringifier.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/stringifier.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/stringify.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/stringify.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/symbols.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/terminal-highlight.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/tokenize.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/warn-once.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/warning.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/lib/warning.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/postcss/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/array-set.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/base64-vlq.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/base64.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/binary-search.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/mapping-list.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/quick-sort.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/source-map-consumer.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/source-map-generator.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/source-node.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/lib/util.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/source-map.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map-js/source-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/dist/source-map.debug.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/dist/source-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/dist/source-map.min.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/dist/source-map.min.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/array-set.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/base64-vlq.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/base64.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/binary-search.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/mapping-list.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/quick-sort.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/source-map-consumer.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/source-map-generator.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/source-node.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/lib/util.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/source-map.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/source-map/source-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/dist/sourcemap-codec.es.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/dist/sourcemap-codec.es.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/dist/sourcemap-codec.umd.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/dist/sourcemap-codec.umd.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/dist/types/sourcemap-codec.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/sourcemap-codec/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/compiler-sfc/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/compiler-sfc/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/compiler-sfc/index.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/compiler-sfc/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.esm-bundler.js" rename "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/vue.global.js" => "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.global.js" (100%) create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.runtime.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.runtime.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.runtime.esm-bundler.js" rename "\344\275\234\344\270\232/\346\250\241\346\235\277\344\270\216\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\344\275\234\344\270\232/vue.global.js" => "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.runtime.global.js" (67%) create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/dist/vue.runtime.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/index.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/macros-global.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/macros.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/ref-macros.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/server-renderer/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/server-renderer/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/server-renderer/index.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/vue/server-renderer/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/HelloWorld.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/TheWelcome.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/WelcomeItem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/news/left.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/news/right.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/news/shuju.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/components/news/top.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-08/vue-project/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/.bin/nanoid" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/.bin/nanoid.cmd" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/.bin/nanoid.ps1" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/.bin/parser" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/.bin/parser.cmd" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/.bin/parser.ps1" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/.package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/bin/babel-parser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/lib/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/lib/index.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@babel/parser/typings/babel-parser.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/dist/compiler-core.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/dist/compiler-core.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-core/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.global.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/dist/compiler-dom.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-dom/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-sfc/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-sfc/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-sfc/dist/compiler-sfc.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-sfc/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-ssr/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-ssr/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-ssr/dist/compiler-ssr.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/compiler-ssr/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity-transform/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity-transform/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity-transform/dist/reactivity-transform.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity-transform/dist/reactivity-transform.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity-transform/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.global.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/dist/reactivity.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/reactivity/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/dist/runtime-core.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/dist/runtime-core.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-core/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.global.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/dist/runtime-dom.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/runtime-dom/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/dist/server-renderer.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/dist/server-renderer.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/dist/server-renderer.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/dist/server-renderer.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/server-renderer/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/dist/shared.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/dist/shared.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/dist/shared.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/dist/shared.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/@vue/shared/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/csstype/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/csstype/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/csstype/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/csstype/index.js.flow" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/csstype/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/dist/esm/estree-walker.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/dist/esm/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/dist/umd/estree-walker.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/src/async.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/src/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/src/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/src/sync.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/src/walker.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/types/async.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/types/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/types/sync.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/types/tsconfig.tsbuildinfo" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/estree-walker/types/walker.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/dist/magic-string.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/dist/magic-string.cjs.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/dist/magic-string.es.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/dist/magic-string.es.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/dist/magic-string.umd.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/dist/magic-string.umd.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/magic-string/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/async/index.browser.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/async/index.browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/async/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/async/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/async/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/async/index.native.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/async/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/bin/nanoid.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/index.browser.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/index.browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/nanoid.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/non-secure/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/non-secure/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/non-secure/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/non-secure/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/url-alphabet/index.cjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/url-alphabet/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/nanoid/url-alphabet/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/picocolors/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/picocolors/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/picocolors/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/picocolors/picocolors.browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/picocolors/picocolors.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/picocolors/picocolors.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/picocolors/types.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/at-rule.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/at-rule.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/comment.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/comment.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/container.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/container.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/css-syntax-error.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/css-syntax-error.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/declaration.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/declaration.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/document.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/document.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/fromJSON.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/fromJSON.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/input.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/input.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/lazy-result.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/lazy-result.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/list.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/list.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/map-generator.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/no-work-result.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/no-work-result.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/node.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/node.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/parse.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/parse.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/parser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/postcss.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/postcss.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/postcss.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/previous-map.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/previous-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/processor.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/processor.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/result.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/result.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/root.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/root.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/rule.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/rule.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/stringifier.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/stringifier.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/stringify.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/stringify.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/symbols.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/terminal-highlight.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/tokenize.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/warn-once.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/warning.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/lib/warning.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/postcss/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/array-set.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/base64-vlq.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/base64.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/binary-search.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/mapping-list.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/quick-sort.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/source-map-consumer.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/source-map-generator.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/source-node.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/lib/util.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/source-map.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map-js/source-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/dist/source-map.debug.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/dist/source-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/dist/source-map.min.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/dist/source-map.min.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/array-set.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/base64-vlq.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/base64.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/binary-search.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/mapping-list.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/quick-sort.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/source-map-consumer.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/source-map-generator.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/source-node.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/lib/util.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/source-map.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/source-map/source-map.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/CHANGELOG.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/dist/sourcemap-codec.es.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/dist/sourcemap-codec.es.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/dist/sourcemap-codec.umd.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/dist/sourcemap-codec.umd.js.map" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/dist/types/sourcemap-codec.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/sourcemap-codec/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/LICENSE" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/compiler-sfc/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/compiler-sfc/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/compiler-sfc/index.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/compiler-sfc/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.cjs.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.cjs.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.esm-bundler.js" rename "\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/vue.global.js" => "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.global.js" (100%) create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.runtime.esm-browser.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.runtime.esm-browser.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.runtime.esm-bundler.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.runtime.global.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/dist/vue.runtime.global.prod.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/index.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/macros-global.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/macros.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/ref-macros.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/server-renderer/index.d.ts" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/server-renderer/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/server-renderer/index.mjs" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/node_modules/vue/server-renderer/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/demo/left.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/demo/right.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/news/left.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/news/right.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/news/shuju.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/components/news/top.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-10/vue-project/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/HelloWorld.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/TheWelcome.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/WelcomeItem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/components/news/right.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-12/vue-project/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/HelloWorld.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/TheWelcome.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/WelcomeItem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/components/nes.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-13/vue-project/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/HelloWorld.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/TheWelcome.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/WelcomeItem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/mid.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/components/top.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/utits/eventBus.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-15/vue-project/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/indess/num1.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/indess/num2.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/components/indess/num3.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/router/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/views/AboutView.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/src/views/HomeView.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-19/vue-project/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/shop.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/shop1.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/shop2.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/components/shop3.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/router/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/views/AboutView.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/src/views/HomeView.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-20/vue-project/vite.config.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/.gitignore" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/.vscode/extensions.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/README.md" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/index.html" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/package-lock.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/package.json" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/public/favicon.ico" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/App.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/assets/base.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/assets/logo.svg" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/assets/main.css" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/HelloWorld.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/TheWelcome.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/WelcomeItem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/icons/IconCommunity.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/icons/IconDocumentation.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/icons/IconEcosystem.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/icons/IconSupport.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/components/icons/IconTooling.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/main.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/router/index.js" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/views/houtai.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/src/views/login.vue" create mode 100644 "\346\235\250\350\215\243\346\237\217/23-04-22/vue-project/vite.config.js" delete mode 100644 "\346\236\227\346\242\205\346\240\252/.keep" delete mode 100644 "\346\236\227\346\242\205\346\240\252/work1.html" delete mode 100644 "\346\236\227\346\242\205\346\240\252/work2.html" delete mode 100644 "\346\242\205\346\242\246\347\224\234/Vue 03-23/demo1.html" delete mode 100644 "\347\216\213\345\205\250\344\270\232/.keep" delete mode 100644 "\347\216\213\345\205\250\344\270\232/zuoye.html" diff --git "a/20230323-Vue\346\241\206\346\236\266/zy - .html" "b/20230323-Vue\346\241\206\346\236\266/zy - .html" deleted file mode 100644 index d2919cd..0000000 --- "a/20230323-Vue\346\241\206\346\236\266/zy - .html" +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - Document - - - - - - - -
-
-
- -
- ¥{{object.money}} - -
- - -
-
- {{object.id}} - - - - - - \ No newline at end of file diff --git "a/20230323-Vue\346\241\206\346\236\266/zy - \345\211\257\346\234\254.html" "b/20230323-Vue\346\241\206\346\236\266/zy - \345\211\257\346\234\254.html" deleted file mode 100644 index 0b4eefd..0000000 --- "a/20230323-Vue\346\241\206\346\236\266/zy - \345\211\257\346\234\254.html" +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - Document - - - - - - - -
- -
- - -
- - -
-
- ¥{{object.money}} - - - - -
- -
- - -
- -
-
- - - -
- 购买金额:{{goumai}} -
- - - - - - \ No newline at end of file diff --git "a/20230323-Vue\346\241\206\346\236\266/zy.html" "b/20230323-Vue\346\241\206\346\236\266/zy.html" deleted file mode 100644 index 4e9db89..0000000 --- "a/20230323-Vue\346\241\206\346\236\266/zy.html" +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - Document - - - - -
- -
- ¥{{object.money}} - -
-
- - - - - \ No newline at end of file diff --git a/g.html b/g.html deleted file mode 100644 index dd58955..0000000 --- a/g.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - -
- -
- - - - - \ No newline at end of file diff --git a/vue/vue.zip b/vue/vue.zip deleted file mode 100644 index 3d86cc7e91e5d804a62221fa0e6316f962c535f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178088 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 z 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

Lp7e= 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 - - - - - - Document - - - - - -

商品信息

-
-
-
- -

商品名称:{{item.name}}

-

价格:{{item.price}}

-

商品总数:{{item.sumNum}}

-

商品剩余数量:{{item.sumNum-item.buyNum}}

- 请输入你要购买改商品的数量: -
-
-

{{item.name}}库存为0

-
-
-
- - - - \ No newline at end of file diff --git "a/vue/\344\275\234\344\270\2321st/demo.css" "b/vue/\344\275\234\344\270\2321st/demo.css" deleted file mode 100644 index d999ed6..0000000 --- "a/vue/\344\275\234\344\270\2321st/demo.css" +++ /dev/null @@ -1,23 +0,0 @@ -.main { - display: table; - border-spacing: 30px; -} - -.shop { - width: 200px; - height: 300px; - background-color: #DCDCDC; - display: table-cell; -} -.button{ - margin-top: 1px -} -.shopName{ - font-size: 20px -} -.shopMoney{ - color: #802727 -} -.main2{ - display: table; border-spacing: 30px -} \ No newline at end of file diff --git "a/vue/\344\275\234\344\270\2321st/demo.html" "b/vue/\344\275\234\344\270\2321st/demo.html" deleted file mode 100644 index f01fd6a..0000000 --- "a/vue/\344\275\234\344\270\2321st/demo.html" +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - 模板语法 - - - -
- -
-

商品购买页

- -
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- - -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- - -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- - -
- -
-
- -
- -
- -
- -
- -
-
-
- -
- -
- -
- - - - - \ No newline at end of file diff --git "a/vue/\344\275\234\344\270\2321st/zelda.webp" "b/vue/\344\275\234\344\270\2321st/zelda.webp" deleted file mode 100644 index f63cd60880f76521bc60c20c2aee9495e26b0134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69212 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 z 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 diff --git "a/vue/\344\275\234\344\270\2322nd/demo2.css" "b/vue/\344\275\234\344\270\2322nd/demo2.css" deleted file mode 100644 index 9212ca8..0000000 --- "a/vue/\344\275\234\344\270\2322nd/demo2.css" +++ /dev/null @@ -1,35 +0,0 @@ - - *{ - padding: 0; - margin: 0; - } - #gamecard { - width: 100vw; - height: 100vh; - display: flex; - flex-wrap: wrap; - } - h1{ - width: 100vw; - height: 60px; - line-height: 60px; - text-align: center; - margin-top: 2vw; - } - #lists{ - display: flex; - flex-direction: column; - margin: 2vw; - font-size: 26px; - } - #box{ - width: 100vw; - height: 100vh; - display: flex; - justify-content: center; - margin-top: 2vw; - } - #box lists{ - width: 33.3vw; - height: auto; - } diff --git "a/vue/\344\275\234\344\270\2322nd/demo2.html" "b/vue/\344\275\234\344\270\2322nd/demo2.html" deleted file mode 100644 index 7da57c6..0000000 --- "a/vue/\344\275\234\344\270\2322nd/demo2.html" +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - 模板语法 - - - - - - - - - - \ No newline at end of file diff --git "a/vue/\344\275\234\344\270\2322nd/zelda.webp" "b/vue/\344\275\234\344\270\2322nd/zelda.webp" deleted file mode 100644 index f63cd60880f76521bc60c20c2aee9495e26b0134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69212 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 z 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 diff --git "a/vue/\344\275\234\344\270\2323rd/demo.html" "b/vue/\344\275\234\344\270\2323rd/demo.html" deleted file mode 100644 index 5f1ae3b..0000000 --- "a/vue/\344\275\234\344\270\2323rd/demo.html" +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - goodslist - - - - -

商品列表

-
-
-
- -

{{item.title}}

库存: {{item.goodsNum}} -
选购数量:
- {{item.price}} -
-
-

没了

-
-
- - - - \ No newline at end of file diff --git "a/vue/\344\275\234\344\270\2323rd/zelda.webp" "b/vue/\344\275\234\344\270\2323rd/zelda.webp" deleted file mode 100644 index f63cd60880f76521bc60c20c2aee9495e26b0134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69212 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 z 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 diff --git "a/vue/\344\275\234\344\270\2324th/demo.css" "b/vue/\344\275\234\344\270\2324th/demo.css" deleted file mode 100644 index a5fe0ce..0000000 --- "a/vue/\344\275\234\344\270\2324th/demo.css" +++ /dev/null @@ -1,11 +0,0 @@ - - *{ - padding: 0; - margin: 0; - } - #lists{ - background-color:red ; - margin-bottom: 50px; - width: 500px; - } - diff --git "a/vue/\344\275\234\344\270\2324th/demo.html" "b/vue/\344\275\234\344\270\2324th/demo.html" deleted file mode 100644 index 98b4f53..0000000 --- "a/vue/\344\275\234\344\270\2324th/demo.html" +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - 模板语法 - - - - - - - - - - \ No newline at end of file diff --git "a/vue/\344\275\234\344\270\2324th/zelda.webp" "b/vue/\344\275\234\344\270\2324th/zelda.webp" deleted file mode 100644 index f63cd60880f76521bc60c20c2aee9495e26b0134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69212 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 z 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 diff --git "a/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.css" "b/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.css" deleted file mode 100644 index 9f3b39f..0000000 --- "a/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.css" +++ /dev/null @@ -1,36 +0,0 @@ -*{ - padding: 0; - margin: 0; -} -body{ - background-image: url(./e2a34a03958372440cb471aa7021b22c9ec6e800.jpg); - background-repeat: no-repeat; - background-size:100% 100%; - background-attachment:fixed -} - -#main{ - text-align: center; - background-color: yellowgreen; - border-radius: 20px; - width: 600px; - height: 200px; - margin: auto; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - - -} -#main div{ - display: flex; - height: 50px; - justify-content: center; - align-items: center; - -} -span{ - font-size: 10px; -} diff --git "a/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.html" "b/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.html" deleted file mode 100644 index 7811173..0000000 --- "a/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/demo.html" +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - 自定义指令 - - - - - -
-
- -
用户名:
- {{usernameErr}} -
密   码:
- {{pwErr}} -
- -
-
- - - - - \ No newline at end of file diff --git "a/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/e2a34a03958372440cb471aa7021b22c9ec6e800.jpg" "b/vue/\344\275\234\344\270\2326th\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/e2a34a03958372440cb471aa7021b22c9ec6e800.jpg" deleted file mode 100644 index e680a73c0b559932f8104afb6341a91d9969d3fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26922 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 z 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 - - - - - - Document - - - - -

商品信息

-
-
-
- -

商品名称:{{item.name}}

-

价格:{{item.price}}

-
-
-
- - - - \ No newline at end of file diff --git a/zml/mm.html b/zml/mm.html deleted file mode 100644 index 760cbdf..0000000 --- a/zml/mm.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - 商品列表 - - - - - -
- -
- -

{{item.shangpin}}

-

{{item.jiege}}

-
- -
- - - - \ No newline at end of file diff --git "a/\344\275\234\344\270\232/2\345\210\227\350\241\250/.keep" "b/\344\275\234\344\270\232/2\345\210\227\350\241\250/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\344\275\234\344\270\232/2\345\210\227\350\241\250/homework_list.html" "b/\344\275\234\344\270\232/2\345\210\227\350\241\250/homework_list.html" deleted file mode 100644 index a77e81e..0000000 --- "a/\344\275\234\344\270\232/2\345\210\227\350\241\250/homework_list.html" +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - KFC - - - -
-
KFC
-
-
-
    -
  • -
    - -
    -
    {{item.name}}{{index+1}}
    - {{item.price}}¥
    -
    - 库存{{item.kucun-item.buyNum}} - -
    - -
  • -
-
- -
-
- - - - - - - - - - \ No newline at end of file diff --git "a/\344\275\234\344\270\232/4\350\256\241\347\256\227\345\261\236\346\200\247/.keep" "b/\344\275\234\344\270\232/4\350\256\241\347\256\227\345\261\236\346\200\247/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\344\275\234\344\270\232/4\350\256\241\347\256\227\345\261\236\346\200\247/homework.html" "b/\344\275\234\344\270\232/4\350\256\241\347\256\227\345\261\236\346\200\247/homework.html" deleted file mode 100644 index a5c817d..0000000 --- "a/\344\275\234\344\270\232/4\350\256\241\347\256\227\345\261\236\346\200\247/homework.html" +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - KFC - - - -
-
KFC
- -
-
-
    -
  • -
    - -
    -
    {{item.name}}{{index+1}}
    - {{item.price}}¥
    -
    - 库存{{item.kucun-item.buyNum}}
    - - -
    - -
  • -
-
- -
-
- - - - - - - - - - \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/1.jpg" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/1.jpg" deleted file mode 100644 index bcf49b75dbe79f28ccc77e0ea0731790e7ddef37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19825 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 fa#((5{olB!aZlJiO4F-8s - - - - - - - - vue商品页 - - - - - -
-
商品列表
-
-
-
- {{description}} -
- {{price}} - -
-
-
- -
-
-
- {{description}} -
- {{price}} - -
-
-
- -
-
-
- {{description}} -
- {{price}} - -
-
-
-
- - - - - \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.css" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.css" deleted file mode 100644 index 97f8cd0..0000000 --- "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.css" +++ /dev/null @@ -1,85 +0,0 @@ -* { - list-style: none; -} - -body { - margin: 0; - padding: 0; -} - -.main { - width: 400px; - height: 200px; - margin: auto; - display: flex; - flex-direction: column; - -} - -.title { - width: 400px; - height: 50px; - display: flex; - justify-content: center; - align-items: center; - font-size: 20px; - -} - -.goods { - width: 400px; - height: 120px; - display: flex; - justify-content: space-around; - align-items: center; - align-content: center; - margin-top: 5px; - background-color: rgb(238, 238, 238); -} - -.left { - display: flex; - width: 100px; - height: 100px; -} - -.right { - width: 240px; - height: 100px; - display: flex; - flex-direction: column; - justify-content: space-between; -} - - -.price { - color: red; - font-size: 20px; - font-weight: 1000; -} - -.bottom { - display: flex; - flex-direction: row; - justify-content: space-between; -} - -.buy { - width: 50px; - color: white; - background-color: gray; - border: none; -} - -.buy:hover { - background-color: cadetblue; -} - -.input{ - margin: auto; -} - -input{ - width: 40px; - height: 20px; -} \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.html" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.html" deleted file mode 100644 index bfa0e62..0000000 --- "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.html" +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - vue商品页 - - - - -
-
刷怪笼
- -
-
-
- {{item.description}} - 剩余 {{item.totalNum-item.buyNum}} 只 -
- {{item.price}} - - -
-
-
- -
- - - - - \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.css" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.css" deleted file mode 100644 index 037d054..0000000 --- "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.css" +++ /dev/null @@ -1,66 +0,0 @@ -* { - list-style: none; -} - -body { - margin: 0; - padding: 0; -} - -.main { - width: 300px; - margin: auto; - display: flex; -} - -.bigBox{ - width: 300px; - border: 1px gray solid; - display: flex; - flex-direction: column; -} - -.title{ - width: 300px; - height: 50px; - text-align: center; - font-size: 20px; - color: black; - line-height: 50px; -} - -.goodsList{ - width: 300px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - align-content: center; - margin-bottom: 10px; -} - -.img img{ - width: 150px; - height: 150px; -} - -#inp{ - width: 40px; - margin: 5px; -} - -.description{ - font-size: 16px; - color: black; -} - -.price{ - font-size: 16px; - color: orange; -} - -.remainder{ - font-size: 10px; - color: gray; -} - diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.html" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.html" deleted file mode 100644 index c17f2c0..0000000 --- "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.html" +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - vue商品页 - - - - -
-
-
商品列表
-
-
-
-
{{item.goodsName}}
-
{{item.description}}
-
价格:{{item.price}} ¥
-
剩余:{{item.totalNum-item.buyNum}}
- -
- | - | - -
-
- -
-
-
- - - - - - \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.css" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.css" deleted file mode 100644 index 037d054..0000000 --- "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.css" +++ /dev/null @@ -1,66 +0,0 @@ -* { - list-style: none; -} - -body { - margin: 0; - padding: 0; -} - -.main { - width: 300px; - margin: auto; - display: flex; -} - -.bigBox{ - width: 300px; - border: 1px gray solid; - display: flex; - flex-direction: column; -} - -.title{ - width: 300px; - height: 50px; - text-align: center; - font-size: 20px; - color: black; - line-height: 50px; -} - -.goodsList{ - width: 300px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - align-content: center; - margin-bottom: 10px; -} - -.img img{ - width: 150px; - height: 150px; -} - -#inp{ - width: 40px; - margin: 5px; -} - -.description{ - font-size: 16px; - color: black; -} - -.price{ - font-size: 16px; - color: orange; -} - -.remainder{ - font-size: 10px; - color: gray; -} - diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.html" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.html" deleted file mode 100644 index 6369e20..0000000 --- "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2324/goods.html" +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - vue商品页 - - - - -
-
-
商品列表
-
-
-
-
{{item.goodsName}}
-
{{item.description}}
-
价格:{{item.price}} ¥
-
剩余:{{item.totalNum-item.buyNum}}
- -
- - | - - {{totalPrice}} -
-
-
-
-
- - - - - - \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\346\250\241\346\235\277\344\270\216\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\344\275\234\344\270\232/index.html" "b/\344\275\234\344\270\232/\346\250\241\346\235\277\344\270\216\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\344\275\234\344\270\232/index.html" deleted file mode 100644 index f839c46..0000000 --- "a/\344\275\234\344\270\232/\346\250\241\346\235\277\344\270\216\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\344\275\234\344\270\232/index.html" +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - Document - - - - - - - -
- -
- - - - - - \ No newline at end of file diff --git "a/\345\221\250\350\212\267\350\216\271/20230323-Apple Store/iPhone.html" "b/\345\221\250\350\212\267\350\216\271/20230323-Apple Store/iPhone.html" deleted file mode 100644 index af94798..0000000 --- "a/\345\221\250\350\212\267\350\216\271/20230323-Apple Store/iPhone.html" +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - iPhone商城 - - - - -
-

iPhone商城

- -
- - -
- -

名称:{{sz.name}}

-

内存:{{sz.nc}}

-

价格:{{sz.price}}

-
-
-
- - - \ No newline at end of file diff --git "a/\345\221\250\350\212\267\350\216\271/20230325-Apple Store2/iphone.html" "b/\345\221\250\350\212\267\350\216\271/20230325-Apple Store2/iphone.html" deleted file mode 100644 index 52226de..0000000 --- "a/\345\221\250\350\212\267\350\216\271/20230325-Apple Store2/iphone.html" +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - iPhone商城 - - - - - -
-

iPhone商城

- -
- - -
- -
- -

名称:{{sz.name}}

-

颜色:{{sz.color}}

-

内存:{{sz.nc}}

-

价格:{{sz.price}}

-

库存:{{100-sz.kc}}

-
- -
-

{{sz.name}} {{sz.color}} 已售罄

-
-
-
-
- - - \ No newline at end of file diff --git "a/\345\221\250\350\212\267\350\216\271/20230327-Apple Store3/iphone.html" "b/\345\221\250\350\212\267\350\216\271/20230327-Apple Store3/iphone.html" deleted file mode 100644 index c2f8830..0000000 --- "a/\345\221\250\350\212\267\350\216\271/20230327-Apple Store3/iphone.html" +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - Apple Store - - - - - - -
-

Apple Store

- -
- - -
- -
- -

名称:{{sz.name}}

-

颜色:{{sz.color}}

-

内存:{{sz.nc}}

-

价格:{{sz.price}}

-

库存:{{100-sz.kc}}

-
- -    - -    - -
- -
- -
-

{{sz.name}} {{sz.color}} 已售罄

-
-
-
-
- - - \ No newline at end of file diff --git "a/\345\221\250\350\212\267\350\216\271/20230330-Apple Store4/iphone.html" "b/\345\221\250\350\212\267\350\216\271/20230330-Apple Store4/iphone.html" deleted file mode 100644 index dbd624f..0000000 --- "a/\345\221\250\350\212\267\350\216\271/20230330-Apple Store4/iphone.html" +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - Apple Store - - - - - - - -
-

Apple Store

- -
- - -
-
- -

名称:{{sz.name}}

-

颜色:{{sz.color}}

-

内存:{{sz.nc}}

-

价格:{{sz.price}}

-

库存:{{100-sz.buynum}}

-

总价:¥{{sz.buynum*sz.price}} 元

-
- -    - -    - -
- -
- -
-

{{sz.name}} {{sz.color}} 已售罄

-
-
-
-
- - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230323-Vue\346\241\206\346\236\266/demo.html" "b/\346\210\264\344\275\263\350\276\211/20230323-Vue\346\241\206\346\236\266/demo.html" deleted file mode 100644 index 6bcb495..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230323-Vue\346\241\206\346\236\266/demo.html" +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - -
-

商品列表

-
-
-

名称:{{ good.name }}

- -

描述:{{ good.describe }}

-

价格:¥{{good.price }}

-
-
-
- - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230325-Vue\345\210\227\350\241\250\345\244\204\347\220\206/demo.html" "b/\346\210\264\344\275\263\350\276\211/20230325-Vue\345\210\227\350\241\250\345\244\204\347\220\206/demo.html" deleted file mode 100644 index 7ed2d23..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230325-Vue\345\210\227\350\241\250\345\244\204\347\220\206/demo.html" +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - 商品列表 - - - - - - -
-

商品列表

-
-
-
-

名称:{{ good.name }}

- -

描述:{{ good.describe }}

-

价格:¥{{good.price }}

- -

剩余数量:{{100-good.number}}

-
-
-

{{ good.name }}库存为0

-
-
-
-
- - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230327-Vue\345\242\236\345\210\240/demo.html" "b/\346\210\264\344\275\263\350\276\211/20230327-Vue\345\242\236\345\210\240/demo.html" deleted file mode 100644 index 122066d..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230327-Vue\345\242\236\345\210\240/demo.html" +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - 商品列表 - - - - - - - - -
-

商品列表

-
-
-
-

名称:{{ good.name }}

- - -

描述:{{ good.describe }}

-

价格:¥{{good.price }}

-

剩余数量:{{good.number}}

- -
- - - -
-
-
-
` - - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230330-Vue\347\233\221\345\220\254/demo.html" "b/\346\210\264\344\275\263\350\276\211/20230330-Vue\347\233\221\345\220\254/demo.html" deleted file mode 100644 index 7944c64..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230330-Vue\347\233\221\345\220\254/demo.html" +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - 商品列表 - - - - - - - - - -
-

商品列表

-
-
-
-

名称:{{ good.name }}

- -

描述:{{ good.describe }}

-

价格:¥{{good.price }}

-

剩余数量:{{good.number}}

- -
- - - -
-
-
- -
` - - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/app.js" "b/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/app.js" deleted file mode 100644 index d35805c..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/app.js" +++ /dev/null @@ -1,49 +0,0 @@ -let express = require('express'); - -const app = express(); - -app.use(express.static('public')); - -let Md = (req,res,next)=>{ - res.writeHeader(200,{"Content-type":"text/html;charset=utf8"}) - next(); -} - -app.use(Md); - -const goods = require('./goods.js'); - -app.get('/info',async (req,res)=>{ - let show =await goods.findAll(); - res.end(JSON.stringify(show)) -}); - -app.get('/add',async (req,res)=>{ - let name = req.query.name; - let describe = req.query.describe; - let price = req.query.price; - let number = req.query.number; - let buyNum =req.query.buyNum; - let img = req.query.img; - let add = await goods.create({ - name:name, - describe:describe, - price:price, - number:number, - buyNum:buyNum, - img:img, - }) - res.end(JSON.stringify(add)) -}) - -app.get('/del',async (req,res)=>{ - let id = req.query.id; - let del = await goods.destroy({ - where:{ - id:id - } - }) - res.end(JSON.stringify(del)) -}) - -app.listen('3000') \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.js" "b/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.js" deleted file mode 100644 index 8c7bfa5..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.js" +++ /dev/null @@ -1,46 +0,0 @@ -const{Sequelize , Model, DataTypes} = require('sequelize') - -let sequelize = new Sequelize('class7','root','root',{ - host:'127.0.0.1', - dialect:'mysql', - define:{ - underscored:true - } -}) - -class goods extends Model{}; - -goods.init({ - id:{ - type:DataTypes.INTEGER, - primaryKey:true, - autoIncrement:true, - allowNull:false - }, - name:{ - type:DataTypes.STRING - }, - describe:{ - type:DataTypes.STRING - }, - price:{ - type:DataTypes.INTEGER - }, - number:{ - type:DataTypes.INTEGER - }, - buyNum:{ - type:DataTypes.INTEGER - }, - img:{ - type:DataTypes.STRING - } -},{ - sequelize, - tableName:'goods', - modelName:'goods' -}); - -goods.sync(); - -module.exports=goods; \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.sql" "b/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.sql" deleted file mode 100644 index 0f2bcb2..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/goods.sql" +++ /dev/null @@ -1,44 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : cc - Source Server Type : MySQL - Source Server Version : 50737 - Source Host : localhost:3306 - Source Schema : class7 - - Target Server Type : MySQL - Target Server Version : 50737 - File Encoding : 65001 - - Date: 01/04/2023 11:41:33 -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for goods --- ---------------------------- -DROP TABLE IF EXISTS `goods`; -CREATE TABLE `goods` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `describe` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `price` int(11) NULL DEFAULT NULL, - `number` int(11) NULL DEFAULT NULL, - `buy_num` int(11) NULL DEFAULT NULL, - `img` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of goods --- ---------------------------- -INSERT INTO `goods` VALUES (1, '柴犬', '像狗', 888, 100, 1, 'https://img0.baidu.com/it/u=4168664554,3249760368&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500', '2023-04-01 11:13:57', '2023-04-01 11:13:59'); -INSERT INTO `goods` VALUES (2, '萨摩耶', '长得很像狗', 999, 100, 1, 'https://img0.baidu.com/it/u=3438843980,916394742&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=762', '2023-04-01 11:15:14', '2023-04-01 11:15:16'); -INSERT INTO `goods` VALUES (3, '威尔士柯基犬', '很狗', 898, 100, 1, 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fgroup_topic%2Fl%2Fpublic%2Fp437468049.jpg&refer=http%3A%2F%2Fimg1.doubanio.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1682154473&t=9f89afe9a3c36348f61ad7a45f577dbc', '2023-04-01 11:15:48', '2023-04-01 11:15:50'); - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/public/index.html" "b/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/public/index.html" deleted file mode 100644 index 9b1c4d8..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230401-VueAndAjax/public/index.html" +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - 商品列表 - - - - - - - - - - -
-

商品列表

-
-
-
-

名称:{{ good.name }}

- -

描述:{{ good.describe }}

-

价格:¥{{good.price }}

-

剩余数量:{{good.number}}

- -
- - - -
-
-
-
- - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230403-Vue\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\350\241\250\345\215\225\351\252\214\350\257\201/demo.html" "b/\346\210\264\344\275\263\350\276\211/20230403-Vue\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\350\241\250\345\215\225\351\252\214\350\257\201/demo.html" deleted file mode 100644 index d00fa38..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230403-Vue\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244\350\241\250\345\215\225\351\252\214\350\257\201/demo.html" +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - 表单验证 - - - - -
-
-
账号:账户不存在,请重新输入!
-
密码:密码错误,请重新输入!
-
-
-
- - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/App.vue" "b/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/App.vue" deleted file mode 100644 index 4980697..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/App.vue" +++ /dev/null @@ -1,56 +0,0 @@ - - - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/center.vue" "b/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/center.vue" deleted file mode 100644 index e3d15d7..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/center.vue" +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/top.vue" "b/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/top.vue" deleted file mode 100644 index fb8e7bb..0000000 --- "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/top.vue" +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/\346\224\266\346\254\276\347\240\201.jpg" "b/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/goods/\346\224\266\346\254\276\347\240\201.jpg" deleted file mode 100644 index 42c2a141b65fed979a8bfe9b02e41b617124be59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124259 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 + + + + + + + Document + + + +

+
    +
  • + {{item.name}}---{{item.price}} +

    +

    库存:{{item.much-item.buy}}

    +

    购买数量

    +
  • +
+
+ + + + + \ No newline at end of file diff --git "a/\346\235\250\350\215\243\346\237\217/23-03-26/demo.html" "b/\346\235\250\350\215\243\346\237\217/23-03-26/demo.html" new file mode 100644 index 0000000..7227ba0 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-03-26/demo.html" @@ -0,0 +1,58 @@ + + + + + + + + Document + + + +
+
    +
  • + {{item.name}}---{{item.price}} +

    +

    库存:{{item.much-item.buy}}

    +

    购买数量

    +

    + +

    +
  • +
+
+ + + + + \ No newline at end of file diff --git "a/\346\235\250\350\215\243\346\237\217/23-03-30/demo.html" "b/\346\235\250\350\215\243\346\237\217/23-03-30/demo.html" new file mode 100644 index 0000000..c27d7c5 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-03-30/demo.html" @@ -0,0 +1,98 @@ + + + + + + + + Document + + + + +
+
    +
  • + {{item.name}}---{{item.price}} +

    +

    库存:{{item.much-item.buy}}

    +

    购买数量{{newValue}}

    +

    + +

    +

    {{item.buy}}

    +
  • +
+

购买的总价:{{allbuy}}

+
+ + + + + \ No newline at end of file diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.gitignore" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.gitignore" new file mode 100644 index 0000000..38adffa --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.gitignore" @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.vscode/extensions.json" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.vscode/extensions.json" new file mode 100644 index 0000000..c0a6e5a --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/.vscode/extensions.json" @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/README.md" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/README.md" new file mode 100644 index 0000000..2e893d7 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/README.md" @@ -0,0 +1,29 @@ +# class + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/index.html" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/index.html" new file mode 100644 index 0000000..99f583a --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/index.html" @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package-lock.json" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package-lock.json" new file mode 100644 index 0000000..0e8a707 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package-lock.json" @@ -0,0 +1,750 @@ +{ + "name": "class", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "class", + "version": "0.0.0", + "dependencies": { + "vue": "^3.2.47" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.0.0", + "vite": "^4.1.4" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.15.tgz", + "integrity": "sha512-sRSOVlLawAktpMvDyJIkdLI/c/kdRTOqo8t6ImVxg8yT7LQDUYV5Rp2FKeEosLr6ZCja9UjYAzyRSxGteSJPYg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.15.tgz", + "integrity": "sha512-0kOB6Y7Br3KDVgHeg8PRcvfLkq+AccreK///B4Z6fNZGr/tNHX0z2VywCc7PTeWp+bPvjA5WMvNXltHw5QjAIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.15.tgz", + "integrity": "sha512-MzDqnNajQZ63YkaUWVl9uuhcWyEyh69HGpMIrf+acR4otMkfLJ4sUCxqwbCyPGicE9dVlrysI3lMcDBjGiBBcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.15.tgz", + "integrity": "sha512-7siLjBc88Z4+6qkMDxPT2juf2e8SJxmsbNVKFY2ifWCDT72v5YJz9arlvBw5oB4W/e61H1+HDB/jnu8nNg0rLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.15.tgz", + "integrity": "sha512-NbImBas2rXwYI52BOKTW342Tm3LTeVlaOQ4QPZ7XuWNKiO226DisFk/RyPk3T0CKZkKMuU69yOvlapJEmax7cg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.15.tgz", + "integrity": "sha512-Xk9xMDjBVG6CfgoqlVczHAdJnCs0/oeFOspFap5NkYAmRCT2qTn1vJWA2f419iMtsHSLm+O8B6SLV/HlY5cYKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.15.tgz", + "integrity": "sha512-3TWAnnEOdclvb2pnfsTWtdwthPfOz7qAfcwDLcfZyGJwm1SRZIMOeB5FODVhnM93mFSPsHB9b/PmxNNbSnd0RQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.15.tgz", + "integrity": "sha512-MLTgiXWEMAMr8nmS9Gigx43zPRmEfeBfGCwxFQEMgJ5MC53QKajaclW6XDPjwJvhbebv+RzK05TQjvH3/aM4Xw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.15.tgz", + "integrity": "sha512-T0MVnYw9KT6b83/SqyznTs/3Jg2ODWrZfNccg11XjDehIved2oQfrX/wVuev9N936BpMRaTR9I1J0tdGgUgpJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.15.tgz", + "integrity": "sha512-wp02sHs015T23zsQtU4Cj57WiteiuASHlD7rXjKUyAGYzlOKDAjqK6bk5dMi2QEl/KVOcsjwL36kD+WW7vJt8Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.15.tgz", + "integrity": "sha512-k7FsUJjGGSxwnBmMh8d7IbObWu+sF/qbwc+xKZkBe/lTAF16RqxRCnNHA7QTd3oS2AfGBAnHlXL67shV5bBThQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.15.tgz", + "integrity": "sha512-ZLWk6czDdog+Q9kE/Jfbilu24vEe/iW/Sj2d8EVsmiixQ1rM2RKH2n36qfxK4e8tVcaXkvuV3mU5zTZviE+NVQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.15.tgz", + "integrity": "sha512-mY6dPkIRAiFHRsGfOYZC8Q9rmr8vOBZBme0/j15zFUKM99d4ILY4WpOC7i/LqoY+RE7KaMaSfvY8CqjJtuO4xg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.15.tgz", + "integrity": "sha512-EcyUtxffdDtWjjwIH8sKzpDRLcVtqANooMNASO59y+xmqqRYBBM7xVLQhqF7nksIbm2yHABptoioS9RAbVMWVA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.15.tgz", + "integrity": "sha512-BuS6Jx/ezxFuHxgsfvz7T4g4YlVrmCmg7UAwboeyNNg0OzNzKsIZXpr3Sb/ZREDXWgt48RO4UQRDBxJN3B9Rbg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.15.tgz", + "integrity": "sha512-JsdS0EgEViwuKsw5tiJQo9UdQdUJYuB+Mf6HxtJSPN35vez1hlrNb1KajvKWF5Sa35j17+rW1ECEO9iNrIXbNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.15.tgz", + "integrity": "sha512-R6fKjtUysYGym6uXf6qyNephVUQAGtf3n2RCsOST/neIwPqRWcnc3ogcielOd6pT+J0RDR1RGcy0ZY7d3uHVLA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.15.tgz", + "integrity": "sha512-mVD4PGc26b8PI60QaPUltYKeSX0wxuy0AltC+WCTFwvKCq2+OgLP4+fFd+hZXzO2xW1HPKcytZBdjqL6FQFa7w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.15.tgz", + "integrity": "sha512-U6tYPovOkw3459t2CBwGcFYfFRjivcJJc1WC8Q3funIwX8x4fP+R6xL/QuTPNGOblbq/EUDxj9GU+dWKX0oWlQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.15.tgz", + "integrity": "sha512-W+Z5F++wgKAleDABemiyXVnzXgvRFs+GVKThSI+mGgleLWluv0D7Diz4oQpgdpNzh4i2nNDzQtWbjJiqutRp6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.15.tgz", + "integrity": "sha512-Muz/+uGgheShKGqSVS1KsHtCyEzcdOn/W/Xbh6H91Etm+wiIfwZaBn1W58MeGtfI8WA961YMHFYTthBdQs4t+w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.15.tgz", + "integrity": "sha512-DjDa9ywLUUmjhV2Y9wUTIF+1XsmuFGvZoCmOWkli1XcNAh5t25cc7fgsCx4Zi/Uurep3TTLyDiKATgGEg61pkA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz", + "integrity": "sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "dependencies": { + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "dependencies": { + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", + "dependencies": { + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz", + "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", + "dependencies": { + "@vue/reactivity": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", + "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", + "dependencies": { + "@vue/runtime-core": "3.2.47", + "@vue/shared": "3.2.47", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", + "dependencies": { + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" + }, + "peerDependencies": { + "vue": "3.2.47" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" + }, + "node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "node_modules/esbuild": { + "version": "0.17.15", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.15.tgz", + "integrity": "sha512-LBUV2VsUIc/iD9ME75qhT4aJj0r75abCVS0jakhFzOtR7TQsqQA5w0tZ+KTKnwl3kXE0MhskNdHDh/I5aCR1Zw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.15", + "@esbuild/android-arm64": "0.17.15", + "@esbuild/android-x64": "0.17.15", + "@esbuild/darwin-arm64": "0.17.15", + "@esbuild/darwin-x64": "0.17.15", + "@esbuild/freebsd-arm64": "0.17.15", + "@esbuild/freebsd-x64": "0.17.15", + "@esbuild/linux-arm": "0.17.15", + "@esbuild/linux-arm64": "0.17.15", + "@esbuild/linux-ia32": "0.17.15", + "@esbuild/linux-loong64": "0.17.15", + "@esbuild/linux-mips64el": "0.17.15", + "@esbuild/linux-ppc64": "0.17.15", + "@esbuild/linux-riscv64": "0.17.15", + "@esbuild/linux-s390x": "0.17.15", + "@esbuild/linux-x64": "0.17.15", + "@esbuild/netbsd-x64": "0.17.15", + "@esbuild/openbsd-x64": "0.17.15", + "@esbuild/sunos-x64": "0.17.15", + "@esbuild/win32-arm64": "0.17.15", + "@esbuild/win32-ia32": "0.17.15", + "@esbuild/win32-x64": "0.17.15" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + } + }, + "node_modules/rollup": { + "version": "3.20.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.20.2.tgz", + "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/vite": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/vite/-/vite-4.2.1.tgz", + "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.18.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz", + "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", + "dependencies": { + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/runtime-dom": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47" + } + } + } +} diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package.json" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package.json" new file mode 100644 index 0000000..89f193f --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/package.json" @@ -0,0 +1,17 @@ +{ + "name": "class", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.2.47" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.0.0", + "vite": "^4.1.4" + } +} diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/public/favicon.ico" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/public/favicon.ico" new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/App.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/App.vue" new file mode 100644 index 0000000..633a5df --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/App.vue" @@ -0,0 +1,47 @@ + + + + + diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/base.css" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/base.css" new file mode 100644 index 0000000..71dc55a --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/base.css" @@ -0,0 +1,74 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + position: relative; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/logo.svg" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/logo.svg" new file mode 100644 index 0000000..7565660 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/logo.svg" @@ -0,0 +1 @@ + diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/main.css" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/main.css" new file mode 100644 index 0000000..e8667cd --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/assets/main.css" @@ -0,0 +1,35 @@ +@import './base.css'; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/HelloWorld.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/HelloWorld.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/HelloWorld.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/HelloWorld.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/TheWelcome.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/TheWelcome.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/TheWelcome.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/TheWelcome.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/WelcomeItem.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/WelcomeItem.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/WelcomeItem.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/WelcomeItem.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconCommunity.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconCommunity.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconCommunity.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconCommunity.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconDocumentation.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconDocumentation.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconDocumentation.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconDocumentation.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconEcosystem.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconEcosystem.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconEcosystem.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconEcosystem.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconSupport.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconSupport.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconSupport.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconSupport.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconTooling.vue" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconTooling.vue" similarity index 100% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/components/icons/IconTooling.vue" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/icons/IconTooling.vue" diff --git "a/\344\275\234\344\270\232/.keep" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/newWorld.vue" similarity index 100% rename from "\344\275\234\344\270\232/.keep" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/components/newWorld.vue" diff --git "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/main.js" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/main.js" similarity index 75% rename from "\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/main.js" rename to "\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/main.js" index db6a890..90e6400 100644 --- "a/\346\210\264\344\275\263\350\276\211/20230408-Vue\347\273\204\344\273\266\345\225\206\345\223\201/main.js" +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/src/main.js" @@ -1,6 +1,6 @@ import { createApp } from 'vue' import App from './App.vue' -// import './assets/main.css' +import './assets/main.css' createApp(App).mount('#app') diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/vite.config.js" "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/vite.config.js" new file mode 100644 index 0000000..de5cb31 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-06/demo/class/vite.config.js" @@ -0,0 +1,14 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + } +}) diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid" new file mode 100644 index 0000000..23254eb --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid" @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@" +else + exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@" +fi diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.cmd" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.cmd" new file mode 100644 index 0000000..9c40107 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.cmd" @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %* diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.ps1" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.ps1" new file mode 100644 index 0000000..d8a4d7a --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/nanoid.ps1" @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + } else { + & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + } else { + & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser" new file mode 100644 index 0000000..cb5b10d --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser" @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../@babel/parser/bin/babel-parser.js" "$@" +else + exec node "$basedir/../@babel/parser/bin/babel-parser.js" "$@" +fi diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.cmd" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.cmd" new file mode 100644 index 0000000..1ad5c81 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.cmd" @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@babel\parser\bin\babel-parser.js" %* diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.ps1" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.ps1" new file mode 100644 index 0000000..8926517 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.bin/parser.ps1" @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args + } else { + & "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args + } else { + & "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.package-lock.json" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.package-lock.json" new file mode 100644 index 0000000..e6ed6bc --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/.package-lock.json" @@ -0,0 +1,201 @@ +{ + "name": "23-04-08", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "dependencies": { + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "dependencies": { + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", + "dependencies": { + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz", + "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", + "dependencies": { + "@vue/reactivity": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", + "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", + "dependencies": { + "@vue/runtime-core": "3.2.47", + "@vue/shared": "3.2.47", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", + "dependencies": { + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" + }, + "peerDependencies": { + "vue": "3.2.47" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" + }, + "node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/vue": { + "version": "3.2.47", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz", + "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", + "dependencies": { + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/runtime-dom": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47" + } + } + } +} diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/CHANGELOG.md" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/CHANGELOG.md" new file mode 100644 index 0000000..b3840ac --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/CHANGELOG.md" @@ -0,0 +1,1073 @@ +# Changelog + +> **Tags:** +> - :boom: [Breaking Change] +> - :eyeglasses: [Spec Compliance] +> - :rocket: [New Feature] +> - :bug: [Bug Fix] +> - :memo: [Documentation] +> - :house: [Internal] +> - :nail_care: [Polish] + +> Semver Policy: https://github.com/babel/babel/tree/main/packages/babel-parser#semver + +_Note: Gaps between patch versions are faulty, broken or test releases._ + +See the [Babel Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) for the pre-6.8.0 version Changelog. + +## 6.17.1 (2017-05-10) + +### :bug: Bug Fix + * Fix typo in flow spread operator error (Brian Ng) + * Fixed invalid number literal parsing ([#473](https://github.com/babel/babylon/pull/473)) (Alex Kuzmenko) + * Fix number parser ([#433](https://github.com/babel/babylon/pull/433)) (Alex Kuzmenko) + * Ensure non pattern shorthand props are checked for reserved words ([#479](https://github.com/babel/babylon/pull/479)) (Brian Ng) + * Remove jsx context when parsing arrow functions ([#475](https://github.com/babel/babylon/pull/475)) (Brian Ng) + * Allow super in class properties ([#499](https://github.com/babel/babylon/pull/499)) (Brian Ng) + * Allow flow class field to be named constructor ([#510](https://github.com/babel/babylon/pull/510)) (Brian Ng) + +## 6.17.0 (2017-04-20) + +### :bug: Bug Fix + * Cherry-pick #418 to 6.x ([#476](https://github.com/babel/babylon/pull/476)) (Sebastian McKenzie) + * Add support for invalid escapes in tagged templates ([#274](https://github.com/babel/babylon/pull/274)) (Kevin Gibbons) + * Throw error if new.target is used outside of a function ([#402](https://github.com/babel/babylon/pull/402)) (Brian Ng) + * Fix parsing of class properties ([#351](https://github.com/babel/babylon/pull/351)) (Kevin Gibbons) + * Fix parsing yield with dynamicImport ([#383](https://github.com/babel/babylon/pull/383)) (Brian Ng) + * Ensure consistent start args for parseParenItem ([#386](https://github.com/babel/babylon/pull/386)) (Brian Ng) + +## 7.0.0-beta.8 (2017-04-04) + +### New Feature +* Add support for flow type spread (#418) (Conrad Buck) +* Allow statics in flow interfaces (#427) (Brian Ng) + +### Bug Fix +* Fix predicate attachment to match flow parser (#428) (Brian Ng) +* Add extra.raw back to JSXText and JSXAttribute (#344) (Alex Rattray) +* Fix rest parameters with array and objects (#424) (Brian Ng) +* Fix number parser (#433) (Alex Kuzmenko) + +### Docs +* Fix CONTRIBUTING.md [skip ci] (#432) (Alex Kuzmenko) + +### Internal +* Use babel-register script when running babel smoke tests (#442) (Brian Ng) + +## 7.0.0-beta.7 (2017-03-22) + +### Spec Compliance +* Remove babylon plugin for template revision since it's stage-4 (#426) (Henry Zhu) + +### Bug Fix + +* Fix push-pop logic in flow (#405) (Daniel Tschinder) + +## 7.0.0-beta.6 (2017-03-21) + +### New Feature +* Add support for invalid escapes in tagged templates (#274) (Kevin Gibbons) + +### Polish +* Improves error message when super is called outside of constructor (#408) (Arshabh Kumar Agarwal) + +### Docs + +* [7.0] Moved value field in spec from ObjectMember to ObjectProperty as ObjectMethod's don't have it (#415) [skip ci] (James Browning) + +## 7.0.0-beta.5 (2017-03-21) + +### Bug Fix +* Throw error if new.target is used outside of a function (#402) (Brian Ng) +* Fix parsing of class properties (#351) (Kevin Gibbons) + +### Other + * Test runner: Detect extra property in 'actual' but not in 'expected'. (#407) (Andy) + * Optimize travis builds (#419) (Daniel Tschinder) + * Update codecov to 2.0 (#412) (Daniel Tschinder) + * Fix spec for ClassMethod: It doesn't have a function, it *is* a function. (#406) [skip ci] (Andy) + * Changed Non-existent RestPattern to RestElement which is what is actually parsed (#409) [skip ci] (James Browning) + * Upgrade flow to 0.41 (Daniel Tschinder) + * Fix watch command (#403) (Brian Ng) + * Update yarn lock (Daniel Tschinder) + * Fix watch command (#403) (Brian Ng) + * chore(package): update flow-bin to version 0.41.0 (#395) (greenkeeper[bot]) + * Add estree test for correct order of directives (Daniel Tschinder) + * Add DoExpression to spec (#364) (Alex Kuzmenko) + * Mention cloning of repository in CONTRIBUTING.md (#391) [skip ci] (Sumedh Nimkarde) + * Explain how to run only one test (#389) [skip ci] (Aaron Ang) + + ## 7.0.0-beta.4 (2017-03-01) + +* Don't consume async when checking for async func decl (#377) (Brian Ng) +* add `ranges` option [skip ci] (Henry Zhu) +* Don't parse class properties without initializers when classProperties is disabled and Flow is enabled (#300) (Andrew Levine) + +## 7.0.0-beta.3 (2017-02-28) + +- [7.0] Change RestProperty/SpreadProperty to RestElement/SpreadElement (#384) +- Merge changes from 6.x + +## 7.0.0-beta.2 (2017-02-20) + +- estree: correctly change literals in all cases (#368) (Daniel Tschinder) + +## 7.0.0-beta.1 (2017-02-20) + +- Fix negative number literal typeannotations (#366) (Daniel Tschinder) +- Update contributing with more test info [skip ci] (#355) (Brian Ng) + +## 7.0.0-beta.0 (2017-02-15) + +- Reintroduce Variance node (#333) (Daniel Tschinder) +- Rename NumericLiteralTypeAnnotation to NumberLiteralTypeAnnotation (#332) (Charles Pick) +- [7.0] Remove ForAwaitStatement, add await flag to ForOfStatement (#349) (Brandon Dail) +- chore(package): update ava to version 0.18.0 (#345) (greenkeeper[bot]) +- chore(package): update babel-plugin-istanbul to version 4.0.0 (#350) (greenkeeper[bot]) +- Change location of ObjectTypeIndexer to match flow (#228) (Daniel Tschinder) +- Rename flow AST Type ExistentialTypeParam to ExistsTypeAnnotation (#322) (Toru Kobayashi) +- Revert "Temporary rollback for erroring on trailing comma with spread (#154)" (#290) (Daniel Tschinder) +- Remove classConstructorCall plugin (#291) (Brian Ng) +- Update yarn.lock (Daniel Tschinder) +- Update cross-env to 3.x (Daniel Tschinder) +- [7.0] Remove node 0.10, 0.12 and 5 from Travis (#284) (Sergey Rubanov) +- Remove `String.fromCodePoint` shim (#279) (Mathias Bynens) + +## 6.16.1 (2017-02-23) + +### :bug: Regression + +- Revert "Fix export default async function to be FunctionDeclaration" ([#375](https://github.com/babel/babylon/pull/375)) + +Need to modify Babel for this AST node change, so moving to 7.0. + +- Revert "Don't parse class properties without initializers when classProperties plugin is disabled, and Flow is enabled" ([#376](https://github.com/babel/babylon/pull/376)) + +[react-native](https://github.com/facebook/react-native/issues/12542) broke with this so we reverted. + +## 6.16.0 (2017-02-23) + +### :rocket: New Feature + +***ESTree*** compatibility as plugin ([#277](https://github.com/babel/babylon/pull/277)) (Daniel Tschinder) + +We finally introduce a new compatibility layer for ESTree. To put babylon into ESTree-compatible mode the new plugin `estree` can be enabled. In this mode the parser will output an AST that is compliant to the specs of [ESTree](https://github.com/estree/estree/) + +We highly recommend everyone who uses babylon outside of babel to use this plugin. This will make it much easier for users to switch between different ESTree-compatible parsers. We so far tested several projects with different parsers and exchanged their parser to babylon and in nearly all cases it worked out of the box. Some other estree-compatible parsers include `acorn`, `esprima`, `espree`, `flow-parser`, etc. + +To enable `estree` mode simply add the plugin in the config: +```json +{ + "plugins": [ "estree" ] +} +``` + +If you want to migrate your project from non-ESTree mode to ESTree, have a look at our [Readme](https://github.com/babel/babylon/#output), where all deviations are mentioned. + +Add a parseExpression public method ([#213](https://github.com/babel/babylon/pull/213)) (jeromew) + +Babylon exports a new function to parse a single expression + +```js +import { parseExpression } from 'babylon'; + +const ast = parseExpression('x || y && z', options); +``` + +The returned AST will only consist of the expression. The options are the same as for `parse()` + +Add startLine option ([#346](https://github.com/babel/babylon/pull/346)) (Raphael Mu) + +A new option was added to babylon allowing to change the initial linenumber for the first line which is usually `1`. +Changing this for example to `100` will make line `1` of the input source to be marked as line `100`, line `2` as `101`, line `3` as `102`, ... + +Function predicate declaration ([#103](https://github.com/babel/babylon/pull/103)) (Panagiotis Vekris) + +Added support for function predicates which flow introduced in version 0.33.0 + +```js +declare function is_number(x: mixed): boolean %checks(typeof x === "number"); +``` + +Allow imports in declare module ([#315](https://github.com/babel/babylon/pull/315)) (Daniel Tschinder) + +Added support for imports within module declarations which flow introduced in version 0.37.0 + +```js +declare module "C" { + import type { DT } from "D"; + declare export type CT = { D: DT }; +} +``` + +### :eyeglasses: Spec Compliance + +Forbid semicolons after decorators in classes ([#352](https://github.com/babel/babylon/pull/352)) (Kevin Gibbons) + +This example now correctly throws an error when there is a semicolon after the decorator: + +```js +class A { +@a; +foo(){} +} +``` + +Keywords are not allowed as local specifier ([#307](https://github.com/babel/babylon/pull/307)) (Daniel Tschinder) + +Using keywords in imports is not allowed anymore: + +```js +import { default } from "foo"; +import { a as debugger } from "foo"; +``` + +Do not allow overwritting of primitive types ([#314](https://github.com/babel/babylon/pull/314)) (Daniel Tschinder) + +In flow it is now forbidden to overwrite the primitive types `"any"`, `"mixed"`, `"empty"`, `"bool"`, `"boolean"`, `"number"`, `"string"`, `"void"` and `"null"` with your own type declaration. + +Disallow import type { type a } from … ([#305](https://github.com/babel/babylon/pull/305)) (Daniel Tschinder) + +The following code now correctly throws an error + +```js +import type { type a } from "foo"; +``` + +Don't parse class properties without initializers when classProperties is disabled and Flow is enabled ([#300](https://github.com/babel/babylon/pull/300)) (Andrew Levine) + +Ensure that you enable the `classProperties` plugin in order to enable correct parsing of class properties. Prior to this version it was possible to parse them by enabling the `flow` plugin but this was not intended the behaviour. + +If you enable the flow plugin you can only define the type of the class properties, but not initialize them. + +Fix export default async function to be FunctionDeclaration ([#324](https://github.com/babel/babylon/pull/324)) (Daniel Tschinder) + +Parsing the following code now returns a `FunctionDeclaration` AST node instead of `FunctionExpression`. + +```js +export default async function bar() {}; +``` + +### :nail_care: Polish + +Improve error message on attempt to destructure named import ([#288](https://github.com/babel/babylon/pull/288)) (Brian Ng) + +### :bug: Bug Fix + +Fix negative number literal typeannotations ([#366](https://github.com/babel/babylon/pull/366)) (Daniel Tschinder) + +Ensure takeDecorators is called on exported class ([#358](https://github.com/babel/babylon/pull/358)) (Brian Ng) + +ESTree: correctly change literals in all cases ([#368](https://github.com/babel/babylon/pull/368)) (Daniel Tschinder) + +Correctly convert RestProperty to Assignable ([#339](https://github.com/babel/babylon/pull/339)) (Daniel Tschinder) + +Fix #321 by allowing question marks in type params ([#338](https://github.com/babel/babylon/pull/338)) (Daniel Tschinder) + +Fix #336 by correctly setting arrow-param ([#337](https://github.com/babel/babylon/pull/337)) (Daniel Tschinder) + +Fix parse error when destructuring `set` with default value ([#317](https://github.com/babel/babylon/pull/317)) (Brian Ng) + +Fix ObjectTypeCallProperty static ([#298](https://github.com/babel/babylon/pull/298)) (Dan Harper) + + +### :house: Internal + +Fix generator-method-with-computed-name spec ([#360](https://github.com/babel/babylon/pull/360)) (Alex Rattray) + +Fix flow type-parameter-declaration test with unintended semantic ([#361](https://github.com/babel/babylon/pull/361)) (Alex Rattray) + +Cleanup and splitup parser functions ([#295](https://github.com/babel/babylon/pull/295)) (Daniel Tschinder) + +chore(package): update flow-bin to version 0.38.0 ([#313](https://github.com/babel/babylon/pull/313)) (greenkeeper[bot]) + +Call inner function instead of 1:1 copy to plugin ([#294](https://github.com/babel/babylon/pull/294)) (Daniel Tschinder) + +Update eslint-config-babel to the latest version 🚀 ([#299](https://github.com/babel/babylon/pull/299)) (greenkeeper[bot]) + +Update eslint-config-babel to the latest version 🚀 ([#293](https://github.com/babel/babylon/pull/293)) (greenkeeper[bot]) + +devDeps: remove eslint-plugin-babel ([#292](https://github.com/babel/babylon/pull/292)) (Kai Cataldo) + +Correct indent eslint rule config ([#276](https://github.com/babel/babylon/pull/276)) (Daniel Tschinder) + +Fail tests that have expected.json and throws-option ([#285](https://github.com/babel/babylon/pull/285)) (Daniel Tschinder) + +### :memo: Documentation + +Update contributing with more test info [skip ci] ([#355](https://github.com/babel/babylon/pull/355)) (Brian Ng) + +Update API documentation ([#330](https://github.com/babel/babylon/pull/330)) (Timothy Gu) + +Added keywords to package.json ([#323](https://github.com/babel/babylon/pull/323)) (Dmytro) + +AST spec: fix casing of `RegExpLiteral` ([#318](https://github.com/babel/babylon/pull/318)) (Mathias Bynens) + +## 6.15.0 (2017-01-10) + +### :eyeglasses: Spec Compliance + +Add support for Flow shorthand import type ([#267](https://github.com/babel/babylon/pull/267)) (Jeff Morrison) + +This change implements flows new shorthand import syntax +and where previously you had to write this code: + +```js +import {someValue} from "blah"; +import type {someType} from "blah"; +import typeof {someOtherValue} from "blah"; +``` + +you can now write it like this: + +```js +import { + someValue, + type someType, + typeof someOtherValue, +} from "blah"; +``` + +For more information look at [this](https://github.com/facebook/flow/pull/2890) pull request. + +flow: allow leading pipes in all positions ([#256](https://github.com/babel/babylon/pull/256)) (Vladimir Kurchatkin) + +This change now allows a leading pipe everywhere types can be used: +```js +var f = (x): | 1 | 2 => 1; +``` + +Throw error when exporting non-declaration ([#241](https://github.com/babel/babylon/pull/241)) (Kai Cataldo) + +Previously babylon parsed the following exports, although they are not valid: +```js +export typeof foo; +export new Foo(); +export function() {}; +export for (;;); +export while(foo); +``` + +### :bug: Bug Fix + +Don't set inType flag when parsing property names ([#266](https://github.com/babel/babylon/pull/266)) (Vladimir Kurchatkin) + +This fixes parsing of this case: + +```js +const map = { + [age <= 17] : 'Too young' +}; +``` + +Fix source location for JSXEmptyExpression nodes (fixes #248) ([#249](https://github.com/babel/babylon/pull/249)) (James Long) + +The following case produced an invalid AST +```js +
{/* foo */}
+``` + +Use fromCodePoint to convert high value unicode entities ([#243](https://github.com/babel/babylon/pull/243)) (Ryan Duffy) + +When high value unicode entities (e.g. 💩) were used in the input source code they are now correctly encoded in the resulting AST. + +Rename folder to avoid Windows-illegal characters ([#281](https://github.com/babel/babylon/pull/281)) (Ryan Plant) + +Allow this.state.clone() when parsing decorators ([#262](https://github.com/babel/babylon/pull/262)) (Alex Rattray) + +### :house: Internal + +User external-helpers ([#254](https://github.com/babel/babylon/pull/254)) (Daniel Tschinder) + +Add watch script for dev ([#234](https://github.com/babel/babylon/pull/234)) (Kai Cataldo) + +Freeze current plugins list for "*" option, and remove from README.md ([#245](https://github.com/babel/babylon/pull/245)) (Andrew Levine) + +Prepare tests for multiple fixture runners. ([#240](https://github.com/babel/babylon/pull/240)) (Daniel Tschinder) + +Add some test coverage for decorators stage-0 plugin ([#250](https://github.com/babel/babylon/pull/250)) (Andrew Levine) + +Refactor tokenizer types file ([#263](https://github.com/babel/babylon/pull/263)) (Sven SAULEAU) + +Update eslint-config-babel to the latest version 🚀 ([#273](https://github.com/babel/babylon/pull/273)) (greenkeeper[bot]) + +chore(package): update rollup to version 0.41.0 ([#272](https://github.com/babel/babylon/pull/272)) (greenkeeper[bot]) + +chore(package): update flow-bin to version 0.37.0 ([#255](https://github.com/babel/babylon/pull/255)) (greenkeeper[bot]) + +## 6.14.1 (2016-11-17) + +### :bug: Bug Fix + +Allow `"plugins": ["*"]` ([#229](https://github.com/babel/babylon/pull/229)) (Daniel Tschinder) + +```js +{ + "plugins": ["*"] +} +``` + +Will include all parser plugins instead of specifying each one individually. Useful for tools like babel-eslint, jscodeshift, and ast-explorer. + +## 6.14.0 (2016-11-16) + +### :eyeglasses: Spec Compliance + +Throw error for reserved words `enum` and `await` ([#195](https://github.com/babel/babylon/pull/195)) (Kai Cataldo) + +[11.6.2.2 Future Reserved Words](http://www.ecma-international.org/ecma-262/6.0/#sec-future-reserved-words) + +Babylon will throw for more reserved words such as `enum` or `await` (in strict mode). + +``` +class enum {} // throws +class await {} // throws in strict mode (module) +``` + +Optional names for function types and object type indexers ([#197](https://github.com/babel/babylon/pull/197)) (Gabe Levi) + +So where you used to have to write + +```js +type A = (x: string, y: boolean) => number; +type B = (z: string) => number; +type C = { [key: string]: number }; +``` + +you can now write (with flow 0.34.0) + +```js +type A = (string, boolean) => number; +type B = string => number; +type C = { [string]: number }; +``` + +Parse flow nested array type annotations like `number[][]` ([#219](https://github.com/babel/babylon/pull/219)) (Bernhard Häussner) + +Supports these form now of specifying array types: + +```js +var a: number[][][][]; +var b: string[][]; +``` + +### :bug: Bug Fix + +Correctly eat semicolon at the end of `DelcareModuleExports` ([#223](https://github.com/babel/babylon/pull/223)) (Daniel Tschinder) + +``` +declare module "foo" { declare module.exports: number } +declare module "foo" { declare module.exports: number; } // also allowed now +``` + +### :house: Internal + + * Count Babel tests towards Babylon code coverage ([#182](https://github.com/babel/babylon/pull/182)) (Moti Zilberman) + * Fix strange line endings ([#214](https://github.com/babel/babylon/pull/214)) (Thomas Grainger) + * Add node 7 (Daniel Tschinder) + * chore(package): update flow-bin to version 0.34.0 ([#204](https://github.com/babel/babylon/pull/204)) (Greenkeeper) + +## v6.13.1 (2016-10-26) + +### :nail_care: Polish + +- Use rollup for bundling to speed up startup time ([#190](https://github.com/babel/babylon/pull/190)) ([@drewml](https://github.com/DrewML)) + +```js +const babylon = require('babylon'); +const ast = babylon.parse('var foo = "lol";'); +``` + +With that test case, there was a ~95ms savings by removing the need for node to build/traverse the dependency graph. + +**Without bundling** +![image](https://cloud.githubusercontent.com/assets/5233399/19420264/3133497e-93ad-11e6-9a6a-2da59c4f5c13.png) + +**With bundling** +![image](https://cloud.githubusercontent.com/assets/5233399/19420267/388f556e-93ad-11e6-813e-7c5c396be322.png) + +- add clean command [skip ci] ([#201](https://github.com/babel/babylon/pull/201)) (Henry Zhu) +- add ForAwaitStatement (async generator already added) [skip ci] ([#196](https://github.com/babel/babylon/pull/196)) (Henry Zhu) + +## v6.13.0 (2016-10-21) + +### :eyeglasses: Spec Compliance + +Property variance type annotations for Flow plugin ([#161](https://github.com/babel/babylon/pull/161)) (Sam Goldman) + +> See https://flowtype.org/docs/variance.html for more information + +```js +type T = { +p: T }; +interface T { -p: T }; +declare class T { +[k:K]: V }; +class T { -[k:K]: V }; +class C2 { +p: T = e }; +``` + +Raise error on duplicate definition of __proto__ ([#183](https://github.com/babel/babylon/pull/183)) (Moti Zilberman) + +```js +({ __proto__: 1, __proto__: 2 }) // Throws an error now +``` + +### :bug: Bug Fix + +Flow: Allow class properties to be named `static` ([#184](https://github.com/babel/babylon/pull/184)) (Moti Zilberman) + +```js +declare class A { + static: T; +} +``` + +Allow "async" as identifier for object literal property shorthand ([#187](https://github.com/babel/babylon/pull/187)) (Andrew Levine) + +```js +var foo = { async, bar }; +``` + +### :nail_care: Polish + +Fix flowtype and add inType to state ([#189](https://github.com/babel/babylon/pull/189)) (Daniel Tschinder) + +> This improves the performance slightly (because of hidden classes) + +### :house: Internal + +Fix .gitattributes line ending setting ([#191](https://github.com/babel/babylon/pull/191)) (Moti Zilberman) + +Increase test coverage ([#175](https://github.com/babel/babylon/pull/175) (Moti Zilberman) + +Readd missin .eslinignore for IDEs (Daniel Tschinder) + +Error on missing expected.json fixture in CI ([#188](https://github.com/babel/babylon/pull/188)) (Moti Zilberman) + +Add .gitattributes and .editorconfig for LF line endings ([#179](https://github.com/babel/babylon/pull/179)) (Moti Zilberman) + +Fixes two tests that are failing after the merge of #172 ([#177](https://github.com/babel/babylon/pull/177)) (Moti Zilberman) + +## v6.12.0 (2016-10-14) + +### :eyeglasses: Spec Compliance + +Implement import() syntax ([#163](https://github.com/babel/babylon/pull/163)) (Jordan Gensler) + +#### Dynamic Import + +- Proposal Repo: https://github.com/domenic/proposal-dynamic-import +- Championed by [@domenic](https://github.com/domenic) +- stage-2 +- [sept-28 tc39 notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2016-09/sept-28.md#113a-import) + +> This repository contains a proposal for adding a "function-like" import() module loading syntactic form to JavaScript + +```js +import(`./section-modules/${link.dataset.entryModule}.js`) +.then(module => { + module.loadPageInto(main); +}) +``` + +Add EmptyTypeAnnotation ([#171](https://github.com/babel/babylon/pull/171)) (Sam Goldman) + +#### EmptyTypeAnnotation + +Just wasn't covered before. + +```js +type T = empty; +``` + +### :bug: Bug Fix + +Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels) + +```js +// was failing due to sparse array +export const { foo: [ ,, qux7 ] } = bar; +``` + +Allow keyword in Flow object declaration property names with type parameters ([#146](https://github.com/babel/babylon/pull/146)) (Dan Harper) + +```js +declare class X { + foobar(): void; + static foobar(): void; +} +``` + +Allow keyword in object/class property names with Flow type parameters ([#145](https://github.com/babel/babylon/pull/145)) (Dan Harper) + +```js +class Foo { + delete(item: T): T { + return item; + } +} +``` + +Allow typeAnnotations for yield expressions ([#174](https://github.com/babel/babylon/pull/174))) (Daniel Tschinder) + +```js +function *foo() { + const x = (yield 5: any); +} +``` + +### :nail_care: Polish + +Annotate more errors with expected token ([#172](https://github.com/babel/babylon/pull/172))) (Moti Zilberman) + +```js +// Unexpected token, expected ; (1:6) +{ set 1 } +``` + +### :house: Internal + +Remove kcheck ([#173](https://github.com/babel/babylon/pull/173))) (Daniel Tschinder) + +Also run flow, linting, babel tests on separate instances (add back node 0.10) + +## v6.11.6 (2016-10-12) + +### :bug: Bug Fix/Regression + +Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels) + +```js +// was failing with `Cannot read property 'type' of null` because of null identifiers +export const { foo: [ ,, qux7 ] } = bar; +``` + +## v6.11.5 (2016-10-12) + +### :eyeglasses: Spec Compliance + +Fix: Check for duplicate named exports in exported destructuring assignments ([#144](https://github.com/babel/babylon/pull/144)) (Kai Cataldo) + +```js +// `foo` has already been exported. Exported identifiers must be unique. (2:20) +export function foo() {}; +export const { a: [{foo}] } = bar; +``` + +Fix: Check for duplicate named exports in exported rest elements/properties ([#164](https://github.com/babel/babylon/pull/164)) (Kai Cataldo) + +```js +// `foo` has already been exported. Exported identifiers must be unique. (2:22) +export const foo = 1; +export const [bar, ...foo] = baz; +``` + +### :bug: Bug Fix + +Fix: Allow identifier `async` for default param in arrow expression ([#165](https://github.com/babel/babylon/pull/165)) (Kai Cataldo) + +```js +// this is ok now +const test = ({async = true}) => {}; +``` + +### :nail_care: Polish + +Babylon will now print out the token it's expecting if there's a `SyntaxError` ([#150](https://github.com/babel/babylon/pull/150)) (Daniel Tschinder) + +```bash +# So in the case of a missing ending curly (`}`) +Module build failed: SyntaxError: Unexpected token, expected } (30:0) + 28 | } + 29 | +> 30 | + | ^ +``` + +## v6.11.4 (2016-10-03) + +Temporary rollback for erroring on trailing comma with spread (#154) (Henry Zhu) + +## v6.11.3 (2016-10-01) + +### :eyeglasses: Spec Compliance + +Add static errors for object rest (#149) ([@danez](https://github.com/danez)) + +> https://github.com/sebmarkbage/ecmascript-rest-spread + +Object rest copies the *rest* of properties from the right hand side `obj` starting from the left to right. + +```js +let { x, y, ...z } = { x: 1, y: 2, z: 3 }; +// x = 1 +// y = 2 +// z = { z: 3 } +``` + +#### New Syntax Errors: + +**SyntaxError**: The rest element has to be the last element when destructuring (1:10) +```bash +> 1 | let { ...x, y, z } = { x: 1, y: 2, z: 3}; + | ^ +# Previous behavior: +# x = { x: 1, y: 2, z: 3 } +# y = 2 +# z = 3 +``` + +Before, this was just a more verbose way of shallow copying `obj` since it doesn't actually do what you think. + +**SyntaxError**: Cannot have multiple rest elements when destructuring (1:13) + +```bash +> 1 | let { x, ...y, ...z } = { x: 1, y: 2, z: 3}; + | ^ +# Previous behavior: +# x = 1 +# y = { y: 2, z: 3 } +# z = { y: 2, z: 3 } +``` + +Before y and z would just be the same value anyway so there is no reason to need to have both. + +**SyntaxError**: A trailing comma is not permitted after the rest element (1:16) + +```js +let { x, y, ...z, } = obj; +``` + +The rationale for this is that the use case for trailing comma is that you can add something at the end without affecting the line above. Since a RestProperty always has to be the last property it doesn't make sense. + +--- + +get / set are valid property names in default assignment (#142) ([@jezell](https://github.com/jezell)) + +```js +// valid +function something({ set = null, get = null }) {} +``` + +## v6.11.2 (2016-09-23) + +### Bug Fix + +- [#139](https://github.com/babel/babylon/issues/139) Don't do the duplicate check if not an identifier (#140) @hzoo + +```js +// regression with duplicate export check +SyntaxError: ./typography.js: `undefined` has already been exported. Exported identifiers must be unique. (22:13) + 20 | + 21 | export const { rhythm } = typography; +> 22 | export const { TypographyStyle } = typography +``` + +Bail out for now, and make a change to account for destructuring in the next release. + +## 6.11.1 (2016-09-22) + +### Bug Fix +- [#137](https://github.com/babel/babylon/pull/137) - Fix a regression with duplicate exports - it was erroring on all keys in `Object.prototype`. @danez + +```javascript +export toString from './toString'; +``` + +```bash +`toString` has already been exported. Exported identifiers must be unique. (1:7) +> 1 | export toString from './toString'; + | ^ + 2 | +``` + +## 6.11.0 (2016-09-22) + +### Spec Compliance (will break CI) + +- Disallow duplicate named exports ([#107](https://github.com/babel/babylon/pull/107)) @kaicataldo + +```js +// Only one default export allowed per module. (2:9) +export default function() {}; +export { foo as default }; + +// Only one default export allowed per module. (2:0) +export default {}; +export default function() {}; + +// `Foo` has already been exported. Exported identifiers must be unique. (2:0) +export { Foo }; +export class Foo {}; +``` + +### New Feature (Syntax) + +- Add support for computed class property names ([#121](https://github.com/babel/babylon/pull/121)) @motiz88 + +```js +// AST +interface ClassProperty <: Node { + type: "ClassProperty"; + key: Identifier; + value: Expression; + computed: boolean; // added +} +``` + +```js +// with "plugins": ["classProperties"] +class Foo { + [x] + ['y'] +} + +class Bar { + [p] + [m] () {} +} + ``` + +### Bug Fix + +- Fix `static` property falling through in the declare class Flow AST ([#135](https://github.com/babel/babylon/pull/135)) @danharper + +```js +declare class X { + a: number; + static b: number; // static + c: number; // this was being marked as static in the AST as well +} +``` + +### Polish + +- Rephrase "assigning/binding to rvalue" errors to include context ([#119](https://github.com/babel/babylon/pull/119)) @motiz88 + +```js +// Used to error with: +// SyntaxError: Assigning to rvalue (1:0) + +// Now: +// Invalid left-hand side in assignment expression (1:0) +3 = 4 + +// Invalid left-hand side in for-in statement (1:5) +for (+i in {}); +``` + +### Internal + +- Fix call to `this.parseMaybeAssign` with correct arguments ([#133](https://github.com/babel/babylon/pull/133)) @danez +- Add semver note to changelog ([#131](https://github.com/babel/babylon/pull/131)) @hzoo + +## 6.10.0 (2016-09-19) + +> We plan to include some spec compliance bugs in patch versions. An example was the multiple default exports issue. + +### Spec Compliance + +* Implement ES2016 check for simple parameter list in strict mode ([#106](https://github.com/babel/babylon/pull/106)) (Timothy Gu) + +> It is a Syntax Error if ContainsUseStrict of FunctionBody is true and IsSimpleParameterList of FormalParameters is false. https://tc39.github.io/ecma262/2016/#sec-function-definitions-static-semantics-early-errors + +More Context: [tc39-notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2015-07/july-29.md#611-the-scope-of-use-strict-with-respect-to-destructuring-in-parameter-lists) + +For example: + +```js +// this errors because it uses destructuring and default parameters +// in a function with a "use strict" directive +function a([ option1, option2 ] = []) { + "use strict"; +} + ``` + +The solution would be to use a top level "use strict" or to remove the destructuring or default parameters when using a function + "use strict" or to. + +### New Feature + +* Exact object type annotations for Flow plugin ([#104](https://github.com/babel/babylon/pull/104)) (Basil Hosmer) + +Added to flow in https://github.com/facebook/flow/commit/c710c40aa2a115435098d6c0dfeaadb023cd39b8 + +Looks like: + +```js +var a : {| x: number, y: string |} = { x: 0, y: 'foo' }; +``` + +### Bug Fixes + +* Include `typeParameter` location in `ArrowFunctionExpression` ([#126](https://github.com/babel/babylon/pull/126)) (Daniel Tschinder) +* Error on invalid flow type annotation with default assignment ([#122](https://github.com/babel/babylon/pull/122)) (Dan Harper) +* Fix Flow return types on arrow functions ([#124](https://github.com/babel/babylon/pull/124)) (Dan Harper) + +### Misc + +* Add tests for export extensions ([#127](https://github.com/babel/babylon/pull/127)) (Daniel Tschinder) +* Fix Contributing guidelines [skip ci] (Daniel Tschinder) + +## 6.9.2 (2016-09-09) + +The only change is to remove the `babel-runtime` dependency by compiling with Babel's ES2015 loose mode. So using babylon standalone should be smaller. + +## 6.9.1 (2016-08-23) + +This release contains mainly small bugfixes but also updates babylons default mode to es2017. The features for `exponentiationOperator`, `asyncFunctions` and `trailingFunctionCommas` which previously needed to be activated via plugin are now enabled by default and the plugins are now no-ops. + +### Bug Fixes + +- Fix issues with default object params in async functions ([#96](https://github.com/babel/babylon/pull/96)) @danez +- Fix issues with flow-types and async function ([#95](https://github.com/babel/babylon/pull/95)) @danez +- Fix arrow functions with destructuring, types & default value ([#94](https://github.com/babel/babylon/pull/94)) @danharper +- Fix declare class with qualified type identifier ([#97](https://github.com/babel/babylon/pull/97)) @danez +- Remove exponentiationOperator, asyncFunctions, trailingFunctionCommas plugins and enable them by default ([#98](https://github.com/babel/babylon/pull/98)) @danez + +## 6.9.0 (2016-08-16) + +### New syntax support + +- Add JSX spread children ([#42](https://github.com/babel/babylon/pull/42)) @calebmer + +(Be aware that React is not going to support this syntax) + +```js +
+ {...todos.map(todo => )} +
+``` + +- Add support for declare module.exports ([#72](https://github.com/babel/babylon/pull/72)) @danez + +```js +declare module "foo" { + declare module.exports: {} +} +``` + +### New Features + +- If supplied, attach filename property to comment node loc. ([#80](https://github.com/babel/babylon/pull/80)) @divmain +- Add identifier name to node loc field ([#90](https://github.com/babel/babylon/pull/90)) @kittens + +### Bug Fixes + +- Fix exponential operator to behave according to spec ([#75](https://github.com/babel/babylon/pull/75)) @danez +- Fix lookahead to not add comments to arrays which are not cloned ([#76](https://github.com/babel/babylon/pull/76)) @danez +- Fix accidental fall-through in Flow type parsing. ([#82](https://github.com/babel/babylon/pull/82)) @xiemaisi +- Only allow declares inside declare module ([#73](https://github.com/babel/babylon/pull/73)) @danez +- Small fix for parsing type parameter declarations ([#83](https://github.com/babel/babylon/pull/83)) @gabelevi +- Fix arrow param locations with flow types ([#57](https://github.com/babel/babylon/pull/57)) @danez +- Fixes SyntaxError position with flow optional type ([#65](https://github.com/babel/babylon/pull/65)) @danez + +### Internal + +- Add codecoverage to tests @danez +- Fix tests to not save expected output if we expect the test to fail @danez +- Make a shallow clone of babel for testing @danez +- chore(package): update cross-env to version 2.0.0 ([#77](https://github.com/babel/babylon/pull/77)) @greenkeeperio-bot +- chore(package): update ava to version 0.16.0 ([#86](https://github.com/babel/babylon/pull/86)) @greenkeeperio-bot +- chore(package): update babel-plugin-istanbul to version 2.0.0 ([#89](https://github.com/babel/babylon/pull/89)) @greenkeeperio-bot +- chore(package): update nyc to version 8.0.0 ([#88](https://github.com/babel/babylon/pull/88)) @greenkeeperio-bot + +## 6.8.4 (2016-07-06) + +### Bug Fixes + +- Fix the location of params, when flow and default value used ([#68](https://github.com/babel/babylon/pull/68)) @danez + +## 6.8.3 (2016-07-02) + +### Bug Fixes + +- Fix performance regression introduced in 6.8.2 with conditionals ([#63](https://github.com/babel/babylon/pull/63)) @danez + +## 6.8.2 (2016-06-24) + +### Bug Fixes + +- Fix parse error with yielding jsx elements in generators `function* it() { yield
; }` ([#31](https://github.com/babel/babylon/pull/31)) @eldereal +- When cloning nodes do not clone its comments ([#24](https://github.com/babel/babylon/pull/24)) @danez +- Fix parse errors when using arrow functions with an spread element and return type `(...props): void => {}` ([#10](https://github.com/babel/babylon/pull/10)) @danez +- Fix leading comments added from previous node ([#23](https://github.com/babel/babylon/pull/23)) @danez +- Fix parse errors with flow's optional arguments `(arg?) => {}` ([#19](https://github.com/babel/babylon/pull/19)) @danez +- Support negative numeric type literals @kittens +- Remove line terminator restriction after await keyword @kittens +- Remove grouped type arrow restriction as it seems flow no longer has it @kittens +- Fix parse error with generic methods that have the name `get` or `set` `class foo { get() {} }` ([#55](https://github.com/babel/babylon/pull/55)) @vkurchatkin +- Fix parse error with arrow functions that have flow type parameter declarations `(x: T): T => x;` ([#54](https://github.com/babel/babylon/pull/54)) @gabelevi + +### Documentation + +- Document AST differences from ESTree ([#41](https://github.com/babel/babylon/pull/41)) @nene +- Move ast spec from babel/babel ([#46](https://github.com/babel/babylon/pull/46)) @hzoo + +### Internal + +- Enable skipped tests ([#16](https://github.com/babel/babylon/pull/16)) @danez +- Add script to test latest version of babylon with babel ([#21](https://github.com/babel/babylon/pull/21)) @danez +- Upgrade test runner ava @kittens +- Add missing generate-identifier-regex script @kittens +- Rename parser context types @kittens +- Add node v6 to travis testing @hzoo +- Update to Unicode v9 ([#45](https://github.com/babel/babylon/pull/45)) @mathiasbynens + +## 6.8.1 (2016-06-06) + +### New Feature + +- Parse type parameter declarations with defaults like `type Foo = T` + +### Bug Fixes +- Type parameter declarations need 1 or more type parameters. +- The existential type `*` is not a valid type parameter. +- The existential type `*` is a primary type + +### Spec Compliance +- The param list for type parameter declarations now consists of `TypeParameter` nodes +- New `TypeParameter` AST Node (replaces using the `Identifier` node before) + +``` +interface TypeParameter <: Node { + bound: TypeAnnotation; + default: TypeAnnotation; + name: string; + variance: "plus" | "minus"; +} +``` + +## 6.8.0 (2016-05-02) + +#### New Feature + +##### Parse Method Parameter Decorators ([#12](https://github.com/babel/babylon/pull/12)) + +> [Method Parameter Decorators](https://goo.gl/8MmCMG) is now a TC39 [stage 0 proposal](https://github.com/tc39/ecma262/blob/master/stage0.md). + +Examples: + +```js +class Foo { + constructor(@foo() x, @bar({ a: 123 }) @baz() y) {} +} + +export default function func(@foo() x, @bar({ a: 123 }) @baz() y) {} + +var obj = { + method(@foo() x, @bar({ a: 123 }) @baz() y) {} +}; +``` + +##### Parse for-await statements (w/ `asyncGenerators` plugin) ([#17](https://github.com/babel/babylon/pull/17)) + +There is also a new node type, `ForAwaitStatement`. + +> [Async generators and for-await](https://github.com/tc39/proposal-async-iteration) are now a [stage 2 proposal](https://github.com/tc39/ecma262#current-proposals). + +Example: + +```js +async function f() { + for await (let x of y); +} +``` diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/LICENSE" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/LICENSE" new file mode 100644 index 0000000..d4c7fc5 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/LICENSE" @@ -0,0 +1,19 @@ +Copyright (C) 2012-2014 by various contributors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/README.md" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/README.md" new file mode 100644 index 0000000..513748c --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/README.md" @@ -0,0 +1,19 @@ +# @babel/parser + +> A JavaScript parser + +See our website [@babel/parser](https://babeljs.io/docs/en/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%20(babylon)%22+is%3Aopen) associated with this package. + +## Install + +Using npm: + +```sh +npm install --save-dev @babel/parser +``` + +or using yarn: + +```sh +yarn add @babel/parser --dev +``` diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/bin/babel-parser.js" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/bin/babel-parser.js" new file mode 100644 index 0000000..3aca314 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/bin/babel-parser.js" @@ -0,0 +1,15 @@ +#!/usr/bin/env node +/* eslint no-var: 0 */ + +var parser = require(".."); +var fs = require("fs"); + +var filename = process.argv[2]; +if (!filename) { + console.error("no filename specified"); +} else { + var file = fs.readFileSync(filename, "utf8"); + var ast = parser.parse(file); + + console.log(JSON.stringify(ast, null, " ")); +} diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/index.cjs" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/index.cjs" new file mode 100644 index 0000000..89863a9 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/index.cjs" @@ -0,0 +1,5 @@ +try { + module.exports = require("./lib/index.cjs"); +} catch { + module.exports = require("./lib/index.js"); +} diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js" new file mode 100644 index 0000000..9b7bb24 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js" @@ -0,0 +1,14342 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +const defaultOptions = { + sourceType: "script", + sourceFilename: undefined, + startColumn: 0, + startLine: 1, + allowAwaitOutsideFunction: false, + allowReturnOutsideFunction: false, + allowNewTargetOutsideFunction: false, + allowImportExportEverywhere: false, + allowSuperOutsideMethod: false, + allowUndeclaredExports: false, + plugins: [], + strictMode: null, + ranges: false, + tokens: false, + createParenthesizedExpressions: false, + errorRecovery: false, + attachComment: true, + annexB: true +}; +function getOptions(opts) { + if (opts && opts.annexB != null && opts.annexB !== false) { + throw new Error("The `annexB` option can only be set to `false`."); + } + const options = {}; + for (const key of Object.keys(defaultOptions)) { + options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key]; + } + return options; +} +class TokContext { + constructor(token, preserveSpace) { + this.token = void 0; + this.preserveSpace = void 0; + this.token = token; + this.preserveSpace = !!preserveSpace; + } +} +const types = { + brace: new TokContext("{"), + j_oTag: new TokContext("...", true) +}; +{ + types.template = new TokContext("`", true); +} +const beforeExpr = true; +const startsExpr = true; +const isLoop = true; +const isAssign = true; +const prefix = true; +const postfix = true; +class ExportedTokenType { + constructor(label, conf = {}) { + this.label = void 0; + this.keyword = void 0; + this.beforeExpr = void 0; + this.startsExpr = void 0; + this.rightAssociative = void 0; + this.isLoop = void 0; + this.isAssign = void 0; + this.prefix = void 0; + this.postfix = void 0; + this.binop = void 0; + this.label = label; + this.keyword = conf.keyword; + this.beforeExpr = !!conf.beforeExpr; + this.startsExpr = !!conf.startsExpr; + this.rightAssociative = !!conf.rightAssociative; + this.isLoop = !!conf.isLoop; + this.isAssign = !!conf.isAssign; + this.prefix = !!conf.prefix; + this.postfix = !!conf.postfix; + this.binop = conf.binop != null ? conf.binop : null; + { + this.updateContext = null; + } + } +} +const keywords$1 = new Map(); +function createKeyword(name, options = {}) { + options.keyword = name; + const token = createToken(name, options); + keywords$1.set(name, token); + return token; +} +function createBinop(name, binop) { + return createToken(name, { + beforeExpr, + binop + }); +} +let tokenTypeCounter = -1; +const tokenTypes = []; +const tokenLabels = []; +const tokenBinops = []; +const tokenBeforeExprs = []; +const tokenStartsExprs = []; +const tokenPrefixes = []; +function createToken(name, options = {}) { + var _options$binop, _options$beforeExpr, _options$startsExpr, _options$prefix; + ++tokenTypeCounter; + tokenLabels.push(name); + tokenBinops.push((_options$binop = options.binop) != null ? _options$binop : -1); + tokenBeforeExprs.push((_options$beforeExpr = options.beforeExpr) != null ? _options$beforeExpr : false); + tokenStartsExprs.push((_options$startsExpr = options.startsExpr) != null ? _options$startsExpr : false); + tokenPrefixes.push((_options$prefix = options.prefix) != null ? _options$prefix : false); + tokenTypes.push(new ExportedTokenType(name, options)); + return tokenTypeCounter; +} +function createKeywordLike(name, options = {}) { + var _options$binop2, _options$beforeExpr2, _options$startsExpr2, _options$prefix2; + ++tokenTypeCounter; + keywords$1.set(name, tokenTypeCounter); + tokenLabels.push(name); + tokenBinops.push((_options$binop2 = options.binop) != null ? _options$binop2 : -1); + tokenBeforeExprs.push((_options$beforeExpr2 = options.beforeExpr) != null ? _options$beforeExpr2 : false); + tokenStartsExprs.push((_options$startsExpr2 = options.startsExpr) != null ? _options$startsExpr2 : false); + tokenPrefixes.push((_options$prefix2 = options.prefix) != null ? _options$prefix2 : false); + tokenTypes.push(new ExportedTokenType("name", options)); + return tokenTypeCounter; +} +const tt = { + bracketL: createToken("[", { + beforeExpr, + startsExpr + }), + bracketHashL: createToken("#[", { + beforeExpr, + startsExpr + }), + bracketBarL: createToken("[|", { + beforeExpr, + startsExpr + }), + bracketR: createToken("]"), + bracketBarR: createToken("|]"), + braceL: createToken("{", { + beforeExpr, + startsExpr + }), + braceBarL: createToken("{|", { + beforeExpr, + startsExpr + }), + braceHashL: createToken("#{", { + beforeExpr, + startsExpr + }), + braceR: createToken("}"), + braceBarR: createToken("|}"), + parenL: createToken("(", { + beforeExpr, + startsExpr + }), + parenR: createToken(")"), + comma: createToken(",", { + beforeExpr + }), + semi: createToken(";", { + beforeExpr + }), + colon: createToken(":", { + beforeExpr + }), + doubleColon: createToken("::", { + beforeExpr + }), + dot: createToken("."), + question: createToken("?", { + beforeExpr + }), + questionDot: createToken("?."), + arrow: createToken("=>", { + beforeExpr + }), + template: createToken("template"), + ellipsis: createToken("...", { + beforeExpr + }), + backQuote: createToken("`", { + startsExpr + }), + dollarBraceL: createToken("${", { + beforeExpr, + startsExpr + }), + templateTail: createToken("...`", { + startsExpr + }), + templateNonTail: createToken("...${", { + beforeExpr, + startsExpr + }), + at: createToken("@"), + hash: createToken("#", { + startsExpr + }), + interpreterDirective: createToken("#!..."), + eq: createToken("=", { + beforeExpr, + isAssign + }), + assign: createToken("_=", { + beforeExpr, + isAssign + }), + slashAssign: createToken("_=", { + beforeExpr, + isAssign + }), + xorAssign: createToken("_=", { + beforeExpr, + isAssign + }), + moduloAssign: createToken("_=", { + beforeExpr, + isAssign + }), + incDec: createToken("++/--", { + prefix, + postfix, + startsExpr + }), + bang: createToken("!", { + beforeExpr, + prefix, + startsExpr + }), + tilde: createToken("~", { + beforeExpr, + prefix, + startsExpr + }), + doubleCaret: createToken("^^", { + startsExpr + }), + doubleAt: createToken("@@", { + startsExpr + }), + pipeline: createBinop("|>", 0), + nullishCoalescing: createBinop("??", 1), + logicalOR: createBinop("||", 1), + logicalAND: createBinop("&&", 2), + bitwiseOR: createBinop("|", 3), + bitwiseXOR: createBinop("^", 4), + bitwiseAND: createBinop("&", 5), + equality: createBinop("==/!=/===/!==", 6), + lt: createBinop("/<=/>=", 7), + gt: createBinop("/<=/>=", 7), + relational: createBinop("/<=/>=", 7), + bitShift: createBinop("<>/>>>", 8), + bitShiftL: createBinop("<>/>>>", 8), + bitShiftR: createBinop("<>/>>>", 8), + plusMin: createToken("+/-", { + beforeExpr, + binop: 9, + prefix, + startsExpr + }), + modulo: createToken("%", { + binop: 10, + startsExpr + }), + star: createToken("*", { + binop: 10 + }), + slash: createBinop("/", 10), + exponent: createToken("**", { + beforeExpr, + binop: 11, + rightAssociative: true + }), + _in: createKeyword("in", { + beforeExpr, + binop: 7 + }), + _instanceof: createKeyword("instanceof", { + beforeExpr, + binop: 7 + }), + _break: createKeyword("break"), + _case: createKeyword("case", { + beforeExpr + }), + _catch: createKeyword("catch"), + _continue: createKeyword("continue"), + _debugger: createKeyword("debugger"), + _default: createKeyword("default", { + beforeExpr + }), + _else: createKeyword("else", { + beforeExpr + }), + _finally: createKeyword("finally"), + _function: createKeyword("function", { + startsExpr + }), + _if: createKeyword("if"), + _return: createKeyword("return", { + beforeExpr + }), + _switch: createKeyword("switch"), + _throw: createKeyword("throw", { + beforeExpr, + prefix, + startsExpr + }), + _try: createKeyword("try"), + _var: createKeyword("var"), + _const: createKeyword("const"), + _with: createKeyword("with"), + _new: createKeyword("new", { + beforeExpr, + startsExpr + }), + _this: createKeyword("this", { + startsExpr + }), + _super: createKeyword("super", { + startsExpr + }), + _class: createKeyword("class", { + startsExpr + }), + _extends: createKeyword("extends", { + beforeExpr + }), + _export: createKeyword("export"), + _import: createKeyword("import", { + startsExpr + }), + _null: createKeyword("null", { + startsExpr + }), + _true: createKeyword("true", { + startsExpr + }), + _false: createKeyword("false", { + startsExpr + }), + _typeof: createKeyword("typeof", { + beforeExpr, + prefix, + startsExpr + }), + _void: createKeyword("void", { + beforeExpr, + prefix, + startsExpr + }), + _delete: createKeyword("delete", { + beforeExpr, + prefix, + startsExpr + }), + _do: createKeyword("do", { + isLoop, + beforeExpr + }), + _for: createKeyword("for", { + isLoop + }), + _while: createKeyword("while", { + isLoop + }), + _as: createKeywordLike("as", { + startsExpr + }), + _assert: createKeywordLike("assert", { + startsExpr + }), + _async: createKeywordLike("async", { + startsExpr + }), + _await: createKeywordLike("await", { + startsExpr + }), + _from: createKeywordLike("from", { + startsExpr + }), + _get: createKeywordLike("get", { + startsExpr + }), + _let: createKeywordLike("let", { + startsExpr + }), + _meta: createKeywordLike("meta", { + startsExpr + }), + _of: createKeywordLike("of", { + startsExpr + }), + _sent: createKeywordLike("sent", { + startsExpr + }), + _set: createKeywordLike("set", { + startsExpr + }), + _static: createKeywordLike("static", { + startsExpr + }), + _using: createKeywordLike("using", { + startsExpr + }), + _yield: createKeywordLike("yield", { + startsExpr + }), + _asserts: createKeywordLike("asserts", { + startsExpr + }), + _checks: createKeywordLike("checks", { + startsExpr + }), + _exports: createKeywordLike("exports", { + startsExpr + }), + _global: createKeywordLike("global", { + startsExpr + }), + _implements: createKeywordLike("implements", { + startsExpr + }), + _intrinsic: createKeywordLike("intrinsic", { + startsExpr + }), + _infer: createKeywordLike("infer", { + startsExpr + }), + _is: createKeywordLike("is", { + startsExpr + }), + _mixins: createKeywordLike("mixins", { + startsExpr + }), + _proto: createKeywordLike("proto", { + startsExpr + }), + _require: createKeywordLike("require", { + startsExpr + }), + _satisfies: createKeywordLike("satisfies", { + startsExpr + }), + _keyof: createKeywordLike("keyof", { + startsExpr + }), + _readonly: createKeywordLike("readonly", { + startsExpr + }), + _unique: createKeywordLike("unique", { + startsExpr + }), + _abstract: createKeywordLike("abstract", { + startsExpr + }), + _declare: createKeywordLike("declare", { + startsExpr + }), + _enum: createKeywordLike("enum", { + startsExpr + }), + _module: createKeywordLike("module", { + startsExpr + }), + _namespace: createKeywordLike("namespace", { + startsExpr + }), + _interface: createKeywordLike("interface", { + startsExpr + }), + _type: createKeywordLike("type", { + startsExpr + }), + _opaque: createKeywordLike("opaque", { + startsExpr + }), + name: createToken("name", { + startsExpr + }), + string: createToken("string", { + startsExpr + }), + num: createToken("num", { + startsExpr + }), + bigint: createToken("bigint", { + startsExpr + }), + decimal: createToken("decimal", { + startsExpr + }), + regexp: createToken("regexp", { + startsExpr + }), + privateName: createToken("#name", { + startsExpr + }), + eof: createToken("eof"), + jsxName: createToken("jsxName"), + jsxText: createToken("jsxText", { + beforeExpr: true + }), + jsxTagStart: createToken("jsxTagStart", { + startsExpr: true + }), + jsxTagEnd: createToken("jsxTagEnd"), + placeholder: createToken("%%", { + startsExpr: true + }) +}; +function tokenIsIdentifier(token) { + return token >= 93 && token <= 130; +} +function tokenKeywordOrIdentifierIsKeyword(token) { + return token <= 92; +} +function tokenIsKeywordOrIdentifier(token) { + return token >= 58 && token <= 130; +} +function tokenIsLiteralPropertyName(token) { + return token >= 58 && token <= 134; +} +function tokenComesBeforeExpression(token) { + return tokenBeforeExprs[token]; +} +function tokenCanStartExpression(token) { + return tokenStartsExprs[token]; +} +function tokenIsAssignment(token) { + return token >= 29 && token <= 33; +} +function tokenIsFlowInterfaceOrTypeOrOpaque(token) { + return token >= 127 && token <= 129; +} +function tokenIsLoop(token) { + return token >= 90 && token <= 92; +} +function tokenIsKeyword(token) { + return token >= 58 && token <= 92; +} +function tokenIsOperator(token) { + return token >= 39 && token <= 59; +} +function tokenIsPostfix(token) { + return token === 34; +} +function tokenIsPrefix(token) { + return tokenPrefixes[token]; +} +function tokenIsTSTypeOperator(token) { + return token >= 119 && token <= 121; +} +function tokenIsTSDeclarationStart(token) { + return token >= 122 && token <= 128; +} +function tokenLabelName(token) { + return tokenLabels[token]; +} +function tokenOperatorPrecedence(token) { + return tokenBinops[token]; +} +function tokenIsRightAssociative(token) { + return token === 57; +} +function tokenIsTemplate(token) { + return token >= 24 && token <= 25; +} +function getExportedToken(token) { + return tokenTypes[token]; +} +{ + tokenTypes[8].updateContext = context => { + context.pop(); + }; + tokenTypes[5].updateContext = tokenTypes[7].updateContext = tokenTypes[23].updateContext = context => { + context.push(types.brace); + }; + tokenTypes[22].updateContext = context => { + if (context[context.length - 1] === types.template) { + context.pop(); + } else { + context.push(types.template); + } + }; + tokenTypes[140].updateContext = context => { + context.push(types.j_expr, types.j_oTag); + }; +} +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + return target; +} +class Position { + constructor(line, col, index) { + this.line = void 0; + this.column = void 0; + this.index = void 0; + this.line = line; + this.column = col; + this.index = index; + } +} +class SourceLocation { + constructor(start, end) { + this.start = void 0; + this.end = void 0; + this.filename = void 0; + this.identifierName = void 0; + this.start = start; + this.end = end; + } +} +function createPositionWithColumnOffset(position, columnOffset) { + const { + line, + column, + index + } = position; + return new Position(line, column + columnOffset, index + columnOffset); +} +var ParseErrorCode = { + SyntaxError: "BABEL_PARSER_SYNTAX_ERROR", + SourceTypeModuleError: "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED" +}; +const reflect = (keys, last = keys.length - 1) => ({ + get() { + return keys.reduce((object, key) => object[key], this); + }, + set(value) { + keys.reduce((item, key, i) => i === last ? item[key] = value : item[key], this); + } +}); +const instantiate = (constructor, properties, descriptors) => Object.keys(descriptors).map(key => [key, descriptors[key]]).filter(([, descriptor]) => !!descriptor).map(([key, descriptor]) => [key, typeof descriptor === "function" ? { + value: descriptor, + enumerable: false +} : typeof descriptor.reflect === "string" ? Object.assign({}, descriptor, reflect(descriptor.reflect.split("."))) : descriptor]).reduce((instance, [key, descriptor]) => Object.defineProperty(instance, key, Object.assign({ + configurable: true +}, descriptor)), Object.assign(new constructor(), properties)); +var ModuleErrors = { + ImportMetaOutsideModule: { + message: `import.meta may appear only with 'sourceType: "module"'`, + code: ParseErrorCode.SourceTypeModuleError + }, + ImportOutsideModule: { + message: `'import' and 'export' may appear only with 'sourceType: "module"'`, + code: ParseErrorCode.SourceTypeModuleError + } +}; +const NodeDescriptions = { + ArrayPattern: "array destructuring pattern", + AssignmentExpression: "assignment expression", + AssignmentPattern: "assignment expression", + ArrowFunctionExpression: "arrow function expression", + ConditionalExpression: "conditional expression", + CatchClause: "catch clause", + ForOfStatement: "for-of statement", + ForInStatement: "for-in statement", + ForStatement: "for-loop", + FormalParameters: "function parameter list", + Identifier: "identifier", + ImportSpecifier: "import specifier", + ImportDefaultSpecifier: "import default specifier", + ImportNamespaceSpecifier: "import namespace specifier", + ObjectPattern: "object destructuring pattern", + ParenthesizedExpression: "parenthesized expression", + RestElement: "rest element", + UpdateExpression: { + true: "prefix operation", + false: "postfix operation" + }, + VariableDeclarator: "variable declaration", + YieldExpression: "yield expression" +}; +const toNodeDescription = ({ + type, + prefix +}) => type === "UpdateExpression" ? NodeDescriptions.UpdateExpression[String(prefix)] : NodeDescriptions[type]; +var StandardErrors = { + AccessorIsGenerator: ({ + kind + }) => `A ${kind}ter cannot be a generator.`, + ArgumentsInClass: "'arguments' is only allowed in functions and class methods.", + AsyncFunctionInSingleStatementContext: "Async functions can only be declared at the top level or inside a block.", + AwaitBindingIdentifier: "Can not use 'await' as identifier inside an async function.", + AwaitBindingIdentifierInStaticBlock: "Can not use 'await' as identifier inside a static block.", + AwaitExpressionFormalParameter: "'await' is not allowed in async function parameters.", + AwaitInUsingBinding: "'await' is not allowed to be used as a name in 'using' declarations.", + AwaitNotInAsyncContext: "'await' is only allowed within async functions and at the top levels of modules.", + AwaitNotInAsyncFunction: "'await' is only allowed within async functions.", + BadGetterArity: "A 'get' accessor must not have any formal parameters.", + BadSetterArity: "A 'set' accessor must have exactly one formal parameter.", + BadSetterRestParameter: "A 'set' accessor function argument must not be a rest parameter.", + ConstructorClassField: "Classes may not have a field named 'constructor'.", + ConstructorClassPrivateField: "Classes may not have a private field named '#constructor'.", + ConstructorIsAccessor: "Class constructor may not be an accessor.", + ConstructorIsAsync: "Constructor can't be an async function.", + ConstructorIsGenerator: "Constructor can't be a generator.", + DeclarationMissingInitializer: ({ + kind + }) => `Missing initializer in ${kind} declaration.`, + DecoratorArgumentsOutsideParentheses: "Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.", + DecoratorBeforeExport: "Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.", + DecoratorsBeforeAfterExport: "Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.", + DecoratorConstructor: "Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?", + DecoratorExportClass: "Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.", + DecoratorSemicolon: "Decorators must not be followed by a semicolon.", + DecoratorStaticBlock: "Decorators can't be used with a static block.", + DeletePrivateField: "Deleting a private field is not allowed.", + DestructureNamedImport: "ES2015 named imports do not destructure. Use another statement for destructuring after the import.", + DuplicateConstructor: "Duplicate constructor in the same class.", + DuplicateDefaultExport: "Only one default export allowed per module.", + DuplicateExport: ({ + exportName + }) => `\`${exportName}\` has already been exported. Exported identifiers must be unique.`, + DuplicateProto: "Redefinition of __proto__ property.", + DuplicateRegExpFlags: "Duplicate regular expression flag.", + ElementAfterRest: "Rest element must be last element.", + EscapedCharNotAnIdentifier: "Invalid Unicode escape.", + ExportBindingIsString: ({ + localName, + exportName + }) => `A string literal cannot be used as an exported binding without \`from\`.\n- Did you mean \`export { '${localName}' as '${exportName}' } from 'some-module'\`?`, + ExportDefaultFromAsIdentifier: "'from' is not allowed as an identifier after 'export default'.", + ForInOfLoopInitializer: ({ + type + }) => `'${type === "ForInStatement" ? "for-in" : "for-of"}' loop variable declaration may not have an initializer.`, + ForInUsing: "For-in loop may not start with 'using' declaration.", + ForOfAsync: "The left-hand side of a for-of loop may not be 'async'.", + ForOfLet: "The left-hand side of a for-of loop may not start with 'let'.", + GeneratorInSingleStatementContext: "Generators can only be declared at the top level or inside a block.", + IllegalBreakContinue: ({ + type + }) => `Unsyntactic ${type === "BreakStatement" ? "break" : "continue"}.`, + IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list.", + IllegalReturn: "'return' outside of function.", + ImportBindingIsString: ({ + importName + }) => `A string literal cannot be used as an imported binding.\n- Did you mean \`import { "${importName}" as foo }\`?`, + ImportCallArgumentTrailingComma: "Trailing comma is disallowed inside import(...) arguments.", + ImportCallArity: ({ + maxArgumentCount + }) => `\`import()\` requires exactly ${maxArgumentCount === 1 ? "one argument" : "one or two arguments"}.`, + ImportCallNotNewExpression: "Cannot use new with import(...).", + ImportCallSpreadArgument: "`...` is not allowed in `import()`.", + ImportJSONBindingNotDefault: "A JSON module can only be imported with `default`.", + ImportReflectionHasAssertion: "`import module x` cannot have assertions.", + ImportReflectionNotBinding: 'Only `import module x from "./module"` is valid.', + IncompatibleRegExpUVFlags: "The 'u' and 'v' regular expression flags cannot be enabled at the same time.", + InvalidBigIntLiteral: "Invalid BigIntLiteral.", + InvalidCodePoint: "Code point out of bounds.", + InvalidCoverInitializedName: "Invalid shorthand property initializer.", + InvalidDecimal: "Invalid decimal.", + InvalidDigit: ({ + radix + }) => `Expected number in radix ${radix}.`, + InvalidEscapeSequence: "Bad character escape sequence.", + InvalidEscapeSequenceTemplate: "Invalid escape sequence in template.", + InvalidEscapedReservedWord: ({ + reservedWord + }) => `Escape sequence in keyword ${reservedWord}.`, + InvalidIdentifier: ({ + identifierName + }) => `Invalid identifier ${identifierName}.`, + InvalidLhs: ({ + ancestor + }) => `Invalid left-hand side in ${toNodeDescription(ancestor)}.`, + InvalidLhsBinding: ({ + ancestor + }) => `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`, + InvalidNumber: "Invalid number.", + InvalidOrMissingExponent: "Floating-point numbers require a valid exponent after the 'e'.", + InvalidOrUnexpectedToken: ({ + unexpected + }) => `Unexpected character '${unexpected}'.`, + InvalidParenthesizedAssignment: "Invalid parenthesized assignment pattern.", + InvalidPrivateFieldResolution: ({ + identifierName + }) => `Private name #${identifierName} is not defined.`, + InvalidPropertyBindingPattern: "Binding member expression.", + InvalidRecordProperty: "Only properties and spread elements are allowed in record definitions.", + InvalidRestAssignmentPattern: "Invalid rest operator's argument.", + LabelRedeclaration: ({ + labelName + }) => `Label '${labelName}' is already declared.`, + LetInLexicalBinding: "'let' is not allowed to be used as a name in 'let' or 'const' declarations.", + LineTerminatorBeforeArrow: "No line break is allowed before '=>'.", + MalformedRegExpFlags: "Invalid regular expression flag.", + MissingClassName: "A class name is required.", + MissingEqInAssignment: "Only '=' operator can be used for specifying default value.", + MissingSemicolon: "Missing semicolon.", + MissingPlugin: ({ + missingPlugin + }) => `This experimental syntax requires enabling the parser plugin: ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`, + MissingOneOfPlugins: ({ + missingPlugin + }) => `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`, + MissingUnicodeEscape: "Expecting Unicode escape sequence \\uXXXX.", + MixingCoalesceWithLogical: "Nullish coalescing operator(??) requires parens when mixing with logical operators.", + ModuleAttributeDifferentFromType: "The only accepted module attribute is `type`.", + ModuleAttributeInvalidValue: "Only string literals are allowed as module attribute values.", + ModuleAttributesWithDuplicateKeys: ({ + key + }) => `Duplicate key "${key}" is not allowed in module attributes.`, + ModuleExportNameHasLoneSurrogate: ({ + surrogateCharCode + }) => `An export name cannot include a lone surrogate, found '\\u${surrogateCharCode.toString(16)}'.`, + ModuleExportUndefined: ({ + localName + }) => `Export '${localName}' is not defined.`, + MultipleDefaultsInSwitch: "Multiple default clauses.", + NewlineAfterThrow: "Illegal newline after throw.", + NoCatchOrFinally: "Missing catch or finally clause.", + NumberIdentifier: "Identifier directly after number.", + NumericSeparatorInEscapeSequence: "Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.", + ObsoleteAwaitStar: "'await*' has been removed from the async functions proposal. Use Promise.all() instead.", + OptionalChainingNoNew: "Constructors in/after an Optional Chain are not allowed.", + OptionalChainingNoTemplate: "Tagged Template Literals are not allowed in optionalChain.", + OverrideOnConstructor: "'override' modifier cannot appear on a constructor declaration.", + ParamDupe: "Argument name clash.", + PatternHasAccessor: "Object pattern can't contain getter or setter.", + PatternHasMethod: "Object pattern can't contain methods.", + PrivateInExpectedIn: ({ + identifierName + }) => `Private names are only allowed in property accesses (\`obj.#${identifierName}\`) or in \`in\` expressions (\`#${identifierName} in obj\`).`, + PrivateNameRedeclaration: ({ + identifierName + }) => `Duplicate private name #${identifierName}.`, + RecordExpressionBarIncorrectEndSyntaxType: "Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.", + RecordExpressionBarIncorrectStartSyntaxType: "Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.", + RecordExpressionHashIncorrectStartSyntaxType: "Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.", + RecordNoProto: "'__proto__' is not allowed in Record expressions.", + RestTrailingComma: "Unexpected trailing comma after rest element.", + SloppyFunction: "In non-strict mode code, functions can only be declared at top level or inside a block.", + SloppyFunctionAnnexB: "In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.", + StaticPrototype: "Classes may not have static property named prototype.", + SuperNotAllowed: "`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?", + SuperPrivateField: "Private fields can't be accessed on super.", + TrailingDecorator: "Decorators must be attached to a class element.", + TupleExpressionBarIncorrectEndSyntaxType: "Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.", + TupleExpressionBarIncorrectStartSyntaxType: "Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.", + TupleExpressionHashIncorrectStartSyntaxType: "Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.", + UnexpectedArgumentPlaceholder: "Unexpected argument placeholder.", + UnexpectedAwaitAfterPipelineBody: 'Unexpected "await" after pipeline body; await must have parentheses in minimal proposal.', + UnexpectedDigitAfterHash: "Unexpected digit after hash token.", + UnexpectedImportExport: "'import' and 'export' may only appear at the top level.", + UnexpectedKeyword: ({ + keyword + }) => `Unexpected keyword '${keyword}'.`, + UnexpectedLeadingDecorator: "Leading decorators must be attached to a class declaration.", + UnexpectedLexicalDeclaration: "Lexical declaration cannot appear in a single-statement context.", + UnexpectedNewTarget: "`new.target` can only be used in functions or class properties.", + UnexpectedNumericSeparator: "A numeric separator is only allowed between two digits.", + UnexpectedPrivateField: "Unexpected private name.", + UnexpectedReservedWord: ({ + reservedWord + }) => `Unexpected reserved word '${reservedWord}'.`, + UnexpectedSuper: "'super' is only allowed in object methods and classes.", + UnexpectedToken: ({ + expected, + unexpected + }) => `Unexpected token${unexpected ? ` '${unexpected}'.` : ""}${expected ? `, expected "${expected}"` : ""}`, + UnexpectedTokenUnaryExponentiation: "Illegal expression. Wrap left hand side or entire exponentiation in parentheses.", + UnexpectedUsingDeclaration: "Using declaration cannot appear in the top level when source type is `script`.", + UnsupportedBind: "Binding should be performed on object property.", + UnsupportedDecoratorExport: "A decorated export must export a class declaration.", + UnsupportedDefaultExport: "Only expressions, functions or classes are allowed as the `default` export.", + UnsupportedImport: "`import` can only be used in `import()` or `import.meta`.", + UnsupportedMetaProperty: ({ + target, + onlyValidPropertyName + }) => `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`, + UnsupportedParameterDecorator: "Decorators cannot be used to decorate parameters.", + UnsupportedPropertyDecorator: "Decorators cannot be used to decorate object literal properties.", + UnsupportedSuper: "'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).", + UnterminatedComment: "Unterminated comment.", + UnterminatedRegExp: "Unterminated regular expression.", + UnterminatedString: "Unterminated string constant.", + UnterminatedTemplate: "Unterminated template.", + UsingDeclarationHasBindingPattern: "Using declaration cannot have destructuring patterns.", + VarRedeclaration: ({ + identifierName + }) => `Identifier '${identifierName}' has already been declared.`, + YieldBindingIdentifier: "Can not use 'yield' as identifier inside a generator.", + YieldInParameter: "Yield expression is not allowed in formal parameters.", + ZeroDigitNumericSeparator: "Numeric separator can not be used after leading 0." +}; +var StrictModeErrors = { + StrictDelete: "Deleting local variable in strict mode.", + StrictEvalArguments: ({ + referenceName + }) => `Assigning to '${referenceName}' in strict mode.`, + StrictEvalArgumentsBinding: ({ + bindingName + }) => `Binding '${bindingName}' in strict mode.`, + StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block.", + StrictNumericEscape: "The only valid numeric escape in strict mode is '\\0'.", + StrictOctalLiteral: "Legacy octal literals are not allowed in strict mode.", + StrictWith: "'with' in strict mode." +}; +const UnparenthesizedPipeBodyDescriptions = new Set(["ArrowFunctionExpression", "AssignmentExpression", "ConditionalExpression", "YieldExpression"]); +var PipelineOperatorErrors = { + PipeBodyIsTighter: "Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.", + PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.', + PipeTopicUnbound: "Topic reference is unbound; it must be inside a pipe body.", + PipeTopicUnconfiguredToken: ({ + token + }) => `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { "proposal": "hack", "topicToken": "${token}" }.`, + PipeTopicUnused: "Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.", + PipeUnparenthesizedBody: ({ + type + }) => `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({ + type + })}; please wrap it in parentheses.`, + PipelineBodyNoArrow: 'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.', + PipelineBodySequenceExpression: "Pipeline body may not be a comma-separated sequence expression.", + PipelineHeadSequenceExpression: "Pipeline head should not be a comma-separated sequence expression.", + PipelineTopicUnused: "Pipeline is in topic style but does not use topic reference.", + PrimaryTopicNotAllowed: "Topic reference was used in a lexical context without topic binding.", + PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.' +}; +const _excluded$1 = ["toMessage"], + _excluded2$1 = ["message"]; +function toParseErrorConstructor(_ref) { + let { + toMessage + } = _ref, + properties = _objectWithoutPropertiesLoose(_ref, _excluded$1); + return function constructor({ + loc, + details + }) { + return instantiate(SyntaxError, Object.assign({}, properties, { + loc + }), { + clone(overrides = {}) { + const loc = overrides.loc || {}; + return constructor({ + loc: new Position("line" in loc ? loc.line : this.loc.line, "column" in loc ? loc.column : this.loc.column, "index" in loc ? loc.index : this.loc.index), + details: Object.assign({}, this.details, overrides.details) + }); + }, + details: { + value: details, + enumerable: false + }, + message: { + get() { + return `${toMessage(this.details)} (${this.loc.line}:${this.loc.column})`; + }, + set(value) { + Object.defineProperty(this, "message", { + value + }); + } + }, + pos: { + reflect: "loc.index", + enumerable: true + }, + missingPlugin: "missingPlugin" in details && { + reflect: "details.missingPlugin", + enumerable: true + } + }); + }; +} +function ParseErrorEnum(argument, syntaxPlugin) { + if (Array.isArray(argument)) { + return parseErrorTemplates => ParseErrorEnum(parseErrorTemplates, argument[0]); + } + const ParseErrorConstructors = {}; + for (const reasonCode of Object.keys(argument)) { + const template = argument[reasonCode]; + const _ref2 = typeof template === "string" ? { + message: () => template + } : typeof template === "function" ? { + message: template + } : template, + { + message + } = _ref2, + rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1); + const toMessage = typeof message === "string" ? () => message : message; + ParseErrorConstructors[reasonCode] = toParseErrorConstructor(Object.assign({ + code: ParseErrorCode.SyntaxError, + reasonCode, + toMessage + }, syntaxPlugin ? { + syntaxPlugin + } : {}, rest)); + } + return ParseErrorConstructors; +} +const Errors = Object.assign({}, ParseErrorEnum(ModuleErrors), ParseErrorEnum(StandardErrors), ParseErrorEnum(StrictModeErrors), ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors)); +const { + defineProperty +} = Object; +const toUnenumerable = (object, key) => defineProperty(object, key, { + enumerable: false, + value: object[key] +}); +function toESTreeLocation(node) { + node.loc.start && toUnenumerable(node.loc.start, "index"); + node.loc.end && toUnenumerable(node.loc.end, "index"); + return node; +} +var estree = superClass => class ESTreeParserMixin extends superClass { + parse() { + const file = toESTreeLocation(super.parse()); + if (this.options.tokens) { + file.tokens = file.tokens.map(toESTreeLocation); + } + return file; + } + parseRegExpLiteral({ + pattern, + flags + }) { + let regex = null; + try { + regex = new RegExp(pattern, flags); + } catch (e) {} + const node = this.estreeParseLiteral(regex); + node.regex = { + pattern, + flags + }; + return node; + } + parseBigIntLiteral(value) { + let bigInt; + try { + bigInt = BigInt(value); + } catch (_unused) { + bigInt = null; + } + const node = this.estreeParseLiteral(bigInt); + node.bigint = String(node.value || value); + return node; + } + parseDecimalLiteral(value) { + const decimal = null; + const node = this.estreeParseLiteral(decimal); + node.decimal = String(node.value || value); + return node; + } + estreeParseLiteral(value) { + return this.parseLiteral(value, "Literal"); + } + parseStringLiteral(value) { + return this.estreeParseLiteral(value); + } + parseNumericLiteral(value) { + return this.estreeParseLiteral(value); + } + parseNullLiteral() { + return this.estreeParseLiteral(null); + } + parseBooleanLiteral(value) { + return this.estreeParseLiteral(value); + } + directiveToStmt(directive) { + const expression = directive.value; + delete directive.value; + expression.type = "Literal"; + expression.raw = expression.extra.raw; + expression.value = expression.extra.expressionValue; + const stmt = directive; + stmt.type = "ExpressionStatement"; + stmt.expression = expression; + stmt.directive = expression.extra.rawValue; + delete expression.extra; + return stmt; + } + initFunction(node, isAsync) { + super.initFunction(node, isAsync); + node.expression = false; + } + checkDeclaration(node) { + if (node != null && this.isObjectProperty(node)) { + this.checkDeclaration(node.value); + } else { + super.checkDeclaration(node); + } + } + getObjectOrClassMethodParams(method) { + return method.value.params; + } + isValidDirective(stmt) { + var _stmt$expression$extr; + return stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && typeof stmt.expression.value === "string" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized); + } + parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) { + super.parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse); + const directiveStatements = node.directives.map(d => this.directiveToStmt(d)); + node.body = directiveStatements.concat(node.body); + delete node.directives; + } + pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) { + this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true); + if (method.typeParameters) { + method.value.typeParameters = method.typeParameters; + delete method.typeParameters; + } + classBody.body.push(method); + } + parsePrivateName() { + const node = super.parsePrivateName(); + { + if (!this.getPluginOption("estree", "classFeatures")) { + return node; + } + } + return this.convertPrivateNameToPrivateIdentifier(node); + } + convertPrivateNameToPrivateIdentifier(node) { + const name = super.getPrivateNameSV(node); + node = node; + delete node.id; + node.name = name; + node.type = "PrivateIdentifier"; + return node; + } + isPrivateName(node) { + { + if (!this.getPluginOption("estree", "classFeatures")) { + return super.isPrivateName(node); + } + } + return node.type === "PrivateIdentifier"; + } + getPrivateNameSV(node) { + { + if (!this.getPluginOption("estree", "classFeatures")) { + return super.getPrivateNameSV(node); + } + } + return node.name; + } + parseLiteral(value, type) { + const node = super.parseLiteral(value, type); + node.raw = node.extra.raw; + delete node.extra; + return node; + } + parseFunctionBody(node, allowExpression, isMethod = false) { + super.parseFunctionBody(node, allowExpression, isMethod); + node.expression = node.body.type !== "BlockStatement"; + } + parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) { + let funcNode = this.startNode(); + funcNode.kind = node.kind; + funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope); + funcNode.type = "FunctionExpression"; + delete funcNode.kind; + node.value = funcNode; + if (type === "ClassPrivateMethod") { + node.computed = false; + } + return this.finishNode(node, "MethodDefinition"); + } + parseClassProperty(...args) { + const propertyNode = super.parseClassProperty(...args); + { + if (!this.getPluginOption("estree", "classFeatures")) { + return propertyNode; + } + } + propertyNode.type = "PropertyDefinition"; + return propertyNode; + } + parseClassPrivateProperty(...args) { + const propertyNode = super.parseClassPrivateProperty(...args); + { + if (!this.getPluginOption("estree", "classFeatures")) { + return propertyNode; + } + } + propertyNode.type = "PropertyDefinition"; + propertyNode.computed = false; + return propertyNode; + } + parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) { + const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor); + if (node) { + node.type = "Property"; + if (node.kind === "method") { + node.kind = "init"; + } + node.shorthand = false; + } + return node; + } + parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) { + const node = super.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors); + if (node) { + node.kind = "init"; + node.type = "Property"; + } + return node; + } + isValidLVal(type, isUnparenthesizedInAssign, binding) { + return type === "Property" ? "value" : super.isValidLVal(type, isUnparenthesizedInAssign, binding); + } + isAssignable(node, isBinding) { + if (node != null && this.isObjectProperty(node)) { + return this.isAssignable(node.value, isBinding); + } + return super.isAssignable(node, isBinding); + } + toAssignable(node, isLHS = false) { + if (node != null && this.isObjectProperty(node)) { + const { + key, + value + } = node; + if (this.isPrivateName(key)) { + this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start); + } + this.toAssignable(value, isLHS); + } else { + super.toAssignable(node, isLHS); + } + } + toAssignableObjectExpressionProp(prop, isLast, isLHS) { + if (prop.kind === "get" || prop.kind === "set") { + this.raise(Errors.PatternHasAccessor, { + at: prop.key + }); + } else if (prop.method) { + this.raise(Errors.PatternHasMethod, { + at: prop.key + }); + } else { + super.toAssignableObjectExpressionProp(prop, isLast, isLHS); + } + } + finishCallExpression(unfinished, optional) { + const node = super.finishCallExpression(unfinished, optional); + if (node.callee.type === "Import") { + node.type = "ImportExpression"; + node.source = node.arguments[0]; + if (this.hasPlugin("importAssertions")) { + var _node$arguments$; + node.attributes = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null; + } + delete node.arguments; + delete node.callee; + } + return node; + } + toReferencedArguments(node) { + if (node.type === "ImportExpression") { + return; + } + super.toReferencedArguments(node); + } + parseExport(unfinished, decorators) { + const exportStartLoc = this.state.lastTokStartLoc; + const node = super.parseExport(unfinished, decorators); + switch (node.type) { + case "ExportAllDeclaration": + node.exported = null; + break; + case "ExportNamedDeclaration": + if (node.specifiers.length === 1 && node.specifiers[0].type === "ExportNamespaceSpecifier") { + node.type = "ExportAllDeclaration"; + node.exported = node.specifiers[0].exported; + delete node.specifiers; + } + case "ExportDefaultDeclaration": + { + var _declaration$decorato; + const { + declaration + } = node; + if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" && ((_declaration$decorato = declaration.decorators) == null ? void 0 : _declaration$decorato.length) > 0 && declaration.start === node.start) { + this.resetStartLocation(node, exportStartLoc); + } + } + break; + } + return node; + } + parseSubscript(base, startLoc, noCalls, state) { + const node = super.parseSubscript(base, startLoc, noCalls, state); + if (state.optionalChainMember) { + if (node.type === "OptionalMemberExpression" || node.type === "OptionalCallExpression") { + node.type = node.type.substring(8); + } + if (state.stop) { + const chain = this.startNodeAtNode(node); + chain.expression = node; + return this.finishNode(chain, "ChainExpression"); + } + } else if (node.type === "MemberExpression" || node.type === "CallExpression") { + node.optional = false; + } + return node; + } + hasPropertyAsPrivateName(node) { + if (node.type === "ChainExpression") { + node = node.expression; + } + return super.hasPropertyAsPrivateName(node); + } + isObjectProperty(node) { + return node.type === "Property" && node.kind === "init" && !node.method; + } + isObjectMethod(node) { + return node.method || node.kind === "get" || node.kind === "set"; + } + finishNodeAt(node, type, endLoc) { + return toESTreeLocation(super.finishNodeAt(node, type, endLoc)); + } + resetStartLocation(node, startLoc) { + super.resetStartLocation(node, startLoc); + toESTreeLocation(node); + } + resetEndLocation(node, endLoc = this.state.lastTokEndLoc) { + super.resetEndLocation(node, endLoc); + toESTreeLocation(node); + } +}; +let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; +let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; +const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); +const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); +nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; +const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191]; +const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; +function isInAstralSet(code, set) { + let pos = 0x10000; + for (let i = 0, length = set.length; i < length; i += 2) { + pos += set[i]; + if (pos > code) return false; + pos += set[i + 1]; + if (pos >= code) return true; + } + return false; +} +function isIdentifierStart(code) { + if (code < 65) return code === 36; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); + } + return isInAstralSet(code, astralIdentifierStartCodes); +} +function isIdentifierChar(code) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); + } + return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); +} +const reservedWords = { + keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"], + strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"], + strictBind: ["eval", "arguments"] +}; +const keywords = new Set(reservedWords.keyword); +const reservedWordsStrictSet = new Set(reservedWords.strict); +const reservedWordsStrictBindSet = new Set(reservedWords.strictBind); +function isReservedWord(word, inModule) { + return inModule && word === "await" || word === "enum"; +} +function isStrictReservedWord(word, inModule) { + return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word); +} +function isStrictBindOnlyReservedWord(word) { + return reservedWordsStrictBindSet.has(word); +} +function isStrictBindReservedWord(word, inModule) { + return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word); +} +function isKeyword(word) { + return keywords.has(word); +} +function isIteratorStart(current, next, next2) { + return current === 64 && next === 64 && isIdentifierStart(next2); +} +const reservedWordLikeSet = new Set(["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete", "implements", "interface", "let", "package", "private", "protected", "public", "static", "yield", "eval", "arguments", "enum", "await"]); +function canBeReservedWord(word) { + return reservedWordLikeSet.has(word); +} +const SCOPE_OTHER = 0b000000000, + SCOPE_PROGRAM = 0b000000001, + SCOPE_FUNCTION = 0b000000010, + SCOPE_ARROW = 0b000000100, + SCOPE_SIMPLE_CATCH = 0b000001000, + SCOPE_SUPER = 0b000010000, + SCOPE_DIRECT_SUPER = 0b000100000, + SCOPE_CLASS = 0b001000000, + SCOPE_STATIC_BLOCK = 0b010000000, + SCOPE_TS_MODULE = 0b100000000, + SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_STATIC_BLOCK | SCOPE_TS_MODULE; +const BIND_KIND_VALUE = 0b0000000000001, + BIND_KIND_TYPE = 0b0000000000010, + BIND_SCOPE_VAR = 0b0000000000100, + BIND_SCOPE_LEXICAL = 0b0000000001000, + BIND_SCOPE_FUNCTION = 0b0000000010000, + BIND_FLAGS_NONE = 0b00000001000000, + BIND_FLAGS_CLASS = 0b00000010000000, + BIND_FLAGS_TS_ENUM = 0b00000100000000, + BIND_FLAGS_TS_CONST_ENUM = 0b00001000000000, + BIND_FLAGS_TS_EXPORT_ONLY = 0b00010000000000, + BIND_FLAGS_FLOW_DECLARE_FN = 0b00100000000000, + BIND_FLAGS_TS_IMPORT = 0b01000000000000, + BIND_FLAGS_NO_LET_IN_LEXICAL = 0b10000000000000; +const BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS | BIND_FLAGS_NO_LET_IN_LEXICAL, + BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | BIND_FLAGS_NO_LET_IN_LEXICAL, + BIND_CATCH_PARAM = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0, + BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0, + BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0, + BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS, + BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0, + BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM | BIND_FLAGS_NO_LET_IN_LEXICAL, + BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY, + BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE, + BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE, + BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM, + BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY, + BIND_TS_TYPE_IMPORT = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_TS_IMPORT, + BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN; +const CLASS_ELEMENT_FLAG_STATIC = 0b100, + CLASS_ELEMENT_KIND_GETTER = 0b010, + CLASS_ELEMENT_KIND_SETTER = 0b001, + CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER; +const CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC, + CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC, + CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER, + CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER, + CLASS_ELEMENT_OTHER = 0; +class Scope { + constructor(flags) { + this.var = new Set(); + this.lexical = new Set(); + this.functions = new Set(); + this.flags = flags; + } +} +class ScopeHandler { + constructor(parser, inModule) { + this.parser = void 0; + this.scopeStack = []; + this.inModule = void 0; + this.undefinedExports = new Map(); + this.parser = parser; + this.inModule = inModule; + } + get inTopLevel() { + return (this.currentScope().flags & SCOPE_PROGRAM) > 0; + } + get inFunction() { + return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0; + } + get allowSuper() { + return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0; + } + get allowDirectSuper() { + return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0; + } + get inClass() { + return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0; + } + get inClassAndNotInNonArrowFunction() { + const flags = this.currentThisScopeFlags(); + return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0; + } + get inStaticBlock() { + for (let i = this.scopeStack.length - 1;; i--) { + const { + flags + } = this.scopeStack[i]; + if (flags & SCOPE_STATIC_BLOCK) { + return true; + } + if (flags & (SCOPE_VAR | SCOPE_CLASS)) { + return false; + } + } + } + get inNonArrowFunction() { + return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0; + } + get treatFunctionsAsVar() { + return this.treatFunctionsAsVarInScope(this.currentScope()); + } + createScope(flags) { + return new Scope(flags); + } + enter(flags) { + this.scopeStack.push(this.createScope(flags)); + } + exit() { + const scope = this.scopeStack.pop(); + return scope.flags; + } + treatFunctionsAsVarInScope(scope) { + return !!(scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) || !this.parser.inModule && scope.flags & SCOPE_PROGRAM); + } + declareName(name, bindingType, loc) { + let scope = this.currentScope(); + if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) { + this.checkRedeclarationInScope(scope, name, bindingType, loc); + if (bindingType & BIND_SCOPE_FUNCTION) { + scope.functions.add(name); + } else { + scope.lexical.add(name); + } + if (bindingType & BIND_SCOPE_LEXICAL) { + this.maybeExportDefined(scope, name); + } + } else if (bindingType & BIND_SCOPE_VAR) { + for (let i = this.scopeStack.length - 1; i >= 0; --i) { + scope = this.scopeStack[i]; + this.checkRedeclarationInScope(scope, name, bindingType, loc); + scope.var.add(name); + this.maybeExportDefined(scope, name); + if (scope.flags & SCOPE_VAR) break; + } + } + if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) { + this.undefinedExports.delete(name); + } + } + maybeExportDefined(scope, name) { + if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) { + this.undefinedExports.delete(name); + } + } + checkRedeclarationInScope(scope, name, bindingType, loc) { + if (this.isRedeclaredInScope(scope, name, bindingType)) { + this.parser.raise(Errors.VarRedeclaration, { + at: loc, + identifierName: name + }); + } + } + isRedeclaredInScope(scope, name, bindingType) { + if (!(bindingType & BIND_KIND_VALUE)) return false; + if (bindingType & BIND_SCOPE_LEXICAL) { + return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name); + } + if (bindingType & BIND_SCOPE_FUNCTION) { + return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name); + } + return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name); + } + checkLocalExport(id) { + const { + name + } = id; + const topLevelScope = this.scopeStack[0]; + if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) { + this.undefinedExports.set(name, id.loc.start); + } + } + currentScope() { + return this.scopeStack[this.scopeStack.length - 1]; + } + currentVarScopeFlags() { + for (let i = this.scopeStack.length - 1;; i--) { + const { + flags + } = this.scopeStack[i]; + if (flags & SCOPE_VAR) { + return flags; + } + } + } + currentThisScopeFlags() { + for (let i = this.scopeStack.length - 1;; i--) { + const { + flags + } = this.scopeStack[i]; + if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) { + return flags; + } + } + } +} +class FlowScope extends Scope { + constructor(...args) { + super(...args); + this.declareFunctions = new Set(); + } +} +class FlowScopeHandler extends ScopeHandler { + createScope(flags) { + return new FlowScope(flags); + } + declareName(name, bindingType, loc) { + const scope = this.currentScope(); + if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) { + this.checkRedeclarationInScope(scope, name, bindingType, loc); + this.maybeExportDefined(scope, name); + scope.declareFunctions.add(name); + return; + } + super.declareName(name, bindingType, loc); + } + isRedeclaredInScope(scope, name, bindingType) { + if (super.isRedeclaredInScope(scope, name, bindingType)) return true; + if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) { + return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name)); + } + return false; + } + checkLocalExport(id) { + if (!this.scopeStack[0].declareFunctions.has(id.name)) { + super.checkLocalExport(id); + } + } +} +class BaseParser { + constructor() { + this.sawUnambiguousESM = false; + this.ambiguousScriptDifferentAst = false; + } + hasPlugin(pluginConfig) { + if (typeof pluginConfig === "string") { + return this.plugins.has(pluginConfig); + } else { + const [pluginName, pluginOptions] = pluginConfig; + if (!this.hasPlugin(pluginName)) { + return false; + } + const actualOptions = this.plugins.get(pluginName); + for (const key of Object.keys(pluginOptions)) { + if ((actualOptions == null ? void 0 : actualOptions[key]) !== pluginOptions[key]) { + return false; + } + } + return true; + } + } + getPluginOption(plugin, name) { + var _this$plugins$get; + return (_this$plugins$get = this.plugins.get(plugin)) == null ? void 0 : _this$plugins$get[name]; + } +} +function setTrailingComments(node, comments) { + if (node.trailingComments === undefined) { + node.trailingComments = comments; + } else { + node.trailingComments.unshift(...comments); + } +} +function setLeadingComments(node, comments) { + if (node.leadingComments === undefined) { + node.leadingComments = comments; + } else { + node.leadingComments.unshift(...comments); + } +} +function setInnerComments(node, comments) { + if (node.innerComments === undefined) { + node.innerComments = comments; + } else { + node.innerComments.unshift(...comments); + } +} +function adjustInnerComments(node, elements, commentWS) { + let lastElement = null; + let i = elements.length; + while (lastElement === null && i > 0) { + lastElement = elements[--i]; + } + if (lastElement === null || lastElement.start > commentWS.start) { + setInnerComments(node, commentWS.comments); + } else { + setTrailingComments(lastElement, commentWS.comments); + } +} +class CommentsParser extends BaseParser { + addComment(comment) { + if (this.filename) comment.loc.filename = this.filename; + this.state.comments.push(comment); + } + processComment(node) { + const { + commentStack + } = this.state; + const commentStackLength = commentStack.length; + if (commentStackLength === 0) return; + let i = commentStackLength - 1; + const lastCommentWS = commentStack[i]; + if (lastCommentWS.start === node.end) { + lastCommentWS.leadingNode = node; + i--; + } + const { + start: nodeStart + } = node; + for (; i >= 0; i--) { + const commentWS = commentStack[i]; + const commentEnd = commentWS.end; + if (commentEnd > nodeStart) { + commentWS.containingNode = node; + this.finalizeComment(commentWS); + commentStack.splice(i, 1); + } else { + if (commentEnd === nodeStart) { + commentWS.trailingNode = node; + } + break; + } + } + } + finalizeComment(commentWS) { + const { + comments + } = commentWS; + if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) { + if (commentWS.leadingNode !== null) { + setTrailingComments(commentWS.leadingNode, comments); + } + if (commentWS.trailingNode !== null) { + setLeadingComments(commentWS.trailingNode, comments); + } + } else { + const { + containingNode: node, + start: commentStart + } = commentWS; + if (this.input.charCodeAt(commentStart - 1) === 44) { + switch (node.type) { + case "ObjectExpression": + case "ObjectPattern": + case "RecordExpression": + adjustInnerComments(node, node.properties, commentWS); + break; + case "CallExpression": + case "OptionalCallExpression": + adjustInnerComments(node, node.arguments, commentWS); + break; + case "FunctionDeclaration": + case "FunctionExpression": + case "ArrowFunctionExpression": + case "ObjectMethod": + case "ClassMethod": + case "ClassPrivateMethod": + adjustInnerComments(node, node.params, commentWS); + break; + case "ArrayExpression": + case "ArrayPattern": + case "TupleExpression": + adjustInnerComments(node, node.elements, commentWS); + break; + case "ExportNamedDeclaration": + case "ImportDeclaration": + adjustInnerComments(node, node.specifiers, commentWS); + break; + default: + { + setInnerComments(node, comments); + } + } + } else { + setInnerComments(node, comments); + } + } + } + finalizeRemainingComments() { + const { + commentStack + } = this.state; + for (let i = commentStack.length - 1; i >= 0; i--) { + this.finalizeComment(commentStack[i]); + } + this.state.commentStack = []; + } + resetPreviousNodeTrailingComments(node) { + const { + commentStack + } = this.state; + const { + length + } = commentStack; + if (length === 0) return; + const commentWS = commentStack[length - 1]; + if (commentWS.leadingNode === node) { + commentWS.leadingNode = null; + } + } + takeSurroundingComments(node, start, end) { + const { + commentStack + } = this.state; + const commentStackLength = commentStack.length; + if (commentStackLength === 0) return; + let i = commentStackLength - 1; + for (; i >= 0; i--) { + const commentWS = commentStack[i]; + const commentEnd = commentWS.end; + const commentStart = commentWS.start; + if (commentStart === end) { + commentWS.leadingNode = node; + } else if (commentEnd === start) { + commentWS.trailingNode = node; + } else if (commentEnd < start) { + break; + } + } + } +} +const lineBreak = /\r\n?|[\n\u2028\u2029]/; +const lineBreakG = new RegExp(lineBreak.source, "g"); +function isNewLine(code) { + switch (code) { + case 10: + case 13: + case 8232: + case 8233: + return true; + default: + return false; + } +} +const skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; +const skipWhiteSpaceInLine = /(?:[^\S\n\r\u2028\u2029]|\/\/.*|\/\*.*?\*\/)*/g; +const skipWhiteSpaceToLineBreak = new RegExp("(?=(" + skipWhiteSpaceInLine.source + "))\\1" + /(?=[\n\r\u2028\u2029]|\/\*(?!.*?\*\/)|$)/.source, "y"); +function isWhitespace(code) { + switch (code) { + case 0x0009: + case 0x000b: + case 0x000c: + case 32: + case 160: + case 5760: + case 0x2000: + case 0x2001: + case 0x2002: + case 0x2003: + case 0x2004: + case 0x2005: + case 0x2006: + case 0x2007: + case 0x2008: + case 0x2009: + case 0x200a: + case 0x202f: + case 0x205f: + case 0x3000: + case 0xfeff: + return true; + default: + return false; + } +} +class State { + constructor() { + this.strict = void 0; + this.curLine = void 0; + this.lineStart = void 0; + this.startLoc = void 0; + this.endLoc = void 0; + this.errors = []; + this.potentialArrowAt = -1; + this.noArrowAt = []; + this.noArrowParamsConversionAt = []; + this.maybeInArrowParameters = false; + this.inType = false; + this.noAnonFunctionType = false; + this.hasFlowComment = false; + this.isAmbientContext = false; + this.inAbstractClass = false; + this.inDisallowConditionalTypesContext = false; + this.topicContext = { + maxNumOfResolvableTopics: 0, + maxTopicIndex: null + }; + this.soloAwait = false; + this.inFSharpPipelineDirectBody = false; + this.labels = []; + this.comments = []; + this.commentStack = []; + this.pos = 0; + this.type = 137; + this.value = null; + this.start = 0; + this.end = 0; + this.lastTokEndLoc = null; + this.lastTokStartLoc = null; + this.lastTokStart = 0; + this.context = [types.brace]; + this.canStartJSXElement = true; + this.containsEsc = false; + this.firstInvalidTemplateEscapePos = null; + this.strictErrors = new Map(); + this.tokensLength = 0; + } + init({ + strictMode, + sourceType, + startLine, + startColumn + }) { + this.strict = strictMode === false ? false : strictMode === true ? true : sourceType === "module"; + this.curLine = startLine; + this.lineStart = -startColumn; + this.startLoc = this.endLoc = new Position(startLine, startColumn, 0); + } + curPosition() { + return new Position(this.curLine, this.pos - this.lineStart, this.pos); + } + clone(skipArrays) { + const state = new State(); + const keys = Object.keys(this); + for (let i = 0, length = keys.length; i < length; i++) { + const key = keys[i]; + let val = this[key]; + if (!skipArrays && Array.isArray(val)) { + val = val.slice(); + } + state[key] = val; + } + return state; + } +} +var _isDigit = function isDigit(code) { + return code >= 48 && code <= 57; +}; +const forbiddenNumericSeparatorSiblings = { + decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]), + hex: new Set([46, 88, 95, 120]) +}; +const isAllowedNumericSeparatorSibling = { + bin: ch => ch === 48 || ch === 49, + oct: ch => ch >= 48 && ch <= 55, + dec: ch => ch >= 48 && ch <= 57, + hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102 +}; +function readStringContents(type, input, pos, lineStart, curLine, errors) { + const initialPos = pos; + const initialLineStart = lineStart; + const initialCurLine = curLine; + let out = ""; + let firstInvalidLoc = null; + let chunkStart = pos; + const { + length + } = input; + for (;;) { + if (pos >= length) { + errors.unterminated(initialPos, initialLineStart, initialCurLine); + out += input.slice(chunkStart, pos); + break; + } + const ch = input.charCodeAt(pos); + if (isStringEnd(type, ch, input, pos)) { + out += input.slice(chunkStart, pos); + break; + } + if (ch === 92) { + out += input.slice(chunkStart, pos); + const res = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors); + if (res.ch === null && !firstInvalidLoc) { + firstInvalidLoc = { + pos, + lineStart, + curLine + }; + } else { + out += res.ch; + } + ({ + pos, + lineStart, + curLine + } = res); + chunkStart = pos; + } else if (ch === 8232 || ch === 8233) { + ++pos; + ++curLine; + lineStart = pos; + } else if (ch === 10 || ch === 13) { + if (type === "template") { + out += input.slice(chunkStart, pos) + "\n"; + ++pos; + if (ch === 13 && input.charCodeAt(pos) === 10) { + ++pos; + } + ++curLine; + chunkStart = lineStart = pos; + } else { + errors.unterminated(initialPos, initialLineStart, initialCurLine); + } + } else { + ++pos; + } + } + return { + pos, + str: out, + firstInvalidLoc, + lineStart, + curLine, + containsInvalid: !!firstInvalidLoc + }; +} +function isStringEnd(type, ch, input, pos) { + if (type === "template") { + return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123; + } + return ch === (type === "double" ? 34 : 39); +} +function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) { + const throwOnInvalid = !inTemplate; + pos++; + const res = ch => ({ + pos, + ch, + lineStart, + curLine + }); + const ch = input.charCodeAt(pos++); + switch (ch) { + case 110: + return res("\n"); + case 114: + return res("\r"); + case 120: + { + let code; + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors)); + return res(code === null ? null : String.fromCharCode(code)); + } + case 117: + { + let code; + ({ + code, + pos + } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors)); + return res(code === null ? null : String.fromCodePoint(code)); + } + case 116: + return res("\t"); + case 98: + return res("\b"); + case 118: + return res("\u000b"); + case 102: + return res("\f"); + case 13: + if (input.charCodeAt(pos) === 10) { + ++pos; + } + case 10: + lineStart = pos; + ++curLine; + case 8232: + case 8233: + return res(""); + case 56: + case 57: + if (inTemplate) { + return res(null); + } else { + errors.strictNumericEscape(pos - 1, lineStart, curLine); + } + default: + if (ch >= 48 && ch <= 55) { + const startPos = pos - 1; + const match = input.slice(startPos, pos + 2).match(/^[0-7]+/); + let octalStr = match[0]; + let octal = parseInt(octalStr, 8); + if (octal > 255) { + octalStr = octalStr.slice(0, -1); + octal = parseInt(octalStr, 8); + } + pos += octalStr.length - 1; + const next = input.charCodeAt(pos); + if (octalStr !== "0" || next === 56 || next === 57) { + if (inTemplate) { + return res(null); + } else { + errors.strictNumericEscape(startPos, lineStart, curLine); + } + } + return res(String.fromCharCode(octal)); + } + return res(String.fromCharCode(ch)); + } +} +function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) { + const initialPos = pos; + let n; + ({ + n, + pos + } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid)); + if (n === null) { + if (throwOnInvalid) { + errors.invalidEscapeSequence(initialPos, lineStart, curLine); + } else { + pos = initialPos - 1; + } + } + return { + code: n, + pos + }; +} +function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) { + const start = pos; + const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct; + const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin; + let invalid = false; + let total = 0; + for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) { + const code = input.charCodeAt(pos); + let val; + if (code === 95 && allowNumSeparator !== "bail") { + const prev = input.charCodeAt(pos - 1); + const next = input.charCodeAt(pos + 1); + if (!allowNumSeparator) { + if (bailOnError) return { + n: null, + pos + }; + errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine); + } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) { + if (bailOnError) return { + n: null, + pos + }; + errors.unexpectedNumericSeparator(pos, lineStart, curLine); + } + ++pos; + continue; + } + if (code >= 97) { + val = code - 97 + 10; + } else if (code >= 65) { + val = code - 65 + 10; + } else if (_isDigit(code)) { + val = code - 48; + } else { + val = Infinity; + } + if (val >= radix) { + if (val <= 9 && bailOnError) { + return { + n: null, + pos + }; + } else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) { + val = 0; + } else if (forceLen) { + val = 0; + invalid = true; + } else { + break; + } + } + ++pos; + total = total * radix + val; + } + if (pos === start || len != null && pos - start !== len || invalid) { + return { + n: null, + pos + }; + } + return { + n: total, + pos + }; +} +function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) { + const ch = input.charCodeAt(pos); + let code; + if (ch === 123) { + ++pos; + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors)); + ++pos; + if (code !== null && code > 0x10ffff) { + if (throwOnInvalid) { + errors.invalidCodePoint(pos, lineStart, curLine); + } else { + return { + code: null, + pos + }; + } + } + } else { + ({ + code, + pos + } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors)); + } + return { + code, + pos + }; +} +const _excluded = ["at"], + _excluded2 = ["at"]; +function buildPosition(pos, lineStart, curLine) { + return new Position(curLine, pos - lineStart, pos); +} +const VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100, 118]); +class Token { + constructor(state) { + this.type = state.type; + this.value = state.value; + this.start = state.start; + this.end = state.end; + this.loc = new SourceLocation(state.startLoc, state.endLoc); + } +} +class Tokenizer extends CommentsParser { + constructor(options, input) { + super(); + this.isLookahead = void 0; + this.tokens = []; + this.errorHandlers_readInt = { + invalidDigit: (pos, lineStart, curLine, radix) => { + if (!this.options.errorRecovery) return false; + this.raise(Errors.InvalidDigit, { + at: buildPosition(pos, lineStart, curLine), + radix + }); + return true; + }, + numericSeparatorInEscapeSequence: this.errorBuilder(Errors.NumericSeparatorInEscapeSequence), + unexpectedNumericSeparator: this.errorBuilder(Errors.UnexpectedNumericSeparator) + }; + this.errorHandlers_readCodePoint = Object.assign({}, this.errorHandlers_readInt, { + invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence), + invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint) + }); + this.errorHandlers_readStringContents_string = Object.assign({}, this.errorHandlers_readCodePoint, { + strictNumericEscape: (pos, lineStart, curLine) => { + this.recordStrictModeErrors(Errors.StrictNumericEscape, { + at: buildPosition(pos, lineStart, curLine) + }); + }, + unterminated: (pos, lineStart, curLine) => { + throw this.raise(Errors.UnterminatedString, { + at: buildPosition(pos - 1, lineStart, curLine) + }); + } + }); + this.errorHandlers_readStringContents_template = Object.assign({}, this.errorHandlers_readCodePoint, { + strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape), + unterminated: (pos, lineStart, curLine) => { + throw this.raise(Errors.UnterminatedTemplate, { + at: buildPosition(pos, lineStart, curLine) + }); + } + }); + this.state = new State(); + this.state.init(options); + this.input = input; + this.length = input.length; + this.isLookahead = false; + } + pushToken(token) { + this.tokens.length = this.state.tokensLength; + this.tokens.push(token); + ++this.state.tokensLength; + } + next() { + this.checkKeywordEscapes(); + if (this.options.tokens) { + this.pushToken(new Token(this.state)); + } + this.state.lastTokStart = this.state.start; + this.state.lastTokEndLoc = this.state.endLoc; + this.state.lastTokStartLoc = this.state.startLoc; + this.nextToken(); + } + eat(type) { + if (this.match(type)) { + this.next(); + return true; + } else { + return false; + } + } + match(type) { + return this.state.type === type; + } + createLookaheadState(state) { + return { + pos: state.pos, + value: null, + type: state.type, + start: state.start, + end: state.end, + context: [this.curContext()], + inType: state.inType, + startLoc: state.startLoc, + lastTokEndLoc: state.lastTokEndLoc, + curLine: state.curLine, + lineStart: state.lineStart, + curPosition: state.curPosition + }; + } + lookahead() { + const old = this.state; + this.state = this.createLookaheadState(old); + this.isLookahead = true; + this.nextToken(); + this.isLookahead = false; + const curr = this.state; + this.state = old; + return curr; + } + nextTokenStart() { + return this.nextTokenStartSince(this.state.pos); + } + nextTokenStartSince(pos) { + skipWhiteSpace.lastIndex = pos; + return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos; + } + lookaheadCharCode() { + return this.input.charCodeAt(this.nextTokenStart()); + } + nextTokenInLineStart() { + return this.nextTokenInLineStartSince(this.state.pos); + } + nextTokenInLineStartSince(pos) { + skipWhiteSpaceInLine.lastIndex = pos; + return skipWhiteSpaceInLine.test(this.input) ? skipWhiteSpaceInLine.lastIndex : pos; + } + lookaheadInLineCharCode() { + return this.input.charCodeAt(this.nextTokenInLineStart()); + } + codePointAtPos(pos) { + let cp = this.input.charCodeAt(pos); + if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) { + const trail = this.input.charCodeAt(pos); + if ((trail & 0xfc00) === 0xdc00) { + cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff); + } + } + return cp; + } + setStrict(strict) { + this.state.strict = strict; + if (strict) { + this.state.strictErrors.forEach(([toParseError, at]) => this.raise(toParseError, { + at + })); + this.state.strictErrors.clear(); + } + } + curContext() { + return this.state.context[this.state.context.length - 1]; + } + nextToken() { + this.skipSpace(); + this.state.start = this.state.pos; + if (!this.isLookahead) this.state.startLoc = this.state.curPosition(); + if (this.state.pos >= this.length) { + this.finishToken(137); + return; + } + this.getTokenFromCode(this.codePointAtPos(this.state.pos)); + } + skipBlockComment(commentEnd) { + let startLoc; + if (!this.isLookahead) startLoc = this.state.curPosition(); + const start = this.state.pos; + const end = this.input.indexOf(commentEnd, start + 2); + if (end === -1) { + throw this.raise(Errors.UnterminatedComment, { + at: this.state.curPosition() + }); + } + this.state.pos = end + commentEnd.length; + lineBreakG.lastIndex = start + 2; + while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) { + ++this.state.curLine; + this.state.lineStart = lineBreakG.lastIndex; + } + if (this.isLookahead) return; + const comment = { + type: "CommentBlock", + value: this.input.slice(start + 2, end), + start, + end: end + commentEnd.length, + loc: new SourceLocation(startLoc, this.state.curPosition()) + }; + if (this.options.tokens) this.pushToken(comment); + return comment; + } + skipLineComment(startSkip) { + const start = this.state.pos; + let startLoc; + if (!this.isLookahead) startLoc = this.state.curPosition(); + let ch = this.input.charCodeAt(this.state.pos += startSkip); + if (this.state.pos < this.length) { + while (!isNewLine(ch) && ++this.state.pos < this.length) { + ch = this.input.charCodeAt(this.state.pos); + } + } + if (this.isLookahead) return; + const end = this.state.pos; + const value = this.input.slice(start + startSkip, end); + const comment = { + type: "CommentLine", + value, + start, + end, + loc: new SourceLocation(startLoc, this.state.curPosition()) + }; + if (this.options.tokens) this.pushToken(comment); + return comment; + } + skipSpace() { + const spaceStart = this.state.pos; + const comments = []; + loop: while (this.state.pos < this.length) { + const ch = this.input.charCodeAt(this.state.pos); + switch (ch) { + case 32: + case 160: + case 9: + ++this.state.pos; + break; + case 13: + if (this.input.charCodeAt(this.state.pos + 1) === 10) { + ++this.state.pos; + } + case 10: + case 8232: + case 8233: + ++this.state.pos; + ++this.state.curLine; + this.state.lineStart = this.state.pos; + break; + case 47: + switch (this.input.charCodeAt(this.state.pos + 1)) { + case 42: + { + const comment = this.skipBlockComment("*/"); + if (comment !== undefined) { + this.addComment(comment); + if (this.options.attachComment) comments.push(comment); + } + break; + } + case 47: + { + const comment = this.skipLineComment(2); + if (comment !== undefined) { + this.addComment(comment); + if (this.options.attachComment) comments.push(comment); + } + break; + } + default: + break loop; + } + break; + default: + if (isWhitespace(ch)) { + ++this.state.pos; + } else if (ch === 45 && !this.inModule && this.options.annexB) { + const pos = this.state.pos; + if (this.input.charCodeAt(pos + 1) === 45 && this.input.charCodeAt(pos + 2) === 62 && (spaceStart === 0 || this.state.lineStart > spaceStart)) { + const comment = this.skipLineComment(3); + if (comment !== undefined) { + this.addComment(comment); + if (this.options.attachComment) comments.push(comment); + } + } else { + break loop; + } + } else if (ch === 60 && !this.inModule && this.options.annexB) { + const pos = this.state.pos; + if (this.input.charCodeAt(pos + 1) === 33 && this.input.charCodeAt(pos + 2) === 45 && this.input.charCodeAt(pos + 3) === 45) { + const comment = this.skipLineComment(4); + if (comment !== undefined) { + this.addComment(comment); + if (this.options.attachComment) comments.push(comment); + } + } else { + break loop; + } + } else { + break loop; + } + } + } + if (comments.length > 0) { + const end = this.state.pos; + const commentWhitespace = { + start: spaceStart, + end, + comments, + leadingNode: null, + trailingNode: null, + containingNode: null + }; + this.state.commentStack.push(commentWhitespace); + } + } + finishToken(type, val) { + this.state.end = this.state.pos; + this.state.endLoc = this.state.curPosition(); + const prevType = this.state.type; + this.state.type = type; + this.state.value = val; + if (!this.isLookahead) { + this.updateContext(prevType); + } + } + replaceToken(type) { + this.state.type = type; + this.updateContext(); + } + readToken_numberSign() { + if (this.state.pos === 0 && this.readToken_interpreter()) { + return; + } + const nextPos = this.state.pos + 1; + const next = this.codePointAtPos(nextPos); + if (next >= 48 && next <= 57) { + throw this.raise(Errors.UnexpectedDigitAfterHash, { + at: this.state.curPosition() + }); + } + if (next === 123 || next === 91 && this.hasPlugin("recordAndTuple")) { + this.expectPlugin("recordAndTuple"); + if (this.getPluginOption("recordAndTuple", "syntaxType") === "bar") { + throw this.raise(next === 123 ? Errors.RecordExpressionHashIncorrectStartSyntaxType : Errors.TupleExpressionHashIncorrectStartSyntaxType, { + at: this.state.curPosition() + }); + } + this.state.pos += 2; + if (next === 123) { + this.finishToken(7); + } else { + this.finishToken(1); + } + } else if (isIdentifierStart(next)) { + ++this.state.pos; + this.finishToken(136, this.readWord1(next)); + } else if (next === 92) { + ++this.state.pos; + this.finishToken(136, this.readWord1()); + } else { + this.finishOp(27, 1); + } + } + readToken_dot() { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next >= 48 && next <= 57) { + this.readNumber(true); + return; + } + if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) { + this.state.pos += 3; + this.finishToken(21); + } else { + ++this.state.pos; + this.finishToken(16); + } + } + readToken_slash() { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next === 61) { + this.finishOp(31, 2); + } else { + this.finishOp(56, 1); + } + } + readToken_interpreter() { + if (this.state.pos !== 0 || this.length < 2) return false; + let ch = this.input.charCodeAt(this.state.pos + 1); + if (ch !== 33) return false; + const start = this.state.pos; + this.state.pos += 1; + while (!isNewLine(ch) && ++this.state.pos < this.length) { + ch = this.input.charCodeAt(this.state.pos); + } + const value = this.input.slice(start + 2, this.state.pos); + this.finishToken(28, value); + return true; + } + readToken_mult_modulo(code) { + let type = code === 42 ? 55 : 54; + let width = 1; + let next = this.input.charCodeAt(this.state.pos + 1); + if (code === 42 && next === 42) { + width++; + next = this.input.charCodeAt(this.state.pos + 2); + type = 57; + } + if (next === 61 && !this.state.inType) { + width++; + type = code === 37 ? 33 : 30; + } + this.finishOp(type, width); + } + readToken_pipe_amp(code) { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next === code) { + if (this.input.charCodeAt(this.state.pos + 2) === 61) { + this.finishOp(30, 3); + } else { + this.finishOp(code === 124 ? 41 : 42, 2); + } + return; + } + if (code === 124) { + if (next === 62) { + this.finishOp(39, 2); + return; + } + if (this.hasPlugin("recordAndTuple") && next === 125) { + if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { + throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, { + at: this.state.curPosition() + }); + } + this.state.pos += 2; + this.finishToken(9); + return; + } + if (this.hasPlugin("recordAndTuple") && next === 93) { + if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { + throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, { + at: this.state.curPosition() + }); + } + this.state.pos += 2; + this.finishToken(4); + return; + } + } + if (next === 61) { + this.finishOp(30, 2); + return; + } + this.finishOp(code === 124 ? 43 : 45, 1); + } + readToken_caret() { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next === 61 && !this.state.inType) { + this.finishOp(32, 2); + } else if (next === 94 && this.hasPlugin(["pipelineOperator", { + proposal: "hack", + topicToken: "^^" + }])) { + this.finishOp(37, 2); + const lookaheadCh = this.input.codePointAt(this.state.pos); + if (lookaheadCh === 94) { + this.unexpected(); + } + } else { + this.finishOp(44, 1); + } + } + readToken_atSign() { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next === 64 && this.hasPlugin(["pipelineOperator", { + proposal: "hack", + topicToken: "@@" + }])) { + this.finishOp(38, 2); + } else { + this.finishOp(26, 1); + } + } + readToken_plus_min(code) { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next === code) { + this.finishOp(34, 2); + return; + } + if (next === 61) { + this.finishOp(30, 2); + } else { + this.finishOp(53, 1); + } + } + readToken_lt() { + const { + pos + } = this.state; + const next = this.input.charCodeAt(pos + 1); + if (next === 60) { + if (this.input.charCodeAt(pos + 2) === 61) { + this.finishOp(30, 3); + return; + } + this.finishOp(51, 2); + return; + } + if (next === 61) { + this.finishOp(49, 2); + return; + } + this.finishOp(47, 1); + } + readToken_gt() { + const { + pos + } = this.state; + const next = this.input.charCodeAt(pos + 1); + if (next === 62) { + const size = this.input.charCodeAt(pos + 2) === 62 ? 3 : 2; + if (this.input.charCodeAt(pos + size) === 61) { + this.finishOp(30, size + 1); + return; + } + this.finishOp(52, size); + return; + } + if (next === 61) { + this.finishOp(49, 2); + return; + } + this.finishOp(48, 1); + } + readToken_eq_excl(code) { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next === 61) { + this.finishOp(46, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2); + return; + } + if (code === 61 && next === 62) { + this.state.pos += 2; + this.finishToken(19); + return; + } + this.finishOp(code === 61 ? 29 : 35, 1); + } + readToken_question() { + const next = this.input.charCodeAt(this.state.pos + 1); + const next2 = this.input.charCodeAt(this.state.pos + 2); + if (next === 63) { + if (next2 === 61) { + this.finishOp(30, 3); + } else { + this.finishOp(40, 2); + } + } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) { + this.state.pos += 2; + this.finishToken(18); + } else { + ++this.state.pos; + this.finishToken(17); + } + } + getTokenFromCode(code) { + switch (code) { + case 46: + this.readToken_dot(); + return; + case 40: + ++this.state.pos; + this.finishToken(10); + return; + case 41: + ++this.state.pos; + this.finishToken(11); + return; + case 59: + ++this.state.pos; + this.finishToken(13); + return; + case 44: + ++this.state.pos; + this.finishToken(12); + return; + case 91: + if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) { + if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { + throw this.raise(Errors.TupleExpressionBarIncorrectStartSyntaxType, { + at: this.state.curPosition() + }); + } + this.state.pos += 2; + this.finishToken(2); + } else { + ++this.state.pos; + this.finishToken(0); + } + return; + case 93: + ++this.state.pos; + this.finishToken(3); + return; + case 123: + if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) { + if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") { + throw this.raise(Errors.RecordExpressionBarIncorrectStartSyntaxType, { + at: this.state.curPosition() + }); + } + this.state.pos += 2; + this.finishToken(6); + } else { + ++this.state.pos; + this.finishToken(5); + } + return; + case 125: + ++this.state.pos; + this.finishToken(8); + return; + case 58: + if (this.hasPlugin("functionBind") && this.input.charCodeAt(this.state.pos + 1) === 58) { + this.finishOp(15, 2); + } else { + ++this.state.pos; + this.finishToken(14); + } + return; + case 63: + this.readToken_question(); + return; + case 96: + this.readTemplateToken(); + return; + case 48: + { + const next = this.input.charCodeAt(this.state.pos + 1); + if (next === 120 || next === 88) { + this.readRadixNumber(16); + return; + } + if (next === 111 || next === 79) { + this.readRadixNumber(8); + return; + } + if (next === 98 || next === 66) { + this.readRadixNumber(2); + return; + } + } + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + this.readNumber(false); + return; + case 34: + case 39: + this.readString(code); + return; + case 47: + this.readToken_slash(); + return; + case 37: + case 42: + this.readToken_mult_modulo(code); + return; + case 124: + case 38: + this.readToken_pipe_amp(code); + return; + case 94: + this.readToken_caret(); + return; + case 43: + case 45: + this.readToken_plus_min(code); + return; + case 60: + this.readToken_lt(); + return; + case 62: + this.readToken_gt(); + return; + case 61: + case 33: + this.readToken_eq_excl(code); + return; + case 126: + this.finishOp(36, 1); + return; + case 64: + this.readToken_atSign(); + return; + case 35: + this.readToken_numberSign(); + return; + case 92: + this.readWord(); + return; + default: + if (isIdentifierStart(code)) { + this.readWord(code); + return; + } + } + throw this.raise(Errors.InvalidOrUnexpectedToken, { + at: this.state.curPosition(), + unexpected: String.fromCodePoint(code) + }); + } + finishOp(type, size) { + const str = this.input.slice(this.state.pos, this.state.pos + size); + this.state.pos += size; + this.finishToken(type, str); + } + readRegexp() { + const startLoc = this.state.startLoc; + const start = this.state.start + 1; + let escaped, inClass; + let { + pos + } = this.state; + for (;; ++pos) { + if (pos >= this.length) { + throw this.raise(Errors.UnterminatedRegExp, { + at: createPositionWithColumnOffset(startLoc, 1) + }); + } + const ch = this.input.charCodeAt(pos); + if (isNewLine(ch)) { + throw this.raise(Errors.UnterminatedRegExp, { + at: createPositionWithColumnOffset(startLoc, 1) + }); + } + if (escaped) { + escaped = false; + } else { + if (ch === 91) { + inClass = true; + } else if (ch === 93 && inClass) { + inClass = false; + } else if (ch === 47 && !inClass) { + break; + } + escaped = ch === 92; + } + } + const content = this.input.slice(start, pos); + ++pos; + let mods = ""; + const nextPos = () => createPositionWithColumnOffset(startLoc, pos + 2 - start); + while (pos < this.length) { + const cp = this.codePointAtPos(pos); + const char = String.fromCharCode(cp); + if (VALID_REGEX_FLAGS.has(cp)) { + if (cp === 118) { + this.expectPlugin("regexpUnicodeSets", nextPos()); + if (mods.includes("u")) { + this.raise(Errors.IncompatibleRegExpUVFlags, { + at: nextPos() + }); + } + } else if (cp === 117) { + if (mods.includes("v")) { + this.raise(Errors.IncompatibleRegExpUVFlags, { + at: nextPos() + }); + } + } + if (mods.includes(char)) { + this.raise(Errors.DuplicateRegExpFlags, { + at: nextPos() + }); + } + } else if (isIdentifierChar(cp) || cp === 92) { + this.raise(Errors.MalformedRegExpFlags, { + at: nextPos() + }); + } else { + break; + } + ++pos; + mods += char; + } + this.state.pos = pos; + this.finishToken(135, { + pattern: content, + flags: mods + }); + } + readInt(radix, len, forceLen = false, allowNumSeparator = true) { + const { + n, + pos + } = readInt(this.input, this.state.pos, this.state.lineStart, this.state.curLine, radix, len, forceLen, allowNumSeparator, this.errorHandlers_readInt, false); + this.state.pos = pos; + return n; + } + readRadixNumber(radix) { + const startLoc = this.state.curPosition(); + let isBigInt = false; + this.state.pos += 2; + const val = this.readInt(radix); + if (val == null) { + this.raise(Errors.InvalidDigit, { + at: createPositionWithColumnOffset(startLoc, 2), + radix + }); + } + const next = this.input.charCodeAt(this.state.pos); + if (next === 110) { + ++this.state.pos; + isBigInt = true; + } else if (next === 109) { + throw this.raise(Errors.InvalidDecimal, { + at: startLoc + }); + } + if (isIdentifierStart(this.codePointAtPos(this.state.pos))) { + throw this.raise(Errors.NumberIdentifier, { + at: this.state.curPosition() + }); + } + if (isBigInt) { + const str = this.input.slice(startLoc.index, this.state.pos).replace(/[_n]/g, ""); + this.finishToken(133, str); + return; + } + this.finishToken(132, val); + } + readNumber(startsWithDot) { + const start = this.state.pos; + const startLoc = this.state.curPosition(); + let isFloat = false; + let isBigInt = false; + let isDecimal = false; + let hasExponent = false; + let isOctal = false; + if (!startsWithDot && this.readInt(10) === null) { + this.raise(Errors.InvalidNumber, { + at: this.state.curPosition() + }); + } + const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48; + if (hasLeadingZero) { + const integer = this.input.slice(start, this.state.pos); + this.recordStrictModeErrors(Errors.StrictOctalLiteral, { + at: startLoc + }); + if (!this.state.strict) { + const underscorePos = integer.indexOf("_"); + if (underscorePos > 0) { + this.raise(Errors.ZeroDigitNumericSeparator, { + at: createPositionWithColumnOffset(startLoc, underscorePos) + }); + } + } + isOctal = hasLeadingZero && !/[89]/.test(integer); + } + let next = this.input.charCodeAt(this.state.pos); + if (next === 46 && !isOctal) { + ++this.state.pos; + this.readInt(10); + isFloat = true; + next = this.input.charCodeAt(this.state.pos); + } + if ((next === 69 || next === 101) && !isOctal) { + next = this.input.charCodeAt(++this.state.pos); + if (next === 43 || next === 45) { + ++this.state.pos; + } + if (this.readInt(10) === null) { + this.raise(Errors.InvalidOrMissingExponent, { + at: startLoc + }); + } + isFloat = true; + hasExponent = true; + next = this.input.charCodeAt(this.state.pos); + } + if (next === 110) { + if (isFloat || hasLeadingZero) { + this.raise(Errors.InvalidBigIntLiteral, { + at: startLoc + }); + } + ++this.state.pos; + isBigInt = true; + } + if (next === 109) { + this.expectPlugin("decimal", this.state.curPosition()); + if (hasExponent || hasLeadingZero) { + this.raise(Errors.InvalidDecimal, { + at: startLoc + }); + } + ++this.state.pos; + isDecimal = true; + } + if (isIdentifierStart(this.codePointAtPos(this.state.pos))) { + throw this.raise(Errors.NumberIdentifier, { + at: this.state.curPosition() + }); + } + const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, ""); + if (isBigInt) { + this.finishToken(133, str); + return; + } + if (isDecimal) { + this.finishToken(134, str); + return; + } + const val = isOctal ? parseInt(str, 8) : parseFloat(str); + this.finishToken(132, val); + } + readCodePoint(throwOnInvalid) { + const { + code, + pos + } = readCodePoint(this.input, this.state.pos, this.state.lineStart, this.state.curLine, throwOnInvalid, this.errorHandlers_readCodePoint); + this.state.pos = pos; + return code; + } + readString(quote) { + const { + str, + pos, + curLine, + lineStart + } = readStringContents(quote === 34 ? "double" : "single", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_string); + this.state.pos = pos + 1; + this.state.lineStart = lineStart; + this.state.curLine = curLine; + this.finishToken(131, str); + } + readTemplateContinuation() { + if (!this.match(8)) { + this.unexpected(null, 8); + } + this.state.pos--; + this.readTemplateToken(); + } + readTemplateToken() { + const opening = this.input[this.state.pos]; + const { + str, + firstInvalidLoc, + pos, + curLine, + lineStart + } = readStringContents("template", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_template); + this.state.pos = pos + 1; + this.state.lineStart = lineStart; + this.state.curLine = curLine; + if (firstInvalidLoc) { + this.state.firstInvalidTemplateEscapePos = new Position(firstInvalidLoc.curLine, firstInvalidLoc.pos - firstInvalidLoc.lineStart, firstInvalidLoc.pos); + } + if (this.input.codePointAt(pos) === 96) { + this.finishToken(24, firstInvalidLoc ? null : opening + str + "`"); + } else { + this.state.pos++; + this.finishToken(25, firstInvalidLoc ? null : opening + str + "${"); + } + } + recordStrictModeErrors(toParseError, { + at + }) { + const index = at.index; + if (this.state.strict && !this.state.strictErrors.has(index)) { + this.raise(toParseError, { + at + }); + } else { + this.state.strictErrors.set(index, [toParseError, at]); + } + } + readWord1(firstCode) { + this.state.containsEsc = false; + let word = ""; + const start = this.state.pos; + let chunkStart = this.state.pos; + if (firstCode !== undefined) { + this.state.pos += firstCode <= 0xffff ? 1 : 2; + } + while (this.state.pos < this.length) { + const ch = this.codePointAtPos(this.state.pos); + if (isIdentifierChar(ch)) { + this.state.pos += ch <= 0xffff ? 1 : 2; + } else if (ch === 92) { + this.state.containsEsc = true; + word += this.input.slice(chunkStart, this.state.pos); + const escStart = this.state.curPosition(); + const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar; + if (this.input.charCodeAt(++this.state.pos) !== 117) { + this.raise(Errors.MissingUnicodeEscape, { + at: this.state.curPosition() + }); + chunkStart = this.state.pos - 1; + continue; + } + ++this.state.pos; + const esc = this.readCodePoint(true); + if (esc !== null) { + if (!identifierCheck(esc)) { + this.raise(Errors.EscapedCharNotAnIdentifier, { + at: escStart + }); + } + word += String.fromCodePoint(esc); + } + chunkStart = this.state.pos; + } else { + break; + } + } + return word + this.input.slice(chunkStart, this.state.pos); + } + readWord(firstCode) { + const word = this.readWord1(firstCode); + const type = keywords$1.get(word); + if (type !== undefined) { + this.finishToken(type, tokenLabelName(type)); + } else { + this.finishToken(130, word); + } + } + checkKeywordEscapes() { + const { + type + } = this.state; + if (tokenIsKeyword(type) && this.state.containsEsc) { + this.raise(Errors.InvalidEscapedReservedWord, { + at: this.state.startLoc, + reservedWord: tokenLabelName(type) + }); + } + } + raise(toParseError, raiseProperties) { + const { + at + } = raiseProperties, + details = _objectWithoutPropertiesLoose(raiseProperties, _excluded); + const loc = at instanceof Position ? at : at.loc.start; + const error = toParseError({ + loc, + details + }); + if (!this.options.errorRecovery) throw error; + if (!this.isLookahead) this.state.errors.push(error); + return error; + } + raiseOverwrite(toParseError, raiseProperties) { + const { + at + } = raiseProperties, + details = _objectWithoutPropertiesLoose(raiseProperties, _excluded2); + const loc = at instanceof Position ? at : at.loc.start; + const pos = loc.index; + const errors = this.state.errors; + for (let i = errors.length - 1; i >= 0; i--) { + const error = errors[i]; + if (error.loc.index === pos) { + return errors[i] = toParseError({ + loc, + details + }); + } + if (error.loc.index < pos) break; + } + return this.raise(toParseError, raiseProperties); + } + updateContext(prevType) {} + unexpected(loc, type) { + throw this.raise(Errors.UnexpectedToken, { + expected: type ? tokenLabelName(type) : null, + at: loc != null ? loc : this.state.startLoc + }); + } + expectPlugin(pluginName, loc) { + if (this.hasPlugin(pluginName)) { + return true; + } + throw this.raise(Errors.MissingPlugin, { + at: loc != null ? loc : this.state.startLoc, + missingPlugin: [pluginName] + }); + } + expectOnePlugin(pluginNames) { + if (!pluginNames.some(name => this.hasPlugin(name))) { + throw this.raise(Errors.MissingOneOfPlugins, { + at: this.state.startLoc, + missingPlugin: pluginNames + }); + } + } + errorBuilder(error) { + return (pos, lineStart, curLine) => { + this.raise(error, { + at: buildPosition(pos, lineStart, curLine) + }); + }; + } +} +class ClassScope { + constructor() { + this.privateNames = new Set(); + this.loneAccessors = new Map(); + this.undefinedPrivateNames = new Map(); + } +} +class ClassScopeHandler { + constructor(parser) { + this.parser = void 0; + this.stack = []; + this.undefinedPrivateNames = new Map(); + this.parser = parser; + } + current() { + return this.stack[this.stack.length - 1]; + } + enter() { + this.stack.push(new ClassScope()); + } + exit() { + const oldClassScope = this.stack.pop(); + const current = this.current(); + for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) { + if (current) { + if (!current.undefinedPrivateNames.has(name)) { + current.undefinedPrivateNames.set(name, loc); + } + } else { + this.parser.raise(Errors.InvalidPrivateFieldResolution, { + at: loc, + identifierName: name + }); + } + } + } + declarePrivateName(name, elementType, loc) { + const { + privateNames, + loneAccessors, + undefinedPrivateNames + } = this.current(); + let redefined = privateNames.has(name); + if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) { + const accessor = redefined && loneAccessors.get(name); + if (accessor) { + const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC; + const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC; + const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR; + const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR; + redefined = oldKind === newKind || oldStatic !== newStatic; + if (!redefined) loneAccessors.delete(name); + } else if (!redefined) { + loneAccessors.set(name, elementType); + } + } + if (redefined) { + this.parser.raise(Errors.PrivateNameRedeclaration, { + at: loc, + identifierName: name + }); + } + privateNames.add(name); + undefinedPrivateNames.delete(name); + } + usePrivateName(name, loc) { + let classScope; + for (classScope of this.stack) { + if (classScope.privateNames.has(name)) return; + } + if (classScope) { + classScope.undefinedPrivateNames.set(name, loc); + } else { + this.parser.raise(Errors.InvalidPrivateFieldResolution, { + at: loc, + identifierName: name + }); + } + } +} +const kExpression = 0, + kMaybeArrowParameterDeclaration = 1, + kMaybeAsyncArrowParameterDeclaration = 2, + kParameterDeclaration = 3; +class ExpressionScope { + constructor(type = kExpression) { + this.type = void 0; + this.type = type; + } + canBeArrowParameterDeclaration() { + return this.type === kMaybeAsyncArrowParameterDeclaration || this.type === kMaybeArrowParameterDeclaration; + } + isCertainlyParameterDeclaration() { + return this.type === kParameterDeclaration; + } +} +class ArrowHeadParsingScope extends ExpressionScope { + constructor(type) { + super(type); + this.declarationErrors = new Map(); + } + recordDeclarationError(ParsingErrorClass, { + at + }) { + const index = at.index; + this.declarationErrors.set(index, [ParsingErrorClass, at]); + } + clearDeclarationError(index) { + this.declarationErrors.delete(index); + } + iterateErrors(iterator) { + this.declarationErrors.forEach(iterator); + } +} +class ExpressionScopeHandler { + constructor(parser) { + this.parser = void 0; + this.stack = [new ExpressionScope()]; + this.parser = parser; + } + enter(scope) { + this.stack.push(scope); + } + exit() { + this.stack.pop(); + } + recordParameterInitializerError(toParseError, { + at: node + }) { + const origin = { + at: node.loc.start + }; + const { + stack + } = this; + let i = stack.length - 1; + let scope = stack[i]; + while (!scope.isCertainlyParameterDeclaration()) { + if (scope.canBeArrowParameterDeclaration()) { + scope.recordDeclarationError(toParseError, origin); + } else { + return; + } + scope = stack[--i]; + } + this.parser.raise(toParseError, origin); + } + recordArrowParameterBindingError(error, { + at: node + }) { + const { + stack + } = this; + const scope = stack[stack.length - 1]; + const origin = { + at: node.loc.start + }; + if (scope.isCertainlyParameterDeclaration()) { + this.parser.raise(error, origin); + } else if (scope.canBeArrowParameterDeclaration()) { + scope.recordDeclarationError(error, origin); + } else { + return; + } + } + recordAsyncArrowParametersError({ + at + }) { + const { + stack + } = this; + let i = stack.length - 1; + let scope = stack[i]; + while (scope.canBeArrowParameterDeclaration()) { + if (scope.type === kMaybeAsyncArrowParameterDeclaration) { + scope.recordDeclarationError(Errors.AwaitBindingIdentifier, { + at + }); + } + scope = stack[--i]; + } + } + validateAsPattern() { + const { + stack + } = this; + const currentScope = stack[stack.length - 1]; + if (!currentScope.canBeArrowParameterDeclaration()) return; + currentScope.iterateErrors(([toParseError, loc]) => { + this.parser.raise(toParseError, { + at: loc + }); + let i = stack.length - 2; + let scope = stack[i]; + while (scope.canBeArrowParameterDeclaration()) { + scope.clearDeclarationError(loc.index); + scope = stack[--i]; + } + }); + } +} +function newParameterDeclarationScope() { + return new ExpressionScope(kParameterDeclaration); +} +function newArrowHeadScope() { + return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration); +} +function newAsyncArrowScope() { + return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration); +} +function newExpressionScope() { + return new ExpressionScope(); +} +const PARAM = 0b0000, + PARAM_YIELD = 0b0001, + PARAM_AWAIT = 0b0010, + PARAM_RETURN = 0b0100, + PARAM_IN = 0b1000; +class ProductionParameterHandler { + constructor() { + this.stacks = []; + } + enter(flags) { + this.stacks.push(flags); + } + exit() { + this.stacks.pop(); + } + currentFlags() { + return this.stacks[this.stacks.length - 1]; + } + get hasAwait() { + return (this.currentFlags() & PARAM_AWAIT) > 0; + } + get hasYield() { + return (this.currentFlags() & PARAM_YIELD) > 0; + } + get hasReturn() { + return (this.currentFlags() & PARAM_RETURN) > 0; + } + get hasIn() { + return (this.currentFlags() & PARAM_IN) > 0; + } +} +function functionFlags(isAsync, isGenerator) { + return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0); +} +class UtilParser extends Tokenizer { + addExtra(node, key, value, enumerable = true) { + if (!node) return; + const extra = node.extra = node.extra || {}; + if (enumerable) { + extra[key] = value; + } else { + Object.defineProperty(extra, key, { + enumerable, + value + }); + } + } + isContextual(token) { + return this.state.type === token && !this.state.containsEsc; + } + isUnparsedContextual(nameStart, name) { + const nameEnd = nameStart + name.length; + if (this.input.slice(nameStart, nameEnd) === name) { + const nextCh = this.input.charCodeAt(nameEnd); + return !(isIdentifierChar(nextCh) || (nextCh & 0xfc00) === 0xd800); + } + return false; + } + isLookaheadContextual(name) { + const next = this.nextTokenStart(); + return this.isUnparsedContextual(next, name); + } + eatContextual(token) { + if (this.isContextual(token)) { + this.next(); + return true; + } + return false; + } + expectContextual(token, toParseError) { + if (!this.eatContextual(token)) { + if (toParseError != null) { + throw this.raise(toParseError, { + at: this.state.startLoc + }); + } + this.unexpected(null, token); + } + } + canInsertSemicolon() { + return this.match(137) || this.match(8) || this.hasPrecedingLineBreak(); + } + hasPrecedingLineBreak() { + return lineBreak.test(this.input.slice(this.state.lastTokEndLoc.index, this.state.start)); + } + hasFollowingLineBreak() { + skipWhiteSpaceToLineBreak.lastIndex = this.state.end; + return skipWhiteSpaceToLineBreak.test(this.input); + } + isLineTerminator() { + return this.eat(13) || this.canInsertSemicolon(); + } + semicolon(allowAsi = true) { + if (allowAsi ? this.isLineTerminator() : this.eat(13)) return; + this.raise(Errors.MissingSemicolon, { + at: this.state.lastTokEndLoc + }); + } + expect(type, loc) { + this.eat(type) || this.unexpected(loc, type); + } + tryParse(fn, oldState = this.state.clone()) { + const abortSignal = { + node: null + }; + try { + const node = fn((node = null) => { + abortSignal.node = node; + throw abortSignal; + }); + if (this.state.errors.length > oldState.errors.length) { + const failState = this.state; + this.state = oldState; + this.state.tokensLength = failState.tokensLength; + return { + node, + error: failState.errors[oldState.errors.length], + thrown: false, + aborted: false, + failState + }; + } + return { + node, + error: null, + thrown: false, + aborted: false, + failState: null + }; + } catch (error) { + const failState = this.state; + this.state = oldState; + if (error instanceof SyntaxError) { + return { + node: null, + error, + thrown: true, + aborted: false, + failState + }; + } + if (error === abortSignal) { + return { + node: abortSignal.node, + error: null, + thrown: false, + aborted: true, + failState + }; + } + throw error; + } + } + checkExpressionErrors(refExpressionErrors, andThrow) { + if (!refExpressionErrors) return false; + const { + shorthandAssignLoc, + doubleProtoLoc, + privateKeyLoc, + optionalParametersLoc + } = refExpressionErrors; + const hasErrors = !!shorthandAssignLoc || !!doubleProtoLoc || !!optionalParametersLoc || !!privateKeyLoc; + if (!andThrow) { + return hasErrors; + } + if (shorthandAssignLoc != null) { + this.raise(Errors.InvalidCoverInitializedName, { + at: shorthandAssignLoc + }); + } + if (doubleProtoLoc != null) { + this.raise(Errors.DuplicateProto, { + at: doubleProtoLoc + }); + } + if (privateKeyLoc != null) { + this.raise(Errors.UnexpectedPrivateField, { + at: privateKeyLoc + }); + } + if (optionalParametersLoc != null) { + this.unexpected(optionalParametersLoc); + } + } + isLiteralPropertyName() { + return tokenIsLiteralPropertyName(this.state.type); + } + isPrivateName(node) { + return node.type === "PrivateName"; + } + getPrivateNameSV(node) { + return node.id.name; + } + hasPropertyAsPrivateName(node) { + return (node.type === "MemberExpression" || node.type === "OptionalMemberExpression") && this.isPrivateName(node.property); + } + isObjectProperty(node) { + return node.type === "ObjectProperty"; + } + isObjectMethod(node) { + return node.type === "ObjectMethod"; + } + initializeScopes(inModule = this.options.sourceType === "module") { + const oldLabels = this.state.labels; + this.state.labels = []; + const oldExportedIdentifiers = this.exportedIdentifiers; + this.exportedIdentifiers = new Set(); + const oldInModule = this.inModule; + this.inModule = inModule; + const oldScope = this.scope; + const ScopeHandler = this.getScopeHandler(); + this.scope = new ScopeHandler(this, inModule); + const oldProdParam = this.prodParam; + this.prodParam = new ProductionParameterHandler(); + const oldClassScope = this.classScope; + this.classScope = new ClassScopeHandler(this); + const oldExpressionScope = this.expressionScope; + this.expressionScope = new ExpressionScopeHandler(this); + return () => { + this.state.labels = oldLabels; + this.exportedIdentifiers = oldExportedIdentifiers; + this.inModule = oldInModule; + this.scope = oldScope; + this.prodParam = oldProdParam; + this.classScope = oldClassScope; + this.expressionScope = oldExpressionScope; + }; + } + enterInitialScopes() { + let paramFlags = PARAM; + if (this.inModule) { + paramFlags |= PARAM_AWAIT; + } + this.scope.enter(SCOPE_PROGRAM); + this.prodParam.enter(paramFlags); + } + checkDestructuringPrivate(refExpressionErrors) { + const { + privateKeyLoc + } = refExpressionErrors; + if (privateKeyLoc !== null) { + this.expectPlugin("destructuringPrivate", privateKeyLoc); + } + } +} +class ExpressionErrors { + constructor() { + this.shorthandAssignLoc = null; + this.doubleProtoLoc = null; + this.privateKeyLoc = null; + this.optionalParametersLoc = null; + } +} +class Node { + constructor(parser, pos, loc) { + this.type = ""; + this.start = pos; + this.end = 0; + this.loc = new SourceLocation(loc); + if (parser != null && parser.options.ranges) this.range = [pos, 0]; + if (parser != null && parser.filename) this.loc.filename = parser.filename; + } +} +const NodePrototype = Node.prototype; +{ + NodePrototype.__clone = function () { + const newNode = new Node(undefined, this.start, this.loc.start); + const keys = Object.keys(this); + for (let i = 0, length = keys.length; i < length; i++) { + const key = keys[i]; + if (key !== "leadingComments" && key !== "trailingComments" && key !== "innerComments") { + newNode[key] = this[key]; + } + } + return newNode; + }; +} +function clonePlaceholder(node) { + return cloneIdentifier(node); +} +function cloneIdentifier(node) { + const { + type, + start, + end, + loc, + range, + extra, + name + } = node; + const cloned = Object.create(NodePrototype); + cloned.type = type; + cloned.start = start; + cloned.end = end; + cloned.loc = loc; + cloned.range = range; + cloned.extra = extra; + cloned.name = name; + if (type === "Placeholder") { + cloned.expectedNode = node.expectedNode; + } + return cloned; +} +function cloneStringLiteral(node) { + const { + type, + start, + end, + loc, + range, + extra + } = node; + if (type === "Placeholder") { + return clonePlaceholder(node); + } + const cloned = Object.create(NodePrototype); + cloned.type = type; + cloned.start = start; + cloned.end = end; + cloned.loc = loc; + cloned.range = range; + if (node.raw !== undefined) { + cloned.raw = node.raw; + } else { + cloned.extra = extra; + } + cloned.value = node.value; + return cloned; +} +class NodeUtils extends UtilParser { + startNode() { + return new Node(this, this.state.start, this.state.startLoc); + } + startNodeAt(loc) { + return new Node(this, loc.index, loc); + } + startNodeAtNode(type) { + return this.startNodeAt(type.loc.start); + } + finishNode(node, type) { + return this.finishNodeAt(node, type, this.state.lastTokEndLoc); + } + finishNodeAt(node, type, endLoc) { + node.type = type; + node.end = endLoc.index; + node.loc.end = endLoc; + if (this.options.ranges) node.range[1] = endLoc.index; + if (this.options.attachComment) this.processComment(node); + return node; + } + resetStartLocation(node, startLoc) { + node.start = startLoc.index; + node.loc.start = startLoc; + if (this.options.ranges) node.range[0] = startLoc.index; + } + resetEndLocation(node, endLoc = this.state.lastTokEndLoc) { + node.end = endLoc.index; + node.loc.end = endLoc; + if (this.options.ranges) node.range[1] = endLoc.index; + } + resetStartLocationFromNode(node, locationNode) { + this.resetStartLocation(node, locationNode.loc.start); + } +} +const reservedTypes = new Set(["_", "any", "bool", "boolean", "empty", "extends", "false", "interface", "mixed", "null", "number", "static", "string", "true", "typeof", "void"]); +const FlowErrors = ParseErrorEnum`flow`({ + AmbiguousConditionalArrow: "Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.", + AmbiguousDeclareModuleKind: "Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.", + AssignReservedType: ({ + reservedType + }) => `Cannot overwrite reserved type ${reservedType}.`, + DeclareClassElement: "The `declare` modifier can only appear on class fields.", + DeclareClassFieldInitializer: "Initializers are not allowed in fields with the `declare` modifier.", + DuplicateDeclareModuleExports: "Duplicate `declare module.exports` statement.", + EnumBooleanMemberNotInitialized: ({ + memberName, + enumName + }) => `Boolean enum members need to be initialized. Use either \`${memberName} = true,\` or \`${memberName} = false,\` in enum \`${enumName}\`.`, + EnumDuplicateMemberName: ({ + memberName, + enumName + }) => `Enum member names need to be unique, but the name \`${memberName}\` has already been used before in enum \`${enumName}\`.`, + EnumInconsistentMemberValues: ({ + enumName + }) => `Enum \`${enumName}\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`, + EnumInvalidExplicitType: ({ + invalidEnumType, + enumName + }) => `Enum type \`${invalidEnumType}\` is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`, + EnumInvalidExplicitTypeUnknownSupplied: ({ + enumName + }) => `Supplied enum type is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`, + EnumInvalidMemberInitializerPrimaryType: ({ + enumName, + memberName, + explicitType + }) => `Enum \`${enumName}\` has type \`${explicitType}\`, so the initializer of \`${memberName}\` needs to be a ${explicitType} literal.`, + EnumInvalidMemberInitializerSymbolType: ({ + enumName, + memberName + }) => `Symbol enum members cannot be initialized. Use \`${memberName},\` in enum \`${enumName}\`.`, + EnumInvalidMemberInitializerUnknownType: ({ + enumName, + memberName + }) => `The enum member initializer for \`${memberName}\` needs to be a literal (either a boolean, number, or string) in enum \`${enumName}\`.`, + EnumInvalidMemberName: ({ + enumName, + memberName, + suggestion + }) => `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \`${memberName}\`, consider using \`${suggestion}\`, in enum \`${enumName}\`.`, + EnumNumberMemberNotInitialized: ({ + enumName, + memberName + }) => `Number enum members need to be initialized, e.g. \`${memberName} = 1\` in enum \`${enumName}\`.`, + EnumStringMemberInconsistentlyInitailized: ({ + enumName + }) => `String enum members need to consistently either all use initializers, or use no initializers, in enum \`${enumName}\`.`, + GetterMayNotHaveThisParam: "A getter cannot have a `this` parameter.", + ImportReflectionHasImportType: "An `import module` declaration can not use `type` or `typeof` keyword.", + ImportTypeShorthandOnlyInPureImport: "The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.", + InexactInsideExact: "Explicit inexact syntax cannot appear inside an explicit exact object type.", + InexactInsideNonObject: "Explicit inexact syntax cannot appear in class or interface definitions.", + InexactVariance: "Explicit inexact syntax cannot have variance.", + InvalidNonTypeImportInDeclareModule: "Imports within a `declare module` body must always be `import type` or `import typeof`.", + MissingTypeParamDefault: "Type parameter declaration needs a default, since a preceding type parameter declaration has a default.", + NestedDeclareModule: "`declare module` cannot be used inside another `declare module`.", + NestedFlowComment: "Cannot have a flow comment inside another flow comment.", + PatternIsOptional: Object.assign({ + message: "A binding pattern parameter cannot be optional in an implementation signature." + }, { + reasonCode: "OptionalBindingPattern" + }), + SetterMayNotHaveThisParam: "A setter cannot have a `this` parameter.", + SpreadVariance: "Spread properties cannot have variance.", + ThisParamAnnotationRequired: "A type annotation is required for the `this` parameter.", + ThisParamBannedInConstructor: "Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.", + ThisParamMayNotBeOptional: "The `this` parameter cannot be optional.", + ThisParamMustBeFirst: "The `this` parameter must be the first function parameter.", + ThisParamNoDefault: "The `this` parameter may not have a default value.", + TypeBeforeInitializer: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.", + TypeCastInPattern: "The type cast expression is expected to be wrapped with parenthesis.", + UnexpectedExplicitInexactInObject: "Explicit inexact syntax must appear at the end of an inexact object.", + UnexpectedReservedType: ({ + reservedType + }) => `Unexpected reserved type ${reservedType}.`, + UnexpectedReservedUnderscore: "`_` is only allowed as a type argument to call or new.", + UnexpectedSpaceBetweenModuloChecks: "Spaces between `%` and `checks` are not allowed here.", + UnexpectedSpreadType: "Spread operator cannot appear in class or interface definitions.", + UnexpectedSubtractionOperand: 'Unexpected token, expected "number" or "bigint".', + UnexpectedTokenAfterTypeParameter: "Expected an arrow function after this type parameter declaration.", + UnexpectedTypeParameterBeforeAsyncArrowFunction: "Type parameters must come after the async keyword, e.g. instead of ` async () => {}`, use `async () => {}`.", + UnsupportedDeclareExportKind: ({ + unsupportedExportKind, + suggestion + }) => `\`declare export ${unsupportedExportKind}\` is not supported. Use \`${suggestion}\` instead.`, + UnsupportedStatementInDeclareModule: "Only declares and type imports are allowed inside declare module.", + UnterminatedFlowComment: "Unterminated flow-comment." +}); +function isEsModuleType(bodyElement) { + return bodyElement.type === "DeclareExportAllDeclaration" || bodyElement.type === "DeclareExportDeclaration" && (!bodyElement.declaration || bodyElement.declaration.type !== "TypeAlias" && bodyElement.declaration.type !== "InterfaceDeclaration"); +} +function hasTypeImportKind(node) { + return node.importKind === "type" || node.importKind === "typeof"; +} +function isMaybeDefaultImport(type) { + return tokenIsKeywordOrIdentifier(type) && type !== 97; +} +const exportSuggestions = { + const: "declare export var", + let: "declare export var", + type: "export type", + interface: "export interface" +}; +function partition(list, test) { + const list1 = []; + const list2 = []; + for (let i = 0; i < list.length; i++) { + (test(list[i], i, list) ? list1 : list2).push(list[i]); + } + return [list1, list2]; +} +const FLOW_PRAGMA_REGEX = /\*?\s*@((?:no)?flow)\b/; +var flow = superClass => class FlowParserMixin extends superClass { + constructor(...args) { + super(...args); + this.flowPragma = undefined; + } + getScopeHandler() { + return FlowScopeHandler; + } + shouldParseTypes() { + return this.getPluginOption("flow", "all") || this.flowPragma === "flow"; + } + shouldParseEnums() { + return !!this.getPluginOption("flow", "enums"); + } + finishToken(type, val) { + if (type !== 131 && type !== 13 && type !== 28) { + if (this.flowPragma === undefined) { + this.flowPragma = null; + } + } + super.finishToken(type, val); + } + addComment(comment) { + if (this.flowPragma === undefined) { + const matches = FLOW_PRAGMA_REGEX.exec(comment.value); + if (!matches) ;else if (matches[1] === "flow") { + this.flowPragma = "flow"; + } else if (matches[1] === "noflow") { + this.flowPragma = "noflow"; + } else { + throw new Error("Unexpected flow pragma"); + } + } + super.addComment(comment); + } + flowParseTypeInitialiser(tok) { + const oldInType = this.state.inType; + this.state.inType = true; + this.expect(tok || 14); + const type = this.flowParseType(); + this.state.inType = oldInType; + return type; + } + flowParsePredicate() { + const node = this.startNode(); + const moduloLoc = this.state.startLoc; + this.next(); + this.expectContextual(108); + if (this.state.lastTokStart > moduloLoc.index + 1) { + this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, { + at: moduloLoc + }); + } + if (this.eat(10)) { + node.value = super.parseExpression(); + this.expect(11); + return this.finishNode(node, "DeclaredPredicate"); + } else { + return this.finishNode(node, "InferredPredicate"); + } + } + flowParseTypeAndPredicateInitialiser() { + const oldInType = this.state.inType; + this.state.inType = true; + this.expect(14); + let type = null; + let predicate = null; + if (this.match(54)) { + this.state.inType = oldInType; + predicate = this.flowParsePredicate(); + } else { + type = this.flowParseType(); + this.state.inType = oldInType; + if (this.match(54)) { + predicate = this.flowParsePredicate(); + } + } + return [type, predicate]; + } + flowParseDeclareClass(node) { + this.next(); + this.flowParseInterfaceish(node, true); + return this.finishNode(node, "DeclareClass"); + } + flowParseDeclareFunction(node) { + this.next(); + const id = node.id = this.parseIdentifier(); + const typeNode = this.startNode(); + const typeContainer = this.startNode(); + if (this.match(47)) { + typeNode.typeParameters = this.flowParseTypeParameterDeclaration(); + } else { + typeNode.typeParameters = null; + } + this.expect(10); + const tmp = this.flowParseFunctionTypeParams(); + typeNode.params = tmp.params; + typeNode.rest = tmp.rest; + typeNode.this = tmp._this; + this.expect(11); + [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser(); + typeContainer.typeAnnotation = this.finishNode(typeNode, "FunctionTypeAnnotation"); + id.typeAnnotation = this.finishNode(typeContainer, "TypeAnnotation"); + this.resetEndLocation(id); + this.semicolon(); + this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.loc.start); + return this.finishNode(node, "DeclareFunction"); + } + flowParseDeclare(node, insideModule) { + if (this.match(80)) { + return this.flowParseDeclareClass(node); + } else if (this.match(68)) { + return this.flowParseDeclareFunction(node); + } else if (this.match(74)) { + return this.flowParseDeclareVariable(node); + } else if (this.eatContextual(125)) { + if (this.match(16)) { + return this.flowParseDeclareModuleExports(node); + } else { + if (insideModule) { + this.raise(FlowErrors.NestedDeclareModule, { + at: this.state.lastTokStartLoc + }); + } + return this.flowParseDeclareModule(node); + } + } else if (this.isContextual(128)) { + return this.flowParseDeclareTypeAlias(node); + } else if (this.isContextual(129)) { + return this.flowParseDeclareOpaqueType(node); + } else if (this.isContextual(127)) { + return this.flowParseDeclareInterface(node); + } else if (this.match(82)) { + return this.flowParseDeclareExportDeclaration(node, insideModule); + } else { + this.unexpected(); + } + } + flowParseDeclareVariable(node) { + this.next(); + node.id = this.flowParseTypeAnnotatableIdentifier(true); + this.scope.declareName(node.id.name, BIND_VAR, node.id.loc.start); + this.semicolon(); + return this.finishNode(node, "DeclareVariable"); + } + flowParseDeclareModule(node) { + this.scope.enter(SCOPE_OTHER); + if (this.match(131)) { + node.id = super.parseExprAtom(); + } else { + node.id = this.parseIdentifier(); + } + const bodyNode = node.body = this.startNode(); + const body = bodyNode.body = []; + this.expect(5); + while (!this.match(8)) { + let bodyNode = this.startNode(); + if (this.match(83)) { + this.next(); + if (!this.isContextual(128) && !this.match(87)) { + this.raise(FlowErrors.InvalidNonTypeImportInDeclareModule, { + at: this.state.lastTokStartLoc + }); + } + super.parseImport(bodyNode); + } else { + this.expectContextual(123, FlowErrors.UnsupportedStatementInDeclareModule); + bodyNode = this.flowParseDeclare(bodyNode, true); + } + body.push(bodyNode); + } + this.scope.exit(); + this.expect(8); + this.finishNode(bodyNode, "BlockStatement"); + let kind = null; + let hasModuleExport = false; + body.forEach(bodyElement => { + if (isEsModuleType(bodyElement)) { + if (kind === "CommonJS") { + this.raise(FlowErrors.AmbiguousDeclareModuleKind, { + at: bodyElement + }); + } + kind = "ES"; + } else if (bodyElement.type === "DeclareModuleExports") { + if (hasModuleExport) { + this.raise(FlowErrors.DuplicateDeclareModuleExports, { + at: bodyElement + }); + } + if (kind === "ES") { + this.raise(FlowErrors.AmbiguousDeclareModuleKind, { + at: bodyElement + }); + } + kind = "CommonJS"; + hasModuleExport = true; + } + }); + node.kind = kind || "CommonJS"; + return this.finishNode(node, "DeclareModule"); + } + flowParseDeclareExportDeclaration(node, insideModule) { + this.expect(82); + if (this.eat(65)) { + if (this.match(68) || this.match(80)) { + node.declaration = this.flowParseDeclare(this.startNode()); + } else { + node.declaration = this.flowParseType(); + this.semicolon(); + } + node.default = true; + return this.finishNode(node, "DeclareExportDeclaration"); + } else { + if (this.match(75) || this.isLet() || (this.isContextual(128) || this.isContextual(127)) && !insideModule) { + const label = this.state.value; + throw this.raise(FlowErrors.UnsupportedDeclareExportKind, { + at: this.state.startLoc, + unsupportedExportKind: label, + suggestion: exportSuggestions[label] + }); + } + if (this.match(74) || this.match(68) || this.match(80) || this.isContextual(129)) { + node.declaration = this.flowParseDeclare(this.startNode()); + node.default = false; + return this.finishNode(node, "DeclareExportDeclaration"); + } else if (this.match(55) || this.match(5) || this.isContextual(127) || this.isContextual(128) || this.isContextual(129)) { + node = this.parseExport(node, null); + if (node.type === "ExportNamedDeclaration") { + node.type = "ExportDeclaration"; + node.default = false; + delete node.exportKind; + } + node.type = "Declare" + node.type; + return node; + } + } + this.unexpected(); + } + flowParseDeclareModuleExports(node) { + this.next(); + this.expectContextual(109); + node.typeAnnotation = this.flowParseTypeAnnotation(); + this.semicolon(); + return this.finishNode(node, "DeclareModuleExports"); + } + flowParseDeclareTypeAlias(node) { + this.next(); + const finished = this.flowParseTypeAlias(node); + finished.type = "DeclareTypeAlias"; + return finished; + } + flowParseDeclareOpaqueType(node) { + this.next(); + const finished = this.flowParseOpaqueType(node, true); + finished.type = "DeclareOpaqueType"; + return finished; + } + flowParseDeclareInterface(node) { + this.next(); + this.flowParseInterfaceish(node, false); + return this.finishNode(node, "DeclareInterface"); + } + flowParseInterfaceish(node, isClass) { + node.id = this.flowParseRestrictedIdentifier(!isClass, true); + this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.loc.start); + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterDeclaration(); + } else { + node.typeParameters = null; + } + node.extends = []; + node.implements = []; + node.mixins = []; + if (this.eat(81)) { + do { + node.extends.push(this.flowParseInterfaceExtends()); + } while (!isClass && this.eat(12)); + } + if (isClass) { + if (this.eatContextual(115)) { + do { + node.mixins.push(this.flowParseInterfaceExtends()); + } while (this.eat(12)); + } + if (this.eatContextual(111)) { + do { + node.implements.push(this.flowParseInterfaceExtends()); + } while (this.eat(12)); + } + } + node.body = this.flowParseObjectType({ + allowStatic: isClass, + allowExact: false, + allowSpread: false, + allowProto: isClass, + allowInexact: false + }); + } + flowParseInterfaceExtends() { + const node = this.startNode(); + node.id = this.flowParseQualifiedTypeIdentifier(); + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterInstantiation(); + } else { + node.typeParameters = null; + } + return this.finishNode(node, "InterfaceExtends"); + } + flowParseInterface(node) { + this.flowParseInterfaceish(node, false); + return this.finishNode(node, "InterfaceDeclaration"); + } + checkNotUnderscore(word) { + if (word === "_") { + this.raise(FlowErrors.UnexpectedReservedUnderscore, { + at: this.state.startLoc + }); + } + } + checkReservedType(word, startLoc, declaration) { + if (!reservedTypes.has(word)) return; + this.raise(declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, { + at: startLoc, + reservedType: word + }); + } + flowParseRestrictedIdentifier(liberal, declaration) { + this.checkReservedType(this.state.value, this.state.startLoc, declaration); + return this.parseIdentifier(liberal); + } + flowParseTypeAlias(node) { + node.id = this.flowParseRestrictedIdentifier(false, true); + this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start); + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterDeclaration(); + } else { + node.typeParameters = null; + } + node.right = this.flowParseTypeInitialiser(29); + this.semicolon(); + return this.finishNode(node, "TypeAlias"); + } + flowParseOpaqueType(node, declare) { + this.expectContextual(128); + node.id = this.flowParseRestrictedIdentifier(true, true); + this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start); + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterDeclaration(); + } else { + node.typeParameters = null; + } + node.supertype = null; + if (this.match(14)) { + node.supertype = this.flowParseTypeInitialiser(14); + } + node.impltype = null; + if (!declare) { + node.impltype = this.flowParseTypeInitialiser(29); + } + this.semicolon(); + return this.finishNode(node, "OpaqueType"); + } + flowParseTypeParameter(requireDefault = false) { + const nodeStartLoc = this.state.startLoc; + const node = this.startNode(); + const variance = this.flowParseVariance(); + const ident = this.flowParseTypeAnnotatableIdentifier(); + node.name = ident.name; + node.variance = variance; + node.bound = ident.typeAnnotation; + if (this.match(29)) { + this.eat(29); + node.default = this.flowParseType(); + } else { + if (requireDefault) { + this.raise(FlowErrors.MissingTypeParamDefault, { + at: nodeStartLoc + }); + } + } + return this.finishNode(node, "TypeParameter"); + } + flowParseTypeParameterDeclaration() { + const oldInType = this.state.inType; + const node = this.startNode(); + node.params = []; + this.state.inType = true; + if (this.match(47) || this.match(140)) { + this.next(); + } else { + this.unexpected(); + } + let defaultRequired = false; + do { + const typeParameter = this.flowParseTypeParameter(defaultRequired); + node.params.push(typeParameter); + if (typeParameter.default) { + defaultRequired = true; + } + if (!this.match(48)) { + this.expect(12); + } + } while (!this.match(48)); + this.expect(48); + this.state.inType = oldInType; + return this.finishNode(node, "TypeParameterDeclaration"); + } + flowParseTypeParameterInstantiation() { + const node = this.startNode(); + const oldInType = this.state.inType; + node.params = []; + this.state.inType = true; + this.expect(47); + const oldNoAnonFunctionType = this.state.noAnonFunctionType; + this.state.noAnonFunctionType = false; + while (!this.match(48)) { + node.params.push(this.flowParseType()); + if (!this.match(48)) { + this.expect(12); + } + } + this.state.noAnonFunctionType = oldNoAnonFunctionType; + this.expect(48); + this.state.inType = oldInType; + return this.finishNode(node, "TypeParameterInstantiation"); + } + flowParseTypeParameterInstantiationCallOrNew() { + const node = this.startNode(); + const oldInType = this.state.inType; + node.params = []; + this.state.inType = true; + this.expect(47); + while (!this.match(48)) { + node.params.push(this.flowParseTypeOrImplicitInstantiation()); + if (!this.match(48)) { + this.expect(12); + } + } + this.expect(48); + this.state.inType = oldInType; + return this.finishNode(node, "TypeParameterInstantiation"); + } + flowParseInterfaceType() { + const node = this.startNode(); + this.expectContextual(127); + node.extends = []; + if (this.eat(81)) { + do { + node.extends.push(this.flowParseInterfaceExtends()); + } while (this.eat(12)); + } + node.body = this.flowParseObjectType({ + allowStatic: false, + allowExact: false, + allowSpread: false, + allowProto: false, + allowInexact: false + }); + return this.finishNode(node, "InterfaceTypeAnnotation"); + } + flowParseObjectPropertyKey() { + return this.match(132) || this.match(131) ? super.parseExprAtom() : this.parseIdentifier(true); + } + flowParseObjectTypeIndexer(node, isStatic, variance) { + node.static = isStatic; + if (this.lookahead().type === 14) { + node.id = this.flowParseObjectPropertyKey(); + node.key = this.flowParseTypeInitialiser(); + } else { + node.id = null; + node.key = this.flowParseType(); + } + this.expect(3); + node.value = this.flowParseTypeInitialiser(); + node.variance = variance; + return this.finishNode(node, "ObjectTypeIndexer"); + } + flowParseObjectTypeInternalSlot(node, isStatic) { + node.static = isStatic; + node.id = this.flowParseObjectPropertyKey(); + this.expect(3); + this.expect(3); + if (this.match(47) || this.match(10)) { + node.method = true; + node.optional = false; + node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start)); + } else { + node.method = false; + if (this.eat(17)) { + node.optional = true; + } + node.value = this.flowParseTypeInitialiser(); + } + return this.finishNode(node, "ObjectTypeInternalSlot"); + } + flowParseObjectTypeMethodish(node) { + node.params = []; + node.rest = null; + node.typeParameters = null; + node.this = null; + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterDeclaration(); + } + this.expect(10); + if (this.match(78)) { + node.this = this.flowParseFunctionTypeParam(true); + node.this.name = null; + if (!this.match(11)) { + this.expect(12); + } + } + while (!this.match(11) && !this.match(21)) { + node.params.push(this.flowParseFunctionTypeParam(false)); + if (!this.match(11)) { + this.expect(12); + } + } + if (this.eat(21)) { + node.rest = this.flowParseFunctionTypeParam(false); + } + this.expect(11); + node.returnType = this.flowParseTypeInitialiser(); + return this.finishNode(node, "FunctionTypeAnnotation"); + } + flowParseObjectTypeCallProperty(node, isStatic) { + const valueNode = this.startNode(); + node.static = isStatic; + node.value = this.flowParseObjectTypeMethodish(valueNode); + return this.finishNode(node, "ObjectTypeCallProperty"); + } + flowParseObjectType({ + allowStatic, + allowExact, + allowSpread, + allowProto, + allowInexact + }) { + const oldInType = this.state.inType; + this.state.inType = true; + const nodeStart = this.startNode(); + nodeStart.callProperties = []; + nodeStart.properties = []; + nodeStart.indexers = []; + nodeStart.internalSlots = []; + let endDelim; + let exact; + let inexact = false; + if (allowExact && this.match(6)) { + this.expect(6); + endDelim = 9; + exact = true; + } else { + this.expect(5); + endDelim = 8; + exact = false; + } + nodeStart.exact = exact; + while (!this.match(endDelim)) { + let isStatic = false; + let protoStartLoc = null; + let inexactStartLoc = null; + const node = this.startNode(); + if (allowProto && this.isContextual(116)) { + const lookahead = this.lookahead(); + if (lookahead.type !== 14 && lookahead.type !== 17) { + this.next(); + protoStartLoc = this.state.startLoc; + allowStatic = false; + } + } + if (allowStatic && this.isContextual(104)) { + const lookahead = this.lookahead(); + if (lookahead.type !== 14 && lookahead.type !== 17) { + this.next(); + isStatic = true; + } + } + const variance = this.flowParseVariance(); + if (this.eat(0)) { + if (protoStartLoc != null) { + this.unexpected(protoStartLoc); + } + if (this.eat(0)) { + if (variance) { + this.unexpected(variance.loc.start); + } + nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic)); + } else { + nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance)); + } + } else if (this.match(10) || this.match(47)) { + if (protoStartLoc != null) { + this.unexpected(protoStartLoc); + } + if (variance) { + this.unexpected(variance.loc.start); + } + nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic)); + } else { + let kind = "init"; + if (this.isContextual(98) || this.isContextual(103)) { + const lookahead = this.lookahead(); + if (tokenIsLiteralPropertyName(lookahead.type)) { + kind = this.state.value; + this.next(); + } + } + const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact); + if (propOrInexact === null) { + inexact = true; + inexactStartLoc = this.state.lastTokStartLoc; + } else { + nodeStart.properties.push(propOrInexact); + } + } + this.flowObjectTypeSemicolon(); + if (inexactStartLoc && !this.match(8) && !this.match(9)) { + this.raise(FlowErrors.UnexpectedExplicitInexactInObject, { + at: inexactStartLoc + }); + } + } + this.expect(endDelim); + if (allowSpread) { + nodeStart.inexact = inexact; + } + const out = this.finishNode(nodeStart, "ObjectTypeAnnotation"); + this.state.inType = oldInType; + return out; + } + flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact) { + if (this.eat(21)) { + const isInexactToken = this.match(12) || this.match(13) || this.match(8) || this.match(9); + if (isInexactToken) { + if (!allowSpread) { + this.raise(FlowErrors.InexactInsideNonObject, { + at: this.state.lastTokStartLoc + }); + } else if (!allowInexact) { + this.raise(FlowErrors.InexactInsideExact, { + at: this.state.lastTokStartLoc + }); + } + if (variance) { + this.raise(FlowErrors.InexactVariance, { + at: variance + }); + } + return null; + } + if (!allowSpread) { + this.raise(FlowErrors.UnexpectedSpreadType, { + at: this.state.lastTokStartLoc + }); + } + if (protoStartLoc != null) { + this.unexpected(protoStartLoc); + } + if (variance) { + this.raise(FlowErrors.SpreadVariance, { + at: variance + }); + } + node.argument = this.flowParseType(); + return this.finishNode(node, "ObjectTypeSpreadProperty"); + } else { + node.key = this.flowParseObjectPropertyKey(); + node.static = isStatic; + node.proto = protoStartLoc != null; + node.kind = kind; + let optional = false; + if (this.match(47) || this.match(10)) { + node.method = true; + if (protoStartLoc != null) { + this.unexpected(protoStartLoc); + } + if (variance) { + this.unexpected(variance.loc.start); + } + node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start)); + if (kind === "get" || kind === "set") { + this.flowCheckGetterSetterParams(node); + } + if (!allowSpread && node.key.name === "constructor" && node.value.this) { + this.raise(FlowErrors.ThisParamBannedInConstructor, { + at: node.value.this + }); + } + } else { + if (kind !== "init") this.unexpected(); + node.method = false; + if (this.eat(17)) { + optional = true; + } + node.value = this.flowParseTypeInitialiser(); + node.variance = variance; + } + node.optional = optional; + return this.finishNode(node, "ObjectTypeProperty"); + } + } + flowCheckGetterSetterParams(property) { + const paramCount = property.kind === "get" ? 0 : 1; + const length = property.value.params.length + (property.value.rest ? 1 : 0); + if (property.value.this) { + this.raise(property.kind === "get" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam, { + at: property.value.this + }); + } + if (length !== paramCount) { + this.raise(property.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, { + at: property + }); + } + if (property.kind === "set" && property.value.rest) { + this.raise(Errors.BadSetterRestParameter, { + at: property + }); + } + } + flowObjectTypeSemicolon() { + if (!this.eat(13) && !this.eat(12) && !this.match(8) && !this.match(9)) { + this.unexpected(); + } + } + flowParseQualifiedTypeIdentifier(startLoc, id) { + var _startLoc; + (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc; + let node = id || this.flowParseRestrictedIdentifier(true); + while (this.eat(16)) { + const node2 = this.startNodeAt(startLoc); + node2.qualification = node; + node2.id = this.flowParseRestrictedIdentifier(true); + node = this.finishNode(node2, "QualifiedTypeIdentifier"); + } + return node; + } + flowParseGenericType(startLoc, id) { + const node = this.startNodeAt(startLoc); + node.typeParameters = null; + node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id); + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterInstantiation(); + } + return this.finishNode(node, "GenericTypeAnnotation"); + } + flowParseTypeofType() { + const node = this.startNode(); + this.expect(87); + node.argument = this.flowParsePrimaryType(); + return this.finishNode(node, "TypeofTypeAnnotation"); + } + flowParseTupleType() { + const node = this.startNode(); + node.types = []; + this.expect(0); + while (this.state.pos < this.length && !this.match(3)) { + node.types.push(this.flowParseType()); + if (this.match(3)) break; + this.expect(12); + } + this.expect(3); + return this.finishNode(node, "TupleTypeAnnotation"); + } + flowParseFunctionTypeParam(first) { + let name = null; + let optional = false; + let typeAnnotation = null; + const node = this.startNode(); + const lh = this.lookahead(); + const isThis = this.state.type === 78; + if (lh.type === 14 || lh.type === 17) { + if (isThis && !first) { + this.raise(FlowErrors.ThisParamMustBeFirst, { + at: node + }); + } + name = this.parseIdentifier(isThis); + if (this.eat(17)) { + optional = true; + if (isThis) { + this.raise(FlowErrors.ThisParamMayNotBeOptional, { + at: node + }); + } + } + typeAnnotation = this.flowParseTypeInitialiser(); + } else { + typeAnnotation = this.flowParseType(); + } + node.name = name; + node.optional = optional; + node.typeAnnotation = typeAnnotation; + return this.finishNode(node, "FunctionTypeParam"); + } + reinterpretTypeAsFunctionTypeParam(type) { + const node = this.startNodeAt(type.loc.start); + node.name = null; + node.optional = false; + node.typeAnnotation = type; + return this.finishNode(node, "FunctionTypeParam"); + } + flowParseFunctionTypeParams(params = []) { + let rest = null; + let _this = null; + if (this.match(78)) { + _this = this.flowParseFunctionTypeParam(true); + _this.name = null; + if (!this.match(11)) { + this.expect(12); + } + } + while (!this.match(11) && !this.match(21)) { + params.push(this.flowParseFunctionTypeParam(false)); + if (!this.match(11)) { + this.expect(12); + } + } + if (this.eat(21)) { + rest = this.flowParseFunctionTypeParam(false); + } + return { + params, + rest, + _this + }; + } + flowIdentToTypeAnnotation(startLoc, node, id) { + switch (id.name) { + case "any": + return this.finishNode(node, "AnyTypeAnnotation"); + case "bool": + case "boolean": + return this.finishNode(node, "BooleanTypeAnnotation"); + case "mixed": + return this.finishNode(node, "MixedTypeAnnotation"); + case "empty": + return this.finishNode(node, "EmptyTypeAnnotation"); + case "number": + return this.finishNode(node, "NumberTypeAnnotation"); + case "string": + return this.finishNode(node, "StringTypeAnnotation"); + case "symbol": + return this.finishNode(node, "SymbolTypeAnnotation"); + default: + this.checkNotUnderscore(id.name); + return this.flowParseGenericType(startLoc, id); + } + } + flowParsePrimaryType() { + const startLoc = this.state.startLoc; + const node = this.startNode(); + let tmp; + let type; + let isGroupedType = false; + const oldNoAnonFunctionType = this.state.noAnonFunctionType; + switch (this.state.type) { + case 5: + return this.flowParseObjectType({ + allowStatic: false, + allowExact: false, + allowSpread: true, + allowProto: false, + allowInexact: true + }); + case 6: + return this.flowParseObjectType({ + allowStatic: false, + allowExact: true, + allowSpread: true, + allowProto: false, + allowInexact: false + }); + case 0: + this.state.noAnonFunctionType = false; + type = this.flowParseTupleType(); + this.state.noAnonFunctionType = oldNoAnonFunctionType; + return type; + case 47: + node.typeParameters = this.flowParseTypeParameterDeclaration(); + this.expect(10); + tmp = this.flowParseFunctionTypeParams(); + node.params = tmp.params; + node.rest = tmp.rest; + node.this = tmp._this; + this.expect(11); + this.expect(19); + node.returnType = this.flowParseType(); + return this.finishNode(node, "FunctionTypeAnnotation"); + case 10: + this.next(); + if (!this.match(11) && !this.match(21)) { + if (tokenIsIdentifier(this.state.type) || this.match(78)) { + const token = this.lookahead().type; + isGroupedType = token !== 17 && token !== 14; + } else { + isGroupedType = true; + } + } + if (isGroupedType) { + this.state.noAnonFunctionType = false; + type = this.flowParseType(); + this.state.noAnonFunctionType = oldNoAnonFunctionType; + if (this.state.noAnonFunctionType || !(this.match(12) || this.match(11) && this.lookahead().type === 19)) { + this.expect(11); + return type; + } else { + this.eat(12); + } + } + if (type) { + tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]); + } else { + tmp = this.flowParseFunctionTypeParams(); + } + node.params = tmp.params; + node.rest = tmp.rest; + node.this = tmp._this; + this.expect(11); + this.expect(19); + node.returnType = this.flowParseType(); + node.typeParameters = null; + return this.finishNode(node, "FunctionTypeAnnotation"); + case 131: + return this.parseLiteral(this.state.value, "StringLiteralTypeAnnotation"); + case 85: + case 86: + node.value = this.match(85); + this.next(); + return this.finishNode(node, "BooleanLiteralTypeAnnotation"); + case 53: + if (this.state.value === "-") { + this.next(); + if (this.match(132)) { + return this.parseLiteralAtNode(-this.state.value, "NumberLiteralTypeAnnotation", node); + } + if (this.match(133)) { + return this.parseLiteralAtNode(-this.state.value, "BigIntLiteralTypeAnnotation", node); + } + throw this.raise(FlowErrors.UnexpectedSubtractionOperand, { + at: this.state.startLoc + }); + } + this.unexpected(); + return; + case 132: + return this.parseLiteral(this.state.value, "NumberLiteralTypeAnnotation"); + case 133: + return this.parseLiteral(this.state.value, "BigIntLiteralTypeAnnotation"); + case 88: + this.next(); + return this.finishNode(node, "VoidTypeAnnotation"); + case 84: + this.next(); + return this.finishNode(node, "NullLiteralTypeAnnotation"); + case 78: + this.next(); + return this.finishNode(node, "ThisTypeAnnotation"); + case 55: + this.next(); + return this.finishNode(node, "ExistsTypeAnnotation"); + case 87: + return this.flowParseTypeofType(); + default: + if (tokenIsKeyword(this.state.type)) { + const label = tokenLabelName(this.state.type); + this.next(); + return super.createIdentifier(node, label); + } else if (tokenIsIdentifier(this.state.type)) { + if (this.isContextual(127)) { + return this.flowParseInterfaceType(); + } + return this.flowIdentToTypeAnnotation(startLoc, node, this.parseIdentifier()); + } + } + this.unexpected(); + } + flowParsePostfixType() { + const startLoc = this.state.startLoc; + let type = this.flowParsePrimaryType(); + let seenOptionalIndexedAccess = false; + while ((this.match(0) || this.match(18)) && !this.canInsertSemicolon()) { + const node = this.startNodeAt(startLoc); + const optional = this.eat(18); + seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional; + this.expect(0); + if (!optional && this.match(3)) { + node.elementType = type; + this.next(); + type = this.finishNode(node, "ArrayTypeAnnotation"); + } else { + node.objectType = type; + node.indexType = this.flowParseType(); + this.expect(3); + if (seenOptionalIndexedAccess) { + node.optional = optional; + type = this.finishNode(node, "OptionalIndexedAccessType"); + } else { + type = this.finishNode(node, "IndexedAccessType"); + } + } + } + return type; + } + flowParsePrefixType() { + const node = this.startNode(); + if (this.eat(17)) { + node.typeAnnotation = this.flowParsePrefixType(); + return this.finishNode(node, "NullableTypeAnnotation"); + } else { + return this.flowParsePostfixType(); + } + } + flowParseAnonFunctionWithoutParens() { + const param = this.flowParsePrefixType(); + if (!this.state.noAnonFunctionType && this.eat(19)) { + const node = this.startNodeAt(param.loc.start); + node.params = [this.reinterpretTypeAsFunctionTypeParam(param)]; + node.rest = null; + node.this = null; + node.returnType = this.flowParseType(); + node.typeParameters = null; + return this.finishNode(node, "FunctionTypeAnnotation"); + } + return param; + } + flowParseIntersectionType() { + const node = this.startNode(); + this.eat(45); + const type = this.flowParseAnonFunctionWithoutParens(); + node.types = [type]; + while (this.eat(45)) { + node.types.push(this.flowParseAnonFunctionWithoutParens()); + } + return node.types.length === 1 ? type : this.finishNode(node, "IntersectionTypeAnnotation"); + } + flowParseUnionType() { + const node = this.startNode(); + this.eat(43); + const type = this.flowParseIntersectionType(); + node.types = [type]; + while (this.eat(43)) { + node.types.push(this.flowParseIntersectionType()); + } + return node.types.length === 1 ? type : this.finishNode(node, "UnionTypeAnnotation"); + } + flowParseType() { + const oldInType = this.state.inType; + this.state.inType = true; + const type = this.flowParseUnionType(); + this.state.inType = oldInType; + return type; + } + flowParseTypeOrImplicitInstantiation() { + if (this.state.type === 130 && this.state.value === "_") { + const startLoc = this.state.startLoc; + const node = this.parseIdentifier(); + return this.flowParseGenericType(startLoc, node); + } else { + return this.flowParseType(); + } + } + flowParseTypeAnnotation() { + const node = this.startNode(); + node.typeAnnotation = this.flowParseTypeInitialiser(); + return this.finishNode(node, "TypeAnnotation"); + } + flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) { + const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier(); + if (this.match(14)) { + ident.typeAnnotation = this.flowParseTypeAnnotation(); + this.resetEndLocation(ident); + } + return ident; + } + typeCastToParameter(node) { + node.expression.typeAnnotation = node.typeAnnotation; + this.resetEndLocation(node.expression, node.typeAnnotation.loc.end); + return node.expression; + } + flowParseVariance() { + let variance = null; + if (this.match(53)) { + variance = this.startNode(); + if (this.state.value === "+") { + variance.kind = "plus"; + } else { + variance.kind = "minus"; + } + this.next(); + return this.finishNode(variance, "Variance"); + } + return variance; + } + parseFunctionBody(node, allowExpressionBody, isMethod = false) { + if (allowExpressionBody) { + this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod)); + return; + } + super.parseFunctionBody(node, false, isMethod); + } + parseFunctionBodyAndFinish(node, type, isMethod = false) { + if (this.match(14)) { + const typeNode = this.startNode(); + [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser(); + node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, "TypeAnnotation") : null; + } + return super.parseFunctionBodyAndFinish(node, type, isMethod); + } + parseStatementLike(flags) { + if (this.state.strict && this.isContextual(127)) { + const lookahead = this.lookahead(); + if (tokenIsKeywordOrIdentifier(lookahead.type)) { + const node = this.startNode(); + this.next(); + return this.flowParseInterface(node); + } + } else if (this.shouldParseEnums() && this.isContextual(124)) { + const node = this.startNode(); + this.next(); + return this.flowParseEnumDeclaration(node); + } + const stmt = super.parseStatementLike(flags); + if (this.flowPragma === undefined && !this.isValidDirective(stmt)) { + this.flowPragma = null; + } + return stmt; + } + parseExpressionStatement(node, expr, decorators) { + if (expr.type === "Identifier") { + if (expr.name === "declare") { + if (this.match(80) || tokenIsIdentifier(this.state.type) || this.match(68) || this.match(74) || this.match(82)) { + return this.flowParseDeclare(node); + } + } else if (tokenIsIdentifier(this.state.type)) { + if (expr.name === "interface") { + return this.flowParseInterface(node); + } else if (expr.name === "type") { + return this.flowParseTypeAlias(node); + } else if (expr.name === "opaque") { + return this.flowParseOpaqueType(node, false); + } + } + } + return super.parseExpressionStatement(node, expr, decorators); + } + shouldParseExportDeclaration() { + const { + type + } = this.state; + if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 124) { + return !this.state.containsEsc; + } + return super.shouldParseExportDeclaration(); + } + isExportDefaultSpecifier() { + const { + type + } = this.state; + if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 124) { + return this.state.containsEsc; + } + return super.isExportDefaultSpecifier(); + } + parseExportDefaultExpression() { + if (this.shouldParseEnums() && this.isContextual(124)) { + const node = this.startNode(); + this.next(); + return this.flowParseEnumDeclaration(node); + } + return super.parseExportDefaultExpression(); + } + parseConditional(expr, startLoc, refExpressionErrors) { + if (!this.match(17)) return expr; + if (this.state.maybeInArrowParameters) { + const nextCh = this.lookaheadCharCode(); + if (nextCh === 44 || nextCh === 61 || nextCh === 58 || nextCh === 41) { + this.setOptionalParametersError(refExpressionErrors); + return expr; + } + } + this.expect(17); + const state = this.state.clone(); + const originalNoArrowAt = this.state.noArrowAt; + const node = this.startNodeAt(startLoc); + let { + consequent, + failed + } = this.tryParseConditionalConsequent(); + let [valid, invalid] = this.getArrowLikeExpressions(consequent); + if (failed || invalid.length > 0) { + const noArrowAt = [...originalNoArrowAt]; + if (invalid.length > 0) { + this.state = state; + this.state.noArrowAt = noArrowAt; + for (let i = 0; i < invalid.length; i++) { + noArrowAt.push(invalid[i].start); + } + ({ + consequent, + failed + } = this.tryParseConditionalConsequent()); + [valid, invalid] = this.getArrowLikeExpressions(consequent); + } + if (failed && valid.length > 1) { + this.raise(FlowErrors.AmbiguousConditionalArrow, { + at: state.startLoc + }); + } + if (failed && valid.length === 1) { + this.state = state; + noArrowAt.push(valid[0].start); + this.state.noArrowAt = noArrowAt; + ({ + consequent, + failed + } = this.tryParseConditionalConsequent()); + } + } + this.getArrowLikeExpressions(consequent, true); + this.state.noArrowAt = originalNoArrowAt; + this.expect(14); + node.test = expr; + node.consequent = consequent; + node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined)); + return this.finishNode(node, "ConditionalExpression"); + } + tryParseConditionalConsequent() { + this.state.noArrowParamsConversionAt.push(this.state.start); + const consequent = this.parseMaybeAssignAllowIn(); + const failed = !this.match(14); + this.state.noArrowParamsConversionAt.pop(); + return { + consequent, + failed + }; + } + getArrowLikeExpressions(node, disallowInvalid) { + const stack = [node]; + const arrows = []; + while (stack.length !== 0) { + const node = stack.pop(); + if (node.type === "ArrowFunctionExpression") { + if (node.typeParameters || !node.returnType) { + this.finishArrowValidation(node); + } else { + arrows.push(node); + } + stack.push(node.body); + } else if (node.type === "ConditionalExpression") { + stack.push(node.consequent); + stack.push(node.alternate); + } + } + if (disallowInvalid) { + arrows.forEach(node => this.finishArrowValidation(node)); + return [arrows, []]; + } + return partition(arrows, node => node.params.every(param => this.isAssignable(param, true))); + } + finishArrowValidation(node) { + var _node$extra; + this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingCommaLoc, false); + this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW); + super.checkParams(node, false, true); + this.scope.exit(); + } + forwardNoArrowParamsConversionAt(node, parse) { + let result; + if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) { + this.state.noArrowParamsConversionAt.push(this.state.start); + result = parse(); + this.state.noArrowParamsConversionAt.pop(); + } else { + result = parse(); + } + return result; + } + parseParenItem(node, startLoc) { + node = super.parseParenItem(node, startLoc); + if (this.eat(17)) { + node.optional = true; + this.resetEndLocation(node); + } + if (this.match(14)) { + const typeCastNode = this.startNodeAt(startLoc); + typeCastNode.expression = node; + typeCastNode.typeAnnotation = this.flowParseTypeAnnotation(); + return this.finishNode(typeCastNode, "TypeCastExpression"); + } + return node; + } + assertModuleNodeAllowed(node) { + if (node.type === "ImportDeclaration" && (node.importKind === "type" || node.importKind === "typeof") || node.type === "ExportNamedDeclaration" && node.exportKind === "type" || node.type === "ExportAllDeclaration" && node.exportKind === "type") { + return; + } + super.assertModuleNodeAllowed(node); + } + parseExport(node, decorators) { + const decl = super.parseExport(node, decorators); + if (decl.type === "ExportNamedDeclaration" || decl.type === "ExportAllDeclaration") { + decl.exportKind = decl.exportKind || "value"; + } + return decl; + } + parseExportDeclaration(node) { + if (this.isContextual(128)) { + node.exportKind = "type"; + const declarationNode = this.startNode(); + this.next(); + if (this.match(5)) { + node.specifiers = this.parseExportSpecifiers(true); + super.parseExportFrom(node); + return null; + } else { + return this.flowParseTypeAlias(declarationNode); + } + } else if (this.isContextual(129)) { + node.exportKind = "type"; + const declarationNode = this.startNode(); + this.next(); + return this.flowParseOpaqueType(declarationNode, false); + } else if (this.isContextual(127)) { + node.exportKind = "type"; + const declarationNode = this.startNode(); + this.next(); + return this.flowParseInterface(declarationNode); + } else if (this.shouldParseEnums() && this.isContextual(124)) { + node.exportKind = "value"; + const declarationNode = this.startNode(); + this.next(); + return this.flowParseEnumDeclaration(declarationNode); + } else { + return super.parseExportDeclaration(node); + } + } + eatExportStar(node) { + if (super.eatExportStar(node)) return true; + if (this.isContextual(128) && this.lookahead().type === 55) { + node.exportKind = "type"; + this.next(); + this.next(); + return true; + } + return false; + } + maybeParseExportNamespaceSpecifier(node) { + const { + startLoc + } = this.state; + const hasNamespace = super.maybeParseExportNamespaceSpecifier(node); + if (hasNamespace && node.exportKind === "type") { + this.unexpected(startLoc); + } + return hasNamespace; + } + parseClassId(node, isStatement, optionalId) { + super.parseClassId(node, isStatement, optionalId); + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterDeclaration(); + } + } + parseClassMember(classBody, member, state) { + const { + startLoc + } = this.state; + if (this.isContextual(123)) { + if (super.parseClassMemberFromModifier(classBody, member)) { + return; + } + member.declare = true; + } + super.parseClassMember(classBody, member, state); + if (member.declare) { + if (member.type !== "ClassProperty" && member.type !== "ClassPrivateProperty" && member.type !== "PropertyDefinition") { + this.raise(FlowErrors.DeclareClassElement, { + at: startLoc + }); + } else if (member.value) { + this.raise(FlowErrors.DeclareClassFieldInitializer, { + at: member.value + }); + } + } + } + isIterator(word) { + return word === "iterator" || word === "asyncIterator"; + } + readIterator() { + const word = super.readWord1(); + const fullWord = "@@" + word; + if (!this.isIterator(word) || !this.state.inType) { + this.raise(Errors.InvalidIdentifier, { + at: this.state.curPosition(), + identifierName: fullWord + }); + } + this.finishToken(130, fullWord); + } + getTokenFromCode(code) { + const next = this.input.charCodeAt(this.state.pos + 1); + if (code === 123 && next === 124) { + this.finishOp(6, 2); + } else if (this.state.inType && (code === 62 || code === 60)) { + this.finishOp(code === 62 ? 48 : 47, 1); + } else if (this.state.inType && code === 63) { + if (next === 46) { + this.finishOp(18, 2); + } else { + this.finishOp(17, 1); + } + } else if (isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))) { + this.state.pos += 2; + this.readIterator(); + } else { + super.getTokenFromCode(code); + } + } + isAssignable(node, isBinding) { + if (node.type === "TypeCastExpression") { + return this.isAssignable(node.expression, isBinding); + } else { + return super.isAssignable(node, isBinding); + } + } + toAssignable(node, isLHS = false) { + if (!isLHS && node.type === "AssignmentExpression" && node.left.type === "TypeCastExpression") { + node.left = this.typeCastToParameter(node.left); + } + super.toAssignable(node, isLHS); + } + toAssignableList(exprList, trailingCommaLoc, isLHS) { + for (let i = 0; i < exprList.length; i++) { + const expr = exprList[i]; + if ((expr == null ? void 0 : expr.type) === "TypeCastExpression") { + exprList[i] = this.typeCastToParameter(expr); + } + } + super.toAssignableList(exprList, trailingCommaLoc, isLHS); + } + toReferencedList(exprList, isParenthesizedExpr) { + for (let i = 0; i < exprList.length; i++) { + var _expr$extra; + const expr = exprList[i]; + if (expr && expr.type === "TypeCastExpression" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) { + this.raise(FlowErrors.TypeCastInPattern, { + at: expr.typeAnnotation + }); + } + } + return exprList; + } + parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) { + const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors); + if (canBePattern && !this.state.maybeInArrowParameters) { + this.toReferencedList(node.elements); + } + return node; + } + isValidLVal(type, isParenthesized, binding) { + return type === "TypeCastExpression" || super.isValidLVal(type, isParenthesized, binding); + } + parseClassProperty(node) { + if (this.match(14)) { + node.typeAnnotation = this.flowParseTypeAnnotation(); + } + return super.parseClassProperty(node); + } + parseClassPrivateProperty(node) { + if (this.match(14)) { + node.typeAnnotation = this.flowParseTypeAnnotation(); + } + return super.parseClassPrivateProperty(node); + } + isClassMethod() { + return this.match(47) || super.isClassMethod(); + } + isClassProperty() { + return this.match(14) || super.isClassProperty(); + } + isNonstaticConstructor(method) { + return !this.match(14) && super.isNonstaticConstructor(method); + } + pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) { + if (method.variance) { + this.unexpected(method.variance.loc.start); + } + delete method.variance; + if (this.match(47)) { + method.typeParameters = this.flowParseTypeParameterDeclaration(); + } + super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper); + if (method.params && isConstructor) { + const params = method.params; + if (params.length > 0 && this.isThisParam(params[0])) { + this.raise(FlowErrors.ThisParamBannedInConstructor, { + at: method + }); + } + } else if (method.type === "MethodDefinition" && isConstructor && method.value.params) { + const params = method.value.params; + if (params.length > 0 && this.isThisParam(params[0])) { + this.raise(FlowErrors.ThisParamBannedInConstructor, { + at: method + }); + } + } + } + pushClassPrivateMethod(classBody, method, isGenerator, isAsync) { + if (method.variance) { + this.unexpected(method.variance.loc.start); + } + delete method.variance; + if (this.match(47)) { + method.typeParameters = this.flowParseTypeParameterDeclaration(); + } + super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync); + } + parseClassSuper(node) { + super.parseClassSuper(node); + if (node.superClass && this.match(47)) { + node.superTypeParameters = this.flowParseTypeParameterInstantiation(); + } + if (this.isContextual(111)) { + this.next(); + const implemented = node.implements = []; + do { + const node = this.startNode(); + node.id = this.flowParseRestrictedIdentifier(true); + if (this.match(47)) { + node.typeParameters = this.flowParseTypeParameterInstantiation(); + } else { + node.typeParameters = null; + } + implemented.push(this.finishNode(node, "ClassImplements")); + } while (this.eat(12)); + } + } + checkGetterSetterParams(method) { + super.checkGetterSetterParams(method); + const params = this.getObjectOrClassMethodParams(method); + if (params.length > 0) { + const param = params[0]; + if (this.isThisParam(param) && method.kind === "get") { + this.raise(FlowErrors.GetterMayNotHaveThisParam, { + at: param + }); + } else if (this.isThisParam(param)) { + this.raise(FlowErrors.SetterMayNotHaveThisParam, { + at: param + }); + } + } + } + parsePropertyNamePrefixOperator(node) { + node.variance = this.flowParseVariance(); + } + parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) { + if (prop.variance) { + this.unexpected(prop.variance.loc.start); + } + delete prop.variance; + let typeParameters; + if (this.match(47) && !isAccessor) { + typeParameters = this.flowParseTypeParameterDeclaration(); + if (!this.match(10)) this.unexpected(); + } + const result = super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors); + if (typeParameters) { + (result.value || result).typeParameters = typeParameters; + } + return result; + } + parseAssignableListItemTypes(param) { + if (this.eat(17)) { + if (param.type !== "Identifier") { + this.raise(FlowErrors.PatternIsOptional, { + at: param + }); + } + if (this.isThisParam(param)) { + this.raise(FlowErrors.ThisParamMayNotBeOptional, { + at: param + }); + } + param.optional = true; + } + if (this.match(14)) { + param.typeAnnotation = this.flowParseTypeAnnotation(); + } else if (this.isThisParam(param)) { + this.raise(FlowErrors.ThisParamAnnotationRequired, { + at: param + }); + } + if (this.match(29) && this.isThisParam(param)) { + this.raise(FlowErrors.ThisParamNoDefault, { + at: param + }); + } + this.resetEndLocation(param); + return param; + } + parseMaybeDefault(startLoc, left) { + const node = super.parseMaybeDefault(startLoc, left); + if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) { + this.raise(FlowErrors.TypeBeforeInitializer, { + at: node.typeAnnotation + }); + } + return node; + } + shouldParseDefaultImport(node) { + if (!hasTypeImportKind(node)) { + return super.shouldParseDefaultImport(node); + } + return isMaybeDefaultImport(this.state.type); + } + checkImportReflection(node) { + super.checkImportReflection(node); + if (node.module && node.importKind !== "value") { + this.raise(FlowErrors.ImportReflectionHasImportType, { + at: node.specifiers[0].loc.start + }); + } + } + parseImportSpecifierLocal(node, specifier, type) { + specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier(); + node.specifiers.push(this.finishImportSpecifier(specifier, type)); + } + maybeParseDefaultImportSpecifier(node) { + node.importKind = "value"; + let kind = null; + if (this.match(87)) { + kind = "typeof"; + } else if (this.isContextual(128)) { + kind = "type"; + } + if (kind) { + const lh = this.lookahead(); + const { + type + } = lh; + if (kind === "type" && type === 55) { + this.unexpected(null, lh.type); + } + if (isMaybeDefaultImport(type) || type === 5 || type === 55) { + this.next(); + node.importKind = kind; + } + } + return super.maybeParseDefaultImportSpecifier(node); + } + parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) { + const firstIdent = specifier.imported; + let specifierTypeKind = null; + if (firstIdent.type === "Identifier") { + if (firstIdent.name === "type") { + specifierTypeKind = "type"; + } else if (firstIdent.name === "typeof") { + specifierTypeKind = "typeof"; + } + } + let isBinding = false; + if (this.isContextual(93) && !this.isLookaheadContextual("as")) { + const as_ident = this.parseIdentifier(true); + if (specifierTypeKind !== null && !tokenIsKeywordOrIdentifier(this.state.type)) { + specifier.imported = as_ident; + specifier.importKind = specifierTypeKind; + specifier.local = cloneIdentifier(as_ident); + } else { + specifier.imported = firstIdent; + specifier.importKind = null; + specifier.local = this.parseIdentifier(); + } + } else { + if (specifierTypeKind !== null && tokenIsKeywordOrIdentifier(this.state.type)) { + specifier.imported = this.parseIdentifier(true); + specifier.importKind = specifierTypeKind; + } else { + if (importedIsString) { + throw this.raise(Errors.ImportBindingIsString, { + at: specifier, + importName: firstIdent.value + }); + } + specifier.imported = firstIdent; + specifier.importKind = null; + } + if (this.eatContextual(93)) { + specifier.local = this.parseIdentifier(); + } else { + isBinding = true; + specifier.local = cloneIdentifier(specifier.imported); + } + } + const specifierIsTypeImport = hasTypeImportKind(specifier); + if (isInTypeOnlyImport && specifierIsTypeImport) { + this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, { + at: specifier + }); + } + if (isInTypeOnlyImport || specifierIsTypeImport) { + this.checkReservedType(specifier.local.name, specifier.local.loc.start, true); + } + if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) { + this.checkReservedWord(specifier.local.name, specifier.loc.start, true, true); + } + return this.finishImportSpecifier(specifier, "ImportSpecifier"); + } + parseBindingAtom() { + switch (this.state.type) { + case 78: + return this.parseIdentifier(true); + default: + return super.parseBindingAtom(); + } + } + parseFunctionParams(node, isConstructor) { + const kind = node.kind; + if (kind !== "get" && kind !== "set" && this.match(47)) { + node.typeParameters = this.flowParseTypeParameterDeclaration(); + } + super.parseFunctionParams(node, isConstructor); + } + parseVarId(decl, kind) { + super.parseVarId(decl, kind); + if (this.match(14)) { + decl.id.typeAnnotation = this.flowParseTypeAnnotation(); + this.resetEndLocation(decl.id); + } + } + parseAsyncArrowFromCallExpression(node, call) { + if (this.match(14)) { + const oldNoAnonFunctionType = this.state.noAnonFunctionType; + this.state.noAnonFunctionType = true; + node.returnType = this.flowParseTypeAnnotation(); + this.state.noAnonFunctionType = oldNoAnonFunctionType; + } + return super.parseAsyncArrowFromCallExpression(node, call); + } + shouldParseAsyncArrow() { + return this.match(14) || super.shouldParseAsyncArrow(); + } + parseMaybeAssign(refExpressionErrors, afterLeftParse) { + var _jsx; + let state = null; + let jsx; + if (this.hasPlugin("jsx") && (this.match(140) || this.match(47))) { + state = this.state.clone(); + jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state); + if (!jsx.error) return jsx.node; + const { + context + } = this.state; + const currentContext = context[context.length - 1]; + if (currentContext === types.j_oTag || currentContext === types.j_expr) { + context.pop(); + } + } + if ((_jsx = jsx) != null && _jsx.error || this.match(47)) { + var _jsx2, _jsx3; + state = state || this.state.clone(); + let typeParameters; + const arrow = this.tryParse(abort => { + var _arrowExpression$extr; + typeParameters = this.flowParseTypeParameterDeclaration(); + const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => { + const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse); + this.resetStartLocationFromNode(result, typeParameters); + return result; + }); + if ((_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) abort(); + const expr = this.maybeUnwrapTypeCastExpression(arrowExpression); + if (expr.type !== "ArrowFunctionExpression") abort(); + expr.typeParameters = typeParameters; + this.resetStartLocationFromNode(expr, typeParameters); + return arrowExpression; + }, state); + let arrowExpression = null; + if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === "ArrowFunctionExpression") { + if (!arrow.error && !arrow.aborted) { + if (arrow.node.async) { + this.raise(FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction, { + at: typeParameters + }); + } + return arrow.node; + } + arrowExpression = arrow.node; + } + if ((_jsx2 = jsx) != null && _jsx2.node) { + this.state = jsx.failState; + return jsx.node; + } + if (arrowExpression) { + this.state = arrow.failState; + return arrowExpression; + } + if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error; + if (arrow.thrown) throw arrow.error; + throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, { + at: typeParameters + }); + } + return super.parseMaybeAssign(refExpressionErrors, afterLeftParse); + } + parseArrow(node) { + if (this.match(14)) { + const result = this.tryParse(() => { + const oldNoAnonFunctionType = this.state.noAnonFunctionType; + this.state.noAnonFunctionType = true; + const typeNode = this.startNode(); + [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser(); + this.state.noAnonFunctionType = oldNoAnonFunctionType; + if (this.canInsertSemicolon()) this.unexpected(); + if (!this.match(19)) this.unexpected(); + return typeNode; + }); + if (result.thrown) return null; + if (result.error) this.state = result.failState; + node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, "TypeAnnotation") : null; + } + return super.parseArrow(node); + } + shouldParseArrow(params) { + return this.match(14) || super.shouldParseArrow(params); + } + setArrowFunctionParameters(node, params) { + if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) { + node.params = params; + } else { + super.setArrowFunctionParameters(node, params); + } + } + checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) { + if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) { + return; + } + for (let i = 0; i < node.params.length; i++) { + if (this.isThisParam(node.params[i]) && i > 0) { + this.raise(FlowErrors.ThisParamMustBeFirst, { + at: node.params[i] + }); + } + } + super.checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged); + } + parseParenAndDistinguishExpression(canBeArrow) { + return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1); + } + parseSubscripts(base, startLoc, noCalls) { + if (base.type === "Identifier" && base.name === "async" && this.state.noArrowAt.indexOf(startLoc.index) !== -1) { + this.next(); + const node = this.startNodeAt(startLoc); + node.callee = base; + node.arguments = super.parseCallExpressionArguments(11, false); + base = this.finishNode(node, "CallExpression"); + } else if (base.type === "Identifier" && base.name === "async" && this.match(47)) { + const state = this.state.clone(); + const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(), state); + if (!arrow.error && !arrow.aborted) return arrow.node; + const result = this.tryParse(() => super.parseSubscripts(base, startLoc, noCalls), state); + if (result.node && !result.error) return result.node; + if (arrow.node) { + this.state = arrow.failState; + return arrow.node; + } + if (result.node) { + this.state = result.failState; + return result.node; + } + throw arrow.error || result.error; + } + return super.parseSubscripts(base, startLoc, noCalls); + } + parseSubscript(base, startLoc, noCalls, subscriptState) { + if (this.match(18) && this.isLookaheadToken_lt()) { + subscriptState.optionalChainMember = true; + if (noCalls) { + subscriptState.stop = true; + return base; + } + this.next(); + const node = this.startNodeAt(startLoc); + node.callee = base; + node.typeArguments = this.flowParseTypeParameterInstantiation(); + this.expect(10); + node.arguments = this.parseCallExpressionArguments(11, false); + node.optional = true; + return this.finishCallExpression(node, true); + } else if (!noCalls && this.shouldParseTypes() && this.match(47)) { + const node = this.startNodeAt(startLoc); + node.callee = base; + const result = this.tryParse(() => { + node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew(); + this.expect(10); + node.arguments = super.parseCallExpressionArguments(11, false); + if (subscriptState.optionalChainMember) { + node.optional = false; + } + return this.finishCallExpression(node, subscriptState.optionalChainMember); + }); + if (result.node) { + if (result.error) this.state = result.failState; + return result.node; + } + } + return super.parseSubscript(base, startLoc, noCalls, subscriptState); + } + parseNewCallee(node) { + super.parseNewCallee(node); + let targs = null; + if (this.shouldParseTypes() && this.match(47)) { + targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node; + } + node.typeArguments = targs; + } + parseAsyncArrowWithTypeParameters(startLoc) { + const node = this.startNodeAt(startLoc); + this.parseFunctionParams(node, false); + if (!this.parseArrow(node)) return; + return super.parseArrowExpression(node, undefined, true); + } + readToken_mult_modulo(code) { + const next = this.input.charCodeAt(this.state.pos + 1); + if (code === 42 && next === 47 && this.state.hasFlowComment) { + this.state.hasFlowComment = false; + this.state.pos += 2; + this.nextToken(); + return; + } + super.readToken_mult_modulo(code); + } + readToken_pipe_amp(code) { + const next = this.input.charCodeAt(this.state.pos + 1); + if (code === 124 && next === 125) { + this.finishOp(9, 2); + return; + } + super.readToken_pipe_amp(code); + } + parseTopLevel(file, program) { + const fileNode = super.parseTopLevel(file, program); + if (this.state.hasFlowComment) { + this.raise(FlowErrors.UnterminatedFlowComment, { + at: this.state.curPosition() + }); + } + return fileNode; + } + skipBlockComment() { + if (this.hasPlugin("flowComments") && this.skipFlowComment()) { + if (this.state.hasFlowComment) { + throw this.raise(FlowErrors.NestedFlowComment, { + at: this.state.startLoc + }); + } + this.hasFlowCommentCompletion(); + const commentSkip = this.skipFlowComment(); + if (commentSkip) { + this.state.pos += commentSkip; + this.state.hasFlowComment = true; + } + return; + } + return super.skipBlockComment(this.state.hasFlowComment ? "*-/" : "*/"); + } + skipFlowComment() { + const { + pos + } = this.state; + let shiftToFirstNonWhiteSpace = 2; + while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) { + shiftToFirstNonWhiteSpace++; + } + const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos); + const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1); + if (ch2 === 58 && ch3 === 58) { + return shiftToFirstNonWhiteSpace + 2; + } + if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === "flow-include") { + return shiftToFirstNonWhiteSpace + 12; + } + if (ch2 === 58 && ch3 !== 58) { + return shiftToFirstNonWhiteSpace; + } + return false; + } + hasFlowCommentCompletion() { + const end = this.input.indexOf("*/", this.state.pos); + if (end === -1) { + throw this.raise(Errors.UnterminatedComment, { + at: this.state.curPosition() + }); + } + } + flowEnumErrorBooleanMemberNotInitialized(loc, { + enumName, + memberName + }) { + this.raise(FlowErrors.EnumBooleanMemberNotInitialized, { + at: loc, + memberName, + enumName + }); + } + flowEnumErrorInvalidMemberInitializer(loc, enumContext) { + return this.raise(!enumContext.explicitType ? FlowErrors.EnumInvalidMemberInitializerUnknownType : enumContext.explicitType === "symbol" ? FlowErrors.EnumInvalidMemberInitializerSymbolType : FlowErrors.EnumInvalidMemberInitializerPrimaryType, Object.assign({ + at: loc + }, enumContext)); + } + flowEnumErrorNumberMemberNotInitialized(loc, { + enumName, + memberName + }) { + this.raise(FlowErrors.EnumNumberMemberNotInitialized, { + at: loc, + enumName, + memberName + }); + } + flowEnumErrorStringMemberInconsistentlyInitailized(node, { + enumName + }) { + this.raise(FlowErrors.EnumStringMemberInconsistentlyInitailized, { + at: node, + enumName + }); + } + flowEnumMemberInit() { + const startLoc = this.state.startLoc; + const endOfInit = () => this.match(12) || this.match(8); + switch (this.state.type) { + case 132: + { + const literal = this.parseNumericLiteral(this.state.value); + if (endOfInit()) { + return { + type: "number", + loc: literal.loc.start, + value: literal + }; + } + return { + type: "invalid", + loc: startLoc + }; + } + case 131: + { + const literal = this.parseStringLiteral(this.state.value); + if (endOfInit()) { + return { + type: "string", + loc: literal.loc.start, + value: literal + }; + } + return { + type: "invalid", + loc: startLoc + }; + } + case 85: + case 86: + { + const literal = this.parseBooleanLiteral(this.match(85)); + if (endOfInit()) { + return { + type: "boolean", + loc: literal.loc.start, + value: literal + }; + } + return { + type: "invalid", + loc: startLoc + }; + } + default: + return { + type: "invalid", + loc: startLoc + }; + } + } + flowEnumMemberRaw() { + const loc = this.state.startLoc; + const id = this.parseIdentifier(true); + const init = this.eat(29) ? this.flowEnumMemberInit() : { + type: "none", + loc + }; + return { + id, + init + }; + } + flowEnumCheckExplicitTypeMismatch(loc, context, expectedType) { + const { + explicitType + } = context; + if (explicitType === null) { + return; + } + if (explicitType !== expectedType) { + this.flowEnumErrorInvalidMemberInitializer(loc, context); + } + } + flowEnumMembers({ + enumName, + explicitType + }) { + const seenNames = new Set(); + const members = { + booleanMembers: [], + numberMembers: [], + stringMembers: [], + defaultedMembers: [] + }; + let hasUnknownMembers = false; + while (!this.match(8)) { + if (this.eat(21)) { + hasUnknownMembers = true; + break; + } + const memberNode = this.startNode(); + const { + id, + init + } = this.flowEnumMemberRaw(); + const memberName = id.name; + if (memberName === "") { + continue; + } + if (/^[a-z]/.test(memberName)) { + this.raise(FlowErrors.EnumInvalidMemberName, { + at: id, + memberName, + suggestion: memberName[0].toUpperCase() + memberName.slice(1), + enumName + }); + } + if (seenNames.has(memberName)) { + this.raise(FlowErrors.EnumDuplicateMemberName, { + at: id, + memberName, + enumName + }); + } + seenNames.add(memberName); + const context = { + enumName, + explicitType, + memberName + }; + memberNode.id = id; + switch (init.type) { + case "boolean": + { + this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "boolean"); + memberNode.init = init.value; + members.booleanMembers.push(this.finishNode(memberNode, "EnumBooleanMember")); + break; + } + case "number": + { + this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "number"); + memberNode.init = init.value; + members.numberMembers.push(this.finishNode(memberNode, "EnumNumberMember")); + break; + } + case "string": + { + this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "string"); + memberNode.init = init.value; + members.stringMembers.push(this.finishNode(memberNode, "EnumStringMember")); + break; + } + case "invalid": + { + throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context); + } + case "none": + { + switch (explicitType) { + case "boolean": + this.flowEnumErrorBooleanMemberNotInitialized(init.loc, context); + break; + case "number": + this.flowEnumErrorNumberMemberNotInitialized(init.loc, context); + break; + default: + members.defaultedMembers.push(this.finishNode(memberNode, "EnumDefaultedMember")); + } + } + } + if (!this.match(8)) { + this.expect(12); + } + } + return { + members, + hasUnknownMembers + }; + } + flowEnumStringMembers(initializedMembers, defaultedMembers, { + enumName + }) { + if (initializedMembers.length === 0) { + return defaultedMembers; + } else if (defaultedMembers.length === 0) { + return initializedMembers; + } else if (defaultedMembers.length > initializedMembers.length) { + for (const member of initializedMembers) { + this.flowEnumErrorStringMemberInconsistentlyInitailized(member, { + enumName + }); + } + return defaultedMembers; + } else { + for (const member of defaultedMembers) { + this.flowEnumErrorStringMemberInconsistentlyInitailized(member, { + enumName + }); + } + return initializedMembers; + } + } + flowEnumParseExplicitType({ + enumName + }) { + if (!this.eatContextual(101)) return null; + if (!tokenIsIdentifier(this.state.type)) { + throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, { + at: this.state.startLoc, + enumName + }); + } + const { + value + } = this.state; + this.next(); + if (value !== "boolean" && value !== "number" && value !== "string" && value !== "symbol") { + this.raise(FlowErrors.EnumInvalidExplicitType, { + at: this.state.startLoc, + enumName, + invalidEnumType: value + }); + } + return value; + } + flowEnumBody(node, id) { + const enumName = id.name; + const nameLoc = id.loc.start; + const explicitType = this.flowEnumParseExplicitType({ + enumName + }); + this.expect(5); + const { + members, + hasUnknownMembers + } = this.flowEnumMembers({ + enumName, + explicitType + }); + node.hasUnknownMembers = hasUnknownMembers; + switch (explicitType) { + case "boolean": + node.explicitType = true; + node.members = members.booleanMembers; + this.expect(8); + return this.finishNode(node, "EnumBooleanBody"); + case "number": + node.explicitType = true; + node.members = members.numberMembers; + this.expect(8); + return this.finishNode(node, "EnumNumberBody"); + case "string": + node.explicitType = true; + node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, { + enumName + }); + this.expect(8); + return this.finishNode(node, "EnumStringBody"); + case "symbol": + node.members = members.defaultedMembers; + this.expect(8); + return this.finishNode(node, "EnumSymbolBody"); + default: + { + const empty = () => { + node.members = []; + this.expect(8); + return this.finishNode(node, "EnumStringBody"); + }; + node.explicitType = false; + const boolsLen = members.booleanMembers.length; + const numsLen = members.numberMembers.length; + const strsLen = members.stringMembers.length; + const defaultedLen = members.defaultedMembers.length; + if (!boolsLen && !numsLen && !strsLen && !defaultedLen) { + return empty(); + } else if (!boolsLen && !numsLen) { + node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, { + enumName + }); + this.expect(8); + return this.finishNode(node, "EnumStringBody"); + } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) { + for (const member of members.defaultedMembers) { + this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, { + enumName, + memberName: member.id.name + }); + } + node.members = members.booleanMembers; + this.expect(8); + return this.finishNode(node, "EnumBooleanBody"); + } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) { + for (const member of members.defaultedMembers) { + this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, { + enumName, + memberName: member.id.name + }); + } + node.members = members.numberMembers; + this.expect(8); + return this.finishNode(node, "EnumNumberBody"); + } else { + this.raise(FlowErrors.EnumInconsistentMemberValues, { + at: nameLoc, + enumName + }); + return empty(); + } + } + } + } + flowParseEnumDeclaration(node) { + const id = this.parseIdentifier(); + node.id = id; + node.body = this.flowEnumBody(this.startNode(), id); + return this.finishNode(node, "EnumDeclaration"); + } + isLookaheadToken_lt() { + const next = this.nextTokenStart(); + if (this.input.charCodeAt(next) === 60) { + const afterNext = this.input.charCodeAt(next + 1); + return afterNext !== 60 && afterNext !== 61; + } + return false; + } + maybeUnwrapTypeCastExpression(node) { + return node.type === "TypeCastExpression" ? node.expression : node; + } +}; +const entities = { + __proto__: null, + quot: "\u0022", + amp: "&", + apos: "\u0027", + lt: "<", + gt: ">", + nbsp: "\u00A0", + iexcl: "\u00A1", + cent: "\u00A2", + pound: "\u00A3", + curren: "\u00A4", + yen: "\u00A5", + brvbar: "\u00A6", + sect: "\u00A7", + uml: "\u00A8", + copy: "\u00A9", + ordf: "\u00AA", + laquo: "\u00AB", + not: "\u00AC", + shy: "\u00AD", + reg: "\u00AE", + macr: "\u00AF", + deg: "\u00B0", + plusmn: "\u00B1", + sup2: "\u00B2", + sup3: "\u00B3", + acute: "\u00B4", + micro: "\u00B5", + para: "\u00B6", + middot: "\u00B7", + cedil: "\u00B8", + sup1: "\u00B9", + ordm: "\u00BA", + raquo: "\u00BB", + frac14: "\u00BC", + frac12: "\u00BD", + frac34: "\u00BE", + iquest: "\u00BF", + Agrave: "\u00C0", + Aacute: "\u00C1", + Acirc: "\u00C2", + Atilde: "\u00C3", + Auml: "\u00C4", + Aring: "\u00C5", + AElig: "\u00C6", + Ccedil: "\u00C7", + Egrave: "\u00C8", + Eacute: "\u00C9", + Ecirc: "\u00CA", + Euml: "\u00CB", + Igrave: "\u00CC", + Iacute: "\u00CD", + Icirc: "\u00CE", + Iuml: "\u00CF", + ETH: "\u00D0", + Ntilde: "\u00D1", + Ograve: "\u00D2", + Oacute: "\u00D3", + Ocirc: "\u00D4", + Otilde: "\u00D5", + Ouml: "\u00D6", + times: "\u00D7", + Oslash: "\u00D8", + Ugrave: "\u00D9", + Uacute: "\u00DA", + Ucirc: "\u00DB", + Uuml: "\u00DC", + Yacute: "\u00DD", + THORN: "\u00DE", + szlig: "\u00DF", + agrave: "\u00E0", + aacute: "\u00E1", + acirc: "\u00E2", + atilde: "\u00E3", + auml: "\u00E4", + aring: "\u00E5", + aelig: "\u00E6", + ccedil: "\u00E7", + egrave: "\u00E8", + eacute: "\u00E9", + ecirc: "\u00EA", + euml: "\u00EB", + igrave: "\u00EC", + iacute: "\u00ED", + icirc: "\u00EE", + iuml: "\u00EF", + eth: "\u00F0", + ntilde: "\u00F1", + ograve: "\u00F2", + oacute: "\u00F3", + ocirc: "\u00F4", + otilde: "\u00F5", + ouml: "\u00F6", + divide: "\u00F7", + oslash: "\u00F8", + ugrave: "\u00F9", + uacute: "\u00FA", + ucirc: "\u00FB", + uuml: "\u00FC", + yacute: "\u00FD", + thorn: "\u00FE", + yuml: "\u00FF", + OElig: "\u0152", + oelig: "\u0153", + Scaron: "\u0160", + scaron: "\u0161", + Yuml: "\u0178", + fnof: "\u0192", + circ: "\u02C6", + tilde: "\u02DC", + Alpha: "\u0391", + Beta: "\u0392", + Gamma: "\u0393", + Delta: "\u0394", + Epsilon: "\u0395", + Zeta: "\u0396", + Eta: "\u0397", + Theta: "\u0398", + Iota: "\u0399", + Kappa: "\u039A", + Lambda: "\u039B", + Mu: "\u039C", + Nu: "\u039D", + Xi: "\u039E", + Omicron: "\u039F", + Pi: "\u03A0", + Rho: "\u03A1", + Sigma: "\u03A3", + Tau: "\u03A4", + Upsilon: "\u03A5", + Phi: "\u03A6", + Chi: "\u03A7", + Psi: "\u03A8", + Omega: "\u03A9", + alpha: "\u03B1", + beta: "\u03B2", + gamma: "\u03B3", + delta: "\u03B4", + epsilon: "\u03B5", + zeta: "\u03B6", + eta: "\u03B7", + theta: "\u03B8", + iota: "\u03B9", + kappa: "\u03BA", + lambda: "\u03BB", + mu: "\u03BC", + nu: "\u03BD", + xi: "\u03BE", + omicron: "\u03BF", + pi: "\u03C0", + rho: "\u03C1", + sigmaf: "\u03C2", + sigma: "\u03C3", + tau: "\u03C4", + upsilon: "\u03C5", + phi: "\u03C6", + chi: "\u03C7", + psi: "\u03C8", + omega: "\u03C9", + thetasym: "\u03D1", + upsih: "\u03D2", + piv: "\u03D6", + ensp: "\u2002", + emsp: "\u2003", + thinsp: "\u2009", + zwnj: "\u200C", + zwj: "\u200D", + lrm: "\u200E", + rlm: "\u200F", + ndash: "\u2013", + mdash: "\u2014", + lsquo: "\u2018", + rsquo: "\u2019", + sbquo: "\u201A", + ldquo: "\u201C", + rdquo: "\u201D", + bdquo: "\u201E", + dagger: "\u2020", + Dagger: "\u2021", + bull: "\u2022", + hellip: "\u2026", + permil: "\u2030", + prime: "\u2032", + Prime: "\u2033", + lsaquo: "\u2039", + rsaquo: "\u203A", + oline: "\u203E", + frasl: "\u2044", + euro: "\u20AC", + image: "\u2111", + weierp: "\u2118", + real: "\u211C", + trade: "\u2122", + alefsym: "\u2135", + larr: "\u2190", + uarr: "\u2191", + rarr: "\u2192", + darr: "\u2193", + harr: "\u2194", + crarr: "\u21B5", + lArr: "\u21D0", + uArr: "\u21D1", + rArr: "\u21D2", + dArr: "\u21D3", + hArr: "\u21D4", + forall: "\u2200", + part: "\u2202", + exist: "\u2203", + empty: "\u2205", + nabla: "\u2207", + isin: "\u2208", + notin: "\u2209", + ni: "\u220B", + prod: "\u220F", + sum: "\u2211", + minus: "\u2212", + lowast: "\u2217", + radic: "\u221A", + prop: "\u221D", + infin: "\u221E", + ang: "\u2220", + and: "\u2227", + or: "\u2228", + cap: "\u2229", + cup: "\u222A", + int: "\u222B", + there4: "\u2234", + sim: "\u223C", + cong: "\u2245", + asymp: "\u2248", + ne: "\u2260", + equiv: "\u2261", + le: "\u2264", + ge: "\u2265", + sub: "\u2282", + sup: "\u2283", + nsub: "\u2284", + sube: "\u2286", + supe: "\u2287", + oplus: "\u2295", + otimes: "\u2297", + perp: "\u22A5", + sdot: "\u22C5", + lceil: "\u2308", + rceil: "\u2309", + lfloor: "\u230A", + rfloor: "\u230B", + lang: "\u2329", + rang: "\u232A", + loz: "\u25CA", + spades: "\u2660", + clubs: "\u2663", + hearts: "\u2665", + diams: "\u2666" +}; +const JsxErrors = ParseErrorEnum`jsx`({ + AttributeIsEmpty: "JSX attributes must only be assigned a non-empty expression.", + MissingClosingTagElement: ({ + openingTagName + }) => `Expected corresponding JSX closing tag for <${openingTagName}>.`, + MissingClosingTagFragment: "Expected corresponding JSX closing tag for <>.", + UnexpectedSequenceExpression: "Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?", + UnexpectedToken: ({ + unexpected, + HTMLEntity + }) => `Unexpected token \`${unexpected}\`. Did you mean \`${HTMLEntity}\` or \`{'${unexpected}'}\`?`, + UnsupportedJsxValue: "JSX value should be either an expression or a quoted JSX text.", + UnterminatedJsxContent: "Unterminated JSX contents.", + UnwrappedAdjacentJSXElements: "Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...?" +}); +function isFragment(object) { + return object ? object.type === "JSXOpeningFragment" || object.type === "JSXClosingFragment" : false; +} +function getQualifiedJSXName(object) { + if (object.type === "JSXIdentifier") { + return object.name; + } + if (object.type === "JSXNamespacedName") { + return object.namespace.name + ":" + object.name.name; + } + if (object.type === "JSXMemberExpression") { + return getQualifiedJSXName(object.object) + "." + getQualifiedJSXName(object.property); + } + throw new Error("Node had unexpected type: " + object.type); +} +var jsx = superClass => class JSXParserMixin extends superClass { + jsxReadToken() { + let out = ""; + let chunkStart = this.state.pos; + for (;;) { + if (this.state.pos >= this.length) { + throw this.raise(JsxErrors.UnterminatedJsxContent, { + at: this.state.startLoc + }); + } + const ch = this.input.charCodeAt(this.state.pos); + switch (ch) { + case 60: + case 123: + if (this.state.pos === this.state.start) { + if (ch === 60 && this.state.canStartJSXElement) { + ++this.state.pos; + this.finishToken(140); + } else { + super.getTokenFromCode(ch); + } + return; + } + out += this.input.slice(chunkStart, this.state.pos); + this.finishToken(139, out); + return; + case 38: + out += this.input.slice(chunkStart, this.state.pos); + out += this.jsxReadEntity(); + chunkStart = this.state.pos; + break; + case 62: + case 125: + default: + if (isNewLine(ch)) { + out += this.input.slice(chunkStart, this.state.pos); + out += this.jsxReadNewLine(true); + chunkStart = this.state.pos; + } else { + ++this.state.pos; + } + } + } + } + jsxReadNewLine(normalizeCRLF) { + const ch = this.input.charCodeAt(this.state.pos); + let out; + ++this.state.pos; + if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) { + ++this.state.pos; + out = normalizeCRLF ? "\n" : "\r\n"; + } else { + out = String.fromCharCode(ch); + } + ++this.state.curLine; + this.state.lineStart = this.state.pos; + return out; + } + jsxReadString(quote) { + let out = ""; + let chunkStart = ++this.state.pos; + for (;;) { + if (this.state.pos >= this.length) { + throw this.raise(Errors.UnterminatedString, { + at: this.state.startLoc + }); + } + const ch = this.input.charCodeAt(this.state.pos); + if (ch === quote) break; + if (ch === 38) { + out += this.input.slice(chunkStart, this.state.pos); + out += this.jsxReadEntity(); + chunkStart = this.state.pos; + } else if (isNewLine(ch)) { + out += this.input.slice(chunkStart, this.state.pos); + out += this.jsxReadNewLine(false); + chunkStart = this.state.pos; + } else { + ++this.state.pos; + } + } + out += this.input.slice(chunkStart, this.state.pos++); + this.finishToken(131, out); + } + jsxReadEntity() { + const startPos = ++this.state.pos; + if (this.codePointAtPos(this.state.pos) === 35) { + ++this.state.pos; + let radix = 10; + if (this.codePointAtPos(this.state.pos) === 120) { + radix = 16; + ++this.state.pos; + } + const codePoint = this.readInt(radix, undefined, false, "bail"); + if (codePoint !== null && this.codePointAtPos(this.state.pos) === 59) { + ++this.state.pos; + return String.fromCodePoint(codePoint); + } + } else { + let count = 0; + let semi = false; + while (count++ < 10 && this.state.pos < this.length && !(semi = this.codePointAtPos(this.state.pos) == 59)) { + ++this.state.pos; + } + if (semi) { + const desc = this.input.slice(startPos, this.state.pos); + const entity = entities[desc]; + ++this.state.pos; + if (entity) { + return entity; + } + } + } + this.state.pos = startPos; + return "&"; + } + jsxReadWord() { + let ch; + const start = this.state.pos; + do { + ch = this.input.charCodeAt(++this.state.pos); + } while (isIdentifierChar(ch) || ch === 45); + this.finishToken(138, this.input.slice(start, this.state.pos)); + } + jsxParseIdentifier() { + const node = this.startNode(); + if (this.match(138)) { + node.name = this.state.value; + } else if (tokenIsKeyword(this.state.type)) { + node.name = tokenLabelName(this.state.type); + } else { + this.unexpected(); + } + this.next(); + return this.finishNode(node, "JSXIdentifier"); + } + jsxParseNamespacedName() { + const startLoc = this.state.startLoc; + const name = this.jsxParseIdentifier(); + if (!this.eat(14)) return name; + const node = this.startNodeAt(startLoc); + node.namespace = name; + node.name = this.jsxParseIdentifier(); + return this.finishNode(node, "JSXNamespacedName"); + } + jsxParseElementName() { + const startLoc = this.state.startLoc; + let node = this.jsxParseNamespacedName(); + if (node.type === "JSXNamespacedName") { + return node; + } + while (this.eat(16)) { + const newNode = this.startNodeAt(startLoc); + newNode.object = node; + newNode.property = this.jsxParseIdentifier(); + node = this.finishNode(newNode, "JSXMemberExpression"); + } + return node; + } + jsxParseAttributeValue() { + let node; + switch (this.state.type) { + case 5: + node = this.startNode(); + this.setContext(types.brace); + this.next(); + node = this.jsxParseExpressionContainer(node, types.j_oTag); + if (node.expression.type === "JSXEmptyExpression") { + this.raise(JsxErrors.AttributeIsEmpty, { + at: node + }); + } + return node; + case 140: + case 131: + return this.parseExprAtom(); + default: + throw this.raise(JsxErrors.UnsupportedJsxValue, { + at: this.state.startLoc + }); + } + } + jsxParseEmptyExpression() { + const node = this.startNodeAt(this.state.lastTokEndLoc); + return this.finishNodeAt(node, "JSXEmptyExpression", this.state.startLoc); + } + jsxParseSpreadChild(node) { + this.next(); + node.expression = this.parseExpression(); + this.setContext(types.j_expr); + this.state.canStartJSXElement = true; + this.expect(8); + return this.finishNode(node, "JSXSpreadChild"); + } + jsxParseExpressionContainer(node, previousContext) { + if (this.match(8)) { + node.expression = this.jsxParseEmptyExpression(); + } else { + const expression = this.parseExpression(); + node.expression = expression; + } + this.setContext(previousContext); + this.state.canStartJSXElement = true; + this.expect(8); + return this.finishNode(node, "JSXExpressionContainer"); + } + jsxParseAttribute() { + const node = this.startNode(); + if (this.match(5)) { + this.setContext(types.brace); + this.next(); + this.expect(21); + node.argument = this.parseMaybeAssignAllowIn(); + this.setContext(types.j_oTag); + this.state.canStartJSXElement = true; + this.expect(8); + return this.finishNode(node, "JSXSpreadAttribute"); + } + node.name = this.jsxParseNamespacedName(); + node.value = this.eat(29) ? this.jsxParseAttributeValue() : null; + return this.finishNode(node, "JSXAttribute"); + } + jsxParseOpeningElementAt(startLoc) { + const node = this.startNodeAt(startLoc); + if (this.eat(141)) { + return this.finishNode(node, "JSXOpeningFragment"); + } + node.name = this.jsxParseElementName(); + return this.jsxParseOpeningElementAfterName(node); + } + jsxParseOpeningElementAfterName(node) { + const attributes = []; + while (!this.match(56) && !this.match(141)) { + attributes.push(this.jsxParseAttribute()); + } + node.attributes = attributes; + node.selfClosing = this.eat(56); + this.expect(141); + return this.finishNode(node, "JSXOpeningElement"); + } + jsxParseClosingElementAt(startLoc) { + const node = this.startNodeAt(startLoc); + if (this.eat(141)) { + return this.finishNode(node, "JSXClosingFragment"); + } + node.name = this.jsxParseElementName(); + this.expect(141); + return this.finishNode(node, "JSXClosingElement"); + } + jsxParseElementAt(startLoc) { + const node = this.startNodeAt(startLoc); + const children = []; + const openingElement = this.jsxParseOpeningElementAt(startLoc); + let closingElement = null; + if (!openingElement.selfClosing) { + contents: for (;;) { + switch (this.state.type) { + case 140: + startLoc = this.state.startLoc; + this.next(); + if (this.eat(56)) { + closingElement = this.jsxParseClosingElementAt(startLoc); + break contents; + } + children.push(this.jsxParseElementAt(startLoc)); + break; + case 139: + children.push(this.parseExprAtom()); + break; + case 5: + { + const node = this.startNode(); + this.setContext(types.brace); + this.next(); + if (this.match(21)) { + children.push(this.jsxParseSpreadChild(node)); + } else { + children.push(this.jsxParseExpressionContainer(node, types.j_expr)); + } + break; + } + default: + this.unexpected(); + } + } + if (isFragment(openingElement) && !isFragment(closingElement) && closingElement !== null) { + this.raise(JsxErrors.MissingClosingTagFragment, { + at: closingElement + }); + } else if (!isFragment(openingElement) && isFragment(closingElement)) { + this.raise(JsxErrors.MissingClosingTagElement, { + at: closingElement, + openingTagName: getQualifiedJSXName(openingElement.name) + }); + } else if (!isFragment(openingElement) && !isFragment(closingElement)) { + if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) { + this.raise(JsxErrors.MissingClosingTagElement, { + at: closingElement, + openingTagName: getQualifiedJSXName(openingElement.name) + }); + } + } + } + if (isFragment(openingElement)) { + node.openingFragment = openingElement; + node.closingFragment = closingElement; + } else { + node.openingElement = openingElement; + node.closingElement = closingElement; + } + node.children = children; + if (this.match(47)) { + throw this.raise(JsxErrors.UnwrappedAdjacentJSXElements, { + at: this.state.startLoc + }); + } + return isFragment(openingElement) ? this.finishNode(node, "JSXFragment") : this.finishNode(node, "JSXElement"); + } + jsxParseElement() { + const startLoc = this.state.startLoc; + this.next(); + return this.jsxParseElementAt(startLoc); + } + setContext(newContext) { + const { + context + } = this.state; + context[context.length - 1] = newContext; + } + parseExprAtom(refExpressionErrors) { + if (this.match(139)) { + return this.parseLiteral(this.state.value, "JSXText"); + } else if (this.match(140)) { + return this.jsxParseElement(); + } else if (this.match(47) && this.input.charCodeAt(this.state.pos) !== 33) { + this.replaceToken(140); + return this.jsxParseElement(); + } else { + return super.parseExprAtom(refExpressionErrors); + } + } + skipSpace() { + const curContext = this.curContext(); + if (!curContext.preserveSpace) super.skipSpace(); + } + getTokenFromCode(code) { + const context = this.curContext(); + if (context === types.j_expr) { + this.jsxReadToken(); + return; + } + if (context === types.j_oTag || context === types.j_cTag) { + if (isIdentifierStart(code)) { + this.jsxReadWord(); + return; + } + if (code === 62) { + ++this.state.pos; + this.finishToken(141); + return; + } + if ((code === 34 || code === 39) && context === types.j_oTag) { + this.jsxReadString(code); + return; + } + } + if (code === 60 && this.state.canStartJSXElement && this.input.charCodeAt(this.state.pos + 1) !== 33) { + ++this.state.pos; + this.finishToken(140); + return; + } + super.getTokenFromCode(code); + } + updateContext(prevType) { + const { + context, + type + } = this.state; + if (type === 56 && prevType === 140) { + context.splice(-2, 2, types.j_cTag); + this.state.canStartJSXElement = false; + } else if (type === 140) { + context.push(types.j_oTag); + } else if (type === 141) { + const out = context[context.length - 1]; + if (out === types.j_oTag && prevType === 56 || out === types.j_cTag) { + context.pop(); + this.state.canStartJSXElement = context[context.length - 1] === types.j_expr; + } else { + this.setContext(types.j_expr); + this.state.canStartJSXElement = true; + } + } else { + this.state.canStartJSXElement = tokenComesBeforeExpression(type); + } + } +}; +class TypeScriptScope extends Scope { + constructor(...args) { + super(...args); + this.types = new Set(); + this.enums = new Set(); + this.constEnums = new Set(); + this.classes = new Set(); + this.exportOnlyBindings = new Set(); + } +} +class TypeScriptScopeHandler extends ScopeHandler { + constructor(...args) { + super(...args); + this.importsStack = []; + } + createScope(flags) { + this.importsStack.push(new Set()); + return new TypeScriptScope(flags); + } + enter(flags) { + if (flags == SCOPE_TS_MODULE) { + this.importsStack.push(new Set()); + } + super.enter(flags); + } + exit() { + const flags = super.exit(); + if (flags == SCOPE_TS_MODULE) { + this.importsStack.pop(); + } + return flags; + } + hasImport(name, allowShadow) { + const len = this.importsStack.length; + if (this.importsStack[len - 1].has(name)) { + return true; + } + if (!allowShadow && len > 1) { + for (let i = 0; i < len - 1; i++) { + if (this.importsStack[i].has(name)) return true; + } + } + return false; + } + declareName(name, bindingType, loc) { + if (bindingType & BIND_FLAGS_TS_IMPORT) { + if (this.hasImport(name, true)) { + this.parser.raise(Errors.VarRedeclaration, { + at: loc, + identifierName: name + }); + } + this.importsStack[this.importsStack.length - 1].add(name); + return; + } + const scope = this.currentScope(); + if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) { + this.maybeExportDefined(scope, name); + scope.exportOnlyBindings.add(name); + return; + } + super.declareName(name, bindingType, loc); + if (bindingType & BIND_KIND_TYPE) { + if (!(bindingType & BIND_KIND_VALUE)) { + this.checkRedeclarationInScope(scope, name, bindingType, loc); + this.maybeExportDefined(scope, name); + } + scope.types.add(name); + } + if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name); + if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name); + if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name); + } + isRedeclaredInScope(scope, name, bindingType) { + if (scope.enums.has(name)) { + if (bindingType & BIND_FLAGS_TS_ENUM) { + const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM); + const wasConst = scope.constEnums.has(name); + return isConst !== wasConst; + } + return true; + } + if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) { + if (scope.lexical.has(name)) { + return !!(bindingType & BIND_KIND_VALUE); + } else { + return false; + } + } + if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) { + return true; + } + return super.isRedeclaredInScope(scope, name, bindingType); + } + checkLocalExport(id) { + const { + name + } = id; + if (this.hasImport(name)) return; + const len = this.scopeStack.length; + for (let i = len - 1; i >= 0; i--) { + const scope = this.scopeStack[i]; + if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return; + } + super.checkLocalExport(id); + } +} +const getOwn$1 = (object, key) => Object.hasOwnProperty.call(object, key) && object[key]; +const unwrapParenthesizedExpression = node => { + return node.type === "ParenthesizedExpression" ? unwrapParenthesizedExpression(node.expression) : node; +}; +class LValParser extends NodeUtils { + toAssignable(node, isLHS = false) { + var _node$extra, _node$extra3; + let parenthesized = undefined; + if (node.type === "ParenthesizedExpression" || (_node$extra = node.extra) != null && _node$extra.parenthesized) { + parenthesized = unwrapParenthesizedExpression(node); + if (isLHS) { + if (parenthesized.type === "Identifier") { + this.expressionScope.recordArrowParameterBindingError(Errors.InvalidParenthesizedAssignment, { + at: node + }); + } else if (parenthesized.type !== "MemberExpression") { + this.raise(Errors.InvalidParenthesizedAssignment, { + at: node + }); + } + } else { + this.raise(Errors.InvalidParenthesizedAssignment, { + at: node + }); + } + } + switch (node.type) { + case "Identifier": + case "ObjectPattern": + case "ArrayPattern": + case "AssignmentPattern": + case "RestElement": + break; + case "ObjectExpression": + node.type = "ObjectPattern"; + for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) { + var _node$extra2; + const prop = node.properties[i]; + const isLast = i === last; + this.toAssignableObjectExpressionProp(prop, isLast, isLHS); + if (isLast && prop.type === "RestElement" && (_node$extra2 = node.extra) != null && _node$extra2.trailingCommaLoc) { + this.raise(Errors.RestTrailingComma, { + at: node.extra.trailingCommaLoc + }); + } + } + break; + case "ObjectProperty": + { + const { + key, + value + } = node; + if (this.isPrivateName(key)) { + this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start); + } + this.toAssignable(value, isLHS); + break; + } + case "SpreadElement": + { + throw new Error("Internal @babel/parser error (this is a bug, please report it)." + " SpreadElement should be converted by .toAssignable's caller."); + } + case "ArrayExpression": + node.type = "ArrayPattern"; + this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingCommaLoc, isLHS); + break; + case "AssignmentExpression": + if (node.operator !== "=") { + this.raise(Errors.MissingEqInAssignment, { + at: node.left.loc.end + }); + } + node.type = "AssignmentPattern"; + delete node.operator; + this.toAssignable(node.left, isLHS); + break; + case "ParenthesizedExpression": + this.toAssignable(parenthesized, isLHS); + break; + } + } + toAssignableObjectExpressionProp(prop, isLast, isLHS) { + if (prop.type === "ObjectMethod") { + this.raise(prop.kind === "get" || prop.kind === "set" ? Errors.PatternHasAccessor : Errors.PatternHasMethod, { + at: prop.key + }); + } else if (prop.type === "SpreadElement") { + prop.type = "RestElement"; + const arg = prop.argument; + this.checkToRestConversion(arg, false); + this.toAssignable(arg, isLHS); + if (!isLast) { + this.raise(Errors.RestTrailingComma, { + at: prop + }); + } + } else { + this.toAssignable(prop, isLHS); + } + } + toAssignableList(exprList, trailingCommaLoc, isLHS) { + const end = exprList.length - 1; + for (let i = 0; i <= end; i++) { + const elt = exprList[i]; + if (!elt) continue; + if (elt.type === "SpreadElement") { + elt.type = "RestElement"; + const arg = elt.argument; + this.checkToRestConversion(arg, true); + this.toAssignable(arg, isLHS); + } else { + this.toAssignable(elt, isLHS); + } + if (elt.type === "RestElement") { + if (i < end) { + this.raise(Errors.RestTrailingComma, { + at: elt + }); + } else if (trailingCommaLoc) { + this.raise(Errors.RestTrailingComma, { + at: trailingCommaLoc + }); + } + } + } + } + isAssignable(node, isBinding) { + switch (node.type) { + case "Identifier": + case "ObjectPattern": + case "ArrayPattern": + case "AssignmentPattern": + case "RestElement": + return true; + case "ObjectExpression": + { + const last = node.properties.length - 1; + return node.properties.every((prop, i) => { + return prop.type !== "ObjectMethod" && (i === last || prop.type !== "SpreadElement") && this.isAssignable(prop); + }); + } + case "ObjectProperty": + return this.isAssignable(node.value); + case "SpreadElement": + return this.isAssignable(node.argument); + case "ArrayExpression": + return node.elements.every(element => element === null || this.isAssignable(element)); + case "AssignmentExpression": + return node.operator === "="; + case "ParenthesizedExpression": + return this.isAssignable(node.expression); + case "MemberExpression": + case "OptionalMemberExpression": + return !isBinding; + default: + return false; + } + } + toReferencedList(exprList, isParenthesizedExpr) { + return exprList; + } + toReferencedListDeep(exprList, isParenthesizedExpr) { + this.toReferencedList(exprList, isParenthesizedExpr); + for (const expr of exprList) { + if ((expr == null ? void 0 : expr.type) === "ArrayExpression") { + this.toReferencedListDeep(expr.elements); + } + } + } + parseSpread(refExpressionErrors) { + const node = this.startNode(); + this.next(); + node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined); + return this.finishNode(node, "SpreadElement"); + } + parseRestBinding() { + const node = this.startNode(); + this.next(); + node.argument = this.parseBindingAtom(); + return this.finishNode(node, "RestElement"); + } + parseBindingAtom() { + switch (this.state.type) { + case 0: + { + const node = this.startNode(); + this.next(); + node.elements = this.parseBindingList(3, 93, 1); + return this.finishNode(node, "ArrayPattern"); + } + case 5: + return this.parseObjectLike(8, true); + } + return this.parseIdentifier(); + } + parseBindingList(close, closeCharCode, flags) { + const allowEmpty = flags & 1; + const elts = []; + let first = true; + while (!this.eat(close)) { + if (first) { + first = false; + } else { + this.expect(12); + } + if (allowEmpty && this.match(12)) { + elts.push(null); + } else if (this.eat(close)) { + break; + } else if (this.match(21)) { + elts.push(this.parseAssignableListItemTypes(this.parseRestBinding(), flags)); + if (!this.checkCommaAfterRest(closeCharCode)) { + this.expect(close); + break; + } + } else { + const decorators = []; + if (this.match(26) && this.hasPlugin("decorators")) { + this.raise(Errors.UnsupportedParameterDecorator, { + at: this.state.startLoc + }); + } + while (this.match(26)) { + decorators.push(this.parseDecorator()); + } + elts.push(this.parseAssignableListItem(flags, decorators)); + } + } + return elts; + } + parseBindingRestProperty(prop) { + this.next(); + prop.argument = this.parseIdentifier(); + this.checkCommaAfterRest(125); + return this.finishNode(prop, "RestElement"); + } + parseBindingProperty() { + const prop = this.startNode(); + const { + type, + startLoc + } = this.state; + if (type === 21) { + return this.parseBindingRestProperty(prop); + } else if (type === 136) { + this.expectPlugin("destructuringPrivate", startLoc); + this.classScope.usePrivateName(this.state.value, startLoc); + prop.key = this.parsePrivateName(); + } else { + this.parsePropertyName(prop); + } + prop.method = false; + return this.parseObjPropValue(prop, startLoc, false, false, true, false); + } + parseAssignableListItem(flags, decorators) { + const left = this.parseMaybeDefault(); + this.parseAssignableListItemTypes(left, flags); + const elt = this.parseMaybeDefault(left.loc.start, left); + if (decorators.length) { + left.decorators = decorators; + } + return elt; + } + parseAssignableListItemTypes(param, flags) { + return param; + } + parseMaybeDefault(startLoc, left) { + var _startLoc, _left; + (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc; + left = (_left = left) != null ? _left : this.parseBindingAtom(); + if (!this.eat(29)) return left; + const node = this.startNodeAt(startLoc); + node.left = left; + node.right = this.parseMaybeAssignAllowIn(); + return this.finishNode(node, "AssignmentPattern"); + } + isValidLVal(type, isUnparenthesizedInAssign, binding) { + return getOwn$1({ + AssignmentPattern: "left", + RestElement: "argument", + ObjectProperty: "value", + ParenthesizedExpression: "expression", + ArrayPattern: "elements", + ObjectPattern: "properties" + }, type); + } + checkLVal(expression, { + in: ancestor, + binding = BIND_NONE, + checkClashes = false, + strictModeChanged = false, + hasParenthesizedAncestor = false + }) { + var _expression$extra; + const type = expression.type; + if (this.isObjectMethod(expression)) return; + if (type === "MemberExpression") { + if (binding !== BIND_NONE) { + this.raise(Errors.InvalidPropertyBindingPattern, { + at: expression + }); + } + return; + } + if (type === "Identifier") { + this.checkIdentifier(expression, binding, strictModeChanged); + const { + name + } = expression; + if (checkClashes) { + if (checkClashes.has(name)) { + this.raise(Errors.ParamDupe, { + at: expression + }); + } else { + checkClashes.add(name); + } + } + return; + } + const validity = this.isValidLVal(type, !(hasParenthesizedAncestor || (_expression$extra = expression.extra) != null && _expression$extra.parenthesized) && ancestor.type === "AssignmentExpression", binding); + if (validity === true) return; + if (validity === false) { + const ParseErrorClass = binding === BIND_NONE ? Errors.InvalidLhs : Errors.InvalidLhsBinding; + this.raise(ParseErrorClass, { + at: expression, + ancestor + }); + return; + } + const [key, isParenthesizedExpression] = Array.isArray(validity) ? validity : [validity, type === "ParenthesizedExpression"]; + const nextAncestor = type === "ArrayPattern" || type === "ObjectPattern" || type === "ParenthesizedExpression" ? { + type + } : ancestor; + for (const child of [].concat(expression[key])) { + if (child) { + this.checkLVal(child, { + in: nextAncestor, + binding, + checkClashes, + strictModeChanged, + hasParenthesizedAncestor: isParenthesizedExpression + }); + } + } + } + checkIdentifier(at, bindingType, strictModeChanged = false) { + if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(at.name, this.inModule) : isStrictBindOnlyReservedWord(at.name))) { + if (bindingType === BIND_NONE) { + this.raise(Errors.StrictEvalArguments, { + at, + referenceName: at.name + }); + } else { + this.raise(Errors.StrictEvalArgumentsBinding, { + at, + bindingName: at.name + }); + } + } + if (bindingType & BIND_FLAGS_NO_LET_IN_LEXICAL && at.name === "let") { + this.raise(Errors.LetInLexicalBinding, { + at + }); + } + if (!(bindingType & BIND_NONE)) { + this.declareNameFromIdentifier(at, bindingType); + } + } + declareNameFromIdentifier(identifier, binding) { + this.scope.declareName(identifier.name, binding, identifier.loc.start); + } + checkToRestConversion(node, allowPattern) { + switch (node.type) { + case "ParenthesizedExpression": + this.checkToRestConversion(node.expression, allowPattern); + break; + case "Identifier": + case "MemberExpression": + break; + case "ArrayExpression": + case "ObjectExpression": + if (allowPattern) break; + default: + this.raise(Errors.InvalidRestAssignmentPattern, { + at: node + }); + } + } + checkCommaAfterRest(close) { + if (!this.match(12)) { + return false; + } + this.raise(this.lookaheadCharCode() === close ? Errors.RestTrailingComma : Errors.ElementAfterRest, { + at: this.state.startLoc + }); + return true; + } +} +const getOwn = (object, key) => Object.hasOwnProperty.call(object, key) && object[key]; +function nonNull(x) { + if (x == null) { + throw new Error(`Unexpected ${x} value.`); + } + return x; +} +function assert(x) { + if (!x) { + throw new Error("Assert fail"); + } +} +const TSErrors = ParseErrorEnum`typescript`({ + AbstractMethodHasImplementation: ({ + methodName + }) => `Method '${methodName}' cannot have an implementation because it is marked abstract.`, + AbstractPropertyHasInitializer: ({ + propertyName + }) => `Property '${propertyName}' cannot have an initializer because it is marked abstract.`, + AccesorCannotDeclareThisParameter: "'get' and 'set' accessors cannot declare 'this' parameters.", + AccesorCannotHaveTypeParameters: "An accessor cannot have type parameters.", + AccessorCannotBeOptional: "An 'accessor' property cannot be declared optional.", + ClassMethodHasDeclare: "Class methods cannot have the 'declare' modifier.", + ClassMethodHasReadonly: "Class methods cannot have the 'readonly' modifier.", + ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference: "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.", + ConstructorHasTypeParameters: "Type parameters cannot appear on a constructor declaration.", + DeclareAccessor: ({ + kind + }) => `'declare' is not allowed in ${kind}ters.`, + DeclareClassFieldHasInitializer: "Initializers are not allowed in ambient contexts.", + DeclareFunctionHasImplementation: "An implementation cannot be declared in ambient contexts.", + DuplicateAccessibilityModifier: ({ + modifier + }) => `Accessibility modifier already seen.`, + DuplicateModifier: ({ + modifier + }) => `Duplicate modifier: '${modifier}'.`, + EmptyHeritageClauseType: ({ + token + }) => `'${token}' list cannot be empty.`, + EmptyTypeArguments: "Type argument list cannot be empty.", + EmptyTypeParameters: "Type parameter list cannot be empty.", + ExpectedAmbientAfterExportDeclare: "'export declare' must be followed by an ambient declaration.", + ImportAliasHasImportType: "An import alias can not use 'import type'.", + ImportReflectionHasImportType: "An `import module` declaration can not use `type` modifier", + IncompatibleModifiers: ({ + modifiers + }) => `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`, + IndexSignatureHasAbstract: "Index signatures cannot have the 'abstract' modifier.", + IndexSignatureHasAccessibility: ({ + modifier + }) => `Index signatures cannot have an accessibility modifier ('${modifier}').`, + IndexSignatureHasDeclare: "Index signatures cannot have the 'declare' modifier.", + IndexSignatureHasOverride: "'override' modifier cannot appear on an index signature.", + IndexSignatureHasStatic: "Index signatures cannot have the 'static' modifier.", + InitializerNotAllowedInAmbientContext: "Initializers are not allowed in ambient contexts.", + InvalidModifierOnTypeMember: ({ + modifier + }) => `'${modifier}' modifier cannot appear on a type member.`, + InvalidModifierOnTypeParameter: ({ + modifier + }) => `'${modifier}' modifier cannot appear on a type parameter.`, + InvalidModifierOnTypeParameterPositions: ({ + modifier + }) => `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`, + InvalidModifiersOrder: ({ + orderedModifiers + }) => `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`, + InvalidPropertyAccessAfterInstantiationExpression: "Invalid property access after an instantiation expression. " + "You can either wrap the instantiation expression in parentheses, or delete the type arguments.", + InvalidTupleMemberLabel: "Tuple members must be labeled with a simple identifier.", + MissingInterfaceName: "'interface' declarations must be followed by an identifier.", + MixedLabeledAndUnlabeledElements: "Tuple members must all have names or all not have names.", + NonAbstractClassHasAbstractMethod: "Abstract methods can only appear within an abstract class.", + NonClassMethodPropertyHasAbstractModifer: "'abstract' modifier can only appear on a class, method, or property declaration.", + OptionalTypeBeforeRequired: "A required element cannot follow an optional element.", + OverrideNotInSubClass: "This member cannot have an 'override' modifier because its containing class does not extend another class.", + PatternIsOptional: "A binding pattern parameter cannot be optional in an implementation signature.", + PrivateElementHasAbstract: "Private elements cannot have the 'abstract' modifier.", + PrivateElementHasAccessibility: ({ + modifier + }) => `Private elements cannot have an accessibility modifier ('${modifier}').`, + ReadonlyForMethodSignature: "'readonly' modifier can only appear on a property declaration or index signature.", + ReservedArrowTypeParam: "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `() => ...`.", + ReservedTypeAssertion: "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.", + SetAccesorCannotHaveOptionalParameter: "A 'set' accessor cannot have an optional parameter.", + SetAccesorCannotHaveRestParameter: "A 'set' accessor cannot have rest parameter.", + SetAccesorCannotHaveReturnType: "A 'set' accessor cannot have a return type annotation.", + SingleTypeParameterWithoutTrailingComma: ({ + typeParameterName + }) => `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`, + StaticBlockCannotHaveModifier: "Static class blocks cannot have any modifier.", + TupleOptionalAfterType: "A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).", + TypeAnnotationAfterAssign: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.", + TypeImportCannotSpecifyDefaultAndNamed: "A type-only import can specify a default import or named bindings, but not both.", + TypeModifierIsUsedInTypeExports: "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.", + TypeModifierIsUsedInTypeImports: "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.", + UnexpectedParameterModifier: "A parameter property is only allowed in a constructor implementation.", + UnexpectedReadonly: "'readonly' type modifier is only permitted on array and tuple literal types.", + UnexpectedTypeAnnotation: "Did not expect a type annotation here.", + UnexpectedTypeCastInParameter: "Unexpected type cast in parameter position.", + UnsupportedImportTypeArgument: "Argument in a type import must be a string literal.", + UnsupportedParameterPropertyKind: "A parameter property may not be declared using a binding pattern.", + UnsupportedSignatureParameterKind: ({ + type + }) => `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.` +}); +function keywordTypeFromName(value) { + switch (value) { + case "any": + return "TSAnyKeyword"; + case "boolean": + return "TSBooleanKeyword"; + case "bigint": + return "TSBigIntKeyword"; + case "never": + return "TSNeverKeyword"; + case "number": + return "TSNumberKeyword"; + case "object": + return "TSObjectKeyword"; + case "string": + return "TSStringKeyword"; + case "symbol": + return "TSSymbolKeyword"; + case "undefined": + return "TSUndefinedKeyword"; + case "unknown": + return "TSUnknownKeyword"; + default: + return undefined; + } +} +function tsIsAccessModifier(modifier) { + return modifier === "private" || modifier === "public" || modifier === "protected"; +} +function tsIsVarianceAnnotations(modifier) { + return modifier === "in" || modifier === "out"; +} +var typescript = superClass => class TypeScriptParserMixin extends superClass { + constructor(...args) { + super(...args); + this.tsParseInOutModifiers = this.tsParseModifiers.bind(this, { + allowedModifiers: ["in", "out"], + disallowedModifiers: ["const", "public", "private", "protected", "readonly", "declare", "abstract", "override"], + errorTemplate: TSErrors.InvalidModifierOnTypeParameter + }); + this.tsParseConstModifier = this.tsParseModifiers.bind(this, { + allowedModifiers: ["const"], + disallowedModifiers: ["in", "out"], + errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions + }); + this.tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, { + allowedModifiers: ["in", "out", "const"], + disallowedModifiers: ["public", "private", "protected", "readonly", "declare", "abstract", "override"], + errorTemplate: TSErrors.InvalidModifierOnTypeParameter + }); + } + getScopeHandler() { + return TypeScriptScopeHandler; + } + tsIsIdentifier() { + return tokenIsIdentifier(this.state.type); + } + tsTokenCanFollowModifier() { + return (this.match(0) || this.match(5) || this.match(55) || this.match(21) || this.match(136) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak(); + } + tsNextTokenCanFollowModifier() { + this.next(); + return this.tsTokenCanFollowModifier(); + } + tsParseModifier(allowedModifiers, stopOnStartOfClassStaticBlock) { + if (!tokenIsIdentifier(this.state.type) && this.state.type !== 58 && this.state.type !== 75) { + return undefined; + } + const modifier = this.state.value; + if (allowedModifiers.indexOf(modifier) !== -1) { + if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) { + return undefined; + } + if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) { + return modifier; + } + } + return undefined; + } + tsParseModifiers({ + allowedModifiers, + disallowedModifiers, + stopOnStartOfClassStaticBlock, + errorTemplate = TSErrors.InvalidModifierOnTypeMember + }, modified) { + const enforceOrder = (loc, modifier, before, after) => { + if (modifier === before && modified[after]) { + this.raise(TSErrors.InvalidModifiersOrder, { + at: loc, + orderedModifiers: [before, after] + }); + } + }; + const incompatible = (loc, modifier, mod1, mod2) => { + if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) { + this.raise(TSErrors.IncompatibleModifiers, { + at: loc, + modifiers: [mod1, mod2] + }); + } + }; + for (;;) { + const { + startLoc + } = this.state; + const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []), stopOnStartOfClassStaticBlock); + if (!modifier) break; + if (tsIsAccessModifier(modifier)) { + if (modified.accessibility) { + this.raise(TSErrors.DuplicateAccessibilityModifier, { + at: startLoc, + modifier + }); + } else { + enforceOrder(startLoc, modifier, modifier, "override"); + enforceOrder(startLoc, modifier, modifier, "static"); + enforceOrder(startLoc, modifier, modifier, "readonly"); + modified.accessibility = modifier; + } + } else if (tsIsVarianceAnnotations(modifier)) { + if (modified[modifier]) { + this.raise(TSErrors.DuplicateModifier, { + at: startLoc, + modifier + }); + } + modified[modifier] = true; + enforceOrder(startLoc, modifier, "in", "out"); + } else { + if (Object.hasOwnProperty.call(modified, modifier)) { + this.raise(TSErrors.DuplicateModifier, { + at: startLoc, + modifier + }); + } else { + enforceOrder(startLoc, modifier, "static", "readonly"); + enforceOrder(startLoc, modifier, "static", "override"); + enforceOrder(startLoc, modifier, "override", "readonly"); + enforceOrder(startLoc, modifier, "abstract", "override"); + incompatible(startLoc, modifier, "declare", "override"); + incompatible(startLoc, modifier, "static", "abstract"); + } + modified[modifier] = true; + } + if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) { + this.raise(errorTemplate, { + at: startLoc, + modifier + }); + } + } + } + tsIsListTerminator(kind) { + switch (kind) { + case "EnumMembers": + case "TypeMembers": + return this.match(8); + case "HeritageClauseElement": + return this.match(5); + case "TupleElementTypes": + return this.match(3); + case "TypeParametersOrArguments": + return this.match(48); + } + } + tsParseList(kind, parseElement) { + const result = []; + while (!this.tsIsListTerminator(kind)) { + result.push(parseElement()); + } + return result; + } + tsParseDelimitedList(kind, parseElement, refTrailingCommaPos) { + return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true, refTrailingCommaPos)); + } + tsParseDelimitedListWorker(kind, parseElement, expectSuccess, refTrailingCommaPos) { + const result = []; + let trailingCommaPos = -1; + for (;;) { + if (this.tsIsListTerminator(kind)) { + break; + } + trailingCommaPos = -1; + const element = parseElement(); + if (element == null) { + return undefined; + } + result.push(element); + if (this.eat(12)) { + trailingCommaPos = this.state.lastTokStart; + continue; + } + if (this.tsIsListTerminator(kind)) { + break; + } + if (expectSuccess) { + this.expect(12); + } + return undefined; + } + if (refTrailingCommaPos) { + refTrailingCommaPos.value = trailingCommaPos; + } + return result; + } + tsParseBracketedList(kind, parseElement, bracket, skipFirstToken, refTrailingCommaPos) { + if (!skipFirstToken) { + if (bracket) { + this.expect(0); + } else { + this.expect(47); + } + } + const result = this.tsParseDelimitedList(kind, parseElement, refTrailingCommaPos); + if (bracket) { + this.expect(3); + } else { + this.expect(48); + } + return result; + } + tsParseImportType() { + const node = this.startNode(); + this.expect(83); + this.expect(10); + if (!this.match(131)) { + this.raise(TSErrors.UnsupportedImportTypeArgument, { + at: this.state.startLoc + }); + } + node.argument = super.parseExprAtom(); + this.expect(11); + if (this.eat(16)) { + node.qualifier = this.tsParseEntityName(); + } + if (this.match(47)) { + node.typeParameters = this.tsParseTypeArguments(); + } + return this.finishNode(node, "TSImportType"); + } + tsParseEntityName(allowReservedWords = true) { + let entity = this.parseIdentifier(allowReservedWords); + while (this.eat(16)) { + const node = this.startNodeAtNode(entity); + node.left = entity; + node.right = this.parseIdentifier(allowReservedWords); + entity = this.finishNode(node, "TSQualifiedName"); + } + return entity; + } + tsParseTypeReference() { + const node = this.startNode(); + node.typeName = this.tsParseEntityName(); + if (!this.hasPrecedingLineBreak() && this.match(47)) { + node.typeParameters = this.tsParseTypeArguments(); + } + return this.finishNode(node, "TSTypeReference"); + } + tsParseThisTypePredicate(lhs) { + this.next(); + const node = this.startNodeAtNode(lhs); + node.parameterName = lhs; + node.typeAnnotation = this.tsParseTypeAnnotation(false); + node.asserts = false; + return this.finishNode(node, "TSTypePredicate"); + } + tsParseThisTypeNode() { + const node = this.startNode(); + this.next(); + return this.finishNode(node, "TSThisType"); + } + tsParseTypeQuery() { + const node = this.startNode(); + this.expect(87); + if (this.match(83)) { + node.exprName = this.tsParseImportType(); + } else { + node.exprName = this.tsParseEntityName(); + } + if (!this.hasPrecedingLineBreak() && this.match(47)) { + node.typeParameters = this.tsParseTypeArguments(); + } + return this.finishNode(node, "TSTypeQuery"); + } + tsParseTypeParameter(parseModifiers) { + const node = this.startNode(); + parseModifiers(node); + node.name = this.tsParseTypeParameterName(); + node.constraint = this.tsEatThenParseType(81); + node.default = this.tsEatThenParseType(29); + return this.finishNode(node, "TSTypeParameter"); + } + tsTryParseTypeParameters(parseModifiers) { + if (this.match(47)) { + return this.tsParseTypeParameters(parseModifiers); + } + } + tsParseTypeParameters(parseModifiers) { + const node = this.startNode(); + if (this.match(47) || this.match(140)) { + this.next(); + } else { + this.unexpected(); + } + const refTrailingCommaPos = { + value: -1 + }; + node.params = this.tsParseBracketedList("TypeParametersOrArguments", this.tsParseTypeParameter.bind(this, parseModifiers), false, true, refTrailingCommaPos); + if (node.params.length === 0) { + this.raise(TSErrors.EmptyTypeParameters, { + at: node + }); + } + if (refTrailingCommaPos.value !== -1) { + this.addExtra(node, "trailingComma", refTrailingCommaPos.value); + } + return this.finishNode(node, "TSTypeParameterDeclaration"); + } + tsFillSignature(returnToken, signature) { + const returnTokenRequired = returnToken === 19; + const paramsKey = "parameters"; + const returnTypeKey = "typeAnnotation"; + signature.typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier); + this.expect(10); + signature[paramsKey] = this.tsParseBindingListForSignature(); + if (returnTokenRequired) { + signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken); + } else if (this.match(returnToken)) { + signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken); + } + } + tsParseBindingListForSignature() { + return super.parseBindingList(11, 41, 2).map(pattern => { + if (pattern.type !== "Identifier" && pattern.type !== "RestElement" && pattern.type !== "ObjectPattern" && pattern.type !== "ArrayPattern") { + this.raise(TSErrors.UnsupportedSignatureParameterKind, { + at: pattern, + type: pattern.type + }); + } + return pattern; + }); + } + tsParseTypeMemberSemicolon() { + if (!this.eat(12) && !this.isLineTerminator()) { + this.expect(13); + } + } + tsParseSignatureMember(kind, node) { + this.tsFillSignature(14, node); + this.tsParseTypeMemberSemicolon(); + return this.finishNode(node, kind); + } + tsIsUnambiguouslyIndexSignature() { + this.next(); + if (tokenIsIdentifier(this.state.type)) { + this.next(); + return this.match(14); + } + return false; + } + tsTryParseIndexSignature(node) { + if (!(this.match(0) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) { + return undefined; + } + this.expect(0); + const id = this.parseIdentifier(); + id.typeAnnotation = this.tsParseTypeAnnotation(); + this.resetEndLocation(id); + this.expect(3); + node.parameters = [id]; + const type = this.tsTryParseTypeAnnotation(); + if (type) node.typeAnnotation = type; + this.tsParseTypeMemberSemicolon(); + return this.finishNode(node, "TSIndexSignature"); + } + tsParsePropertyOrMethodSignature(node, readonly) { + if (this.eat(17)) node.optional = true; + const nodeAny = node; + if (this.match(10) || this.match(47)) { + if (readonly) { + this.raise(TSErrors.ReadonlyForMethodSignature, { + at: node + }); + } + const method = nodeAny; + if (method.kind && this.match(47)) { + this.raise(TSErrors.AccesorCannotHaveTypeParameters, { + at: this.state.curPosition() + }); + } + this.tsFillSignature(14, method); + this.tsParseTypeMemberSemicolon(); + const paramsKey = "parameters"; + const returnTypeKey = "typeAnnotation"; + if (method.kind === "get") { + if (method[paramsKey].length > 0) { + this.raise(Errors.BadGetterArity, { + at: this.state.curPosition() + }); + if (this.isThisParam(method[paramsKey][0])) { + this.raise(TSErrors.AccesorCannotDeclareThisParameter, { + at: this.state.curPosition() + }); + } + } + } else if (method.kind === "set") { + if (method[paramsKey].length !== 1) { + this.raise(Errors.BadSetterArity, { + at: this.state.curPosition() + }); + } else { + const firstParameter = method[paramsKey][0]; + if (this.isThisParam(firstParameter)) { + this.raise(TSErrors.AccesorCannotDeclareThisParameter, { + at: this.state.curPosition() + }); + } + if (firstParameter.type === "Identifier" && firstParameter.optional) { + this.raise(TSErrors.SetAccesorCannotHaveOptionalParameter, { + at: this.state.curPosition() + }); + } + if (firstParameter.type === "RestElement") { + this.raise(TSErrors.SetAccesorCannotHaveRestParameter, { + at: this.state.curPosition() + }); + } + } + if (method[returnTypeKey]) { + this.raise(TSErrors.SetAccesorCannotHaveReturnType, { + at: method[returnTypeKey] + }); + } + } else { + method.kind = "method"; + } + return this.finishNode(method, "TSMethodSignature"); + } else { + const property = nodeAny; + if (readonly) property.readonly = true; + const type = this.tsTryParseTypeAnnotation(); + if (type) property.typeAnnotation = type; + this.tsParseTypeMemberSemicolon(); + return this.finishNode(property, "TSPropertySignature"); + } + } + tsParseTypeMember() { + const node = this.startNode(); + if (this.match(10) || this.match(47)) { + return this.tsParseSignatureMember("TSCallSignatureDeclaration", node); + } + if (this.match(77)) { + const id = this.startNode(); + this.next(); + if (this.match(10) || this.match(47)) { + return this.tsParseSignatureMember("TSConstructSignatureDeclaration", node); + } else { + node.key = this.createIdentifier(id, "new"); + return this.tsParsePropertyOrMethodSignature(node, false); + } + } + this.tsParseModifiers({ + allowedModifiers: ["readonly"], + disallowedModifiers: ["declare", "abstract", "private", "protected", "public", "static", "override"] + }, node); + const idx = this.tsTryParseIndexSignature(node); + if (idx) { + return idx; + } + super.parsePropertyName(node); + if (!node.computed && node.key.type === "Identifier" && (node.key.name === "get" || node.key.name === "set") && this.tsTokenCanFollowModifier()) { + node.kind = node.key.name; + super.parsePropertyName(node); + } + return this.tsParsePropertyOrMethodSignature(node, !!node.readonly); + } + tsParseTypeLiteral() { + const node = this.startNode(); + node.members = this.tsParseObjectTypeMembers(); + return this.finishNode(node, "TSTypeLiteral"); + } + tsParseObjectTypeMembers() { + this.expect(5); + const members = this.tsParseList("TypeMembers", this.tsParseTypeMember.bind(this)); + this.expect(8); + return members; + } + tsIsStartOfMappedType() { + this.next(); + if (this.eat(53)) { + return this.isContextual(120); + } + if (this.isContextual(120)) { + this.next(); + } + if (!this.match(0)) { + return false; + } + this.next(); + if (!this.tsIsIdentifier()) { + return false; + } + this.next(); + return this.match(58); + } + tsParseMappedTypeParameter() { + const node = this.startNode(); + node.name = this.tsParseTypeParameterName(); + node.constraint = this.tsExpectThenParseType(58); + return this.finishNode(node, "TSTypeParameter"); + } + tsParseMappedType() { + const node = this.startNode(); + this.expect(5); + if (this.match(53)) { + node.readonly = this.state.value; + this.next(); + this.expectContextual(120); + } else if (this.eatContextual(120)) { + node.readonly = true; + } + this.expect(0); + node.typeParameter = this.tsParseMappedTypeParameter(); + node.nameType = this.eatContextual(93) ? this.tsParseType() : null; + this.expect(3); + if (this.match(53)) { + node.optional = this.state.value; + this.next(); + this.expect(17); + } else if (this.eat(17)) { + node.optional = true; + } + node.typeAnnotation = this.tsTryParseType(); + this.semicolon(); + this.expect(8); + return this.finishNode(node, "TSMappedType"); + } + tsParseTupleType() { + const node = this.startNode(); + node.elementTypes = this.tsParseBracketedList("TupleElementTypes", this.tsParseTupleElementType.bind(this), true, false); + let seenOptionalElement = false; + let labeledElements = null; + node.elementTypes.forEach(elementNode => { + var _labeledElements; + const { + type + } = elementNode; + if (seenOptionalElement && type !== "TSRestType" && type !== "TSOptionalType" && !(type === "TSNamedTupleMember" && elementNode.optional)) { + this.raise(TSErrors.OptionalTypeBeforeRequired, { + at: elementNode + }); + } + seenOptionalElement || (seenOptionalElement = type === "TSNamedTupleMember" && elementNode.optional || type === "TSOptionalType"); + let checkType = type; + if (type === "TSRestType") { + elementNode = elementNode.typeAnnotation; + checkType = elementNode.type; + } + const isLabeled = checkType === "TSNamedTupleMember"; + (_labeledElements = labeledElements) != null ? _labeledElements : labeledElements = isLabeled; + if (labeledElements !== isLabeled) { + this.raise(TSErrors.MixedLabeledAndUnlabeledElements, { + at: elementNode + }); + } + }); + return this.finishNode(node, "TSTupleType"); + } + tsParseTupleElementType() { + const { + startLoc + } = this.state; + const rest = this.eat(21); + let labeled; + let label; + let optional; + let type; + const isWord = tokenIsKeywordOrIdentifier(this.state.type); + const chAfterWord = isWord ? this.lookaheadCharCode() : null; + if (chAfterWord === 58) { + labeled = true; + optional = false; + label = this.parseIdentifier(true); + this.expect(14); + type = this.tsParseType(); + } else if (chAfterWord === 63) { + optional = true; + const startLoc = this.state.startLoc; + const wordName = this.state.value; + const typeOrLabel = this.tsParseNonArrayType(); + if (this.lookaheadCharCode() === 58) { + labeled = true; + label = this.createIdentifier(this.startNodeAt(startLoc), wordName); + this.expect(17); + this.expect(14); + type = this.tsParseType(); + } else { + labeled = false; + type = typeOrLabel; + this.expect(17); + } + } else { + type = this.tsParseType(); + optional = this.eat(17); + labeled = this.eat(14); + } + if (labeled) { + let labeledNode; + if (label) { + labeledNode = this.startNodeAtNode(label); + labeledNode.optional = optional; + labeledNode.label = label; + labeledNode.elementType = type; + if (this.eat(17)) { + labeledNode.optional = true; + this.raise(TSErrors.TupleOptionalAfterType, { + at: this.state.lastTokStartLoc + }); + } + } else { + labeledNode = this.startNodeAtNode(type); + labeledNode.optional = optional; + this.raise(TSErrors.InvalidTupleMemberLabel, { + at: type + }); + labeledNode.label = type; + labeledNode.elementType = this.tsParseType(); + } + type = this.finishNode(labeledNode, "TSNamedTupleMember"); + } else if (optional) { + const optionalTypeNode = this.startNodeAtNode(type); + optionalTypeNode.typeAnnotation = type; + type = this.finishNode(optionalTypeNode, "TSOptionalType"); + } + if (rest) { + const restNode = this.startNodeAt(startLoc); + restNode.typeAnnotation = type; + type = this.finishNode(restNode, "TSRestType"); + } + return type; + } + tsParseParenthesizedType() { + const node = this.startNode(); + this.expect(10); + node.typeAnnotation = this.tsParseType(); + this.expect(11); + return this.finishNode(node, "TSParenthesizedType"); + } + tsParseFunctionOrConstructorType(type, abstract) { + const node = this.startNode(); + if (type === "TSConstructorType") { + node.abstract = !!abstract; + if (abstract) this.next(); + this.next(); + } + this.tsInAllowConditionalTypesContext(() => this.tsFillSignature(19, node)); + return this.finishNode(node, type); + } + tsParseLiteralTypeNode() { + const node = this.startNode(); + node.literal = (() => { + switch (this.state.type) { + case 132: + case 133: + case 131: + case 85: + case 86: + return super.parseExprAtom(); + default: + this.unexpected(); + } + })(); + return this.finishNode(node, "TSLiteralType"); + } + tsParseTemplateLiteralType() { + const node = this.startNode(); + node.literal = super.parseTemplate(false); + return this.finishNode(node, "TSLiteralType"); + } + parseTemplateSubstitution() { + if (this.state.inType) return this.tsParseType(); + return super.parseTemplateSubstitution(); + } + tsParseThisTypeOrThisTypePredicate() { + const thisKeyword = this.tsParseThisTypeNode(); + if (this.isContextual(114) && !this.hasPrecedingLineBreak()) { + return this.tsParseThisTypePredicate(thisKeyword); + } else { + return thisKeyword; + } + } + tsParseNonArrayType() { + switch (this.state.type) { + case 131: + case 132: + case 133: + case 85: + case 86: + return this.tsParseLiteralTypeNode(); + case 53: + if (this.state.value === "-") { + const node = this.startNode(); + const nextToken = this.lookahead(); + if (nextToken.type !== 132 && nextToken.type !== 133) { + this.unexpected(); + } + node.literal = this.parseMaybeUnary(); + return this.finishNode(node, "TSLiteralType"); + } + break; + case 78: + return this.tsParseThisTypeOrThisTypePredicate(); + case 87: + return this.tsParseTypeQuery(); + case 83: + return this.tsParseImportType(); + case 5: + return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral(); + case 0: + return this.tsParseTupleType(); + case 10: + return this.tsParseParenthesizedType(); + case 25: + case 24: + return this.tsParseTemplateLiteralType(); + default: + { + const { + type + } = this.state; + if (tokenIsIdentifier(type) || type === 88 || type === 84) { + const nodeType = type === 88 ? "TSVoidKeyword" : type === 84 ? "TSNullKeyword" : keywordTypeFromName(this.state.value); + if (nodeType !== undefined && this.lookaheadCharCode() !== 46) { + const node = this.startNode(); + this.next(); + return this.finishNode(node, nodeType); + } + return this.tsParseTypeReference(); + } + } + } + this.unexpected(); + } + tsParseArrayTypeOrHigher() { + let type = this.tsParseNonArrayType(); + while (!this.hasPrecedingLineBreak() && this.eat(0)) { + if (this.match(3)) { + const node = this.startNodeAtNode(type); + node.elementType = type; + this.expect(3); + type = this.finishNode(node, "TSArrayType"); + } else { + const node = this.startNodeAtNode(type); + node.objectType = type; + node.indexType = this.tsParseType(); + this.expect(3); + type = this.finishNode(node, "TSIndexedAccessType"); + } + } + return type; + } + tsParseTypeOperator() { + const node = this.startNode(); + const operator = this.state.value; + this.next(); + node.operator = operator; + node.typeAnnotation = this.tsParseTypeOperatorOrHigher(); + if (operator === "readonly") { + this.tsCheckTypeAnnotationForReadOnly(node); + } + return this.finishNode(node, "TSTypeOperator"); + } + tsCheckTypeAnnotationForReadOnly(node) { + switch (node.typeAnnotation.type) { + case "TSTupleType": + case "TSArrayType": + return; + default: + this.raise(TSErrors.UnexpectedReadonly, { + at: node + }); + } + } + tsParseInferType() { + const node = this.startNode(); + this.expectContextual(113); + const typeParameter = this.startNode(); + typeParameter.name = this.tsParseTypeParameterName(); + typeParameter.constraint = this.tsTryParse(() => this.tsParseConstraintForInferType()); + node.typeParameter = this.finishNode(typeParameter, "TSTypeParameter"); + return this.finishNode(node, "TSInferType"); + } + tsParseConstraintForInferType() { + if (this.eat(81)) { + const constraint = this.tsInDisallowConditionalTypesContext(() => this.tsParseType()); + if (this.state.inDisallowConditionalTypesContext || !this.match(17)) { + return constraint; + } + } + } + tsParseTypeOperatorOrHigher() { + const isTypeOperator = tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc; + return isTypeOperator ? this.tsParseTypeOperator() : this.isContextual(113) ? this.tsParseInferType() : this.tsInAllowConditionalTypesContext(() => this.tsParseArrayTypeOrHigher()); + } + tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) { + const node = this.startNode(); + const hasLeadingOperator = this.eat(operator); + const types = []; + do { + types.push(parseConstituentType()); + } while (this.eat(operator)); + if (types.length === 1 && !hasLeadingOperator) { + return types[0]; + } + node.types = types; + return this.finishNode(node, kind); + } + tsParseIntersectionTypeOrHigher() { + return this.tsParseUnionOrIntersectionType("TSIntersectionType", this.tsParseTypeOperatorOrHigher.bind(this), 45); + } + tsParseUnionTypeOrHigher() { + return this.tsParseUnionOrIntersectionType("TSUnionType", this.tsParseIntersectionTypeOrHigher.bind(this), 43); + } + tsIsStartOfFunctionType() { + if (this.match(47)) { + return true; + } + return this.match(10) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this)); + } + tsSkipParameterStart() { + if (tokenIsIdentifier(this.state.type) || this.match(78)) { + this.next(); + return true; + } + if (this.match(5)) { + const { + errors + } = this.state; + const previousErrorCount = errors.length; + try { + this.parseObjectLike(8, true); + return errors.length === previousErrorCount; + } catch (_unused) { + return false; + } + } + if (this.match(0)) { + this.next(); + const { + errors + } = this.state; + const previousErrorCount = errors.length; + try { + super.parseBindingList(3, 93, 1); + return errors.length === previousErrorCount; + } catch (_unused2) { + return false; + } + } + return false; + } + tsIsUnambiguouslyStartOfFunctionType() { + this.next(); + if (this.match(11) || this.match(21)) { + return true; + } + if (this.tsSkipParameterStart()) { + if (this.match(14) || this.match(12) || this.match(17) || this.match(29)) { + return true; + } + if (this.match(11)) { + this.next(); + if (this.match(19)) { + return true; + } + } + } + return false; + } + tsParseTypeOrTypePredicateAnnotation(returnToken) { + return this.tsInType(() => { + const t = this.startNode(); + this.expect(returnToken); + const node = this.startNode(); + const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this)); + if (asserts && this.match(78)) { + let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate(); + if (thisTypePredicate.type === "TSThisType") { + node.parameterName = thisTypePredicate; + node.asserts = true; + node.typeAnnotation = null; + thisTypePredicate = this.finishNode(node, "TSTypePredicate"); + } else { + this.resetStartLocationFromNode(thisTypePredicate, node); + thisTypePredicate.asserts = true; + } + t.typeAnnotation = thisTypePredicate; + return this.finishNode(t, "TSTypeAnnotation"); + } + const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this)); + if (!typePredicateVariable) { + if (!asserts) { + return this.tsParseTypeAnnotation(false, t); + } + node.parameterName = this.parseIdentifier(); + node.asserts = asserts; + node.typeAnnotation = null; + t.typeAnnotation = this.finishNode(node, "TSTypePredicate"); + return this.finishNode(t, "TSTypeAnnotation"); + } + const type = this.tsParseTypeAnnotation(false); + node.parameterName = typePredicateVariable; + node.typeAnnotation = type; + node.asserts = asserts; + t.typeAnnotation = this.finishNode(node, "TSTypePredicate"); + return this.finishNode(t, "TSTypeAnnotation"); + }); + } + tsTryParseTypeOrTypePredicateAnnotation() { + return this.match(14) ? this.tsParseTypeOrTypePredicateAnnotation(14) : undefined; + } + tsTryParseTypeAnnotation() { + return this.match(14) ? this.tsParseTypeAnnotation() : undefined; + } + tsTryParseType() { + return this.tsEatThenParseType(14); + } + tsParseTypePredicatePrefix() { + const id = this.parseIdentifier(); + if (this.isContextual(114) && !this.hasPrecedingLineBreak()) { + this.next(); + return id; + } + } + tsParseTypePredicateAsserts() { + if (this.state.type !== 107) { + return false; + } + const containsEsc = this.state.containsEsc; + this.next(); + if (!tokenIsIdentifier(this.state.type) && !this.match(78)) { + return false; + } + if (containsEsc) { + this.raise(Errors.InvalidEscapedReservedWord, { + at: this.state.lastTokStartLoc, + reservedWord: "asserts" + }); + } + return true; + } + tsParseTypeAnnotation(eatColon = true, t = this.startNode()) { + this.tsInType(() => { + if (eatColon) this.expect(14); + t.typeAnnotation = this.tsParseType(); + }); + return this.finishNode(t, "TSTypeAnnotation"); + } + tsParseType() { + assert(this.state.inType); + const type = this.tsParseNonConditionalType(); + if (this.state.inDisallowConditionalTypesContext || this.hasPrecedingLineBreak() || !this.eat(81)) { + return type; + } + const node = this.startNodeAtNode(type); + node.checkType = type; + node.extendsType = this.tsInDisallowConditionalTypesContext(() => this.tsParseNonConditionalType()); + this.expect(17); + node.trueType = this.tsInAllowConditionalTypesContext(() => this.tsParseType()); + this.expect(14); + node.falseType = this.tsInAllowConditionalTypesContext(() => this.tsParseType()); + return this.finishNode(node, "TSConditionalType"); + } + isAbstractConstructorSignature() { + return this.isContextual(122) && this.lookahead().type === 77; + } + tsParseNonConditionalType() { + if (this.tsIsStartOfFunctionType()) { + return this.tsParseFunctionOrConstructorType("TSFunctionType"); + } + if (this.match(77)) { + return this.tsParseFunctionOrConstructorType("TSConstructorType"); + } else if (this.isAbstractConstructorSignature()) { + return this.tsParseFunctionOrConstructorType("TSConstructorType", true); + } + return this.tsParseUnionTypeOrHigher(); + } + tsParseTypeAssertion() { + if (this.getPluginOption("typescript", "disallowAmbiguousJSXLike")) { + this.raise(TSErrors.ReservedTypeAssertion, { + at: this.state.startLoc + }); + } + const node = this.startNode(); + node.typeAnnotation = this.tsInType(() => { + this.next(); + return this.match(75) ? this.tsParseTypeReference() : this.tsParseType(); + }); + this.expect(48); + node.expression = this.parseMaybeUnary(); + return this.finishNode(node, "TSTypeAssertion"); + } + tsParseHeritageClause(token) { + const originalStartLoc = this.state.startLoc; + const delimitedList = this.tsParseDelimitedList("HeritageClauseElement", () => { + const node = this.startNode(); + node.expression = this.tsParseEntityName(); + if (this.match(47)) { + node.typeParameters = this.tsParseTypeArguments(); + } + return this.finishNode(node, "TSExpressionWithTypeArguments"); + }); + if (!delimitedList.length) { + this.raise(TSErrors.EmptyHeritageClauseType, { + at: originalStartLoc, + token + }); + } + return delimitedList; + } + tsParseInterfaceDeclaration(node, properties = {}) { + if (this.hasFollowingLineBreak()) return null; + this.expectContextual(127); + if (properties.declare) node.declare = true; + if (tokenIsIdentifier(this.state.type)) { + node.id = this.parseIdentifier(); + this.checkIdentifier(node.id, BIND_TS_INTERFACE); + } else { + node.id = null; + this.raise(TSErrors.MissingInterfaceName, { + at: this.state.startLoc + }); + } + node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutConstModifiers); + if (this.eat(81)) { + node.extends = this.tsParseHeritageClause("extends"); + } + const body = this.startNode(); + body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this)); + node.body = this.finishNode(body, "TSInterfaceBody"); + return this.finishNode(node, "TSInterfaceDeclaration"); + } + tsParseTypeAliasDeclaration(node) { + node.id = this.parseIdentifier(); + this.checkIdentifier(node.id, BIND_TS_TYPE); + node.typeAnnotation = this.tsInType(() => { + node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers); + this.expect(29); + if (this.isContextual(112) && this.lookahead().type !== 16) { + const node = this.startNode(); + this.next(); + return this.finishNode(node, "TSIntrinsicKeyword"); + } + return this.tsParseType(); + }); + this.semicolon(); + return this.finishNode(node, "TSTypeAliasDeclaration"); + } + tsInNoContext(cb) { + const oldContext = this.state.context; + this.state.context = [oldContext[0]]; + try { + return cb(); + } finally { + this.state.context = oldContext; + } + } + tsInType(cb) { + const oldInType = this.state.inType; + this.state.inType = true; + try { + return cb(); + } finally { + this.state.inType = oldInType; + } + } + tsInDisallowConditionalTypesContext(cb) { + const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext; + this.state.inDisallowConditionalTypesContext = true; + try { + return cb(); + } finally { + this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + } + } + tsInAllowConditionalTypesContext(cb) { + const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext; + this.state.inDisallowConditionalTypesContext = false; + try { + return cb(); + } finally { + this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + } + } + tsEatThenParseType(token) { + return !this.match(token) ? undefined : this.tsNextThenParseType(); + } + tsExpectThenParseType(token) { + return this.tsDoThenParseType(() => this.expect(token)); + } + tsNextThenParseType() { + return this.tsDoThenParseType(() => this.next()); + } + tsDoThenParseType(cb) { + return this.tsInType(() => { + cb(); + return this.tsParseType(); + }); + } + tsParseEnumMember() { + const node = this.startNode(); + node.id = this.match(131) ? super.parseStringLiteral(this.state.value) : this.parseIdentifier(true); + if (this.eat(29)) { + node.initializer = super.parseMaybeAssignAllowIn(); + } + return this.finishNode(node, "TSEnumMember"); + } + tsParseEnumDeclaration(node, properties = {}) { + if (properties.const) node.const = true; + if (properties.declare) node.declare = true; + this.expectContextual(124); + node.id = this.parseIdentifier(); + this.checkIdentifier(node.id, node.const ? BIND_TS_CONST_ENUM : BIND_TS_ENUM); + this.expect(5); + node.members = this.tsParseDelimitedList("EnumMembers", this.tsParseEnumMember.bind(this)); + this.expect(8); + return this.finishNode(node, "TSEnumDeclaration"); + } + tsParseModuleBlock() { + const node = this.startNode(); + this.scope.enter(SCOPE_OTHER); + this.expect(5); + super.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 8); + this.scope.exit(); + return this.finishNode(node, "TSModuleBlock"); + } + tsParseModuleOrNamespaceDeclaration(node, nested = false) { + node.id = this.parseIdentifier(); + if (!nested) { + this.checkIdentifier(node.id, BIND_TS_NAMESPACE); + } + if (this.eat(16)) { + const inner = this.startNode(); + this.tsParseModuleOrNamespaceDeclaration(inner, true); + node.body = inner; + } else { + this.scope.enter(SCOPE_TS_MODULE); + this.prodParam.enter(PARAM); + node.body = this.tsParseModuleBlock(); + this.prodParam.exit(); + this.scope.exit(); + } + return this.finishNode(node, "TSModuleDeclaration"); + } + tsParseAmbientExternalModuleDeclaration(node) { + if (this.isContextual(110)) { + node.global = true; + node.id = this.parseIdentifier(); + } else if (this.match(131)) { + node.id = super.parseStringLiteral(this.state.value); + } else { + this.unexpected(); + } + if (this.match(5)) { + this.scope.enter(SCOPE_TS_MODULE); + this.prodParam.enter(PARAM); + node.body = this.tsParseModuleBlock(); + this.prodParam.exit(); + this.scope.exit(); + } else { + this.semicolon(); + } + return this.finishNode(node, "TSModuleDeclaration"); + } + tsParseImportEqualsDeclaration(node, isExport) { + node.isExport = isExport || false; + node.id = this.parseIdentifier(); + this.checkIdentifier(node.id, BIND_FLAGS_TS_IMPORT); + this.expect(29); + const moduleReference = this.tsParseModuleReference(); + if (node.importKind === "type" && moduleReference.type !== "TSExternalModuleReference") { + this.raise(TSErrors.ImportAliasHasImportType, { + at: moduleReference + }); + } + node.moduleReference = moduleReference; + this.semicolon(); + return this.finishNode(node, "TSImportEqualsDeclaration"); + } + tsIsExternalModuleReference() { + return this.isContextual(117) && this.lookaheadCharCode() === 40; + } + tsParseModuleReference() { + return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false); + } + tsParseExternalModuleReference() { + const node = this.startNode(); + this.expectContextual(117); + this.expect(10); + if (!this.match(131)) { + this.unexpected(); + } + node.expression = super.parseExprAtom(); + this.expect(11); + return this.finishNode(node, "TSExternalModuleReference"); + } + tsLookAhead(f) { + const state = this.state.clone(); + const res = f(); + this.state = state; + return res; + } + tsTryParseAndCatch(f) { + const result = this.tryParse(abort => f() || abort()); + if (result.aborted || !result.node) return undefined; + if (result.error) this.state = result.failState; + return result.node; + } + tsTryParse(f) { + const state = this.state.clone(); + const result = f(); + if (result !== undefined && result !== false) { + return result; + } else { + this.state = state; + return undefined; + } + } + tsTryParseDeclare(nany) { + if (this.isLineTerminator()) { + return; + } + let starttype = this.state.type; + let kind; + if (this.isContextual(99)) { + starttype = 74; + kind = "let"; + } + return this.tsInAmbientContext(() => { + if (starttype === 68) { + nany.declare = true; + return super.parseFunctionStatement(nany, false, false); + } + if (starttype === 80) { + nany.declare = true; + return this.parseClass(nany, true, false); + } + if (starttype === 124) { + return this.tsParseEnumDeclaration(nany, { + declare: true + }); + } + if (starttype === 110) { + return this.tsParseAmbientExternalModuleDeclaration(nany); + } + if (starttype === 75 || starttype === 74) { + if (!this.match(75) || !this.isLookaheadContextual("enum")) { + nany.declare = true; + return this.parseVarStatement(nany, kind || this.state.value, true); + } + this.expect(75); + return this.tsParseEnumDeclaration(nany, { + const: true, + declare: true + }); + } + if (starttype === 127) { + const result = this.tsParseInterfaceDeclaration(nany, { + declare: true + }); + if (result) return result; + } + if (tokenIsIdentifier(starttype)) { + return this.tsParseDeclaration(nany, this.state.value, true, null); + } + }); + } + tsTryParseExportDeclaration() { + return this.tsParseDeclaration(this.startNode(), this.state.value, true, null); + } + tsParseExpressionStatement(node, expr, decorators) { + switch (expr.name) { + case "declare": + { + const declaration = this.tsTryParseDeclare(node); + if (declaration) { + declaration.declare = true; + return declaration; + } + break; + } + case "global": + if (this.match(5)) { + this.scope.enter(SCOPE_TS_MODULE); + this.prodParam.enter(PARAM); + const mod = node; + mod.global = true; + mod.id = expr; + mod.body = this.tsParseModuleBlock(); + this.scope.exit(); + this.prodParam.exit(); + return this.finishNode(mod, "TSModuleDeclaration"); + } + break; + default: + return this.tsParseDeclaration(node, expr.name, false, decorators); + } + } + tsParseDeclaration(node, value, next, decorators) { + switch (value) { + case "abstract": + if (this.tsCheckLineTerminator(next) && (this.match(80) || tokenIsIdentifier(this.state.type))) { + return this.tsParseAbstractDeclaration(node, decorators); + } + break; + case "module": + if (this.tsCheckLineTerminator(next)) { + if (this.match(131)) { + return this.tsParseAmbientExternalModuleDeclaration(node); + } else if (tokenIsIdentifier(this.state.type)) { + return this.tsParseModuleOrNamespaceDeclaration(node); + } + } + break; + case "namespace": + if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) { + return this.tsParseModuleOrNamespaceDeclaration(node); + } + break; + case "type": + if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) { + return this.tsParseTypeAliasDeclaration(node); + } + break; + } + } + tsCheckLineTerminator(next) { + if (next) { + if (this.hasFollowingLineBreak()) return false; + this.next(); + return true; + } + return !this.isLineTerminator(); + } + tsTryParseGenericAsyncArrowFunction(startLoc) { + if (!this.match(47)) { + return undefined; + } + const oldMaybeInArrowParameters = this.state.maybeInArrowParameters; + this.state.maybeInArrowParameters = true; + const res = this.tsTryParseAndCatch(() => { + const node = this.startNodeAt(startLoc); + node.typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier); + super.parseFunctionParams(node); + node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation(); + this.expect(19); + return node; + }); + this.state.maybeInArrowParameters = oldMaybeInArrowParameters; + if (!res) { + return undefined; + } + return super.parseArrowExpression(res, null, true); + } + tsParseTypeArgumentsInExpression() { + if (this.reScan_lt() !== 47) { + return undefined; + } + return this.tsParseTypeArguments(); + } + tsParseTypeArguments() { + const node = this.startNode(); + node.params = this.tsInType(() => this.tsInNoContext(() => { + this.expect(47); + return this.tsParseDelimitedList("TypeParametersOrArguments", this.tsParseType.bind(this)); + })); + if (node.params.length === 0) { + this.raise(TSErrors.EmptyTypeArguments, { + at: node + }); + } + this.expect(48); + return this.finishNode(node, "TSTypeParameterInstantiation"); + } + tsIsDeclarationStart() { + return tokenIsTSDeclarationStart(this.state.type); + } + isExportDefaultSpecifier() { + if (this.tsIsDeclarationStart()) return false; + return super.isExportDefaultSpecifier(); + } + parseAssignableListItem(flags, decorators) { + const startLoc = this.state.startLoc; + const modified = {}; + this.tsParseModifiers({ + allowedModifiers: ["public", "private", "protected", "override", "readonly"] + }, modified); + const accessibility = modified.accessibility; + const override = modified.override; + const readonly = modified.readonly; + if (!(flags & 4) && (accessibility || readonly || override)) { + this.raise(TSErrors.UnexpectedParameterModifier, { + at: startLoc + }); + } + const left = this.parseMaybeDefault(); + this.parseAssignableListItemTypes(left, flags); + const elt = this.parseMaybeDefault(left.loc.start, left); + if (accessibility || readonly || override) { + const pp = this.startNodeAt(startLoc); + if (decorators.length) { + pp.decorators = decorators; + } + if (accessibility) pp.accessibility = accessibility; + if (readonly) pp.readonly = readonly; + if (override) pp.override = override; + if (elt.type !== "Identifier" && elt.type !== "AssignmentPattern") { + this.raise(TSErrors.UnsupportedParameterPropertyKind, { + at: pp + }); + } + pp.parameter = elt; + return this.finishNode(pp, "TSParameterProperty"); + } + if (decorators.length) { + left.decorators = decorators; + } + return elt; + } + isSimpleParameter(node) { + return node.type === "TSParameterProperty" && super.isSimpleParameter(node.parameter) || super.isSimpleParameter(node); + } + tsDisallowOptionalPattern(node) { + for (const param of node.params) { + if (param.type !== "Identifier" && param.optional && !this.state.isAmbientContext) { + this.raise(TSErrors.PatternIsOptional, { + at: param + }); + } + } + } + setArrowFunctionParameters(node, params, trailingCommaLoc) { + super.setArrowFunctionParameters(node, params, trailingCommaLoc); + this.tsDisallowOptionalPattern(node); + } + parseFunctionBodyAndFinish(node, type, isMethod = false) { + if (this.match(14)) { + node.returnType = this.tsParseTypeOrTypePredicateAnnotation(14); + } + const bodilessType = type === "FunctionDeclaration" ? "TSDeclareFunction" : type === "ClassMethod" || type === "ClassPrivateMethod" ? "TSDeclareMethod" : undefined; + if (bodilessType && !this.match(5) && this.isLineTerminator()) { + return this.finishNode(node, bodilessType); + } + if (bodilessType === "TSDeclareFunction" && this.state.isAmbientContext) { + this.raise(TSErrors.DeclareFunctionHasImplementation, { + at: node + }); + if (node.declare) { + return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod); + } + } + this.tsDisallowOptionalPattern(node); + return super.parseFunctionBodyAndFinish(node, type, isMethod); + } + registerFunctionStatementId(node) { + if (!node.body && node.id) { + this.checkIdentifier(node.id, BIND_TS_AMBIENT); + } else { + super.registerFunctionStatementId(node); + } + } + tsCheckForInvalidTypeCasts(items) { + items.forEach(node => { + if ((node == null ? void 0 : node.type) === "TSTypeCastExpression") { + this.raise(TSErrors.UnexpectedTypeAnnotation, { + at: node.typeAnnotation + }); + } + }); + } + toReferencedList(exprList, isInParens) { + this.tsCheckForInvalidTypeCasts(exprList); + return exprList; + } + parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) { + const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors); + if (node.type === "ArrayExpression") { + this.tsCheckForInvalidTypeCasts(node.elements); + } + return node; + } + parseSubscript(base, startLoc, noCalls, state) { + if (!this.hasPrecedingLineBreak() && this.match(35)) { + this.state.canStartJSXElement = false; + this.next(); + const nonNullExpression = this.startNodeAt(startLoc); + nonNullExpression.expression = base; + return this.finishNode(nonNullExpression, "TSNonNullExpression"); + } + let isOptionalCall = false; + if (this.match(18) && this.lookaheadCharCode() === 60) { + if (noCalls) { + state.stop = true; + return base; + } + state.optionalChainMember = isOptionalCall = true; + this.next(); + } + if (this.match(47) || this.match(51)) { + let missingParenErrorLoc; + const result = this.tsTryParseAndCatch(() => { + if (!noCalls && this.atPossibleAsyncArrow(base)) { + const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startLoc); + if (asyncArrowFn) { + return asyncArrowFn; + } + } + const typeArguments = this.tsParseTypeArgumentsInExpression(); + if (!typeArguments) return; + if (isOptionalCall && !this.match(10)) { + missingParenErrorLoc = this.state.curPosition(); + return; + } + if (tokenIsTemplate(this.state.type)) { + const result = super.parseTaggedTemplateExpression(base, startLoc, state); + result.typeParameters = typeArguments; + return result; + } + if (!noCalls && this.eat(10)) { + const node = this.startNodeAt(startLoc); + node.callee = base; + node.arguments = this.parseCallExpressionArguments(11, false); + this.tsCheckForInvalidTypeCasts(node.arguments); + node.typeParameters = typeArguments; + if (state.optionalChainMember) { + node.optional = isOptionalCall; + } + return this.finishCallExpression(node, state.optionalChainMember); + } + const tokenType = this.state.type; + if (tokenType === 48 || tokenType === 52 || tokenType !== 10 && tokenCanStartExpression(tokenType) && !this.hasPrecedingLineBreak()) { + return; + } + const node = this.startNodeAt(startLoc); + node.expression = base; + node.typeParameters = typeArguments; + return this.finishNode(node, "TSInstantiationExpression"); + }); + if (missingParenErrorLoc) { + this.unexpected(missingParenErrorLoc, 10); + } + if (result) { + if (result.type === "TSInstantiationExpression" && (this.match(16) || this.match(18) && this.lookaheadCharCode() !== 40)) { + this.raise(TSErrors.InvalidPropertyAccessAfterInstantiationExpression, { + at: this.state.startLoc + }); + } + return result; + } + } + return super.parseSubscript(base, startLoc, noCalls, state); + } + parseNewCallee(node) { + var _callee$extra; + super.parseNewCallee(node); + const { + callee + } = node; + if (callee.type === "TSInstantiationExpression" && !((_callee$extra = callee.extra) != null && _callee$extra.parenthesized)) { + node.typeParameters = callee.typeParameters; + node.callee = callee.expression; + } + } + parseExprOp(left, leftStartLoc, minPrec) { + let isSatisfies; + if (tokenOperatorPrecedence(58) > minPrec && !this.hasPrecedingLineBreak() && (this.isContextual(93) || (isSatisfies = this.isContextual(118)))) { + const node = this.startNodeAt(leftStartLoc); + node.expression = left; + node.typeAnnotation = this.tsInType(() => { + this.next(); + if (this.match(75)) { + if (isSatisfies) { + this.raise(Errors.UnexpectedKeyword, { + at: this.state.startLoc, + keyword: "const" + }); + } + return this.tsParseTypeReference(); + } + return this.tsParseType(); + }); + this.finishNode(node, isSatisfies ? "TSSatisfiesExpression" : "TSAsExpression"); + this.reScan_lt_gt(); + return this.parseExprOp(node, leftStartLoc, minPrec); + } + return super.parseExprOp(left, leftStartLoc, minPrec); + } + checkReservedWord(word, startLoc, checkKeywords, isBinding) { + if (!this.state.isAmbientContext) { + super.checkReservedWord(word, startLoc, checkKeywords, isBinding); + } + } + checkImportReflection(node) { + super.checkImportReflection(node); + if (node.module && node.importKind !== "value") { + this.raise(TSErrors.ImportReflectionHasImportType, { + at: node.specifiers[0].loc.start + }); + } + } + checkDuplicateExports() {} + parseImport(node) { + node.importKind = "value"; + if (tokenIsIdentifier(this.state.type) || this.match(55) || this.match(5)) { + let ahead = this.lookahead(); + if (this.isContextual(128) && ahead.type !== 12 && ahead.type !== 97 && ahead.type !== 29) { + node.importKind = "type"; + this.next(); + ahead = this.lookahead(); + } + if (tokenIsIdentifier(this.state.type) && ahead.type === 29) { + return this.tsParseImportEqualsDeclaration(node); + } + } + const importNode = super.parseImport(node); + if (importNode.importKind === "type" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === "ImportDefaultSpecifier") { + this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, { + at: importNode + }); + } + return importNode; + } + parseExport(node, decorators) { + if (this.match(83)) { + this.next(); + if (this.isContextual(128) && this.lookaheadCharCode() !== 61) { + node.importKind = "type"; + this.next(); + } else { + node.importKind = "value"; + } + return this.tsParseImportEqualsDeclaration(node, true); + } else if (this.eat(29)) { + const assign = node; + assign.expression = super.parseExpression(); + this.semicolon(); + return this.finishNode(assign, "TSExportAssignment"); + } else if (this.eatContextual(93)) { + const decl = node; + this.expectContextual(126); + decl.id = this.parseIdentifier(); + this.semicolon(); + return this.finishNode(decl, "TSNamespaceExportDeclaration"); + } else { + node.exportKind = "value"; + if (this.isContextual(128)) { + const ch = this.lookaheadCharCode(); + if (ch === 123 || ch === 42) { + this.next(); + node.exportKind = "type"; + } + } + return super.parseExport(node, decorators); + } + } + isAbstractClass() { + return this.isContextual(122) && this.lookahead().type === 80; + } + parseExportDefaultExpression() { + if (this.isAbstractClass()) { + const cls = this.startNode(); + this.next(); + cls.abstract = true; + return this.parseClass(cls, true, true); + } + if (this.match(127)) { + const result = this.tsParseInterfaceDeclaration(this.startNode()); + if (result) return result; + } + return super.parseExportDefaultExpression(); + } + parseVarStatement(node, kind, allowMissingInitializer = false) { + const { + isAmbientContext + } = this.state; + const declaration = super.parseVarStatement(node, kind, allowMissingInitializer || isAmbientContext); + if (!isAmbientContext) return declaration; + for (const { + id, + init + } of declaration.declarations) { + if (!init) continue; + if (kind !== "const" || !!id.typeAnnotation) { + this.raise(TSErrors.InitializerNotAllowedInAmbientContext, { + at: init + }); + } else if (!isValidAmbientConstInitializer(init, this.hasPlugin("estree"))) { + this.raise(TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference, { + at: init + }); + } + } + return declaration; + } + parseStatementContent(flags, decorators) { + if (this.match(75) && this.isLookaheadContextual("enum")) { + const node = this.startNode(); + this.expect(75); + return this.tsParseEnumDeclaration(node, { + const: true + }); + } + if (this.isContextual(124)) { + return this.tsParseEnumDeclaration(this.startNode()); + } + if (this.isContextual(127)) { + const result = this.tsParseInterfaceDeclaration(this.startNode()); + if (result) return result; + } + return super.parseStatementContent(flags, decorators); + } + parseAccessModifier() { + return this.tsParseModifier(["public", "protected", "private"]); + } + tsHasSomeModifiers(member, modifiers) { + return modifiers.some(modifier => { + if (tsIsAccessModifier(modifier)) { + return member.accessibility === modifier; + } + return !!member[modifier]; + }); + } + tsIsStartOfStaticBlocks() { + return this.isContextual(104) && this.lookaheadCharCode() === 123; + } + parseClassMember(classBody, member, state) { + const modifiers = ["declare", "private", "public", "protected", "override", "abstract", "readonly", "static"]; + this.tsParseModifiers({ + allowedModifiers: modifiers, + disallowedModifiers: ["in", "out"], + stopOnStartOfClassStaticBlock: true, + errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions + }, member); + const callParseClassMemberWithIsStatic = () => { + if (this.tsIsStartOfStaticBlocks()) { + this.next(); + this.next(); + if (this.tsHasSomeModifiers(member, modifiers)) { + this.raise(TSErrors.StaticBlockCannotHaveModifier, { + at: this.state.curPosition() + }); + } + super.parseClassStaticBlock(classBody, member); + } else { + this.parseClassMemberWithIsStatic(classBody, member, state, !!member.static); + } + }; + if (member.declare) { + this.tsInAmbientContext(callParseClassMemberWithIsStatic); + } else { + callParseClassMemberWithIsStatic(); + } + } + parseClassMemberWithIsStatic(classBody, member, state, isStatic) { + const idx = this.tsTryParseIndexSignature(member); + if (idx) { + classBody.body.push(idx); + if (member.abstract) { + this.raise(TSErrors.IndexSignatureHasAbstract, { + at: member + }); + } + if (member.accessibility) { + this.raise(TSErrors.IndexSignatureHasAccessibility, { + at: member, + modifier: member.accessibility + }); + } + if (member.declare) { + this.raise(TSErrors.IndexSignatureHasDeclare, { + at: member + }); + } + if (member.override) { + this.raise(TSErrors.IndexSignatureHasOverride, { + at: member + }); + } + return; + } + if (!this.state.inAbstractClass && member.abstract) { + this.raise(TSErrors.NonAbstractClassHasAbstractMethod, { + at: member + }); + } + if (member.override) { + if (!state.hadSuperClass) { + this.raise(TSErrors.OverrideNotInSubClass, { + at: member + }); + } + } + super.parseClassMemberWithIsStatic(classBody, member, state, isStatic); + } + parsePostMemberNameModifiers(methodOrProp) { + const optional = this.eat(17); + if (optional) methodOrProp.optional = true; + if (methodOrProp.readonly && this.match(10)) { + this.raise(TSErrors.ClassMethodHasReadonly, { + at: methodOrProp + }); + } + if (methodOrProp.declare && this.match(10)) { + this.raise(TSErrors.ClassMethodHasDeclare, { + at: methodOrProp + }); + } + } + parseExpressionStatement(node, expr, decorators) { + const decl = expr.type === "Identifier" ? this.tsParseExpressionStatement(node, expr, decorators) : undefined; + return decl || super.parseExpressionStatement(node, expr, decorators); + } + shouldParseExportDeclaration() { + if (this.tsIsDeclarationStart()) return true; + return super.shouldParseExportDeclaration(); + } + parseConditional(expr, startLoc, refExpressionErrors) { + if (!this.state.maybeInArrowParameters || !this.match(17)) { + return super.parseConditional(expr, startLoc, refExpressionErrors); + } + const result = this.tryParse(() => super.parseConditional(expr, startLoc)); + if (!result.node) { + if (result.error) { + super.setOptionalParametersError(refExpressionErrors, result.error); + } + return expr; + } + if (result.error) this.state = result.failState; + return result.node; + } + parseParenItem(node, startLoc) { + node = super.parseParenItem(node, startLoc); + if (this.eat(17)) { + node.optional = true; + this.resetEndLocation(node); + } + if (this.match(14)) { + const typeCastNode = this.startNodeAt(startLoc); + typeCastNode.expression = node; + typeCastNode.typeAnnotation = this.tsParseTypeAnnotation(); + return this.finishNode(typeCastNode, "TSTypeCastExpression"); + } + return node; + } + parseExportDeclaration(node) { + if (!this.state.isAmbientContext && this.isContextual(123)) { + return this.tsInAmbientContext(() => this.parseExportDeclaration(node)); + } + const startLoc = this.state.startLoc; + const isDeclare = this.eatContextual(123); + if (isDeclare && (this.isContextual(123) || !this.shouldParseExportDeclaration())) { + throw this.raise(TSErrors.ExpectedAmbientAfterExportDeclare, { + at: this.state.startLoc + }); + } + const isIdentifier = tokenIsIdentifier(this.state.type); + const declaration = isIdentifier && this.tsTryParseExportDeclaration() || super.parseExportDeclaration(node); + if (!declaration) return null; + if (declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || isDeclare) { + node.exportKind = "type"; + } + if (isDeclare) { + this.resetStartLocation(declaration, startLoc); + declaration.declare = true; + } + return declaration; + } + parseClassId(node, isStatement, optionalId, bindingType) { + if ((!isStatement || optionalId) && this.isContextual(111)) { + return; + } + super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS); + const typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutConstModifiers); + if (typeParameters) node.typeParameters = typeParameters; + } + parseClassPropertyAnnotation(node) { + if (!node.optional) { + if (this.eat(35)) { + node.definite = true; + } else if (this.eat(17)) { + node.optional = true; + } + } + const type = this.tsTryParseTypeAnnotation(); + if (type) node.typeAnnotation = type; + } + parseClassProperty(node) { + this.parseClassPropertyAnnotation(node); + if (this.state.isAmbientContext && !(node.readonly && !node.typeAnnotation) && this.match(29)) { + this.raise(TSErrors.DeclareClassFieldHasInitializer, { + at: this.state.startLoc + }); + } + if (node.abstract && this.match(29)) { + const { + key + } = node; + this.raise(TSErrors.AbstractPropertyHasInitializer, { + at: this.state.startLoc, + propertyName: key.type === "Identifier" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]` + }); + } + return super.parseClassProperty(node); + } + parseClassPrivateProperty(node) { + if (node.abstract) { + this.raise(TSErrors.PrivateElementHasAbstract, { + at: node + }); + } + if (node.accessibility) { + this.raise(TSErrors.PrivateElementHasAccessibility, { + at: node, + modifier: node.accessibility + }); + } + this.parseClassPropertyAnnotation(node); + return super.parseClassPrivateProperty(node); + } + parseClassAccessorProperty(node) { + this.parseClassPropertyAnnotation(node); + if (node.optional) { + this.raise(TSErrors.AccessorCannotBeOptional, { + at: node + }); + } + return super.parseClassAccessorProperty(node); + } + pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) { + const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier); + if (typeParameters && isConstructor) { + this.raise(TSErrors.ConstructorHasTypeParameters, { + at: typeParameters + }); + } + const { + declare = false, + kind + } = method; + if (declare && (kind === "get" || kind === "set")) { + this.raise(TSErrors.DeclareAccessor, { + at: method, + kind + }); + } + if (typeParameters) method.typeParameters = typeParameters; + super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper); + } + pushClassPrivateMethod(classBody, method, isGenerator, isAsync) { + const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier); + if (typeParameters) method.typeParameters = typeParameters; + super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync); + } + declareClassPrivateMethodInScope(node, kind) { + if (node.type === "TSDeclareMethod") return; + if (node.type === "MethodDefinition" && !node.value.body) return; + super.declareClassPrivateMethodInScope(node, kind); + } + parseClassSuper(node) { + super.parseClassSuper(node); + if (node.superClass && (this.match(47) || this.match(51))) { + node.superTypeParameters = this.tsParseTypeArgumentsInExpression(); + } + if (this.eatContextual(111)) { + node.implements = this.tsParseHeritageClause("implements"); + } + } + parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) { + const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier); + if (typeParameters) prop.typeParameters = typeParameters; + return super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors); + } + parseFunctionParams(node, isConstructor) { + const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier); + if (typeParameters) node.typeParameters = typeParameters; + super.parseFunctionParams(node, isConstructor); + } + parseVarId(decl, kind) { + super.parseVarId(decl, kind); + if (decl.id.type === "Identifier" && !this.hasPrecedingLineBreak() && this.eat(35)) { + decl.definite = true; + } + const type = this.tsTryParseTypeAnnotation(); + if (type) { + decl.id.typeAnnotation = type; + this.resetEndLocation(decl.id); + } + } + parseAsyncArrowFromCallExpression(node, call) { + if (this.match(14)) { + node.returnType = this.tsParseTypeAnnotation(); + } + return super.parseAsyncArrowFromCallExpression(node, call); + } + parseMaybeAssign(refExpressionErrors, afterLeftParse) { + var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3; + let state; + let jsx; + let typeCast; + if (this.hasPlugin("jsx") && (this.match(140) || this.match(47))) { + state = this.state.clone(); + jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state); + if (!jsx.error) return jsx.node; + const { + context + } = this.state; + const currentContext = context[context.length - 1]; + if (currentContext === types.j_oTag || currentContext === types.j_expr) { + context.pop(); + } + } + if (!((_jsx = jsx) != null && _jsx.error) && !this.match(47)) { + return super.parseMaybeAssign(refExpressionErrors, afterLeftParse); + } + if (!state || state === this.state) state = this.state.clone(); + let typeParameters; + const arrow = this.tryParse(abort => { + var _expr$extra, _typeParameters; + typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier); + const expr = super.parseMaybeAssign(refExpressionErrors, afterLeftParse); + if (expr.type !== "ArrowFunctionExpression" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) { + abort(); + } + if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) { + this.resetStartLocationFromNode(expr, typeParameters); + } + expr.typeParameters = typeParameters; + return expr; + }, state); + if (!arrow.error && !arrow.aborted) { + if (typeParameters) this.reportReservedArrowTypeParam(typeParameters); + return arrow.node; + } + if (!jsx) { + assert(!this.hasPlugin("jsx")); + typeCast = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state); + if (!typeCast.error) return typeCast.node; + } + if ((_jsx2 = jsx) != null && _jsx2.node) { + this.state = jsx.failState; + return jsx.node; + } + if (arrow.node) { + this.state = arrow.failState; + if (typeParameters) this.reportReservedArrowTypeParam(typeParameters); + return arrow.node; + } + if ((_typeCast = typeCast) != null && _typeCast.node) { + this.state = typeCast.failState; + return typeCast.node; + } + if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error; + if (arrow.thrown) throw arrow.error; + if ((_typeCast2 = typeCast) != null && _typeCast2.thrown) throw typeCast.error; + throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error); + } + reportReservedArrowTypeParam(node) { + var _node$extra; + if (node.params.length === 1 && !node.params[0].constraint && !((_node$extra = node.extra) != null && _node$extra.trailingComma) && this.getPluginOption("typescript", "disallowAmbiguousJSXLike")) { + this.raise(TSErrors.ReservedArrowTypeParam, { + at: node + }); + } + } + parseMaybeUnary(refExpressionErrors, sawUnary) { + if (!this.hasPlugin("jsx") && this.match(47)) { + return this.tsParseTypeAssertion(); + } else { + return super.parseMaybeUnary(refExpressionErrors, sawUnary); + } + } + parseArrow(node) { + if (this.match(14)) { + const result = this.tryParse(abort => { + const returnType = this.tsParseTypeOrTypePredicateAnnotation(14); + if (this.canInsertSemicolon() || !this.match(19)) abort(); + return returnType; + }); + if (result.aborted) return; + if (!result.thrown) { + if (result.error) this.state = result.failState; + node.returnType = result.node; + } + } + return super.parseArrow(node); + } + parseAssignableListItemTypes(param, flags) { + if (!(flags & 2)) return param; + if (this.eat(17)) { + param.optional = true; + } + const type = this.tsTryParseTypeAnnotation(); + if (type) param.typeAnnotation = type; + this.resetEndLocation(param); + return param; + } + isAssignable(node, isBinding) { + switch (node.type) { + case "TSTypeCastExpression": + return this.isAssignable(node.expression, isBinding); + case "TSParameterProperty": + return true; + default: + return super.isAssignable(node, isBinding); + } + } + toAssignable(node, isLHS = false) { + switch (node.type) { + case "ParenthesizedExpression": + this.toAssignableParenthesizedExpression(node, isLHS); + break; + case "TSAsExpression": + case "TSSatisfiesExpression": + case "TSNonNullExpression": + case "TSTypeAssertion": + if (isLHS) { + this.expressionScope.recordArrowParameterBindingError(TSErrors.UnexpectedTypeCastInParameter, { + at: node + }); + } else { + this.raise(TSErrors.UnexpectedTypeCastInParameter, { + at: node + }); + } + this.toAssignable(node.expression, isLHS); + break; + case "AssignmentExpression": + if (!isLHS && node.left.type === "TSTypeCastExpression") { + node.left = this.typeCastToParameter(node.left); + } + default: + super.toAssignable(node, isLHS); + } + } + toAssignableParenthesizedExpression(node, isLHS) { + switch (node.expression.type) { + case "TSAsExpression": + case "TSSatisfiesExpression": + case "TSNonNullExpression": + case "TSTypeAssertion": + case "ParenthesizedExpression": + this.toAssignable(node.expression, isLHS); + break; + default: + super.toAssignable(node, isLHS); + } + } + checkToRestConversion(node, allowPattern) { + switch (node.type) { + case "TSAsExpression": + case "TSSatisfiesExpression": + case "TSTypeAssertion": + case "TSNonNullExpression": + this.checkToRestConversion(node.expression, false); + break; + default: + super.checkToRestConversion(node, allowPattern); + } + } + isValidLVal(type, isUnparenthesizedInAssign, binding) { + return getOwn({ + TSTypeCastExpression: true, + TSParameterProperty: "parameter", + TSNonNullExpression: "expression", + TSAsExpression: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true], + TSSatisfiesExpression: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true], + TSTypeAssertion: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true] + }, type) || super.isValidLVal(type, isUnparenthesizedInAssign, binding); + } + parseBindingAtom() { + switch (this.state.type) { + case 78: + return this.parseIdentifier(true); + default: + return super.parseBindingAtom(); + } + } + parseMaybeDecoratorArguments(expr) { + if (this.match(47) || this.match(51)) { + const typeArguments = this.tsParseTypeArgumentsInExpression(); + if (this.match(10)) { + const call = super.parseMaybeDecoratorArguments(expr); + call.typeParameters = typeArguments; + return call; + } + this.unexpected(null, 10); + } + return super.parseMaybeDecoratorArguments(expr); + } + checkCommaAfterRest(close) { + if (this.state.isAmbientContext && this.match(12) && this.lookaheadCharCode() === close) { + this.next(); + return false; + } else { + return super.checkCommaAfterRest(close); + } + } + isClassMethod() { + return this.match(47) || super.isClassMethod(); + } + isClassProperty() { + return this.match(35) || this.match(14) || super.isClassProperty(); + } + parseMaybeDefault(startLoc, left) { + const node = super.parseMaybeDefault(startLoc, left); + if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) { + this.raise(TSErrors.TypeAnnotationAfterAssign, { + at: node.typeAnnotation + }); + } + return node; + } + getTokenFromCode(code) { + if (this.state.inType) { + if (code === 62) { + this.finishOp(48, 1); + return; + } + if (code === 60) { + this.finishOp(47, 1); + return; + } + } + super.getTokenFromCode(code); + } + reScan_lt_gt() { + const { + type + } = this.state; + if (type === 47) { + this.state.pos -= 1; + this.readToken_lt(); + } else if (type === 48) { + this.state.pos -= 1; + this.readToken_gt(); + } + } + reScan_lt() { + const { + type + } = this.state; + if (type === 51) { + this.state.pos -= 2; + this.finishOp(47, 1); + return 47; + } + return type; + } + toAssignableList(exprList, trailingCommaLoc, isLHS) { + for (let i = 0; i < exprList.length; i++) { + const expr = exprList[i]; + if ((expr == null ? void 0 : expr.type) === "TSTypeCastExpression") { + exprList[i] = this.typeCastToParameter(expr); + } + } + super.toAssignableList(exprList, trailingCommaLoc, isLHS); + } + typeCastToParameter(node) { + node.expression.typeAnnotation = node.typeAnnotation; + this.resetEndLocation(node.expression, node.typeAnnotation.loc.end); + return node.expression; + } + shouldParseArrow(params) { + if (this.match(14)) { + return params.every(expr => this.isAssignable(expr, true)); + } + return super.shouldParseArrow(params); + } + shouldParseAsyncArrow() { + return this.match(14) || super.shouldParseAsyncArrow(); + } + canHaveLeadingDecorator() { + return super.canHaveLeadingDecorator() || this.isAbstractClass(); + } + jsxParseOpeningElementAfterName(node) { + if (this.match(47) || this.match(51)) { + const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArgumentsInExpression()); + if (typeArguments) node.typeParameters = typeArguments; + } + return super.jsxParseOpeningElementAfterName(node); + } + getGetterSetterExpectedParamCount(method) { + const baseCount = super.getGetterSetterExpectedParamCount(method); + const params = this.getObjectOrClassMethodParams(method); + const firstParam = params[0]; + const hasContextParam = firstParam && this.isThisParam(firstParam); + return hasContextParam ? baseCount + 1 : baseCount; + } + parseCatchClauseParam() { + const param = super.parseCatchClauseParam(); + const type = this.tsTryParseTypeAnnotation(); + if (type) { + param.typeAnnotation = type; + this.resetEndLocation(param); + } + return param; + } + tsInAmbientContext(cb) { + const oldIsAmbientContext = this.state.isAmbientContext; + this.state.isAmbientContext = true; + try { + return cb(); + } finally { + this.state.isAmbientContext = oldIsAmbientContext; + } + } + parseClass(node, isStatement, optionalId) { + const oldInAbstractClass = this.state.inAbstractClass; + this.state.inAbstractClass = !!node.abstract; + try { + return super.parseClass(node, isStatement, optionalId); + } finally { + this.state.inAbstractClass = oldInAbstractClass; + } + } + tsParseAbstractDeclaration(node, decorators) { + if (this.match(80)) { + node.abstract = true; + return this.maybeTakeDecorators(decorators, this.parseClass(node, true, false)); + } else if (this.isContextual(127)) { + if (!this.hasFollowingLineBreak()) { + node.abstract = true; + this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, { + at: node + }); + return this.tsParseInterfaceDeclaration(node); + } + } else { + this.unexpected(null, 80); + } + } + parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope) { + const method = super.parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope); + if (method.abstract) { + const hasBody = this.hasPlugin("estree") ? !!method.value.body : !!method.body; + if (hasBody) { + const { + key + } = method; + this.raise(TSErrors.AbstractMethodHasImplementation, { + at: method, + methodName: key.type === "Identifier" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]` + }); + } + } + return method; + } + tsParseTypeParameterName() { + const typeName = this.parseIdentifier(); + return typeName.name; + } + shouldParseAsAmbientContext() { + return !!this.getPluginOption("typescript", "dts"); + } + parse() { + if (this.shouldParseAsAmbientContext()) { + this.state.isAmbientContext = true; + } + return super.parse(); + } + getExpression() { + if (this.shouldParseAsAmbientContext()) { + this.state.isAmbientContext = true; + } + return super.getExpression(); + } + parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) { + if (!isString && isMaybeTypeOnly) { + this.parseTypeOnlyImportExportSpecifier(node, false, isInTypeExport); + return this.finishNode(node, "ExportSpecifier"); + } + node.exportKind = "value"; + return super.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly); + } + parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) { + if (!importedIsString && isMaybeTypeOnly) { + this.parseTypeOnlyImportExportSpecifier(specifier, true, isInTypeOnlyImport); + return this.finishNode(specifier, "ImportSpecifier"); + } + specifier.importKind = "value"; + return super.parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, isInTypeOnlyImport ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT); + } + parseTypeOnlyImportExportSpecifier(node, isImport, isInTypeOnlyImportExport) { + const leftOfAsKey = isImport ? "imported" : "local"; + const rightOfAsKey = isImport ? "local" : "exported"; + let leftOfAs = node[leftOfAsKey]; + let rightOfAs; + let hasTypeSpecifier = false; + let canParseAsKeyword = true; + const loc = leftOfAs.loc.start; + if (this.isContextual(93)) { + const firstAs = this.parseIdentifier(); + if (this.isContextual(93)) { + const secondAs = this.parseIdentifier(); + if (tokenIsKeywordOrIdentifier(this.state.type)) { + hasTypeSpecifier = true; + leftOfAs = firstAs; + rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName(); + canParseAsKeyword = false; + } else { + rightOfAs = secondAs; + canParseAsKeyword = false; + } + } else if (tokenIsKeywordOrIdentifier(this.state.type)) { + canParseAsKeyword = false; + rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName(); + } else { + hasTypeSpecifier = true; + leftOfAs = firstAs; + } + } else if (tokenIsKeywordOrIdentifier(this.state.type)) { + hasTypeSpecifier = true; + if (isImport) { + leftOfAs = this.parseIdentifier(true); + if (!this.isContextual(93)) { + this.checkReservedWord(leftOfAs.name, leftOfAs.loc.start, true, true); + } + } else { + leftOfAs = this.parseModuleExportName(); + } + } + if (hasTypeSpecifier && isInTypeOnlyImportExport) { + this.raise(isImport ? TSErrors.TypeModifierIsUsedInTypeImports : TSErrors.TypeModifierIsUsedInTypeExports, { + at: loc + }); + } + node[leftOfAsKey] = leftOfAs; + node[rightOfAsKey] = rightOfAs; + const kindKey = isImport ? "importKind" : "exportKind"; + node[kindKey] = hasTypeSpecifier ? "type" : "value"; + if (canParseAsKeyword && this.eatContextual(93)) { + node[rightOfAsKey] = isImport ? this.parseIdentifier() : this.parseModuleExportName(); + } + if (!node[rightOfAsKey]) { + node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]); + } + if (isImport) { + this.checkIdentifier(node[rightOfAsKey], hasTypeSpecifier ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT); + } + } +}; +function isPossiblyLiteralEnum(expression) { + if (expression.type !== "MemberExpression") return false; + const { + computed, + property + } = expression; + if (computed && property.type !== "StringLiteral" && (property.type !== "TemplateLiteral" || property.expressions.length > 0)) { + return false; + } + return isUncomputedMemberExpressionChain(expression.object); +} +function isValidAmbientConstInitializer(expression, estree) { + var _expression$extra; + const { + type + } = expression; + if ((_expression$extra = expression.extra) != null && _expression$extra.parenthesized) { + return false; + } + if (estree) { + if (type === "Literal") { + const { + value + } = expression; + if (typeof value === "string" || typeof value === "boolean") { + return true; + } + } + } else { + if (type === "StringLiteral" || type === "BooleanLiteral") { + return true; + } + } + if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) { + return true; + } + if (type === "TemplateLiteral" && expression.expressions.length === 0) { + return true; + } + if (isPossiblyLiteralEnum(expression)) { + return true; + } + return false; +} +function isNumber(expression, estree) { + if (estree) { + return expression.type === "Literal" && (typeof expression.value === "number" || "bigint" in expression); + } else { + return expression.type === "NumericLiteral" || expression.type === "BigIntLiteral"; + } +} +function isNegativeNumber(expression, estree) { + if (expression.type === "UnaryExpression") { + const { + operator, + argument + } = expression; + if (operator === "-" && isNumber(argument, estree)) { + return true; + } + } + return false; +} +function isUncomputedMemberExpressionChain(expression) { + if (expression.type === "Identifier") return true; + if (expression.type !== "MemberExpression") return false; + if (expression.computed) return false; + return isUncomputedMemberExpressionChain(expression.object); +} +const PlaceholderErrors = ParseErrorEnum`placeholders`({ + ClassNameIsRequired: "A class name is required.", + UnexpectedSpace: "Unexpected space in placeholder." +}); +var placeholders = superClass => class PlaceholdersParserMixin extends superClass { + parsePlaceholder(expectedNode) { + if (this.match(142)) { + const node = this.startNode(); + this.next(); + this.assertNoSpace(); + node.name = super.parseIdentifier(true); + this.assertNoSpace(); + this.expect(142); + return this.finishPlaceholder(node, expectedNode); + } + } + finishPlaceholder(node, expectedNode) { + const isFinished = !!(node.expectedNode && node.type === "Placeholder"); + node.expectedNode = expectedNode; + return isFinished ? node : this.finishNode(node, "Placeholder"); + } + getTokenFromCode(code) { + if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) { + this.finishOp(142, 2); + } else { + super.getTokenFromCode(code); + } + } + parseExprAtom(refExpressionErrors) { + return this.parsePlaceholder("Expression") || super.parseExprAtom(refExpressionErrors); + } + parseIdentifier(liberal) { + return this.parsePlaceholder("Identifier") || super.parseIdentifier(liberal); + } + checkReservedWord(word, startLoc, checkKeywords, isBinding) { + if (word !== undefined) { + super.checkReservedWord(word, startLoc, checkKeywords, isBinding); + } + } + parseBindingAtom() { + return this.parsePlaceholder("Pattern") || super.parseBindingAtom(); + } + isValidLVal(type, isParenthesized, binding) { + return type === "Placeholder" || super.isValidLVal(type, isParenthesized, binding); + } + toAssignable(node, isLHS) { + if (node && node.type === "Placeholder" && node.expectedNode === "Expression") { + node.expectedNode = "Pattern"; + } else { + super.toAssignable(node, isLHS); + } + } + chStartsBindingIdentifier(ch, pos) { + if (super.chStartsBindingIdentifier(ch, pos)) { + return true; + } + const nextToken = this.lookahead(); + if (nextToken.type === 142) { + return true; + } + return false; + } + verifyBreakContinue(node, isBreak) { + if (node.label && node.label.type === "Placeholder") return; + super.verifyBreakContinue(node, isBreak); + } + parseExpressionStatement(node, expr) { + if (expr.type !== "Placeholder" || expr.extra && expr.extra.parenthesized) { + return super.parseExpressionStatement(node, expr); + } + if (this.match(14)) { + const stmt = node; + stmt.label = this.finishPlaceholder(expr, "Identifier"); + this.next(); + stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration(); + return this.finishNode(stmt, "LabeledStatement"); + } + this.semicolon(); + node.name = expr.name; + return this.finishPlaceholder(node, "Statement"); + } + parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse) { + return this.parsePlaceholder("BlockStatement") || super.parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse); + } + parseFunctionId(requireId) { + return this.parsePlaceholder("Identifier") || super.parseFunctionId(requireId); + } + parseClass(node, isStatement, optionalId) { + const type = isStatement ? "ClassDeclaration" : "ClassExpression"; + this.next(); + const oldStrict = this.state.strict; + const placeholder = this.parsePlaceholder("Identifier"); + if (placeholder) { + if (this.match(81) || this.match(142) || this.match(5)) { + node.id = placeholder; + } else if (optionalId || !isStatement) { + node.id = null; + node.body = this.finishPlaceholder(placeholder, "ClassBody"); + return this.finishNode(node, type); + } else { + throw this.raise(PlaceholderErrors.ClassNameIsRequired, { + at: this.state.startLoc + }); + } + } else { + this.parseClassId(node, isStatement, optionalId); + } + super.parseClassSuper(node); + node.body = this.parsePlaceholder("ClassBody") || super.parseClassBody(!!node.superClass, oldStrict); + return this.finishNode(node, type); + } + parseExport(node, decorators) { + const placeholder = this.parsePlaceholder("Identifier"); + if (!placeholder) return super.parseExport(node, decorators); + if (!this.isContextual(97) && !this.match(12)) { + node.specifiers = []; + node.source = null; + node.declaration = this.finishPlaceholder(placeholder, "Declaration"); + return this.finishNode(node, "ExportNamedDeclaration"); + } + this.expectPlugin("exportDefaultFrom"); + const specifier = this.startNode(); + specifier.exported = placeholder; + node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")]; + return super.parseExport(node, decorators); + } + isExportDefaultSpecifier() { + if (this.match(65)) { + const next = this.nextTokenStart(); + if (this.isUnparsedContextual(next, "from")) { + if (this.input.startsWith(tokenLabelName(142), this.nextTokenStartSince(next + 4))) { + return true; + } + } + } + return super.isExportDefaultSpecifier(); + } + maybeParseExportDefaultSpecifier(node) { + if (node.specifiers && node.specifiers.length > 0) { + return true; + } + return super.maybeParseExportDefaultSpecifier(node); + } + checkExport(node) { + const { + specifiers + } = node; + if (specifiers != null && specifiers.length) { + node.specifiers = specifiers.filter(node => node.exported.type === "Placeholder"); + } + super.checkExport(node); + node.specifiers = specifiers; + } + parseImport(node) { + const placeholder = this.parsePlaceholder("Identifier"); + if (!placeholder) return super.parseImport(node); + node.specifiers = []; + if (!this.isContextual(97) && !this.match(12)) { + node.source = this.finishPlaceholder(placeholder, "StringLiteral"); + this.semicolon(); + return this.finishNode(node, "ImportDeclaration"); + } + const specifier = this.startNodeAtNode(placeholder); + specifier.local = placeholder; + node.specifiers.push(this.finishNode(specifier, "ImportDefaultSpecifier")); + if (this.eat(12)) { + const hasStarImport = this.maybeParseStarImportSpecifier(node); + if (!hasStarImport) this.parseNamedImportSpecifiers(node); + } + this.expectContextual(97); + node.source = this.parseImportSource(); + this.semicolon(); + return this.finishNode(node, "ImportDeclaration"); + } + parseImportSource() { + return this.parsePlaceholder("StringLiteral") || super.parseImportSource(); + } + assertNoSpace() { + if (this.state.start > this.state.lastTokEndLoc.index) { + this.raise(PlaceholderErrors.UnexpectedSpace, { + at: this.state.lastTokEndLoc + }); + } + } +}; +var v8intrinsic = superClass => class V8IntrinsicMixin extends superClass { + parseV8Intrinsic() { + if (this.match(54)) { + const v8IntrinsicStartLoc = this.state.startLoc; + const node = this.startNode(); + this.next(); + if (tokenIsIdentifier(this.state.type)) { + const name = this.parseIdentifierName(); + const identifier = this.createIdentifier(node, name); + identifier.type = "V8IntrinsicIdentifier"; + if (this.match(10)) { + return identifier; + } + } + this.unexpected(v8IntrinsicStartLoc); + } + } + parseExprAtom(refExpressionErrors) { + return this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors); + } +}; +function hasPlugin(plugins, expectedConfig) { + const [expectedName, expectedOptions] = typeof expectedConfig === "string" ? [expectedConfig, {}] : expectedConfig; + const expectedKeys = Object.keys(expectedOptions); + const expectedOptionsIsEmpty = expectedKeys.length === 0; + return plugins.some(p => { + if (typeof p === "string") { + return expectedOptionsIsEmpty && p === expectedName; + } else { + const [pluginName, pluginOptions] = p; + if (pluginName !== expectedName) { + return false; + } + for (const key of expectedKeys) { + if (pluginOptions[key] !== expectedOptions[key]) { + return false; + } + } + return true; + } + }); +} +function getPluginOption(plugins, name, option) { + const plugin = plugins.find(plugin => { + if (Array.isArray(plugin)) { + return plugin[0] === name; + } else { + return plugin === name; + } + }); + if (plugin && Array.isArray(plugin) && plugin.length > 1) { + return plugin[1][option]; + } + return null; +} +const PIPELINE_PROPOSALS = ["minimal", "fsharp", "hack", "smart"]; +const TOPIC_TOKENS = ["^^", "@@", "^", "%", "#"]; +const RECORD_AND_TUPLE_SYNTAX_TYPES = ["hash", "bar"]; +function validatePlugins(plugins) { + if (hasPlugin(plugins, "decorators")) { + if (hasPlugin(plugins, "decorators-legacy")) { + throw new Error("Cannot use the decorators and decorators-legacy plugin together"); + } + const decoratorsBeforeExport = getPluginOption(plugins, "decorators", "decoratorsBeforeExport"); + if (decoratorsBeforeExport != null && typeof decoratorsBeforeExport !== "boolean") { + throw new Error("'decoratorsBeforeExport' must be a boolean, if specified."); + } + const allowCallParenthesized = getPluginOption(plugins, "decorators", "allowCallParenthesized"); + if (allowCallParenthesized != null && typeof allowCallParenthesized !== "boolean") { + throw new Error("'allowCallParenthesized' must be a boolean."); + } + } + if (hasPlugin(plugins, "flow") && hasPlugin(plugins, "typescript")) { + throw new Error("Cannot combine flow and typescript plugins."); + } + if (hasPlugin(plugins, "placeholders") && hasPlugin(plugins, "v8intrinsic")) { + throw new Error("Cannot combine placeholders and v8intrinsic plugins."); + } + if (hasPlugin(plugins, "pipelineOperator")) { + const proposal = getPluginOption(plugins, "pipelineOperator", "proposal"); + if (!PIPELINE_PROPOSALS.includes(proposal)) { + const proposalList = PIPELINE_PROPOSALS.map(p => `"${p}"`).join(", "); + throw new Error(`"pipelineOperator" requires "proposal" option whose value must be one of: ${proposalList}.`); + } + const tupleSyntaxIsHash = hasPlugin(plugins, ["recordAndTuple", { + syntaxType: "hash" + }]); + if (proposal === "hack") { + if (hasPlugin(plugins, "placeholders")) { + throw new Error("Cannot combine placeholders plugin and Hack-style pipes."); + } + if (hasPlugin(plugins, "v8intrinsic")) { + throw new Error("Cannot combine v8intrinsic plugin and Hack-style pipes."); + } + const topicToken = getPluginOption(plugins, "pipelineOperator", "topicToken"); + if (!TOPIC_TOKENS.includes(topicToken)) { + const tokenList = TOPIC_TOKENS.map(t => `"${t}"`).join(", "); + throw new Error(`"pipelineOperator" in "proposal": "hack" mode also requires a "topicToken" option whose value must be one of: ${tokenList}.`); + } + if (topicToken === "#" && tupleSyntaxIsHash) { + throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "hack", topicToken: "#" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.'); + } + } else if (proposal === "smart" && tupleSyntaxIsHash) { + throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "smart" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.'); + } + } + if (hasPlugin(plugins, "moduleAttributes")) { + { + if (hasPlugin(plugins, "importAssertions")) { + throw new Error("Cannot combine importAssertions and moduleAttributes plugins."); + } + const moduleAttributesVersionPluginOption = getPluginOption(plugins, "moduleAttributes", "version"); + if (moduleAttributesVersionPluginOption !== "may-2020") { + throw new Error("The 'moduleAttributes' plugin requires a 'version' option," + " representing the last proposal update. Currently, the" + " only supported value is 'may-2020'."); + } + } + } + if (hasPlugin(plugins, "recordAndTuple") && getPluginOption(plugins, "recordAndTuple", "syntaxType") != null && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, "recordAndTuple", "syntaxType"))) { + throw new Error("The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", ")); + } + if (hasPlugin(plugins, "asyncDoExpressions") && !hasPlugin(plugins, "doExpressions")) { + const error = new Error("'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins."); + error.missingPlugins = "doExpressions"; + throw error; + } +} +const mixinPlugins = { + estree, + jsx, + flow, + typescript, + v8intrinsic, + placeholders +}; +const mixinPluginNames = Object.keys(mixinPlugins); +class ExpressionParser extends LValParser { + checkProto(prop, isRecord, protoRef, refExpressionErrors) { + if (prop.type === "SpreadElement" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) { + return; + } + const key = prop.key; + const name = key.type === "Identifier" ? key.name : key.value; + if (name === "__proto__") { + if (isRecord) { + this.raise(Errors.RecordNoProto, { + at: key + }); + return; + } + if (protoRef.used) { + if (refExpressionErrors) { + if (refExpressionErrors.doubleProtoLoc === null) { + refExpressionErrors.doubleProtoLoc = key.loc.start; + } + } else { + this.raise(Errors.DuplicateProto, { + at: key + }); + } + } + protoRef.used = true; + } + } + shouldExitDescending(expr, potentialArrowAt) { + return expr.type === "ArrowFunctionExpression" && expr.start === potentialArrowAt; + } + getExpression() { + this.enterInitialScopes(); + this.nextToken(); + const expr = this.parseExpression(); + if (!this.match(137)) { + this.unexpected(); + } + this.finalizeRemainingComments(); + expr.comments = this.state.comments; + expr.errors = this.state.errors; + if (this.options.tokens) { + expr.tokens = this.tokens; + } + return expr; + } + parseExpression(disallowIn, refExpressionErrors) { + if (disallowIn) { + return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors)); + } + return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors)); + } + parseExpressionBase(refExpressionErrors) { + const startLoc = this.state.startLoc; + const expr = this.parseMaybeAssign(refExpressionErrors); + if (this.match(12)) { + const node = this.startNodeAt(startLoc); + node.expressions = [expr]; + while (this.eat(12)) { + node.expressions.push(this.parseMaybeAssign(refExpressionErrors)); + } + this.toReferencedList(node.expressions); + return this.finishNode(node, "SequenceExpression"); + } + return expr; + } + parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) { + return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse)); + } + parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) { + return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse)); + } + setOptionalParametersError(refExpressionErrors, resultError) { + var _resultError$loc; + refExpressionErrors.optionalParametersLoc = (_resultError$loc = resultError == null ? void 0 : resultError.loc) != null ? _resultError$loc : this.state.startLoc; + } + parseMaybeAssign(refExpressionErrors, afterLeftParse) { + const startLoc = this.state.startLoc; + if (this.isContextual(106)) { + if (this.prodParam.hasYield) { + let left = this.parseYield(); + if (afterLeftParse) { + left = afterLeftParse.call(this, left, startLoc); + } + return left; + } + } + let ownExpressionErrors; + if (refExpressionErrors) { + ownExpressionErrors = false; + } else { + refExpressionErrors = new ExpressionErrors(); + ownExpressionErrors = true; + } + const { + type + } = this.state; + if (type === 10 || tokenIsIdentifier(type)) { + this.state.potentialArrowAt = this.state.start; + } + let left = this.parseMaybeConditional(refExpressionErrors); + if (afterLeftParse) { + left = afterLeftParse.call(this, left, startLoc); + } + if (tokenIsAssignment(this.state.type)) { + const node = this.startNodeAt(startLoc); + const operator = this.state.value; + node.operator = operator; + if (this.match(29)) { + this.toAssignable(left, true); + node.left = left; + const startIndex = startLoc.index; + if (refExpressionErrors.doubleProtoLoc != null && refExpressionErrors.doubleProtoLoc.index >= startIndex) { + refExpressionErrors.doubleProtoLoc = null; + } + if (refExpressionErrors.shorthandAssignLoc != null && refExpressionErrors.shorthandAssignLoc.index >= startIndex) { + refExpressionErrors.shorthandAssignLoc = null; + } + if (refExpressionErrors.privateKeyLoc != null && refExpressionErrors.privateKeyLoc.index >= startIndex) { + this.checkDestructuringPrivate(refExpressionErrors); + refExpressionErrors.privateKeyLoc = null; + } + } else { + node.left = left; + } + this.next(); + node.right = this.parseMaybeAssign(); + this.checkLVal(left, { + in: this.finishNode(node, "AssignmentExpression") + }); + return node; + } else if (ownExpressionErrors) { + this.checkExpressionErrors(refExpressionErrors, true); + } + return left; + } + parseMaybeConditional(refExpressionErrors) { + const startLoc = this.state.startLoc; + const potentialArrowAt = this.state.potentialArrowAt; + const expr = this.parseExprOps(refExpressionErrors); + if (this.shouldExitDescending(expr, potentialArrowAt)) { + return expr; + } + return this.parseConditional(expr, startLoc, refExpressionErrors); + } + parseConditional(expr, startLoc, refExpressionErrors) { + if (this.eat(17)) { + const node = this.startNodeAt(startLoc); + node.test = expr; + node.consequent = this.parseMaybeAssignAllowIn(); + this.expect(14); + node.alternate = this.parseMaybeAssign(); + return this.finishNode(node, "ConditionalExpression"); + } + return expr; + } + parseMaybeUnaryOrPrivate(refExpressionErrors) { + return this.match(136) ? this.parsePrivateName() : this.parseMaybeUnary(refExpressionErrors); + } + parseExprOps(refExpressionErrors) { + const startLoc = this.state.startLoc; + const potentialArrowAt = this.state.potentialArrowAt; + const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors); + if (this.shouldExitDescending(expr, potentialArrowAt)) { + return expr; + } + return this.parseExprOp(expr, startLoc, -1); + } + parseExprOp(left, leftStartLoc, minPrec) { + if (this.isPrivateName(left)) { + const value = this.getPrivateNameSV(left); + if (minPrec >= tokenOperatorPrecedence(58) || !this.prodParam.hasIn || !this.match(58)) { + this.raise(Errors.PrivateInExpectedIn, { + at: left, + identifierName: value + }); + } + this.classScope.usePrivateName(value, left.loc.start); + } + const op = this.state.type; + if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(58))) { + let prec = tokenOperatorPrecedence(op); + if (prec > minPrec) { + if (op === 39) { + this.expectPlugin("pipelineOperator"); + if (this.state.inFSharpPipelineDirectBody) { + return left; + } + this.checkPipelineAtInfixOperator(left, leftStartLoc); + } + const node = this.startNodeAt(leftStartLoc); + node.left = left; + node.operator = this.state.value; + const logical = op === 41 || op === 42; + const coalesce = op === 40; + if (coalesce) { + prec = tokenOperatorPrecedence(42); + } + this.next(); + if (op === 39 && this.hasPlugin(["pipelineOperator", { + proposal: "minimal" + }])) { + if (this.state.type === 96 && this.prodParam.hasAwait) { + throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, { + at: this.state.startLoc + }); + } + } + node.right = this.parseExprOpRightExpr(op, prec); + const finishedNode = this.finishNode(node, logical || coalesce ? "LogicalExpression" : "BinaryExpression"); + const nextOp = this.state.type; + if (coalesce && (nextOp === 41 || nextOp === 42) || logical && nextOp === 40) { + throw this.raise(Errors.MixingCoalesceWithLogical, { + at: this.state.startLoc + }); + } + return this.parseExprOp(finishedNode, leftStartLoc, minPrec); + } + } + return left; + } + parseExprOpRightExpr(op, prec) { + const startLoc = this.state.startLoc; + switch (op) { + case 39: + switch (this.getPluginOption("pipelineOperator", "proposal")) { + case "hack": + return this.withTopicBindingContext(() => { + return this.parseHackPipeBody(); + }); + case "smart": + return this.withTopicBindingContext(() => { + if (this.prodParam.hasYield && this.isContextual(106)) { + throw this.raise(Errors.PipeBodyIsTighter, { + at: this.state.startLoc + }); + } + return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startLoc); + }); + case "fsharp": + return this.withSoloAwaitPermittingContext(() => { + return this.parseFSharpPipelineBody(prec); + }); + } + default: + return this.parseExprOpBaseRightExpr(op, prec); + } + } + parseExprOpBaseRightExpr(op, prec) { + const startLoc = this.state.startLoc; + return this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, tokenIsRightAssociative(op) ? prec - 1 : prec); + } + parseHackPipeBody() { + var _body$extra; + const { + startLoc + } = this.state; + const body = this.parseMaybeAssign(); + const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(body.type); + if (requiredParentheses && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) { + this.raise(Errors.PipeUnparenthesizedBody, { + at: startLoc, + type: body.type + }); + } + if (!this.topicReferenceWasUsedInCurrentContext()) { + this.raise(Errors.PipeTopicUnused, { + at: startLoc + }); + } + return body; + } + checkExponentialAfterUnary(node) { + if (this.match(57)) { + this.raise(Errors.UnexpectedTokenUnaryExponentiation, { + at: node.argument + }); + } + } + parseMaybeUnary(refExpressionErrors, sawUnary) { + const startLoc = this.state.startLoc; + const isAwait = this.isContextual(96); + if (isAwait && this.isAwaitAllowed()) { + this.next(); + const expr = this.parseAwait(startLoc); + if (!sawUnary) this.checkExponentialAfterUnary(expr); + return expr; + } + const update = this.match(34); + const node = this.startNode(); + if (tokenIsPrefix(this.state.type)) { + node.operator = this.state.value; + node.prefix = true; + if (this.match(72)) { + this.expectPlugin("throwExpressions"); + } + const isDelete = this.match(89); + this.next(); + node.argument = this.parseMaybeUnary(null, true); + this.checkExpressionErrors(refExpressionErrors, true); + if (this.state.strict && isDelete) { + const arg = node.argument; + if (arg.type === "Identifier") { + this.raise(Errors.StrictDelete, { + at: node + }); + } else if (this.hasPropertyAsPrivateName(arg)) { + this.raise(Errors.DeletePrivateField, { + at: node + }); + } + } + if (!update) { + if (!sawUnary) { + this.checkExponentialAfterUnary(node); + } + return this.finishNode(node, "UnaryExpression"); + } + } + const expr = this.parseUpdate(node, update, refExpressionErrors); + if (isAwait) { + const { + type + } = this.state; + const startsExpr = this.hasPlugin("v8intrinsic") ? tokenCanStartExpression(type) : tokenCanStartExpression(type) && !this.match(54); + if (startsExpr && !this.isAmbiguousAwait()) { + this.raiseOverwrite(Errors.AwaitNotInAsyncContext, { + at: startLoc + }); + return this.parseAwait(startLoc); + } + } + return expr; + } + parseUpdate(node, update, refExpressionErrors) { + if (update) { + const updateExpressionNode = node; + this.checkLVal(updateExpressionNode.argument, { + in: this.finishNode(updateExpressionNode, "UpdateExpression") + }); + return node; + } + const startLoc = this.state.startLoc; + let expr = this.parseExprSubscripts(refExpressionErrors); + if (this.checkExpressionErrors(refExpressionErrors, false)) return expr; + while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) { + const node = this.startNodeAt(startLoc); + node.operator = this.state.value; + node.prefix = false; + node.argument = expr; + this.next(); + this.checkLVal(expr, { + in: expr = this.finishNode(node, "UpdateExpression") + }); + } + return expr; + } + parseExprSubscripts(refExpressionErrors) { + const startLoc = this.state.startLoc; + const potentialArrowAt = this.state.potentialArrowAt; + const expr = this.parseExprAtom(refExpressionErrors); + if (this.shouldExitDescending(expr, potentialArrowAt)) { + return expr; + } + return this.parseSubscripts(expr, startLoc); + } + parseSubscripts(base, startLoc, noCalls) { + const state = { + optionalChainMember: false, + maybeAsyncArrow: this.atPossibleAsyncArrow(base), + stop: false + }; + do { + base = this.parseSubscript(base, startLoc, noCalls, state); + state.maybeAsyncArrow = false; + } while (!state.stop); + return base; + } + parseSubscript(base, startLoc, noCalls, state) { + const { + type + } = this.state; + if (!noCalls && type === 15) { + return this.parseBind(base, startLoc, noCalls, state); + } else if (tokenIsTemplate(type)) { + return this.parseTaggedTemplateExpression(base, startLoc, state); + } + let optional = false; + if (type === 18) { + if (noCalls) { + this.raise(Errors.OptionalChainingNoNew, { + at: this.state.startLoc + }); + if (this.lookaheadCharCode() === 40) { + state.stop = true; + return base; + } + } + state.optionalChainMember = optional = true; + this.next(); + } + if (!noCalls && this.match(10)) { + return this.parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional); + } else { + const computed = this.eat(0); + if (computed || optional || this.eat(16)) { + return this.parseMember(base, startLoc, state, computed, optional); + } else { + state.stop = true; + return base; + } + } + } + parseMember(base, startLoc, state, computed, optional) { + const node = this.startNodeAt(startLoc); + node.object = base; + node.computed = computed; + if (computed) { + node.property = this.parseExpression(); + this.expect(3); + } else if (this.match(136)) { + if (base.type === "Super") { + this.raise(Errors.SuperPrivateField, { + at: startLoc + }); + } + this.classScope.usePrivateName(this.state.value, this.state.startLoc); + node.property = this.parsePrivateName(); + } else { + node.property = this.parseIdentifier(true); + } + if (state.optionalChainMember) { + node.optional = optional; + return this.finishNode(node, "OptionalMemberExpression"); + } else { + return this.finishNode(node, "MemberExpression"); + } + } + parseBind(base, startLoc, noCalls, state) { + const node = this.startNodeAt(startLoc); + node.object = base; + this.next(); + node.callee = this.parseNoCallExpr(); + state.stop = true; + return this.parseSubscripts(this.finishNode(node, "BindExpression"), startLoc, noCalls); + } + parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional) { + const oldMaybeInArrowParameters = this.state.maybeInArrowParameters; + let refExpressionErrors = null; + this.state.maybeInArrowParameters = true; + this.next(); + const node = this.startNodeAt(startLoc); + node.callee = base; + const { + maybeAsyncArrow, + optionalChainMember + } = state; + if (maybeAsyncArrow) { + this.expressionScope.enter(newAsyncArrowScope()); + refExpressionErrors = new ExpressionErrors(); + } + if (optionalChainMember) { + node.optional = optional; + } + if (optional) { + node.arguments = this.parseCallExpressionArguments(11); + } else { + node.arguments = this.parseCallExpressionArguments(11, base.type === "Import", base.type !== "Super", node, refExpressionErrors); + } + let finishedNode = this.finishCallExpression(node, optionalChainMember); + if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) { + state.stop = true; + this.checkDestructuringPrivate(refExpressionErrors); + this.expressionScope.validateAsPattern(); + this.expressionScope.exit(); + finishedNode = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startLoc), finishedNode); + } else { + if (maybeAsyncArrow) { + this.checkExpressionErrors(refExpressionErrors, true); + this.expressionScope.exit(); + } + this.toReferencedArguments(finishedNode); + } + this.state.maybeInArrowParameters = oldMaybeInArrowParameters; + return finishedNode; + } + toReferencedArguments(node, isParenthesizedExpr) { + this.toReferencedListDeep(node.arguments, isParenthesizedExpr); + } + parseTaggedTemplateExpression(base, startLoc, state) { + const node = this.startNodeAt(startLoc); + node.tag = base; + node.quasi = this.parseTemplate(true); + if (state.optionalChainMember) { + this.raise(Errors.OptionalChainingNoTemplate, { + at: startLoc + }); + } + return this.finishNode(node, "TaggedTemplateExpression"); + } + atPossibleAsyncArrow(base) { + return base.type === "Identifier" && base.name === "async" && this.state.lastTokEndLoc.index === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt; + } + finishCallExpression(node, optional) { + if (node.callee.type === "Import") { + if (node.arguments.length === 2) { + { + if (!this.hasPlugin("moduleAttributes")) { + this.expectPlugin("importAssertions"); + } + } + } + if (node.arguments.length === 0 || node.arguments.length > 2) { + this.raise(Errors.ImportCallArity, { + at: node, + maxArgumentCount: this.hasPlugin("importAssertions") || this.hasPlugin("moduleAttributes") ? 2 : 1 + }); + } else { + for (const arg of node.arguments) { + if (arg.type === "SpreadElement") { + this.raise(Errors.ImportCallSpreadArgument, { + at: arg + }); + } + } + } + } + return this.finishNode(node, optional ? "OptionalCallExpression" : "CallExpression"); + } + parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) { + const elts = []; + let first = true; + const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody; + this.state.inFSharpPipelineDirectBody = false; + while (!this.eat(close)) { + if (first) { + first = false; + } else { + this.expect(12); + if (this.match(close)) { + if (dynamicImport && !this.hasPlugin("importAssertions") && !this.hasPlugin("moduleAttributes")) { + this.raise(Errors.ImportCallArgumentTrailingComma, { + at: this.state.lastTokStartLoc + }); + } + if (nodeForExtra) { + this.addTrailingCommaExtraToNode(nodeForExtra); + } + this.next(); + break; + } + } + elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder)); + } + this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody; + return elts; + } + shouldParseAsyncArrow() { + return this.match(19) && !this.canInsertSemicolon(); + } + parseAsyncArrowFromCallExpression(node, call) { + var _call$extra; + this.resetPreviousNodeTrailingComments(call); + this.expect(19); + this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingCommaLoc); + if (call.innerComments) { + setInnerComments(node, call.innerComments); + } + if (call.callee.trailingComments) { + setInnerComments(node, call.callee.trailingComments); + } + return node; + } + parseNoCallExpr() { + const startLoc = this.state.startLoc; + return this.parseSubscripts(this.parseExprAtom(), startLoc, true); + } + parseExprAtom(refExpressionErrors) { + let node; + let decorators = null; + const { + type + } = this.state; + switch (type) { + case 79: + return this.parseSuper(); + case 83: + node = this.startNode(); + this.next(); + if (this.match(16)) { + return this.parseImportMetaProperty(node); + } + if (!this.match(10)) { + this.raise(Errors.UnsupportedImport, { + at: this.state.lastTokStartLoc + }); + } + return this.finishNode(node, "Import"); + case 78: + node = this.startNode(); + this.next(); + return this.finishNode(node, "ThisExpression"); + case 90: + { + return this.parseDo(this.startNode(), false); + } + case 56: + case 31: + { + this.readRegexp(); + return this.parseRegExpLiteral(this.state.value); + } + case 132: + return this.parseNumericLiteral(this.state.value); + case 133: + return this.parseBigIntLiteral(this.state.value); + case 134: + return this.parseDecimalLiteral(this.state.value); + case 131: + return this.parseStringLiteral(this.state.value); + case 84: + return this.parseNullLiteral(); + case 85: + return this.parseBooleanLiteral(true); + case 86: + return this.parseBooleanLiteral(false); + case 10: + { + const canBeArrow = this.state.potentialArrowAt === this.state.start; + return this.parseParenAndDistinguishExpression(canBeArrow); + } + case 2: + case 1: + { + return this.parseArrayLike(this.state.type === 2 ? 4 : 3, false, true); + } + case 0: + { + return this.parseArrayLike(3, true, false, refExpressionErrors); + } + case 6: + case 7: + { + return this.parseObjectLike(this.state.type === 6 ? 9 : 8, false, true); + } + case 5: + { + return this.parseObjectLike(8, false, false, refExpressionErrors); + } + case 68: + return this.parseFunctionOrFunctionSent(); + case 26: + decorators = this.parseDecorators(); + case 80: + return this.parseClass(this.maybeTakeDecorators(decorators, this.startNode()), false); + case 77: + return this.parseNewOrNewTarget(); + case 25: + case 24: + return this.parseTemplate(false); + case 15: + { + node = this.startNode(); + this.next(); + node.object = null; + const callee = node.callee = this.parseNoCallExpr(); + if (callee.type === "MemberExpression") { + return this.finishNode(node, "BindExpression"); + } else { + throw this.raise(Errors.UnsupportedBind, { + at: callee + }); + } + } + case 136: + { + this.raise(Errors.PrivateInExpectedIn, { + at: this.state.startLoc, + identifierName: this.state.value + }); + return this.parsePrivateName(); + } + case 33: + { + return this.parseTopicReferenceThenEqualsSign(54, "%"); + } + case 32: + { + return this.parseTopicReferenceThenEqualsSign(44, "^"); + } + case 37: + case 38: + { + return this.parseTopicReference("hack"); + } + case 44: + case 54: + case 27: + { + const pipeProposal = this.getPluginOption("pipelineOperator", "proposal"); + if (pipeProposal) { + return this.parseTopicReference(pipeProposal); + } + this.unexpected(); + break; + } + case 47: + { + const lookaheadCh = this.input.codePointAt(this.nextTokenStart()); + if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) { + this.expectOnePlugin(["jsx", "flow", "typescript"]); + } else { + this.unexpected(); + } + break; + } + default: + if (tokenIsIdentifier(type)) { + if (this.isContextual(125) && this.lookaheadInLineCharCode() === 123) { + return this.parseModuleExpression(); + } + const canBeArrow = this.state.potentialArrowAt === this.state.start; + const containsEsc = this.state.containsEsc; + const id = this.parseIdentifier(); + if (!containsEsc && id.name === "async" && !this.canInsertSemicolon()) { + const { + type + } = this.state; + if (type === 68) { + this.resetPreviousNodeTrailingComments(id); + this.next(); + return this.parseAsyncFunctionExpression(this.startNodeAtNode(id)); + } else if (tokenIsIdentifier(type)) { + if (this.lookaheadCharCode() === 61) { + return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id)); + } else { + return id; + } + } else if (type === 90) { + this.resetPreviousNodeTrailingComments(id); + return this.parseDo(this.startNodeAtNode(id), true); + } + } + if (canBeArrow && this.match(19) && !this.canInsertSemicolon()) { + this.next(); + return this.parseArrowExpression(this.startNodeAtNode(id), [id], false); + } + return id; + } else { + this.unexpected(); + } + } + } + parseTopicReferenceThenEqualsSign(topicTokenType, topicTokenValue) { + const pipeProposal = this.getPluginOption("pipelineOperator", "proposal"); + if (pipeProposal) { + this.state.type = topicTokenType; + this.state.value = topicTokenValue; + this.state.pos--; + this.state.end--; + this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1); + return this.parseTopicReference(pipeProposal); + } else { + this.unexpected(); + } + } + parseTopicReference(pipeProposal) { + const node = this.startNode(); + const startLoc = this.state.startLoc; + const tokenType = this.state.type; + this.next(); + return this.finishTopicReference(node, startLoc, pipeProposal, tokenType); + } + finishTopicReference(node, startLoc, pipeProposal, tokenType) { + if (this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)) { + const nodeType = pipeProposal === "smart" ? "PipelinePrimaryTopicReference" : "TopicReference"; + if (!this.topicReferenceIsAllowedInCurrentContext()) { + this.raise(pipeProposal === "smart" ? Errors.PrimaryTopicNotAllowed : Errors.PipeTopicUnbound, { + at: startLoc + }); + } + this.registerTopicReference(); + return this.finishNode(node, nodeType); + } else { + throw this.raise(Errors.PipeTopicUnconfiguredToken, { + at: startLoc, + token: tokenLabelName(tokenType) + }); + } + } + testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType) { + switch (pipeProposal) { + case "hack": + { + return this.hasPlugin(["pipelineOperator", { + topicToken: tokenLabelName(tokenType) + }]); + } + case "smart": + return tokenType === 27; + default: + throw this.raise(Errors.PipeTopicRequiresHackPipes, { + at: startLoc + }); + } + } + parseAsyncArrowUnaryFunction(node) { + this.prodParam.enter(functionFlags(true, this.prodParam.hasYield)); + const params = [this.parseIdentifier()]; + this.prodParam.exit(); + if (this.hasPrecedingLineBreak()) { + this.raise(Errors.LineTerminatorBeforeArrow, { + at: this.state.curPosition() + }); + } + this.expect(19); + return this.parseArrowExpression(node, params, true); + } + parseDo(node, isAsync) { + this.expectPlugin("doExpressions"); + if (isAsync) { + this.expectPlugin("asyncDoExpressions"); + } + node.async = isAsync; + this.next(); + const oldLabels = this.state.labels; + this.state.labels = []; + if (isAsync) { + this.prodParam.enter(PARAM_AWAIT); + node.body = this.parseBlock(); + this.prodParam.exit(); + } else { + node.body = this.parseBlock(); + } + this.state.labels = oldLabels; + return this.finishNode(node, "DoExpression"); + } + parseSuper() { + const node = this.startNode(); + this.next(); + if (this.match(10) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) { + this.raise(Errors.SuperNotAllowed, { + at: node + }); + } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) { + this.raise(Errors.UnexpectedSuper, { + at: node + }); + } + if (!this.match(10) && !this.match(0) && !this.match(16)) { + this.raise(Errors.UnsupportedSuper, { + at: node + }); + } + return this.finishNode(node, "Super"); + } + parsePrivateName() { + const node = this.startNode(); + const id = this.startNodeAt(createPositionWithColumnOffset(this.state.startLoc, 1)); + const name = this.state.value; + this.next(); + node.id = this.createIdentifier(id, name); + return this.finishNode(node, "PrivateName"); + } + parseFunctionOrFunctionSent() { + const node = this.startNode(); + this.next(); + if (this.prodParam.hasYield && this.match(16)) { + const meta = this.createIdentifier(this.startNodeAtNode(node), "function"); + this.next(); + if (this.match(102)) { + this.expectPlugin("functionSent"); + } else if (!this.hasPlugin("functionSent")) { + this.unexpected(); + } + return this.parseMetaProperty(node, meta, "sent"); + } + return this.parseFunction(node); + } + parseMetaProperty(node, meta, propertyName) { + node.meta = meta; + const containsEsc = this.state.containsEsc; + node.property = this.parseIdentifier(true); + if (node.property.name !== propertyName || containsEsc) { + this.raise(Errors.UnsupportedMetaProperty, { + at: node.property, + target: meta.name, + onlyValidPropertyName: propertyName + }); + } + return this.finishNode(node, "MetaProperty"); + } + parseImportMetaProperty(node) { + const id = this.createIdentifier(this.startNodeAtNode(node), "import"); + this.next(); + if (this.isContextual(100)) { + if (!this.inModule) { + this.raise(Errors.ImportMetaOutsideModule, { + at: id + }); + } + this.sawUnambiguousESM = true; + } + return this.parseMetaProperty(node, id, "meta"); + } + parseLiteralAtNode(value, type, node) { + this.addExtra(node, "rawValue", value); + this.addExtra(node, "raw", this.input.slice(node.start, this.state.end)); + node.value = value; + this.next(); + return this.finishNode(node, type); + } + parseLiteral(value, type) { + const node = this.startNode(); + return this.parseLiteralAtNode(value, type, node); + } + parseStringLiteral(value) { + return this.parseLiteral(value, "StringLiteral"); + } + parseNumericLiteral(value) { + return this.parseLiteral(value, "NumericLiteral"); + } + parseBigIntLiteral(value) { + return this.parseLiteral(value, "BigIntLiteral"); + } + parseDecimalLiteral(value) { + return this.parseLiteral(value, "DecimalLiteral"); + } + parseRegExpLiteral(value) { + const node = this.parseLiteral(value.value, "RegExpLiteral"); + node.pattern = value.pattern; + node.flags = value.flags; + return node; + } + parseBooleanLiteral(value) { + const node = this.startNode(); + node.value = value; + this.next(); + return this.finishNode(node, "BooleanLiteral"); + } + parseNullLiteral() { + const node = this.startNode(); + this.next(); + return this.finishNode(node, "NullLiteral"); + } + parseParenAndDistinguishExpression(canBeArrow) { + const startLoc = this.state.startLoc; + let val; + this.next(); + this.expressionScope.enter(newArrowHeadScope()); + const oldMaybeInArrowParameters = this.state.maybeInArrowParameters; + const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody; + this.state.maybeInArrowParameters = true; + this.state.inFSharpPipelineDirectBody = false; + const innerStartLoc = this.state.startLoc; + const exprList = []; + const refExpressionErrors = new ExpressionErrors(); + let first = true; + let spreadStartLoc; + let optionalCommaStartLoc; + while (!this.match(11)) { + if (first) { + first = false; + } else { + this.expect(12, refExpressionErrors.optionalParametersLoc === null ? null : refExpressionErrors.optionalParametersLoc); + if (this.match(11)) { + optionalCommaStartLoc = this.state.startLoc; + break; + } + } + if (this.match(21)) { + const spreadNodeStartLoc = this.state.startLoc; + spreadStartLoc = this.state.startLoc; + exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc)); + if (!this.checkCommaAfterRest(41)) { + break; + } + } else { + exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem)); + } + } + const innerEndLoc = this.state.lastTokEndLoc; + this.expect(11); + this.state.maybeInArrowParameters = oldMaybeInArrowParameters; + this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody; + let arrowNode = this.startNodeAt(startLoc); + if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) { + this.checkDestructuringPrivate(refExpressionErrors); + this.expressionScope.validateAsPattern(); + this.expressionScope.exit(); + this.parseArrowExpression(arrowNode, exprList, false); + return arrowNode; + } + this.expressionScope.exit(); + if (!exprList.length) { + this.unexpected(this.state.lastTokStartLoc); + } + if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc); + if (spreadStartLoc) this.unexpected(spreadStartLoc); + this.checkExpressionErrors(refExpressionErrors, true); + this.toReferencedListDeep(exprList, true); + if (exprList.length > 1) { + val = this.startNodeAt(innerStartLoc); + val.expressions = exprList; + this.finishNode(val, "SequenceExpression"); + this.resetEndLocation(val, innerEndLoc); + } else { + val = exprList[0]; + } + return this.wrapParenthesis(startLoc, val); + } + wrapParenthesis(startLoc, expression) { + if (!this.options.createParenthesizedExpressions) { + this.addExtra(expression, "parenthesized", true); + this.addExtra(expression, "parenStart", startLoc.index); + this.takeSurroundingComments(expression, startLoc.index, this.state.lastTokEndLoc.index); + return expression; + } + const parenExpression = this.startNodeAt(startLoc); + parenExpression.expression = expression; + return this.finishNode(parenExpression, "ParenthesizedExpression"); + } + shouldParseArrow(params) { + return !this.canInsertSemicolon(); + } + parseArrow(node) { + if (this.eat(19)) { + return node; + } + } + parseParenItem(node, startLoc) { + return node; + } + parseNewOrNewTarget() { + const node = this.startNode(); + this.next(); + if (this.match(16)) { + const meta = this.createIdentifier(this.startNodeAtNode(node), "new"); + this.next(); + const metaProp = this.parseMetaProperty(node, meta, "target"); + if (!this.scope.inNonArrowFunction && !this.scope.inClass && !this.options.allowNewTargetOutsideFunction) { + this.raise(Errors.UnexpectedNewTarget, { + at: metaProp + }); + } + return metaProp; + } + return this.parseNew(node); + } + parseNew(node) { + this.parseNewCallee(node); + if (this.eat(10)) { + const args = this.parseExprList(11); + this.toReferencedList(args); + node.arguments = args; + } else { + node.arguments = []; + } + return this.finishNode(node, "NewExpression"); + } + parseNewCallee(node) { + node.callee = this.parseNoCallExpr(); + if (node.callee.type === "Import") { + this.raise(Errors.ImportCallNotNewExpression, { + at: node.callee + }); + } + } + parseTemplateElement(isTagged) { + const { + start, + startLoc, + end, + value + } = this.state; + const elemStart = start + 1; + const elem = this.startNodeAt(createPositionWithColumnOffset(startLoc, 1)); + if (value === null) { + if (!isTagged) { + this.raise(Errors.InvalidEscapeSequenceTemplate, { + at: createPositionWithColumnOffset(this.state.firstInvalidTemplateEscapePos, 1) + }); + } + } + const isTail = this.match(24); + const endOffset = isTail ? -1 : -2; + const elemEnd = end + endOffset; + elem.value = { + raw: this.input.slice(elemStart, elemEnd).replace(/\r\n?/g, "\n"), + cooked: value === null ? null : value.slice(1, endOffset) + }; + elem.tail = isTail; + this.next(); + const finishedNode = this.finishNode(elem, "TemplateElement"); + this.resetEndLocation(finishedNode, createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset)); + return finishedNode; + } + parseTemplate(isTagged) { + const node = this.startNode(); + node.expressions = []; + let curElt = this.parseTemplateElement(isTagged); + node.quasis = [curElt]; + while (!curElt.tail) { + node.expressions.push(this.parseTemplateSubstitution()); + this.readTemplateContinuation(); + node.quasis.push(curElt = this.parseTemplateElement(isTagged)); + } + return this.finishNode(node, "TemplateLiteral"); + } + parseTemplateSubstitution() { + return this.parseExpression(); + } + parseObjectLike(close, isPattern, isRecord, refExpressionErrors) { + if (isRecord) { + this.expectPlugin("recordAndTuple"); + } + const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody; + this.state.inFSharpPipelineDirectBody = false; + const propHash = Object.create(null); + let first = true; + const node = this.startNode(); + node.properties = []; + this.next(); + while (!this.match(close)) { + if (first) { + first = false; + } else { + this.expect(12); + if (this.match(close)) { + this.addTrailingCommaExtraToNode(node); + break; + } + } + let prop; + if (isPattern) { + prop = this.parseBindingProperty(); + } else { + prop = this.parsePropertyDefinition(refExpressionErrors); + this.checkProto(prop, isRecord, propHash, refExpressionErrors); + } + if (isRecord && !this.isObjectProperty(prop) && prop.type !== "SpreadElement") { + this.raise(Errors.InvalidRecordProperty, { + at: prop + }); + } + if (prop.shorthand) { + this.addExtra(prop, "shorthand", true); + } + node.properties.push(prop); + } + this.next(); + this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody; + let type = "ObjectExpression"; + if (isPattern) { + type = "ObjectPattern"; + } else if (isRecord) { + type = "RecordExpression"; + } + return this.finishNode(node, type); + } + addTrailingCommaExtraToNode(node) { + this.addExtra(node, "trailingComma", this.state.lastTokStart); + this.addExtra(node, "trailingCommaLoc", this.state.lastTokStartLoc, false); + } + maybeAsyncOrAccessorProp(prop) { + return !prop.computed && prop.key.type === "Identifier" && (this.isLiteralPropertyName() || this.match(0) || this.match(55)); + } + parsePropertyDefinition(refExpressionErrors) { + let decorators = []; + if (this.match(26)) { + if (this.hasPlugin("decorators")) { + this.raise(Errors.UnsupportedPropertyDecorator, { + at: this.state.startLoc + }); + } + while (this.match(26)) { + decorators.push(this.parseDecorator()); + } + } + const prop = this.startNode(); + let isAsync = false; + let isAccessor = false; + let startLoc; + if (this.match(21)) { + if (decorators.length) this.unexpected(); + return this.parseSpread(); + } + if (decorators.length) { + prop.decorators = decorators; + decorators = []; + } + prop.method = false; + if (refExpressionErrors) { + startLoc = this.state.startLoc; + } + let isGenerator = this.eat(55); + this.parsePropertyNamePrefixOperator(prop); + const containsEsc = this.state.containsEsc; + const key = this.parsePropertyName(prop, refExpressionErrors); + if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) { + const keyName = key.name; + if (keyName === "async" && !this.hasPrecedingLineBreak()) { + isAsync = true; + this.resetPreviousNodeTrailingComments(key); + isGenerator = this.eat(55); + this.parsePropertyName(prop); + } + if (keyName === "get" || keyName === "set") { + isAccessor = true; + this.resetPreviousNodeTrailingComments(key); + prop.kind = keyName; + if (this.match(55)) { + isGenerator = true; + this.raise(Errors.AccessorIsGenerator, { + at: this.state.curPosition(), + kind: keyName + }); + this.next(); + } + this.parsePropertyName(prop); + } + } + return this.parseObjPropValue(prop, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors); + } + getGetterSetterExpectedParamCount(method) { + return method.kind === "get" ? 0 : 1; + } + getObjectOrClassMethodParams(method) { + return method.params; + } + checkGetterSetterParams(method) { + var _params; + const paramCount = this.getGetterSetterExpectedParamCount(method); + const params = this.getObjectOrClassMethodParams(method); + if (params.length !== paramCount) { + this.raise(method.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, { + at: method + }); + } + if (method.kind === "set" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === "RestElement") { + this.raise(Errors.BadSetterRestParameter, { + at: method + }); + } + } + parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) { + if (isAccessor) { + const finishedProp = this.parseMethod(prop, isGenerator, false, false, false, "ObjectMethod"); + this.checkGetterSetterParams(finishedProp); + return finishedProp; + } + if (isAsync || isGenerator || this.match(10)) { + if (isPattern) this.unexpected(); + prop.kind = "method"; + prop.method = true; + return this.parseMethod(prop, isGenerator, isAsync, false, false, "ObjectMethod"); + } + } + parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) { + prop.shorthand = false; + if (this.eat(14)) { + prop.value = isPattern ? this.parseMaybeDefault(this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors); + return this.finishNode(prop, "ObjectProperty"); + } + if (!prop.computed && prop.key.type === "Identifier") { + this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false); + if (isPattern) { + prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key)); + } else if (this.match(29)) { + const shorthandAssignLoc = this.state.startLoc; + if (refExpressionErrors != null) { + if (refExpressionErrors.shorthandAssignLoc === null) { + refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc; + } + } else { + this.raise(Errors.InvalidCoverInitializedName, { + at: shorthandAssignLoc + }); + } + prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key)); + } else { + prop.value = cloneIdentifier(prop.key); + } + prop.shorthand = true; + return this.finishNode(prop, "ObjectProperty"); + } + } + parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) { + const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors); + if (!node) this.unexpected(); + return node; + } + parsePropertyName(prop, refExpressionErrors) { + if (this.eat(0)) { + prop.computed = true; + prop.key = this.parseMaybeAssignAllowIn(); + this.expect(3); + } else { + const { + type, + value + } = this.state; + let key; + if (tokenIsKeywordOrIdentifier(type)) { + key = this.parseIdentifier(true); + } else { + switch (type) { + case 132: + key = this.parseNumericLiteral(value); + break; + case 131: + key = this.parseStringLiteral(value); + break; + case 133: + key = this.parseBigIntLiteral(value); + break; + case 134: + key = this.parseDecimalLiteral(value); + break; + case 136: + { + const privateKeyLoc = this.state.startLoc; + if (refExpressionErrors != null) { + if (refExpressionErrors.privateKeyLoc === null) { + refExpressionErrors.privateKeyLoc = privateKeyLoc; + } + } else { + this.raise(Errors.UnexpectedPrivateField, { + at: privateKeyLoc + }); + } + key = this.parsePrivateName(); + break; + } + default: + this.unexpected(); + } + } + prop.key = key; + if (type !== 136) { + prop.computed = false; + } + } + return prop.key; + } + initFunction(node, isAsync) { + node.id = null; + node.generator = false; + node.async = isAsync; + } + parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) { + this.initFunction(node, isAsync); + node.generator = isGenerator; + this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0)); + this.prodParam.enter(functionFlags(isAsync, node.generator)); + this.parseFunctionParams(node, isConstructor); + const finishedNode = this.parseFunctionBodyAndFinish(node, type, true); + this.prodParam.exit(); + this.scope.exit(); + return finishedNode; + } + parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) { + if (isTuple) { + this.expectPlugin("recordAndTuple"); + } + const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody; + this.state.inFSharpPipelineDirectBody = false; + const node = this.startNode(); + this.next(); + node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node); + this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody; + return this.finishNode(node, isTuple ? "TupleExpression" : "ArrayExpression"); + } + parseArrowExpression(node, params, isAsync, trailingCommaLoc) { + this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW); + let flags = functionFlags(isAsync, false); + if (!this.match(5) && this.prodParam.hasIn) { + flags |= PARAM_IN; + } + this.prodParam.enter(flags); + this.initFunction(node, isAsync); + const oldMaybeInArrowParameters = this.state.maybeInArrowParameters; + if (params) { + this.state.maybeInArrowParameters = true; + this.setArrowFunctionParameters(node, params, trailingCommaLoc); + } + this.state.maybeInArrowParameters = false; + this.parseFunctionBody(node, true); + this.prodParam.exit(); + this.scope.exit(); + this.state.maybeInArrowParameters = oldMaybeInArrowParameters; + return this.finishNode(node, "ArrowFunctionExpression"); + } + setArrowFunctionParameters(node, params, trailingCommaLoc) { + this.toAssignableList(params, trailingCommaLoc, false); + node.params = params; + } + parseFunctionBodyAndFinish(node, type, isMethod = false) { + this.parseFunctionBody(node, false, isMethod); + return this.finishNode(node, type); + } + parseFunctionBody(node, allowExpression, isMethod = false) { + const isExpression = allowExpression && !this.match(5); + this.expressionScope.enter(newExpressionScope()); + if (isExpression) { + node.body = this.parseMaybeAssign(); + this.checkParams(node, false, allowExpression, false); + } else { + const oldStrict = this.state.strict; + const oldLabels = this.state.labels; + this.state.labels = []; + this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN); + node.body = this.parseBlock(true, false, hasStrictModeDirective => { + const nonSimple = !this.isSimpleParamList(node.params); + if (hasStrictModeDirective && nonSimple) { + this.raise(Errors.IllegalLanguageModeDirective, { + at: (node.kind === "method" || node.kind === "constructor") && !!node.key ? node.key.loc.end : node + }); + } + const strictModeChanged = !oldStrict && this.state.strict; + this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged); + if (this.state.strict && node.id) { + this.checkIdentifier(node.id, BIND_OUTSIDE, strictModeChanged); + } + }); + this.prodParam.exit(); + this.state.labels = oldLabels; + } + this.expressionScope.exit(); + } + isSimpleParameter(node) { + return node.type === "Identifier"; + } + isSimpleParamList(params) { + for (let i = 0, len = params.length; i < len; i++) { + if (!this.isSimpleParameter(params[i])) return false; + } + return true; + } + checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) { + const checkClashes = !allowDuplicates && new Set(); + const formalParameters = { + type: "FormalParameters" + }; + for (const param of node.params) { + this.checkLVal(param, { + in: formalParameters, + binding: BIND_VAR, + checkClashes, + strictModeChanged + }); + } + } + parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) { + const elts = []; + let first = true; + while (!this.eat(close)) { + if (first) { + first = false; + } else { + this.expect(12); + if (this.match(close)) { + if (nodeForExtra) { + this.addTrailingCommaExtraToNode(nodeForExtra); + } + this.next(); + break; + } + } + elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors)); + } + return elts; + } + parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) { + let elt; + if (this.match(12)) { + if (!allowEmpty) { + this.raise(Errors.UnexpectedToken, { + at: this.state.curPosition(), + unexpected: "," + }); + } + elt = null; + } else if (this.match(21)) { + const spreadNodeStartLoc = this.state.startLoc; + elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartLoc); + } else if (this.match(17)) { + this.expectPlugin("partialApplication"); + if (!allowPlaceholder) { + this.raise(Errors.UnexpectedArgumentPlaceholder, { + at: this.state.startLoc + }); + } + const node = this.startNode(); + this.next(); + elt = this.finishNode(node, "ArgumentPlaceholder"); + } else { + elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem); + } + return elt; + } + parseIdentifier(liberal) { + const node = this.startNode(); + const name = this.parseIdentifierName(liberal); + return this.createIdentifier(node, name); + } + createIdentifier(node, name) { + node.name = name; + node.loc.identifierName = name; + return this.finishNode(node, "Identifier"); + } + parseIdentifierName(liberal) { + let name; + const { + startLoc, + type + } = this.state; + if (tokenIsKeywordOrIdentifier(type)) { + name = this.state.value; + } else { + this.unexpected(); + } + const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type); + if (liberal) { + if (tokenIsKeyword) { + this.replaceToken(130); + } + } else { + this.checkReservedWord(name, startLoc, tokenIsKeyword, false); + } + this.next(); + return name; + } + checkReservedWord(word, startLoc, checkKeywords, isBinding) { + if (word.length > 10) { + return; + } + if (!canBeReservedWord(word)) { + return; + } + if (checkKeywords && isKeyword(word)) { + this.raise(Errors.UnexpectedKeyword, { + at: startLoc, + keyword: word + }); + return; + } + const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord; + if (reservedTest(word, this.inModule)) { + this.raise(Errors.UnexpectedReservedWord, { + at: startLoc, + reservedWord: word + }); + return; + } else if (word === "yield") { + if (this.prodParam.hasYield) { + this.raise(Errors.YieldBindingIdentifier, { + at: startLoc + }); + return; + } + } else if (word === "await") { + if (this.prodParam.hasAwait) { + this.raise(Errors.AwaitBindingIdentifier, { + at: startLoc + }); + return; + } + if (this.scope.inStaticBlock) { + this.raise(Errors.AwaitBindingIdentifierInStaticBlock, { + at: startLoc + }); + return; + } + this.expressionScope.recordAsyncArrowParametersError({ + at: startLoc + }); + } else if (word === "arguments") { + if (this.scope.inClassAndNotInNonArrowFunction) { + this.raise(Errors.ArgumentsInClass, { + at: startLoc + }); + return; + } + } + } + isAwaitAllowed() { + if (this.prodParam.hasAwait) return true; + if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) { + return true; + } + return false; + } + parseAwait(startLoc) { + const node = this.startNodeAt(startLoc); + this.expressionScope.recordParameterInitializerError(Errors.AwaitExpressionFormalParameter, { + at: node + }); + if (this.eat(55)) { + this.raise(Errors.ObsoleteAwaitStar, { + at: node + }); + } + if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) { + if (this.isAmbiguousAwait()) { + this.ambiguousScriptDifferentAst = true; + } else { + this.sawUnambiguousESM = true; + } + } + if (!this.state.soloAwait) { + node.argument = this.parseMaybeUnary(null, true); + } + return this.finishNode(node, "AwaitExpression"); + } + isAmbiguousAwait() { + if (this.hasPrecedingLineBreak()) return true; + const { + type + } = this.state; + return type === 53 || type === 10 || type === 0 || tokenIsTemplate(type) || type === 101 && !this.state.containsEsc || type === 135 || type === 56 || this.hasPlugin("v8intrinsic") && type === 54; + } + parseYield() { + const node = this.startNode(); + this.expressionScope.recordParameterInitializerError(Errors.YieldInParameter, { + at: node + }); + this.next(); + let delegating = false; + let argument = null; + if (!this.hasPrecedingLineBreak()) { + delegating = this.eat(55); + switch (this.state.type) { + case 13: + case 137: + case 8: + case 11: + case 3: + case 9: + case 14: + case 12: + if (!delegating) break; + default: + argument = this.parseMaybeAssign(); + } + } + node.delegate = delegating; + node.argument = argument; + return this.finishNode(node, "YieldExpression"); + } + checkPipelineAtInfixOperator(left, leftStartLoc) { + if (this.hasPlugin(["pipelineOperator", { + proposal: "smart" + }])) { + if (left.type === "SequenceExpression") { + this.raise(Errors.PipelineHeadSequenceExpression, { + at: leftStartLoc + }); + } + } + } + parseSmartPipelineBodyInStyle(childExpr, startLoc) { + if (this.isSimpleReference(childExpr)) { + const bodyNode = this.startNodeAt(startLoc); + bodyNode.callee = childExpr; + return this.finishNode(bodyNode, "PipelineBareFunction"); + } else { + const bodyNode = this.startNodeAt(startLoc); + this.checkSmartPipeTopicBodyEarlyErrors(startLoc); + bodyNode.expression = childExpr; + return this.finishNode(bodyNode, "PipelineTopicExpression"); + } + } + isSimpleReference(expression) { + switch (expression.type) { + case "MemberExpression": + return !expression.computed && this.isSimpleReference(expression.object); + case "Identifier": + return true; + default: + return false; + } + } + checkSmartPipeTopicBodyEarlyErrors(startLoc) { + if (this.match(19)) { + throw this.raise(Errors.PipelineBodyNoArrow, { + at: this.state.startLoc + }); + } + if (!this.topicReferenceWasUsedInCurrentContext()) { + this.raise(Errors.PipelineTopicUnused, { + at: startLoc + }); + } + } + withTopicBindingContext(callback) { + const outerContextTopicState = this.state.topicContext; + this.state.topicContext = { + maxNumOfResolvableTopics: 1, + maxTopicIndex: null + }; + try { + return callback(); + } finally { + this.state.topicContext = outerContextTopicState; + } + } + withSmartMixTopicForbiddingContext(callback) { + if (this.hasPlugin(["pipelineOperator", { + proposal: "smart" + }])) { + const outerContextTopicState = this.state.topicContext; + this.state.topicContext = { + maxNumOfResolvableTopics: 0, + maxTopicIndex: null + }; + try { + return callback(); + } finally { + this.state.topicContext = outerContextTopicState; + } + } else { + return callback(); + } + } + withSoloAwaitPermittingContext(callback) { + const outerContextSoloAwaitState = this.state.soloAwait; + this.state.soloAwait = true; + try { + return callback(); + } finally { + this.state.soloAwait = outerContextSoloAwaitState; + } + } + allowInAnd(callback) { + const flags = this.prodParam.currentFlags(); + const prodParamToSet = PARAM_IN & ~flags; + if (prodParamToSet) { + this.prodParam.enter(flags | PARAM_IN); + try { + return callback(); + } finally { + this.prodParam.exit(); + } + } + return callback(); + } + disallowInAnd(callback) { + const flags = this.prodParam.currentFlags(); + const prodParamToClear = PARAM_IN & flags; + if (prodParamToClear) { + this.prodParam.enter(flags & ~PARAM_IN); + try { + return callback(); + } finally { + this.prodParam.exit(); + } + } + return callback(); + } + registerTopicReference() { + this.state.topicContext.maxTopicIndex = 0; + } + topicReferenceIsAllowedInCurrentContext() { + return this.state.topicContext.maxNumOfResolvableTopics >= 1; + } + topicReferenceWasUsedInCurrentContext() { + return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0; + } + parseFSharpPipelineBody(prec) { + const startLoc = this.state.startLoc; + this.state.potentialArrowAt = this.state.start; + const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody; + this.state.inFSharpPipelineDirectBody = true; + const ret = this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, prec); + this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody; + return ret; + } + parseModuleExpression() { + this.expectPlugin("moduleBlocks"); + const node = this.startNode(); + this.next(); + if (!this.match(5)) { + this.unexpected(null, 5); + } + const program = this.startNodeAt(this.state.endLoc); + this.next(); + const revertScopes = this.initializeScopes(true); + this.enterInitialScopes(); + try { + node.body = this.parseProgram(program, 8, "module"); + } finally { + revertScopes(); + } + return this.finishNode(node, "ModuleExpression"); + } + parsePropertyNamePrefixOperator(prop) {} +} +const loopLabel = { + kind: "loop" + }, + switchLabel = { + kind: "switch" + }; +const loneSurrogate = /[\uD800-\uDFFF]/u; +const keywordRelationalOperator = /in(?:stanceof)?/y; +function babel7CompatTokens(tokens, input) { + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + const { + type + } = token; + if (typeof type === "number") { + { + if (type === 136) { + const { + loc, + start, + value, + end + } = token; + const hashEndPos = start + 1; + const hashEndLoc = createPositionWithColumnOffset(loc.start, 1); + tokens.splice(i, 1, new Token({ + type: getExportedToken(27), + value: "#", + start: start, + end: hashEndPos, + startLoc: loc.start, + endLoc: hashEndLoc + }), new Token({ + type: getExportedToken(130), + value: value, + start: hashEndPos, + end: end, + startLoc: hashEndLoc, + endLoc: loc.end + })); + i++; + continue; + } + if (tokenIsTemplate(type)) { + const { + loc, + start, + value, + end + } = token; + const backquoteEnd = start + 1; + const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1); + let startToken; + if (input.charCodeAt(start) === 96) { + startToken = new Token({ + type: getExportedToken(22), + value: "`", + start: start, + end: backquoteEnd, + startLoc: loc.start, + endLoc: backquoteEndLoc + }); + } else { + startToken = new Token({ + type: getExportedToken(8), + value: "}", + start: start, + end: backquoteEnd, + startLoc: loc.start, + endLoc: backquoteEndLoc + }); + } + let templateValue, templateElementEnd, templateElementEndLoc, endToken; + if (type === 24) { + templateElementEnd = end - 1; + templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1); + templateValue = value === null ? null : value.slice(1, -1); + endToken = new Token({ + type: getExportedToken(22), + value: "`", + start: templateElementEnd, + end: end, + startLoc: templateElementEndLoc, + endLoc: loc.end + }); + } else { + templateElementEnd = end - 2; + templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2); + templateValue = value === null ? null : value.slice(1, -2); + endToken = new Token({ + type: getExportedToken(23), + value: "${", + start: templateElementEnd, + end: end, + startLoc: templateElementEndLoc, + endLoc: loc.end + }); + } + tokens.splice(i, 1, startToken, new Token({ + type: getExportedToken(20), + value: templateValue, + start: backquoteEnd, + end: templateElementEnd, + startLoc: backquoteEndLoc, + endLoc: templateElementEndLoc + }), endToken); + i += 2; + continue; + } + } + token.type = getExportedToken(type); + } + } + return tokens; +} +class StatementParser extends ExpressionParser { + parseTopLevel(file, program) { + file.program = this.parseProgram(program); + file.comments = this.state.comments; + if (this.options.tokens) { + file.tokens = babel7CompatTokens(this.tokens, this.input); + } + return this.finishNode(file, "File"); + } + parseProgram(program, end = 137, sourceType = this.options.sourceType) { + program.sourceType = sourceType; + program.interpreter = this.parseInterpreterDirective(); + this.parseBlockBody(program, true, true, end); + if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) { + for (const [localName, at] of Array.from(this.scope.undefinedExports)) { + this.raise(Errors.ModuleExportUndefined, { + at, + localName + }); + } + } + let finishedProgram; + if (end === 137) { + finishedProgram = this.finishNode(program, "Program"); + } else { + finishedProgram = this.finishNodeAt(program, "Program", createPositionWithColumnOffset(this.state.startLoc, -1)); + } + return finishedProgram; + } + stmtToDirective(stmt) { + const directive = stmt; + directive.type = "Directive"; + directive.value = directive.expression; + delete directive.expression; + const directiveLiteral = directive.value; + const expressionValue = directiveLiteral.value; + const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end); + const val = directiveLiteral.value = raw.slice(1, -1); + this.addExtra(directiveLiteral, "raw", raw); + this.addExtra(directiveLiteral, "rawValue", val); + this.addExtra(directiveLiteral, "expressionValue", expressionValue); + directiveLiteral.type = "DirectiveLiteral"; + return directive; + } + parseInterpreterDirective() { + if (!this.match(28)) { + return null; + } + const node = this.startNode(); + node.value = this.state.value; + this.next(); + return this.finishNode(node, "InterpreterDirective"); + } + isLet() { + if (!this.isContextual(99)) { + return false; + } + return this.hasFollowingBindingAtom(); + } + chStartsBindingIdentifier(ch, pos) { + if (isIdentifierStart(ch)) { + keywordRelationalOperator.lastIndex = pos; + if (keywordRelationalOperator.test(this.input)) { + const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex); + if (!isIdentifierChar(endCh) && endCh !== 92) { + return false; + } + } + return true; + } else if (ch === 92) { + return true; + } else { + return false; + } + } + chStartsBindingPattern(ch) { + return ch === 91 || ch === 123; + } + hasFollowingBindingAtom() { + const next = this.nextTokenStart(); + const nextCh = this.codePointAtPos(next); + return this.chStartsBindingPattern(nextCh) || this.chStartsBindingIdentifier(nextCh, next); + } + hasInLineFollowingBindingIdentifier() { + const next = this.nextTokenInLineStart(); + const nextCh = this.codePointAtPos(next); + return this.chStartsBindingIdentifier(nextCh, next); + } + startsUsingForOf() { + const { + type, + containsEsc + } = this.lookahead(); + if (type === 101 && !containsEsc) { + return false; + } else if (tokenIsIdentifier(type) && !this.hasFollowingLineBreak()) { + this.expectPlugin("explicitResourceManagement"); + return true; + } + } + parseModuleItem() { + return this.parseStatementLike(1 | 2 | 4 | 8); + } + parseStatementListItem() { + return this.parseStatementLike(2 | 4 | (!this.options.annexB || this.state.strict ? 0 : 8)); + } + parseStatementOrSloppyAnnexBFunctionDeclaration(allowLabeledFunction = false) { + let flags = 0; + if (this.options.annexB && !this.state.strict) { + flags |= 4; + if (allowLabeledFunction) { + flags |= 8; + } + } + return this.parseStatementLike(flags); + } + parseStatement() { + return this.parseStatementLike(0); + } + parseStatementLike(flags) { + let decorators = null; + if (this.match(26)) { + decorators = this.parseDecorators(true); + } + return this.parseStatementContent(flags, decorators); + } + parseStatementContent(flags, decorators) { + const starttype = this.state.type; + const node = this.startNode(); + const allowDeclaration = !!(flags & 2); + const allowFunctionDeclaration = !!(flags & 4); + const topLevel = flags & 1; + switch (starttype) { + case 60: + return this.parseBreakContinueStatement(node, true); + case 63: + return this.parseBreakContinueStatement(node, false); + case 64: + return this.parseDebuggerStatement(node); + case 90: + return this.parseDoWhileStatement(node); + case 91: + return this.parseForStatement(node); + case 68: + if (this.lookaheadCharCode() === 46) break; + if (!allowFunctionDeclaration) { + this.raise(this.state.strict ? Errors.StrictFunction : this.options.annexB ? Errors.SloppyFunctionAnnexB : Errors.SloppyFunction, { + at: this.state.startLoc + }); + } + return this.parseFunctionStatement(node, false, !allowDeclaration && allowFunctionDeclaration); + case 80: + if (!allowDeclaration) this.unexpected(); + return this.parseClass(this.maybeTakeDecorators(decorators, node), true); + case 69: + return this.parseIfStatement(node); + case 70: + return this.parseReturnStatement(node); + case 71: + return this.parseSwitchStatement(node); + case 72: + return this.parseThrowStatement(node); + case 73: + return this.parseTryStatement(node); + case 105: + if (this.state.containsEsc || !this.hasInLineFollowingBindingIdentifier()) { + break; + } + this.expectPlugin("explicitResourceManagement"); + if (!this.scope.inModule && this.scope.inTopLevel) { + this.raise(Errors.UnexpectedUsingDeclaration, { + at: this.state.startLoc + }); + } else if (!allowDeclaration) { + this.raise(Errors.UnexpectedLexicalDeclaration, { + at: this.state.startLoc + }); + } + return this.parseVarStatement(node, "using"); + case 99: + { + if (this.state.containsEsc) { + break; + } + const next = this.nextTokenStart(); + const nextCh = this.codePointAtPos(next); + if (nextCh !== 91) { + if (!allowDeclaration && this.hasFollowingLineBreak()) break; + if (!this.chStartsBindingIdentifier(nextCh, next) && nextCh !== 123) { + break; + } + } + } + case 75: + { + if (!allowDeclaration) { + this.raise(Errors.UnexpectedLexicalDeclaration, { + at: this.state.startLoc + }); + } + } + case 74: + { + const kind = this.state.value; + return this.parseVarStatement(node, kind); + } + case 92: + return this.parseWhileStatement(node); + case 76: + return this.parseWithStatement(node); + case 5: + return this.parseBlock(); + case 13: + return this.parseEmptyStatement(node); + case 83: + { + const nextTokenCharCode = this.lookaheadCharCode(); + if (nextTokenCharCode === 40 || nextTokenCharCode === 46) { + break; + } + } + case 82: + { + if (!this.options.allowImportExportEverywhere && !topLevel) { + this.raise(Errors.UnexpectedImportExport, { + at: this.state.startLoc + }); + } + this.next(); + let result; + if (starttype === 83) { + result = this.parseImport(node); + if (result.type === "ImportDeclaration" && (!result.importKind || result.importKind === "value")) { + this.sawUnambiguousESM = true; + } + } else { + result = this.parseExport(node, decorators); + if (result.type === "ExportNamedDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportAllDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportDefaultDeclaration") { + this.sawUnambiguousESM = true; + } + } + this.assertModuleNodeAllowed(result); + return result; + } + default: + { + if (this.isAsyncFunction()) { + if (!allowDeclaration) { + this.raise(Errors.AsyncFunctionInSingleStatementContext, { + at: this.state.startLoc + }); + } + this.next(); + return this.parseFunctionStatement(node, true, !allowDeclaration && allowFunctionDeclaration); + } + } + } + const maybeName = this.state.value; + const expr = this.parseExpression(); + if (tokenIsIdentifier(starttype) && expr.type === "Identifier" && this.eat(14)) { + return this.parseLabeledStatement(node, maybeName, expr, flags); + } else { + return this.parseExpressionStatement(node, expr, decorators); + } + } + assertModuleNodeAllowed(node) { + if (!this.options.allowImportExportEverywhere && !this.inModule) { + this.raise(Errors.ImportOutsideModule, { + at: node + }); + } + } + decoratorsEnabledBeforeExport() { + if (this.hasPlugin("decorators-legacy")) return true; + return this.hasPlugin("decorators") && this.getPluginOption("decorators", "decoratorsBeforeExport") !== false; + } + maybeTakeDecorators(maybeDecorators, classNode, exportNode) { + if (maybeDecorators) { + if (classNode.decorators && classNode.decorators.length > 0) { + if (typeof this.getPluginOption("decorators", "decoratorsBeforeExport") !== "boolean") { + this.raise(Errors.DecoratorsBeforeAfterExport, { + at: classNode.decorators[0] + }); + } + classNode.decorators.unshift(...maybeDecorators); + } else { + classNode.decorators = maybeDecorators; + } + this.resetStartLocationFromNode(classNode, maybeDecorators[0]); + if (exportNode) this.resetStartLocationFromNode(exportNode, classNode); + } + return classNode; + } + canHaveLeadingDecorator() { + return this.match(80); + } + parseDecorators(allowExport) { + const decorators = []; + do { + decorators.push(this.parseDecorator()); + } while (this.match(26)); + if (this.match(82)) { + if (!allowExport) { + this.unexpected(); + } + if (!this.decoratorsEnabledBeforeExport()) { + this.raise(Errors.DecoratorExportClass, { + at: this.state.startLoc + }); + } + } else if (!this.canHaveLeadingDecorator()) { + throw this.raise(Errors.UnexpectedLeadingDecorator, { + at: this.state.startLoc + }); + } + return decorators; + } + parseDecorator() { + this.expectOnePlugin(["decorators", "decorators-legacy"]); + const node = this.startNode(); + this.next(); + if (this.hasPlugin("decorators")) { + const startLoc = this.state.startLoc; + let expr; + if (this.match(10)) { + const startLoc = this.state.startLoc; + this.next(); + expr = this.parseExpression(); + this.expect(11); + expr = this.wrapParenthesis(startLoc, expr); + const paramsStartLoc = this.state.startLoc; + node.expression = this.parseMaybeDecoratorArguments(expr); + if (this.getPluginOption("decorators", "allowCallParenthesized") === false && node.expression !== expr) { + this.raise(Errors.DecoratorArgumentsOutsideParentheses, { + at: paramsStartLoc + }); + } + } else { + expr = this.parseIdentifier(false); + while (this.eat(16)) { + const node = this.startNodeAt(startLoc); + node.object = expr; + if (this.match(136)) { + this.classScope.usePrivateName(this.state.value, this.state.startLoc); + node.property = this.parsePrivateName(); + } else { + node.property = this.parseIdentifier(true); + } + node.computed = false; + expr = this.finishNode(node, "MemberExpression"); + } + node.expression = this.parseMaybeDecoratorArguments(expr); + } + } else { + node.expression = this.parseExprSubscripts(); + } + return this.finishNode(node, "Decorator"); + } + parseMaybeDecoratorArguments(expr) { + if (this.eat(10)) { + const node = this.startNodeAtNode(expr); + node.callee = expr; + node.arguments = this.parseCallExpressionArguments(11, false); + this.toReferencedList(node.arguments); + return this.finishNode(node, "CallExpression"); + } + return expr; + } + parseBreakContinueStatement(node, isBreak) { + this.next(); + if (this.isLineTerminator()) { + node.label = null; + } else { + node.label = this.parseIdentifier(); + this.semicolon(); + } + this.verifyBreakContinue(node, isBreak); + return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement"); + } + verifyBreakContinue(node, isBreak) { + let i; + for (i = 0; i < this.state.labels.length; ++i) { + const lab = this.state.labels[i]; + if (node.label == null || lab.name === node.label.name) { + if (lab.kind != null && (isBreak || lab.kind === "loop")) break; + if (node.label && isBreak) break; + } + } + if (i === this.state.labels.length) { + const type = isBreak ? "BreakStatement" : "ContinueStatement"; + this.raise(Errors.IllegalBreakContinue, { + at: node, + type + }); + } + } + parseDebuggerStatement(node) { + this.next(); + this.semicolon(); + return this.finishNode(node, "DebuggerStatement"); + } + parseHeaderExpression() { + this.expect(10); + const val = this.parseExpression(); + this.expect(11); + return val; + } + parseDoWhileStatement(node) { + this.next(); + this.state.labels.push(loopLabel); + node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement()); + this.state.labels.pop(); + this.expect(92); + node.test = this.parseHeaderExpression(); + this.eat(13); + return this.finishNode(node, "DoWhileStatement"); + } + parseForStatement(node) { + this.next(); + this.state.labels.push(loopLabel); + let awaitAt = null; + if (this.isAwaitAllowed() && this.eatContextual(96)) { + awaitAt = this.state.lastTokStartLoc; + } + this.scope.enter(SCOPE_OTHER); + this.expect(10); + if (this.match(13)) { + if (awaitAt !== null) { + this.unexpected(awaitAt); + } + return this.parseFor(node, null); + } + const startsWithLet = this.isContextual(99); + const startsWithUsing = this.isContextual(105); + const isLetOrUsing = startsWithLet && this.hasFollowingBindingAtom() || startsWithUsing && this.startsUsingForOf(); + if (this.match(74) || this.match(75) || isLetOrUsing) { + const initNode = this.startNode(); + const kind = this.state.value; + this.next(); + this.parseVar(initNode, true, kind); + const init = this.finishNode(initNode, "VariableDeclaration"); + const isForIn = this.match(58); + if (isForIn && startsWithUsing) { + this.raise(Errors.ForInUsing, { + at: init + }); + } + if ((isForIn || this.isContextual(101)) && init.declarations.length === 1) { + return this.parseForIn(node, init, awaitAt); + } + if (awaitAt !== null) { + this.unexpected(awaitAt); + } + return this.parseFor(node, init); + } + const startsWithAsync = this.isContextual(95); + const refExpressionErrors = new ExpressionErrors(); + const init = this.parseExpression(true, refExpressionErrors); + const isForOf = this.isContextual(101); + if (isForOf) { + if (startsWithLet) { + this.raise(Errors.ForOfLet, { + at: init + }); + } + if (awaitAt === null && startsWithAsync && init.type === "Identifier") { + this.raise(Errors.ForOfAsync, { + at: init + }); + } + } + if (isForOf || this.match(58)) { + this.checkDestructuringPrivate(refExpressionErrors); + this.toAssignable(init, true); + const type = isForOf ? "ForOfStatement" : "ForInStatement"; + this.checkLVal(init, { + in: { + type + } + }); + return this.parseForIn(node, init, awaitAt); + } else { + this.checkExpressionErrors(refExpressionErrors, true); + } + if (awaitAt !== null) { + this.unexpected(awaitAt); + } + return this.parseFor(node, init); + } + parseFunctionStatement(node, isAsync, isHangingDeclaration) { + this.next(); + return this.parseFunction(node, 1 | (isHangingDeclaration ? 2 : 0) | (isAsync ? 8 : 0)); + } + parseIfStatement(node) { + this.next(); + node.test = this.parseHeaderExpression(); + node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration(); + node.alternate = this.eat(66) ? this.parseStatementOrSloppyAnnexBFunctionDeclaration() : null; + return this.finishNode(node, "IfStatement"); + } + parseReturnStatement(node) { + if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) { + this.raise(Errors.IllegalReturn, { + at: this.state.startLoc + }); + } + this.next(); + if (this.isLineTerminator()) { + node.argument = null; + } else { + node.argument = this.parseExpression(); + this.semicolon(); + } + return this.finishNode(node, "ReturnStatement"); + } + parseSwitchStatement(node) { + this.next(); + node.discriminant = this.parseHeaderExpression(); + const cases = node.cases = []; + this.expect(5); + this.state.labels.push(switchLabel); + this.scope.enter(SCOPE_OTHER); + let cur; + for (let sawDefault; !this.match(8);) { + if (this.match(61) || this.match(65)) { + const isCase = this.match(61); + if (cur) this.finishNode(cur, "SwitchCase"); + cases.push(cur = this.startNode()); + cur.consequent = []; + this.next(); + if (isCase) { + cur.test = this.parseExpression(); + } else { + if (sawDefault) { + this.raise(Errors.MultipleDefaultsInSwitch, { + at: this.state.lastTokStartLoc + }); + } + sawDefault = true; + cur.test = null; + } + this.expect(14); + } else { + if (cur) { + cur.consequent.push(this.parseStatementListItem()); + } else { + this.unexpected(); + } + } + } + this.scope.exit(); + if (cur) this.finishNode(cur, "SwitchCase"); + this.next(); + this.state.labels.pop(); + return this.finishNode(node, "SwitchStatement"); + } + parseThrowStatement(node) { + this.next(); + if (this.hasPrecedingLineBreak()) { + this.raise(Errors.NewlineAfterThrow, { + at: this.state.lastTokEndLoc + }); + } + node.argument = this.parseExpression(); + this.semicolon(); + return this.finishNode(node, "ThrowStatement"); + } + parseCatchClauseParam() { + const param = this.parseBindingAtom(); + this.scope.enter(this.options.annexB && param.type === "Identifier" ? SCOPE_SIMPLE_CATCH : 0); + this.checkLVal(param, { + in: { + type: "CatchClause" + }, + binding: BIND_CATCH_PARAM + }); + return param; + } + parseTryStatement(node) { + this.next(); + node.block = this.parseBlock(); + node.handler = null; + if (this.match(62)) { + const clause = this.startNode(); + this.next(); + if (this.match(10)) { + this.expect(10); + clause.param = this.parseCatchClauseParam(); + this.expect(11); + } else { + clause.param = null; + this.scope.enter(SCOPE_OTHER); + } + clause.body = this.withSmartMixTopicForbiddingContext(() => this.parseBlock(false, false)); + this.scope.exit(); + node.handler = this.finishNode(clause, "CatchClause"); + } + node.finalizer = this.eat(67) ? this.parseBlock() : null; + if (!node.handler && !node.finalizer) { + this.raise(Errors.NoCatchOrFinally, { + at: node + }); + } + return this.finishNode(node, "TryStatement"); + } + parseVarStatement(node, kind, allowMissingInitializer = false) { + this.next(); + this.parseVar(node, false, kind, allowMissingInitializer); + this.semicolon(); + return this.finishNode(node, "VariableDeclaration"); + } + parseWhileStatement(node) { + this.next(); + node.test = this.parseHeaderExpression(); + this.state.labels.push(loopLabel); + node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement()); + this.state.labels.pop(); + return this.finishNode(node, "WhileStatement"); + } + parseWithStatement(node) { + if (this.state.strict) { + this.raise(Errors.StrictWith, { + at: this.state.startLoc + }); + } + this.next(); + node.object = this.parseHeaderExpression(); + node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement()); + return this.finishNode(node, "WithStatement"); + } + parseEmptyStatement(node) { + this.next(); + return this.finishNode(node, "EmptyStatement"); + } + parseLabeledStatement(node, maybeName, expr, flags) { + for (const label of this.state.labels) { + if (label.name === maybeName) { + this.raise(Errors.LabelRedeclaration, { + at: expr, + labelName: maybeName + }); + } + } + const kind = tokenIsLoop(this.state.type) ? "loop" : this.match(71) ? "switch" : null; + for (let i = this.state.labels.length - 1; i >= 0; i--) { + const label = this.state.labels[i]; + if (label.statementStart === node.start) { + label.statementStart = this.state.start; + label.kind = kind; + } else { + break; + } + } + this.state.labels.push({ + name: maybeName, + kind: kind, + statementStart: this.state.start + }); + node.body = flags & 8 ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true) : this.parseStatement(); + this.state.labels.pop(); + node.label = expr; + return this.finishNode(node, "LabeledStatement"); + } + parseExpressionStatement(node, expr, decorators) { + node.expression = expr; + this.semicolon(); + return this.finishNode(node, "ExpressionStatement"); + } + parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) { + const node = this.startNode(); + if (allowDirectives) { + this.state.strictErrors.clear(); + } + this.expect(5); + if (createNewLexicalScope) { + this.scope.enter(SCOPE_OTHER); + } + this.parseBlockBody(node, allowDirectives, false, 8, afterBlockParse); + if (createNewLexicalScope) { + this.scope.exit(); + } + return this.finishNode(node, "BlockStatement"); + } + isValidDirective(stmt) { + return stmt.type === "ExpressionStatement" && stmt.expression.type === "StringLiteral" && !stmt.expression.extra.parenthesized; + } + parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) { + const body = node.body = []; + const directives = node.directives = []; + this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse); + } + parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) { + const oldStrict = this.state.strict; + let hasStrictModeDirective = false; + let parsedNonDirective = false; + while (!this.match(end)) { + const stmt = topLevel ? this.parseModuleItem() : this.parseStatementListItem(); + if (directives && !parsedNonDirective) { + if (this.isValidDirective(stmt)) { + const directive = this.stmtToDirective(stmt); + directives.push(directive); + if (!hasStrictModeDirective && directive.value.value === "use strict") { + hasStrictModeDirective = true; + this.setStrict(true); + } + continue; + } + parsedNonDirective = true; + this.state.strictErrors.clear(); + } + body.push(stmt); + } + if (afterBlockParse) { + afterBlockParse.call(this, hasStrictModeDirective); + } + if (!oldStrict) { + this.setStrict(false); + } + this.next(); + } + parseFor(node, init) { + node.init = init; + this.semicolon(false); + node.test = this.match(13) ? null : this.parseExpression(); + this.semicolon(false); + node.update = this.match(11) ? null : this.parseExpression(); + this.expect(11); + node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement()); + this.scope.exit(); + this.state.labels.pop(); + return this.finishNode(node, "ForStatement"); + } + parseForIn(node, init, awaitAt) { + const isForIn = this.match(58); + this.next(); + if (isForIn) { + if (awaitAt !== null) this.unexpected(awaitAt); + } else { + node.await = awaitAt !== null; + } + if (init.type === "VariableDeclaration" && init.declarations[0].init != null && (!isForIn || !this.options.annexB || this.state.strict || init.kind !== "var" || init.declarations[0].id.type !== "Identifier")) { + this.raise(Errors.ForInOfLoopInitializer, { + at: init, + type: isForIn ? "ForInStatement" : "ForOfStatement" + }); + } + if (init.type === "AssignmentPattern") { + this.raise(Errors.InvalidLhs, { + at: init, + ancestor: { + type: "ForStatement" + } + }); + } + node.left = init; + node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn(); + this.expect(11); + node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement()); + this.scope.exit(); + this.state.labels.pop(); + return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement"); + } + parseVar(node, isFor, kind, allowMissingInitializer = false) { + const declarations = node.declarations = []; + node.kind = kind; + for (;;) { + const decl = this.startNode(); + this.parseVarId(decl, kind); + decl.init = !this.eat(29) ? null : isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn(); + if (decl.init === null && !allowMissingInitializer) { + if (decl.id.type !== "Identifier" && !(isFor && (this.match(58) || this.isContextual(101)))) { + this.raise(Errors.DeclarationMissingInitializer, { + at: this.state.lastTokEndLoc, + kind: "destructuring" + }); + } else if (kind === "const" && !(this.match(58) || this.isContextual(101))) { + this.raise(Errors.DeclarationMissingInitializer, { + at: this.state.lastTokEndLoc, + kind: "const" + }); + } + } + declarations.push(this.finishNode(decl, "VariableDeclarator")); + if (!this.eat(12)) break; + } + return node; + } + parseVarId(decl, kind) { + if (kind === "using" && !this.inModule && this.match(96)) { + this.raise(Errors.AwaitInUsingBinding, { + at: this.state.startLoc + }); + } + const id = this.parseBindingAtom(); + this.checkLVal(id, { + in: { + type: "VariableDeclarator" + }, + binding: kind === "var" ? BIND_VAR : BIND_LEXICAL + }); + decl.id = id; + } + parseAsyncFunctionExpression(node) { + return this.parseFunction(node, 8); + } + parseFunction(node, flags = 0) { + const hangingDeclaration = flags & 2; + const isDeclaration = !!(flags & 1); + const requireId = isDeclaration && !(flags & 4); + const isAsync = !!(flags & 8); + this.initFunction(node, isAsync); + if (this.match(55)) { + if (hangingDeclaration) { + this.raise(Errors.GeneratorInSingleStatementContext, { + at: this.state.startLoc + }); + } + this.next(); + node.generator = true; + } + if (isDeclaration) { + node.id = this.parseFunctionId(requireId); + } + const oldMaybeInArrowParameters = this.state.maybeInArrowParameters; + this.state.maybeInArrowParameters = false; + this.scope.enter(SCOPE_FUNCTION); + this.prodParam.enter(functionFlags(isAsync, node.generator)); + if (!isDeclaration) { + node.id = this.parseFunctionId(); + } + this.parseFunctionParams(node, false); + this.withSmartMixTopicForbiddingContext(() => { + this.parseFunctionBodyAndFinish(node, isDeclaration ? "FunctionDeclaration" : "FunctionExpression"); + }); + this.prodParam.exit(); + this.scope.exit(); + if (isDeclaration && !hangingDeclaration) { + this.registerFunctionStatementId(node); + } + this.state.maybeInArrowParameters = oldMaybeInArrowParameters; + return node; + } + parseFunctionId(requireId) { + return requireId || tokenIsIdentifier(this.state.type) ? this.parseIdentifier() : null; + } + parseFunctionParams(node, isConstructor) { + this.expect(10); + this.expressionScope.enter(newParameterDeclarationScope()); + node.params = this.parseBindingList(11, 41, 2 | (isConstructor ? 4 : 0)); + this.expressionScope.exit(); + } + registerFunctionStatementId(node) { + if (!node.id) return; + this.scope.declareName(node.id.name, !this.options.annexB || this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.loc.start); + } + parseClass(node, isStatement, optionalId) { + this.next(); + const oldStrict = this.state.strict; + this.state.strict = true; + this.parseClassId(node, isStatement, optionalId); + this.parseClassSuper(node); + node.body = this.parseClassBody(!!node.superClass, oldStrict); + return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression"); + } + isClassProperty() { + return this.match(29) || this.match(13) || this.match(8); + } + isClassMethod() { + return this.match(10); + } + isNonstaticConstructor(method) { + return !method.computed && !method.static && (method.key.name === "constructor" || method.key.value === "constructor"); + } + parseClassBody(hadSuperClass, oldStrict) { + this.classScope.enter(); + const state = { + hadConstructor: false, + hadSuperClass + }; + let decorators = []; + const classBody = this.startNode(); + classBody.body = []; + this.expect(5); + this.withSmartMixTopicForbiddingContext(() => { + while (!this.match(8)) { + if (this.eat(13)) { + if (decorators.length > 0) { + throw this.raise(Errors.DecoratorSemicolon, { + at: this.state.lastTokEndLoc + }); + } + continue; + } + if (this.match(26)) { + decorators.push(this.parseDecorator()); + continue; + } + const member = this.startNode(); + if (decorators.length) { + member.decorators = decorators; + this.resetStartLocationFromNode(member, decorators[0]); + decorators = []; + } + this.parseClassMember(classBody, member, state); + if (member.kind === "constructor" && member.decorators && member.decorators.length > 0) { + this.raise(Errors.DecoratorConstructor, { + at: member + }); + } + } + }); + this.state.strict = oldStrict; + this.next(); + if (decorators.length) { + throw this.raise(Errors.TrailingDecorator, { + at: this.state.startLoc + }); + } + this.classScope.exit(); + return this.finishNode(classBody, "ClassBody"); + } + parseClassMemberFromModifier(classBody, member) { + const key = this.parseIdentifier(true); + if (this.isClassMethod()) { + const method = member; + method.kind = "method"; + method.computed = false; + method.key = key; + method.static = false; + this.pushClassMethod(classBody, method, false, false, false, false); + return true; + } else if (this.isClassProperty()) { + const prop = member; + prop.computed = false; + prop.key = key; + prop.static = false; + classBody.body.push(this.parseClassProperty(prop)); + return true; + } + this.resetPreviousNodeTrailingComments(key); + return false; + } + parseClassMember(classBody, member, state) { + const isStatic = this.isContextual(104); + if (isStatic) { + if (this.parseClassMemberFromModifier(classBody, member)) { + return; + } + if (this.eat(5)) { + this.parseClassStaticBlock(classBody, member); + return; + } + } + this.parseClassMemberWithIsStatic(classBody, member, state, isStatic); + } + parseClassMemberWithIsStatic(classBody, member, state, isStatic) { + const publicMethod = member; + const privateMethod = member; + const publicProp = member; + const privateProp = member; + const accessorProp = member; + const method = publicMethod; + const publicMember = publicMethod; + member.static = isStatic; + this.parsePropertyNamePrefixOperator(member); + if (this.eat(55)) { + method.kind = "method"; + const isPrivateName = this.match(136); + this.parseClassElementName(method); + if (isPrivateName) { + this.pushClassPrivateMethod(classBody, privateMethod, true, false); + return; + } + if (this.isNonstaticConstructor(publicMethod)) { + this.raise(Errors.ConstructorIsGenerator, { + at: publicMethod.key + }); + } + this.pushClassMethod(classBody, publicMethod, true, false, false, false); + return; + } + const isContextual = tokenIsIdentifier(this.state.type) && !this.state.containsEsc; + const isPrivate = this.match(136); + const key = this.parseClassElementName(member); + const maybeQuestionTokenStartLoc = this.state.startLoc; + this.parsePostMemberNameModifiers(publicMember); + if (this.isClassMethod()) { + method.kind = "method"; + if (isPrivate) { + this.pushClassPrivateMethod(classBody, privateMethod, false, false); + return; + } + const isConstructor = this.isNonstaticConstructor(publicMethod); + let allowsDirectSuper = false; + if (isConstructor) { + publicMethod.kind = "constructor"; + if (state.hadConstructor && !this.hasPlugin("typescript")) { + this.raise(Errors.DuplicateConstructor, { + at: key + }); + } + if (isConstructor && this.hasPlugin("typescript") && member.override) { + this.raise(Errors.OverrideOnConstructor, { + at: key + }); + } + state.hadConstructor = true; + allowsDirectSuper = state.hadSuperClass; + } + this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper); + } else if (this.isClassProperty()) { + if (isPrivate) { + this.pushClassPrivateProperty(classBody, privateProp); + } else { + this.pushClassProperty(classBody, publicProp); + } + } else if (isContextual && key.name === "async" && !this.isLineTerminator()) { + this.resetPreviousNodeTrailingComments(key); + const isGenerator = this.eat(55); + if (publicMember.optional) { + this.unexpected(maybeQuestionTokenStartLoc); + } + method.kind = "method"; + const isPrivate = this.match(136); + this.parseClassElementName(method); + this.parsePostMemberNameModifiers(publicMember); + if (isPrivate) { + this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true); + } else { + if (this.isNonstaticConstructor(publicMethod)) { + this.raise(Errors.ConstructorIsAsync, { + at: publicMethod.key + }); + } + this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false); + } + } else if (isContextual && (key.name === "get" || key.name === "set") && !(this.match(55) && this.isLineTerminator())) { + this.resetPreviousNodeTrailingComments(key); + method.kind = key.name; + const isPrivate = this.match(136); + this.parseClassElementName(publicMethod); + if (isPrivate) { + this.pushClassPrivateMethod(classBody, privateMethod, false, false); + } else { + if (this.isNonstaticConstructor(publicMethod)) { + this.raise(Errors.ConstructorIsAccessor, { + at: publicMethod.key + }); + } + this.pushClassMethod(classBody, publicMethod, false, false, false, false); + } + this.checkGetterSetterParams(publicMethod); + } else if (isContextual && key.name === "accessor" && !this.isLineTerminator()) { + this.expectPlugin("decoratorAutoAccessors"); + this.resetPreviousNodeTrailingComments(key); + const isPrivate = this.match(136); + this.parseClassElementName(publicProp); + this.pushClassAccessorProperty(classBody, accessorProp, isPrivate); + } else if (this.isLineTerminator()) { + if (isPrivate) { + this.pushClassPrivateProperty(classBody, privateProp); + } else { + this.pushClassProperty(classBody, publicProp); + } + } else { + this.unexpected(); + } + } + parseClassElementName(member) { + const { + type, + value + } = this.state; + if ((type === 130 || type === 131) && member.static && value === "prototype") { + this.raise(Errors.StaticPrototype, { + at: this.state.startLoc + }); + } + if (type === 136) { + if (value === "constructor") { + this.raise(Errors.ConstructorClassPrivateField, { + at: this.state.startLoc + }); + } + const key = this.parsePrivateName(); + member.key = key; + return key; + } + return this.parsePropertyName(member); + } + parseClassStaticBlock(classBody, member) { + var _member$decorators; + this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER); + const oldLabels = this.state.labels; + this.state.labels = []; + this.prodParam.enter(PARAM); + const body = member.body = []; + this.parseBlockOrModuleBlockBody(body, undefined, false, 8); + this.prodParam.exit(); + this.scope.exit(); + this.state.labels = oldLabels; + classBody.body.push(this.finishNode(member, "StaticBlock")); + if ((_member$decorators = member.decorators) != null && _member$decorators.length) { + this.raise(Errors.DecoratorStaticBlock, { + at: member + }); + } + } + pushClassProperty(classBody, prop) { + if (!prop.computed && (prop.key.name === "constructor" || prop.key.value === "constructor")) { + this.raise(Errors.ConstructorClassField, { + at: prop.key + }); + } + classBody.body.push(this.parseClassProperty(prop)); + } + pushClassPrivateProperty(classBody, prop) { + const node = this.parseClassPrivateProperty(prop); + classBody.body.push(node); + this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.loc.start); + } + pushClassAccessorProperty(classBody, prop, isPrivate) { + if (!isPrivate && !prop.computed) { + const key = prop.key; + if (key.name === "constructor" || key.value === "constructor") { + this.raise(Errors.ConstructorClassField, { + at: key + }); + } + } + const node = this.parseClassAccessorProperty(prop); + classBody.body.push(node); + if (isPrivate) { + this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.loc.start); + } + } + pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) { + classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true)); + } + pushClassPrivateMethod(classBody, method, isGenerator, isAsync) { + const node = this.parseMethod(method, isGenerator, isAsync, false, false, "ClassPrivateMethod", true); + classBody.body.push(node); + const kind = node.kind === "get" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === "set" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER; + this.declareClassPrivateMethodInScope(node, kind); + } + declareClassPrivateMethodInScope(node, kind) { + this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.loc.start); + } + parsePostMemberNameModifiers(methodOrProp) {} + parseClassPrivateProperty(node) { + this.parseInitializer(node); + this.semicolon(); + return this.finishNode(node, "ClassPrivateProperty"); + } + parseClassProperty(node) { + this.parseInitializer(node); + this.semicolon(); + return this.finishNode(node, "ClassProperty"); + } + parseClassAccessorProperty(node) { + this.parseInitializer(node); + this.semicolon(); + return this.finishNode(node, "ClassAccessorProperty"); + } + parseInitializer(node) { + this.scope.enter(SCOPE_CLASS | SCOPE_SUPER); + this.expressionScope.enter(newExpressionScope()); + this.prodParam.enter(PARAM); + node.value = this.eat(29) ? this.parseMaybeAssignAllowIn() : null; + this.expressionScope.exit(); + this.prodParam.exit(); + this.scope.exit(); + } + parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) { + if (tokenIsIdentifier(this.state.type)) { + node.id = this.parseIdentifier(); + if (isStatement) { + this.declareNameFromIdentifier(node.id, bindingType); + } + } else { + if (optionalId || !isStatement) { + node.id = null; + } else { + throw this.raise(Errors.MissingClassName, { + at: this.state.startLoc + }); + } + } + } + parseClassSuper(node) { + node.superClass = this.eat(81) ? this.parseExprSubscripts() : null; + } + parseExport(node, decorators) { + const hasDefault = this.maybeParseExportDefaultSpecifier(node); + const parseAfterDefault = !hasDefault || this.eat(12); + const hasStar = parseAfterDefault && this.eatExportStar(node); + const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node); + const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(12)); + const isFromRequired = hasDefault || hasStar; + if (hasStar && !hasNamespace) { + if (hasDefault) this.unexpected(); + if (decorators) { + throw this.raise(Errors.UnsupportedDecoratorExport, { + at: node + }); + } + this.parseExportFrom(node, true); + return this.finishNode(node, "ExportAllDeclaration"); + } + const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node); + if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) { + this.unexpected(null, 5); + } + if (hasNamespace && parseAfterNamespace) { + this.unexpected(null, 97); + } + let hasDeclaration; + if (isFromRequired || hasSpecifiers) { + hasDeclaration = false; + if (decorators) { + throw this.raise(Errors.UnsupportedDecoratorExport, { + at: node + }); + } + this.parseExportFrom(node, isFromRequired); + } else { + hasDeclaration = this.maybeParseExportDeclaration(node); + } + if (isFromRequired || hasSpecifiers || hasDeclaration) { + var _node2$declaration; + const node2 = node; + this.checkExport(node2, true, false, !!node2.source); + if (((_node2$declaration = node2.declaration) == null ? void 0 : _node2$declaration.type) === "ClassDeclaration") { + this.maybeTakeDecorators(decorators, node2.declaration, node2); + } else if (decorators) { + throw this.raise(Errors.UnsupportedDecoratorExport, { + at: node + }); + } + return this.finishNode(node2, "ExportNamedDeclaration"); + } + if (this.eat(65)) { + const node2 = node; + const decl = this.parseExportDefaultExpression(); + node2.declaration = decl; + if (decl.type === "ClassDeclaration") { + this.maybeTakeDecorators(decorators, decl, node2); + } else if (decorators) { + throw this.raise(Errors.UnsupportedDecoratorExport, { + at: node + }); + } + this.checkExport(node2, true, true); + return this.finishNode(node2, "ExportDefaultDeclaration"); + } + this.unexpected(null, 5); + } + eatExportStar(node) { + return this.eat(55); + } + maybeParseExportDefaultSpecifier(node) { + if (this.isExportDefaultSpecifier()) { + this.expectPlugin("exportDefaultFrom"); + const specifier = this.startNode(); + specifier.exported = this.parseIdentifier(true); + node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")]; + return true; + } + return false; + } + maybeParseExportNamespaceSpecifier(node) { + if (this.isContextual(93)) { + if (!node.specifiers) node.specifiers = []; + const specifier = this.startNodeAt(this.state.lastTokStartLoc); + this.next(); + specifier.exported = this.parseModuleExportName(); + node.specifiers.push(this.finishNode(specifier, "ExportNamespaceSpecifier")); + return true; + } + return false; + } + maybeParseExportNamedSpecifiers(node) { + if (this.match(5)) { + if (!node.specifiers) node.specifiers = []; + const isTypeExport = node.exportKind === "type"; + node.specifiers.push(...this.parseExportSpecifiers(isTypeExport)); + node.source = null; + node.declaration = null; + if (this.hasPlugin("importAssertions")) { + node.assertions = []; + } + return true; + } + return false; + } + maybeParseExportDeclaration(node) { + if (this.shouldParseExportDeclaration()) { + node.specifiers = []; + node.source = null; + if (this.hasPlugin("importAssertions")) { + node.assertions = []; + } + node.declaration = this.parseExportDeclaration(node); + return true; + } + return false; + } + isAsyncFunction() { + if (!this.isContextual(95)) return false; + const next = this.nextTokenStart(); + return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, "function"); + } + parseExportDefaultExpression() { + const expr = this.startNode(); + if (this.match(68)) { + this.next(); + return this.parseFunction(expr, 1 | 4); + } else if (this.isAsyncFunction()) { + this.next(); + this.next(); + return this.parseFunction(expr, 1 | 4 | 8); + } + if (this.match(80)) { + return this.parseClass(expr, true, true); + } + if (this.match(26)) { + if (this.hasPlugin("decorators") && this.getPluginOption("decorators", "decoratorsBeforeExport") === true) { + this.raise(Errors.DecoratorBeforeExport, { + at: this.state.startLoc + }); + } + return this.parseClass(this.maybeTakeDecorators(this.parseDecorators(false), this.startNode()), true, true); + } + if (this.match(75) || this.match(74) || this.isLet()) { + throw this.raise(Errors.UnsupportedDefaultExport, { + at: this.state.startLoc + }); + } + const res = this.parseMaybeAssignAllowIn(); + this.semicolon(); + return res; + } + parseExportDeclaration(node) { + if (this.match(80)) { + const node = this.parseClass(this.startNode(), true, false); + return node; + } + return this.parseStatementListItem(); + } + isExportDefaultSpecifier() { + const { + type + } = this.state; + if (tokenIsIdentifier(type)) { + if (type === 95 && !this.state.containsEsc || type === 99) { + return false; + } + if ((type === 128 || type === 127) && !this.state.containsEsc) { + const { + type: nextType + } = this.lookahead(); + if (tokenIsIdentifier(nextType) && nextType !== 97 || nextType === 5) { + this.expectOnePlugin(["flow", "typescript"]); + return false; + } + } + } else if (!this.match(65)) { + return false; + } + const next = this.nextTokenStart(); + const hasFrom = this.isUnparsedContextual(next, "from"); + if (this.input.charCodeAt(next) === 44 || tokenIsIdentifier(this.state.type) && hasFrom) { + return true; + } + if (this.match(65) && hasFrom) { + const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4)); + return nextAfterFrom === 34 || nextAfterFrom === 39; + } + return false; + } + parseExportFrom(node, expect) { + if (this.eatContextual(97)) { + node.source = this.parseImportSource(); + this.checkExport(node); + const assertions = this.maybeParseImportAssertions(); + if (assertions) { + node.assertions = assertions; + this.checkJSONModuleImport(node); + } + } else if (expect) { + this.unexpected(); + } + this.semicolon(); + } + shouldParseExportDeclaration() { + const { + type + } = this.state; + if (type === 26) { + this.expectOnePlugin(["decorators", "decorators-legacy"]); + if (this.hasPlugin("decorators")) { + if (this.getPluginOption("decorators", "decoratorsBeforeExport") === true) { + this.raise(Errors.DecoratorBeforeExport, { + at: this.state.startLoc + }); + } + return true; + } + } + return type === 74 || type === 75 || type === 68 || type === 80 || this.isLet() || this.isAsyncFunction(); + } + checkExport(node, checkNames, isDefault, isFrom) { + if (checkNames) { + if (isDefault) { + this.checkDuplicateExports(node, "default"); + if (this.hasPlugin("exportDefaultFrom")) { + var _declaration$extra; + const declaration = node.declaration; + if (declaration.type === "Identifier" && declaration.name === "from" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) { + this.raise(Errors.ExportDefaultFromAsIdentifier, { + at: declaration + }); + } + } + } else if (node.specifiers && node.specifiers.length) { + for (const specifier of node.specifiers) { + const { + exported + } = specifier; + const exportName = exported.type === "Identifier" ? exported.name : exported.value; + this.checkDuplicateExports(specifier, exportName); + if (!isFrom && specifier.local) { + const { + local + } = specifier; + if (local.type !== "Identifier") { + this.raise(Errors.ExportBindingIsString, { + at: specifier, + localName: local.value, + exportName + }); + } else { + this.checkReservedWord(local.name, local.loc.start, true, false); + this.scope.checkLocalExport(local); + } + } + } + } else if (node.declaration) { + if (node.declaration.type === "FunctionDeclaration" || node.declaration.type === "ClassDeclaration") { + const id = node.declaration.id; + if (!id) throw new Error("Assertion failure"); + this.checkDuplicateExports(node, id.name); + } else if (node.declaration.type === "VariableDeclaration") { + for (const declaration of node.declaration.declarations) { + this.checkDeclaration(declaration.id); + } + } + } + } + } + checkDeclaration(node) { + if (node.type === "Identifier") { + this.checkDuplicateExports(node, node.name); + } else if (node.type === "ObjectPattern") { + for (const prop of node.properties) { + this.checkDeclaration(prop); + } + } else if (node.type === "ArrayPattern") { + for (const elem of node.elements) { + if (elem) { + this.checkDeclaration(elem); + } + } + } else if (node.type === "ObjectProperty") { + this.checkDeclaration(node.value); + } else if (node.type === "RestElement") { + this.checkDeclaration(node.argument); + } else if (node.type === "AssignmentPattern") { + this.checkDeclaration(node.left); + } + } + checkDuplicateExports(node, exportName) { + if (this.exportedIdentifiers.has(exportName)) { + if (exportName === "default") { + this.raise(Errors.DuplicateDefaultExport, { + at: node + }); + } else { + this.raise(Errors.DuplicateExport, { + at: node, + exportName + }); + } + } + this.exportedIdentifiers.add(exportName); + } + parseExportSpecifiers(isInTypeExport) { + const nodes = []; + let first = true; + this.expect(5); + while (!this.eat(8)) { + if (first) { + first = false; + } else { + this.expect(12); + if (this.eat(8)) break; + } + const isMaybeTypeOnly = this.isContextual(128); + const isString = this.match(131); + const node = this.startNode(); + node.local = this.parseModuleExportName(); + nodes.push(this.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly)); + } + return nodes; + } + parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) { + if (this.eatContextual(93)) { + node.exported = this.parseModuleExportName(); + } else if (isString) { + node.exported = cloneStringLiteral(node.local); + } else if (!node.exported) { + node.exported = cloneIdentifier(node.local); + } + return this.finishNode(node, "ExportSpecifier"); + } + parseModuleExportName() { + if (this.match(131)) { + const result = this.parseStringLiteral(this.state.value); + const surrogate = result.value.match(loneSurrogate); + if (surrogate) { + this.raise(Errors.ModuleExportNameHasLoneSurrogate, { + at: result, + surrogateCharCode: surrogate[0].charCodeAt(0) + }); + } + return result; + } + return this.parseIdentifier(true); + } + isJSONModuleImport(node) { + if (node.assertions != null) { + return node.assertions.some(({ + key, + value + }) => { + return value.value === "json" && (key.type === "Identifier" ? key.name === "type" : key.value === "type"); + }); + } + return false; + } + checkImportReflection(node) { + if (node.module) { + var _node$assertions; + if (node.specifiers.length !== 1 || node.specifiers[0].type !== "ImportDefaultSpecifier") { + this.raise(Errors.ImportReflectionNotBinding, { + at: node.specifiers[0].loc.start + }); + } + if (((_node$assertions = node.assertions) == null ? void 0 : _node$assertions.length) > 0) { + this.raise(Errors.ImportReflectionHasAssertion, { + at: node.specifiers[0].loc.start + }); + } + } + } + checkJSONModuleImport(node) { + if (this.isJSONModuleImport(node) && node.type !== "ExportAllDeclaration") { + const { + specifiers + } = node; + if (specifiers != null) { + const nonDefaultNamedSpecifier = specifiers.find(specifier => { + let imported; + if (specifier.type === "ExportSpecifier") { + imported = specifier.local; + } else if (specifier.type === "ImportSpecifier") { + imported = specifier.imported; + } + if (imported !== undefined) { + return imported.type === "Identifier" ? imported.name !== "default" : imported.value !== "default"; + } + }); + if (nonDefaultNamedSpecifier !== undefined) { + this.raise(Errors.ImportJSONBindingNotDefault, { + at: nonDefaultNamedSpecifier.loc.start + }); + } + } + } + } + parseMaybeImportReflection(node) { + let isImportReflection = false; + if (this.isContextual(125)) { + const lookahead = this.lookahead(); + const nextType = lookahead.type; + if (tokenIsIdentifier(nextType)) { + if (nextType !== 97) { + isImportReflection = true; + } else { + const nextNextTokenFirstChar = this.input.charCodeAt(this.nextTokenStartSince(lookahead.end)); + if (nextNextTokenFirstChar === 102) { + isImportReflection = true; + } + } + } else if (nextType !== 12) { + isImportReflection = true; + } + } + if (isImportReflection) { + this.expectPlugin("importReflection"); + this.next(); + node.module = true; + } else if (this.hasPlugin("importReflection")) { + node.module = false; + } + } + parseImport(node) { + node.specifiers = []; + if (!this.match(131)) { + this.parseMaybeImportReflection(node); + const hasDefault = this.maybeParseDefaultImportSpecifier(node); + const parseNext = !hasDefault || this.eat(12); + const hasStar = parseNext && this.maybeParseStarImportSpecifier(node); + if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node); + this.expectContextual(97); + } + node.source = this.parseImportSource(); + const assertions = this.maybeParseImportAssertions(); + if (assertions) { + node.assertions = assertions; + } else { + const attributes = this.maybeParseModuleAttributes(); + if (attributes) { + node.attributes = attributes; + } + } + this.checkImportReflection(node); + this.checkJSONModuleImport(node); + this.semicolon(); + return this.finishNode(node, "ImportDeclaration"); + } + parseImportSource() { + if (!this.match(131)) this.unexpected(); + return this.parseExprAtom(); + } + shouldParseDefaultImport(node) { + return tokenIsIdentifier(this.state.type); + } + parseImportSpecifierLocal(node, specifier, type) { + specifier.local = this.parseIdentifier(); + node.specifiers.push(this.finishImportSpecifier(specifier, type)); + } + finishImportSpecifier(specifier, type, bindingType = BIND_LEXICAL) { + this.checkLVal(specifier.local, { + in: { + type + }, + binding: bindingType + }); + return this.finishNode(specifier, type); + } + parseAssertEntries() { + const attrs = []; + const attrNames = new Set(); + do { + if (this.match(8)) { + break; + } + const node = this.startNode(); + const keyName = this.state.value; + if (attrNames.has(keyName)) { + this.raise(Errors.ModuleAttributesWithDuplicateKeys, { + at: this.state.startLoc, + key: keyName + }); + } + attrNames.add(keyName); + if (this.match(131)) { + node.key = this.parseStringLiteral(keyName); + } else { + node.key = this.parseIdentifier(true); + } + this.expect(14); + if (!this.match(131)) { + throw this.raise(Errors.ModuleAttributeInvalidValue, { + at: this.state.startLoc + }); + } + node.value = this.parseStringLiteral(this.state.value); + attrs.push(this.finishNode(node, "ImportAttribute")); + } while (this.eat(12)); + return attrs; + } + maybeParseModuleAttributes() { + if (this.match(76) && !this.hasPrecedingLineBreak()) { + this.expectPlugin("moduleAttributes"); + this.next(); + } else { + if (this.hasPlugin("moduleAttributes")) return []; + return null; + } + const attrs = []; + const attributes = new Set(); + do { + const node = this.startNode(); + node.key = this.parseIdentifier(true); + if (node.key.name !== "type") { + this.raise(Errors.ModuleAttributeDifferentFromType, { + at: node.key + }); + } + if (attributes.has(node.key.name)) { + this.raise(Errors.ModuleAttributesWithDuplicateKeys, { + at: node.key, + key: node.key.name + }); + } + attributes.add(node.key.name); + this.expect(14); + if (!this.match(131)) { + throw this.raise(Errors.ModuleAttributeInvalidValue, { + at: this.state.startLoc + }); + } + node.value = this.parseStringLiteral(this.state.value); + this.finishNode(node, "ImportAttribute"); + attrs.push(node); + } while (this.eat(12)); + return attrs; + } + maybeParseImportAssertions() { + if (this.isContextual(94) && !this.hasPrecedingLineBreak()) { + this.expectPlugin("importAssertions"); + this.next(); + } else { + if (this.hasPlugin("importAssertions")) return []; + return null; + } + this.eat(5); + const attrs = this.parseAssertEntries(); + this.eat(8); + return attrs; + } + maybeParseDefaultImportSpecifier(node) { + if (this.shouldParseDefaultImport(node)) { + this.parseImportSpecifierLocal(node, this.startNode(), "ImportDefaultSpecifier"); + return true; + } + return false; + } + maybeParseStarImportSpecifier(node) { + if (this.match(55)) { + const specifier = this.startNode(); + this.next(); + this.expectContextual(93); + this.parseImportSpecifierLocal(node, specifier, "ImportNamespaceSpecifier"); + return true; + } + return false; + } + parseNamedImportSpecifiers(node) { + let first = true; + this.expect(5); + while (!this.eat(8)) { + if (first) { + first = false; + } else { + if (this.eat(14)) { + throw this.raise(Errors.DestructureNamedImport, { + at: this.state.startLoc + }); + } + this.expect(12); + if (this.eat(8)) break; + } + const specifier = this.startNode(); + const importedIsString = this.match(131); + const isMaybeTypeOnly = this.isContextual(128); + specifier.imported = this.parseModuleExportName(); + const importSpecifier = this.parseImportSpecifier(specifier, importedIsString, node.importKind === "type" || node.importKind === "typeof", isMaybeTypeOnly, undefined); + node.specifiers.push(importSpecifier); + } + } + parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) { + if (this.eatContextual(93)) { + specifier.local = this.parseIdentifier(); + } else { + const { + imported + } = specifier; + if (importedIsString) { + throw this.raise(Errors.ImportBindingIsString, { + at: specifier, + importName: imported.value + }); + } + this.checkReservedWord(imported.name, specifier.loc.start, true, true); + if (!specifier.local) { + specifier.local = cloneIdentifier(imported); + } + } + return this.finishImportSpecifier(specifier, "ImportSpecifier", bindingType); + } + isThisParam(param) { + return param.type === "Identifier" && param.name === "this"; + } +} +class Parser extends StatementParser { + constructor(options, input) { + options = getOptions(options); + super(options, input); + this.options = options; + this.initializeScopes(); + this.plugins = pluginsMap(this.options.plugins); + this.filename = options.sourceFilename; + } + getScopeHandler() { + return ScopeHandler; + } + parse() { + this.enterInitialScopes(); + const file = this.startNode(); + const program = this.startNode(); + this.nextToken(); + file.errors = null; + this.parseTopLevel(file, program); + file.errors = this.state.errors; + return file; + } +} +function pluginsMap(plugins) { + const pluginMap = new Map(); + for (const plugin of plugins) { + const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}]; + if (!pluginMap.has(name)) pluginMap.set(name, options || {}); + } + return pluginMap; +} +function parse(input, options) { + var _options; + if (((_options = options) == null ? void 0 : _options.sourceType) === "unambiguous") { + options = Object.assign({}, options); + try { + options.sourceType = "module"; + const parser = getParser(options, input); + const ast = parser.parse(); + if (parser.sawUnambiguousESM) { + return ast; + } + if (parser.ambiguousScriptDifferentAst) { + try { + options.sourceType = "script"; + return getParser(options, input).parse(); + } catch (_unused) {} + } else { + ast.program.sourceType = "script"; + } + return ast; + } catch (moduleError) { + try { + options.sourceType = "script"; + return getParser(options, input).parse(); + } catch (_unused2) {} + throw moduleError; + } + } else { + return getParser(options, input).parse(); + } +} +function parseExpression(input, options) { + const parser = getParser(options, input); + if (parser.options.strictMode) { + parser.state.strict = true; + } + return parser.getExpression(); +} +function generateExportedTokenTypes(internalTokenTypes) { + const tokenTypes = {}; + for (const typeName of Object.keys(internalTokenTypes)) { + tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]); + } + return tokenTypes; +} +const tokTypes = generateExportedTokenTypes(tt); +function getParser(options, input) { + let cls = Parser; + if (options != null && options.plugins) { + validatePlugins(options.plugins); + cls = getParserClass(options.plugins); + } + return new cls(options, input); +} +const parserClassCache = {}; +function getParserClass(pluginsFromOptions) { + const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name)); + const key = pluginList.join("/"); + let cls = parserClassCache[key]; + if (!cls) { + cls = Parser; + for (const plugin of pluginList) { + cls = mixinPlugins[plugin](cls); + } + parserClassCache[key] = cls; + } + return cls; +} +exports.parse = parse; +exports.parseExpression = parseExpression; +exports.tokTypes = tokTypes; +//# sourceMappingURL=index.js.map diff --git "a/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js.map" "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js.map" new file mode 100644 index 0000000..d4a4bf1 --- /dev/null +++ "b/\346\235\250\350\215\243\346\237\217/23-04-08/node_modules/@babel/parser/lib/index.js.map" @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../src/options.ts","../src/tokenizer/context.ts","../src/tokenizer/types.ts","../src/util/location.ts","../src/parse-error/credentials.ts","../src/parse-error/module-errors.ts","../src/parse-error/to-node-description.ts","../src/parse-error/standard-errors.ts","../src/parse-error/strict-mode-errors.ts","../src/parse-error/pipeline-operator-errors.ts","../src/parse-error.ts","../src/plugins/estree.ts","../../babel-helper-validator-identifier/src/identifier.ts","../../babel-helper-validator-identifier/src/keyword.ts","../src/util/identifier.ts","../src/util/scopeflags.ts","../src/util/scope.ts","../src/plugins/flow/scope.ts","../src/parser/base.ts","../src/parser/comments.ts","../src/util/whitespace.ts","../src/tokenizer/state.ts","../../babel-helper-string-parser/src/index.ts","../src/tokenizer/index.ts","../src/util/class-scope.ts","../src/util/expression-scope.ts","../src/util/production-parameter.ts","../src/parser/util.ts","../src/parser/node.ts","../src/plugins/flow/index.ts","../src/plugins/jsx/xhtml.ts","../src/plugins/jsx/index.ts","../src/plugins/typescript/scope.ts","../src/parser/lval.ts","../src/plugins/typescript/index.ts","../src/plugins/placeholders.ts","../src/plugins/v8intrinsic.ts","../src/plugin-utils.ts","../src/parser/expression.ts","../src/parser/statement.ts","../src/parser/index.ts","../src/index.ts"],"sourcesContent":["import type { PluginList } from \"./plugin-utils\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport type Options = {\n sourceType: SourceType;\n sourceFilename?: string;\n startColumn: number;\n startLine: number;\n allowAwaitOutsideFunction: boolean;\n allowReturnOutsideFunction: boolean;\n allowNewTargetOutsideFunction: boolean;\n allowImportExportEverywhere: boolean;\n allowSuperOutsideMethod: boolean;\n allowUndeclaredExports: boolean;\n plugins: PluginList;\n strictMode: boolean | undefined | null;\n ranges: boolean;\n tokens: boolean;\n createParenthesizedExpressions: boolean;\n errorRecovery: boolean;\n attachComment: boolean;\n annexB: boolean;\n};\n\nexport const defaultOptions: Options = {\n // Source type (\"script\" or \"module\") for different semantics\n sourceType: \"script\",\n // Source filename.\n sourceFilename: undefined,\n // Column (0-based) from which to start counting source. Useful for\n // integration with other tools.\n startColumn: 0,\n // Line (1-based) from which to start counting source. Useful for\n // integration with other tools.\n startLine: 1,\n // When enabled, await at the top level is not considered an\n // error.\n allowAwaitOutsideFunction: false,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, new.target outside a function or class is not\n // considered an error.\n allowNewTargetOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program.\n allowImportExportEverywhere: false,\n // TODO\n allowSuperOutsideMethod: false,\n // When enabled, export statements can reference undeclared variables.\n allowUndeclaredExports: false,\n // An array of plugins to enable\n plugins: [],\n // TODO\n strictMode: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // Adds all parsed tokens to a `tokens` property on the `File` node\n tokens: false,\n // Whether to create ParenthesizedExpression AST nodes (if false\n // the parser sets extra.parenthesized on the expression nodes instead).\n createParenthesizedExpressions: false,\n // When enabled, errors are attached to the AST instead of being directly thrown.\n // Some errors will still throw, because @babel/parser can't always recover.\n errorRecovery: false,\n // When enabled, comments will be attached to adjacent AST nodes as one of\n // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n // is vital to preserve comments after transform. If you don't print AST back,\n // consider set this option to `false` for performance\n attachComment: true,\n // When enabled, the parser will support Annex B syntax.\n // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n annexB: true,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): Options {\n if (opts && opts.annexB != null && opts.annexB !== false) {\n throw new Error(\"The `annexB` option can only be set to `false`.\");\n }\n\n const options: any = {};\n for (const key of Object.keys(defaultOptions)) {\n // @ts-expect-error key may not exist in opts\n options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n }\n return options;\n}\n","// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n constructor(token: string, preserveSpace?: boolean) {\n this.token = token;\n this.preserveSpace = !!preserveSpace;\n }\n\n token: string;\n preserveSpace: boolean;\n}\n\nconst types: {\n [key: string]: TokContext;\n} = {\n brace: new TokContext(\"{\"), // normal JavaScript expression\n j_oTag: new TokContext(\"...\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n","import { types as tc, type TokContext } from \"./context\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n keyword?: string;\n beforeExpr?: boolean;\n startsExpr?: boolean;\n rightAssociative?: boolean;\n isLoop?: boolean;\n isAssign?: boolean;\n prefix?: boolean;\n postfix?: boolean;\n binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n label: string;\n keyword: string | undefined | null;\n beforeExpr: boolean;\n startsExpr: boolean;\n rightAssociative: boolean;\n isLoop: boolean;\n isAssign: boolean;\n prefix: boolean;\n postfix: boolean;\n binop: number | undefined | null;\n // todo(Babel 8): remove updateContext from exposed token layout\n declare updateContext:\n | ((context: Array) => void)\n | undefined\n | null;\n\n constructor(label: string, conf: TokenOptions = {}) {\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.rightAssociative = !!conf.rightAssociative;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop != null ? conf.binop : null;\n if (!process.env.BABEL_8_BREAKING) {\n this.updateContext = null;\n }\n }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n options.keyword = name;\n const token = createToken(name, options);\n keywords.set(name, token);\n return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n ++tokenTypeCounter;\n tokenLabels.push(name);\n tokenBinops.push(options.binop ?? -1);\n tokenBeforeExprs.push(options.beforeExpr ?? false);\n tokenStartsExprs.push(options.startsExpr ?? false);\n tokenPrefixes.push(options.prefix ?? false);\n tokenTypes.push(new ExportedTokenType(name, options));\n\n return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n name: string,\n options: TokenOptions = {},\n): TokenType {\n ++tokenTypeCounter;\n keywords.set(name, tokenTypeCounter);\n tokenLabels.push(name);\n tokenBinops.push(options.binop ?? -1);\n tokenBeforeExprs.push(options.beforeExpr ?? false);\n tokenStartsExprs.push(options.startsExpr ?? false);\n tokenPrefixes.push(options.prefix ?? false);\n // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n // Punctuation token types.\n bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n bracketR: createToken(\"]\"),\n bracketBarR: createToken(\"|]\"),\n braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n braceR: createToken(\"}\"),\n braceBarR: createToken(\"|}\"),\n parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n parenR: createToken(\")\"),\n comma: createToken(\",\", { beforeExpr }),\n semi: createToken(\";\", { beforeExpr }),\n colon: createToken(\":\", { beforeExpr }),\n doubleColon: createToken(\"::\", { beforeExpr }),\n dot: createToken(\".\"),\n question: createToken(\"?\", { beforeExpr }),\n questionDot: createToken(\"?.\"),\n arrow: createToken(\"=>\", { beforeExpr }),\n template: createToken(\"template\"),\n ellipsis: createToken(\"...\", { beforeExpr }),\n backQuote: createToken(\"`\", { startsExpr }),\n dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n // start: isTemplate\n templateTail: createToken(\"...`\", { startsExpr }),\n templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n // end: isTemplate\n at: createToken(\"@\"),\n hash: createToken(\"#\", { startsExpr }),\n\n // Special hashbang token.\n interpreterDirective: createToken(\"#!...\"),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n // start: isAssign\n eq: createToken(\"=\", { beforeExpr, isAssign }),\n assign: createToken(\"_=\", { beforeExpr, isAssign }),\n slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n // These are only needed to support % and ^ as a Hack-pipe topic token.\n // When the proposal settles on a token, the others can be merged with\n // tt.assign.\n xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n // end: isAssign\n\n incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n // More possible topic tokens.\n // When the proposal settles on a token, at least one of these may be removed.\n doubleCaret: createToken(\"^^\", { startsExpr }),\n doubleAt: createToken(\"@@\", { startsExpr }),\n\n // start: isBinop\n pipeline: createBinop(\"|>\", 0),\n nullishCoalescing: createBinop(\"??\", 1),\n logicalOR: createBinop(\"||\", 1),\n logicalAND: createBinop(\"&&\", 2),\n bitwiseOR: createBinop(\"|\", 3),\n bitwiseXOR: createBinop(\"^\", 4),\n bitwiseAND: createBinop(\"&\", 5),\n equality: createBinop(\"==/!=/===/!==\", 6),\n lt: createBinop(\"/<=/>=\", 7),\n gt: createBinop(\"/<=/>=\", 7),\n relational: createBinop(\"/<=/>=\", 7),\n bitShift: createBinop(\"<>/>>>\", 8),\n bitShiftL: createBinop(\"<>/>>>\", 8),\n bitShiftR: createBinop(\"<>/>>>\", 8),\n plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n // startsExpr: required by v8intrinsic plugin\n modulo: createToken(\"%\", { binop: 10, startsExpr }),\n // unset `beforeExpr` as it can be `function *`\n star: createToken(\"*\", { binop: 10 }),\n slash: createBinop(\"/\", 10),\n exponent: createToken(\"**\", {\n beforeExpr,\n binop: 11,\n rightAssociative: true,\n }),\n\n // Keywords\n // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n // when new keywords are added\n // start: isLiteralPropertyName\n // start: isKeyword\n _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n // end: isBinop\n _break: createKeyword(\"break\"),\n _case: createKeyword(\"case\", { beforeExpr }),\n _catch: createKeyword(\"catch\"),\n _continue: createKeyword(\"continue\"),\n _debugger: createKeyword(\"debugger\"),\n _default: createKeyword(\"default\", { beforeExpr }),\n _else: createKeyword(\"else\", { beforeExpr }),\n _finally: createKeyword(\"finally\"),\n _function: createKeyword(\"function\", { startsExpr }),\n _if: createKeyword(\"if\"),\n _return: createKeyword(\"return\", { beforeExpr }),\n _switch: createKeyword(\"switch\"),\n _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n _try: createKeyword(\"try\"),\n _var: createKeyword(\"var\"),\n _const: createKeyword(\"const\"),\n _with: createKeyword(\"with\"),\n _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n _this: createKeyword(\"this\", { startsExpr }),\n _super: createKeyword(\"super\", { startsExpr }),\n _class: createKeyword(\"class\", { startsExpr }),\n _extends: createKeyword(\"extends\", { beforeExpr }),\n _export: createKeyword(\"export\"),\n _import: createKeyword(\"import\", { startsExpr }),\n _null: createKeyword(\"null\", { startsExpr }),\n _true: createKeyword(\"true\", { startsExpr }),\n _false: createKeyword(\"false\", { startsExpr }),\n _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n // start: isLoop\n _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n _for: createKeyword(\"for\", { isLoop }),\n _while: createKeyword(\"while\", { isLoop }),\n // end: isLoop\n // end: isKeyword\n\n // Primary literals\n // start: isIdentifier\n _as: createKeywordLike(\"as\", { startsExpr }),\n _assert: createKeywordLike(\"assert\", { startsExpr }),\n _async: createKeywordLike(\"async\", { startsExpr }),\n _await: createKeywordLike(\"await\", { startsExpr }),\n _from: createKeywordLike(\"from\", { startsExpr }),\n _get: createKeywordLike(\"get\", { startsExpr }),\n _let: createKeywordLike(\"let\", { startsExpr }),\n _meta: createKeywordLike(\"meta\", { startsExpr }),\n _of: createKeywordLike(\"of\", { startsExpr }),\n _sent: createKeywordLike(\"sent\", { startsExpr }),\n _set: createKeywordLike(\"set\", { startsExpr }),\n _static: createKeywordLike(\"static\", { startsExpr }),\n _using: createKeywordLike(\"using\", { startsExpr }),\n _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n // Flow and TypeScript Keywordlike\n _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n _checks: createKeywordLike(\"checks\", { startsExpr }),\n _exports: createKeywordLike(\"exports\", { startsExpr }),\n _global: createKeywordLike(\"global\", { startsExpr }),\n _implements: createKeywordLike(\"implements\", { startsExpr }),\n _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n _infer: createKeywordLike(\"infer\", { startsExpr }),\n _is: createKeywordLike(\"is\", { startsExpr }),\n _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n _proto: createKeywordLike(\"proto\", { startsExpr }),\n _require: createKeywordLike(\"require\", { startsExpr }),\n _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n // start: isTSTypeOperator\n _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n _unique: createKeywordLike(\"unique\", { startsExpr }),\n // end: isTSTypeOperator\n // start: isTSDeclarationStart\n _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n _declare: createKeywordLike(\"declare\", { startsExpr }),\n _enum: createKeywordLike(\"enum\", { startsExpr }),\n _module: createKeywordLike(\"module\", { startsExpr }),\n _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n // start: isFlowInterfaceOrTypeOrOpaque\n _interface: createKeywordLike(\"interface\", { startsExpr }),\n _type: createKeywordLike(\"type\", { startsExpr }),\n // end: isTSDeclarationStart\n _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n // end: isFlowInterfaceOrTypeOrOpaque\n name: createToken(\"name\", { startsExpr }),\n // end: isIdentifier\n\n string: createToken(\"string\", { startsExpr }),\n num: createToken(\"num\", { startsExpr }),\n bigint: createToken(\"bigint\", { startsExpr }),\n decimal: createToken(\"decimal\", { startsExpr }),\n // end: isLiteralPropertyName\n regexp: createToken(\"regexp\", { startsExpr }),\n privateName: createToken(\"#name\", { startsExpr }),\n eof: createToken(\"eof\"),\n\n // jsx plugin\n jsxName: createToken(\"jsxName\"),\n jsxText: createToken(\"jsxText\", { beforeExpr: true }),\n jsxTagStart: createToken(\"jsxTagStart\", { startsExpr: true }),\n jsxTagEnd: createToken(\"jsxTagEnd\"),\n\n // placeholder plugin\n placeholder: createToken(\"%%\", { startsExpr: true }),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n return token >= tt._as && token <= tt.name;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n // we can remove the token >= tt._in check when we\n // know a token is either keyword or identifier\n return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n return token >= tt._in && token <= tt.name;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n tokenTypes[tt.braceR].updateContext = context => {\n context.pop();\n };\n\n tokenTypes[tt.braceL].updateContext =\n tokenTypes[tt.braceHashL].updateContext =\n tokenTypes[tt.dollarBraceL].updateContext =\n context => {\n context.push(tc.brace);\n };\n\n tokenTypes[tt.backQuote].updateContext = context => {\n if (context[context.length - 1] === tc.template) {\n context.pop();\n } else {\n context.push(tc.template);\n }\n };\n\n tokenTypes[tt.jsxTagStart].updateContext = context => {\n context.push(tc.j_expr, tc.j_oTag);\n };\n}\n","export type Pos = {\n start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n line: number;\n column: number;\n index: number;\n\n constructor(line: number, col: number, index: number) {\n this.line = line;\n this.column = col;\n this.index = index;\n }\n}\n\nexport class SourceLocation {\n start: Position;\n end: Position;\n filename: string;\n identifierName: string | undefined | null;\n\n constructor(start: Position, end?: Position) {\n this.start = start;\n // (may start as null, but initialized later)\n this.end = end;\n }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n position: Position,\n columnOffset: number,\n) {\n const { line, column, index } = position;\n return new Position(line, column + columnOffset, index + columnOffset);\n}\n","export const enum ParseErrorCode {\n SyntaxError = \"BABEL_PARSER_SYNTAX_ERROR\",\n SourceTypeModuleError = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\",\n}\n\nexport type SyntaxPlugin =\n | \"flow\"\n | \"typescript\"\n | \"jsx\"\n | \"pipelineOperator\"\n | \"placeholders\";\n\nexport type ToMessage = (self: ErrorDetails) => string;\n\nexport type ParseErrorCredentials = {\n code: ParseErrorCode;\n reasonCode: string;\n syntaxPlugin?: SyntaxPlugin;\n toMessage: ToMessage;\n};\n\nconst reflect = (keys: string[], last = keys.length - 1) => ({\n get(this: unknown): unknown {\n return keys.reduce(\n (object, key) =>\n // @ts-expect-error key should index object\n object[key],\n this,\n );\n },\n set(this: unknown, value: unknown) {\n keys.reduce(\n // @ts-expect-error key should index item\n (item, key, i) => (i === last ? (item[key] = value) : item[key]),\n this,\n );\n },\n});\n\nconst instantiate = (\n constructor: new () => T,\n properties: any,\n descriptors: any,\n) =>\n Object.keys(descriptors)\n .map(key => [key, descriptors[key]])\n .filter(([, descriptor]) => !!descriptor)\n .map(([key, descriptor]) => [\n key,\n typeof descriptor === \"function\"\n ? { value: descriptor, enumerable: false }\n : typeof descriptor.reflect === \"string\"\n ? { ...descriptor, ...reflect(descriptor.reflect.split(\".\")) }\n : descriptor,\n ])\n .reduce(\n (instance, [key, descriptor]) =>\n Object.defineProperty(instance, key, {\n configurable: true,\n ...descriptor,\n }),\n Object.assign(new constructor(), properties),\n );\n\nexport { instantiate };\n","import { ParseErrorCode } from \"../parse-error\";\n\nexport default {\n ImportMetaOutsideModule: {\n message: `import.meta may appear only with 'sourceType: \"module\"'`,\n code: ParseErrorCode.SourceTypeModuleError,\n },\n ImportOutsideModule: {\n message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n code: ParseErrorCode.SourceTypeModuleError,\n },\n};\n","const NodeDescriptions = {\n ArrayPattern: \"array destructuring pattern\",\n AssignmentExpression: \"assignment expression\",\n AssignmentPattern: \"assignment expression\",\n ArrowFunctionExpression: \"arrow function expression\",\n ConditionalExpression: \"conditional expression\",\n CatchClause: \"catch clause\",\n ForOfStatement: \"for-of statement\",\n ForInStatement: \"for-in statement\",\n ForStatement: \"for-loop\",\n FormalParameters: \"function parameter list\",\n Identifier: \"identifier\",\n ImportSpecifier: \"import specifier\",\n ImportDefaultSpecifier: \"import default specifier\",\n ImportNamespaceSpecifier: \"import namespace specifier\",\n ObjectPattern: \"object destructuring pattern\",\n ParenthesizedExpression: \"parenthesized expression\",\n RestElement: \"rest element\",\n UpdateExpression: {\n true: \"prefix operation\",\n false: \"postfix operation\",\n },\n VariableDeclarator: \"variable declaration\",\n YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n typeof NodeDescriptions,\n \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n | {\n type: \"UpdateExpression\";\n prefix: boolean;\n }\n | {\n type: NodeTypesWithDescriptions;\n };\n\n// @ts-expect-error prefix is specified only when type is UpdateExpression\n// eslint-disable-next-line no-confusing-arrow\nconst toNodeDescription = ({ type, prefix }: NodeWithDescription) =>\n type === \"UpdateExpression\"\n ? NodeDescriptions.UpdateExpression[String(prefix) as \"true\" | \"false\"]\n : NodeDescriptions[type];\n\nexport default toNodeDescription;\n","import toNodeDescription from \"./to-node-description\";\n\nexport type LValAncestor =\n | { type: \"UpdateExpression\"; prefix: boolean }\n | {\n type:\n | \"ArrayPattern\"\n | \"AssignmentExpression\"\n | \"CatchClause\"\n | \"ForOfStatement\"\n | \"FormalParameters\"\n | \"ForInStatement\"\n | \"ForStatement\"\n | \"ImportSpecifier\"\n | \"ImportNamespaceSpecifier\"\n | \"ImportDefaultSpecifier\"\n | \"ParenthesizedExpression\"\n | \"ObjectPattern\"\n | \"RestElement\"\n | \"VariableDeclarator\";\n };\n\nexport default {\n AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n `A ${kind}ter cannot be a generator.`,\n ArgumentsInClass:\n \"'arguments' is only allowed in functions and class methods.\",\n AsyncFunctionInSingleStatementContext:\n \"Async functions can only be declared at the top level or inside a block.\",\n AwaitBindingIdentifier:\n \"Can not use 'await' as identifier inside an async function.\",\n AwaitBindingIdentifierInStaticBlock:\n \"Can not use 'await' as identifier inside a static block.\",\n AwaitExpressionFormalParameter:\n \"'await' is not allowed in async function parameters.\",\n AwaitInUsingBinding:\n \"'await' is not allowed to be used as a name in 'using' declarations.\",\n AwaitNotInAsyncContext:\n \"'await' is only allowed within async functions and at the top levels of modules.\",\n AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n BadSetterRestParameter:\n \"A 'set' accessor function argument must not be a rest parameter.\",\n ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n ConstructorClassPrivateField:\n \"Classes may not have a private field named '#constructor'.\",\n ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n ConstructorIsAsync: \"Constructor can't be an async function.\",\n ConstructorIsGenerator: \"Constructor can't be a generator.\",\n DeclarationMissingInitializer: ({\n kind,\n }: {\n kind: \"const\" | \"destructuring\";\n }) => `Missing initializer in ${kind} declaration.`,\n DecoratorArgumentsOutsideParentheses:\n \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n DecoratorBeforeExport:\n \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n DecoratorsBeforeAfterExport:\n \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n DecoratorConstructor:\n \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n DecoratorExportClass:\n \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n DeletePrivateField: \"Deleting a private field is not allowed.\",\n DestructureNamedImport:\n \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n DuplicateConstructor: \"Duplicate constructor in the same class.\",\n DuplicateDefaultExport: \"Only one default export allowed per module.\",\n DuplicateExport: ({ exportName }: { exportName: string }) =>\n `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n DuplicateProto: \"Redefinition of __proto__ property.\",\n DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n ElementAfterRest: \"Rest element must be last element.\",\n EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n ExportBindingIsString: ({\n localName,\n exportName,\n }: {\n localName: string;\n exportName: string;\n }) =>\n `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n ExportDefaultFromAsIdentifier:\n \"'from' is not allowed as an identifier after 'export default'.\",\n\n ForInOfLoopInitializer: ({\n type,\n }: {\n type: \"ForInStatement\" | \"ForOfStatement\";\n }) =>\n `'${\n type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n }' loop variable declaration may not have an initializer.`,\n ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n GeneratorInSingleStatementContext:\n \"Generators can only be declared at the top level or inside a block.\",\n\n IllegalBreakContinue: ({\n type,\n }: {\n type: \"BreakStatement\" | \"ContinueStatement\";\n }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n IllegalLanguageModeDirective:\n \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n IllegalReturn: \"'return' outside of function.\",\n ImportBindingIsString: ({ importName }: { importName: string }) =>\n `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n ImportCallArgumentTrailingComma:\n \"Trailing comma is disallowed inside import(...) arguments.\",\n ImportCallArity: ({ maxArgumentCount }: { maxArgumentCount: 1 | 2 }) =>\n `\\`import()\\` requires exactly ${\n maxArgumentCount === 1 ? \"one argument\" : \"one or two arguments\"\n }.`,\n ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n ImportJSONBindingNotDefault:\n \"A JSON module can only be imported with `default`.\",\n ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n ImportReflectionNotBinding:\n 'Only `import module x from \"./module\"` is valid.',\n IncompatibleRegExpUVFlags:\n \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n InvalidCodePoint: \"Code point out of bounds.\",\n InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n InvalidDecimal: \"Invalid decimal.\",\n InvalidDigit: ({ radix }: { radix: number }) =>\n `Expected number in radix ${radix}.`,\n InvalidEscapeSequence: \"Bad character escape sequence.\",\n InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n `Escape sequence in keyword ${reservedWord}.`,\n InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n `Invalid identifier ${identifierName}.`,\n InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n InvalidNumber: \"Invalid number.\",\n InvalidOrMissingExponent:\n \"Floating-point numbers require a valid exponent after the 'e'.\",\n InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n `Unexpected character '${unexpected}'.`,\n InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n InvalidPrivateFieldResolution: ({\n identifierName,\n }: {\n identifierName: string;\n }) => `Private name #${identifierName} is not defined.`,\n InvalidPropertyBindingPattern: \"Binding member expression.\",\n InvalidRecordProperty:\n \"Only properties and spread elements are allowed in record definitions.\",\n InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n `Label '${labelName}' is already declared.`,\n LetInLexicalBinding:\n \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n MalformedRegExpFlags: \"Invalid regular expression flag.\",\n MissingClassName: \"A class name is required.\",\n MissingEqInAssignment:\n \"Only '=' operator can be used for specifying default value.\",\n MissingSemicolon: \"Missing semicolon.\",\n MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n .map(name => JSON.stringify(name))\n .join(\", \")}.`,\n // FIXME: Would be nice to make this \"missingPlugins\" instead.\n // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n .map(name => JSON.stringify(name))\n .join(\", \")}.`,\n MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n MixingCoalesceWithLogical:\n \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n ModuleAttributeDifferentFromType:\n \"The only accepted module attribute is `type`.\",\n ModuleAttributeInvalidValue:\n \"Only string literals are allowed as module attribute values.\",\n ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n `Duplicate key \"${key}\" is not allowed in module attributes.`,\n ModuleExportNameHasLoneSurrogate: ({\n surrogateCharCode,\n }: {\n surrogateCharCode: number;\n }) =>\n `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n 16,\n )}'.`,\n ModuleExportUndefined: ({ localName }: { localName: string }) =>\n `Export '${localName}' is not defined.`,\n MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n NewlineAfterThrow: \"Illegal newline after throw.\",\n NoCatchOrFinally: \"Missing catch or finally clause.\",\n NumberIdentifier: \"Identifier directly after number.\",\n NumericSeparatorInEscapeSequence:\n \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n ObsoleteAwaitStar:\n \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n OptionalChainingNoNew:\n \"Constructors in/after an Optional Chain are not allowed.\",\n OptionalChainingNoTemplate:\n \"Tagged Template Literals are not allowed in optionalChain.\",\n OverrideOnConstructor:\n \"'override' modifier cannot appear on a constructor declaration.\",\n ParamDupe: \"Argument name clash.\",\n PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n PatternHasMethod: \"Object pattern can't contain methods.\",\n PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n `Duplicate private name #${identifierName}.`,\n RecordExpressionBarIncorrectEndSyntaxType:\n \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n RecordExpressionBarIncorrectStartSyntaxType:\n \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n RecordExpressionHashIncorrectStartSyntaxType:\n \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n SloppyFunction:\n \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n SloppyFunctionAnnexB:\n \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n StaticPrototype: \"Classes may not have static property named prototype.\",\n SuperNotAllowed:\n \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n SuperPrivateField: \"Private fields can't be accessed on super.\",\n TrailingDecorator: \"Decorators must be attached to a class element.\",\n TupleExpressionBarIncorrectEndSyntaxType:\n \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n TupleExpressionBarIncorrectStartSyntaxType:\n \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n TupleExpressionHashIncorrectStartSyntaxType:\n \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n UnexpectedAwaitAfterPipelineBody:\n 'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n UnexpectedImportExport:\n \"'import' and 'export' may only appear at the top level.\",\n UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n `Unexpected keyword '${keyword}'.`,\n UnexpectedLeadingDecorator:\n \"Leading decorators must be attached to a class declaration.\",\n UnexpectedLexicalDeclaration:\n \"Lexical declaration cannot appear in a single-statement context.\",\n UnexpectedNewTarget:\n \"`new.target` can only be used in functions or class properties.\",\n UnexpectedNumericSeparator:\n \"A numeric separator is only allowed between two digits.\",\n UnexpectedPrivateField: \"Unexpected private name.\",\n UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n `Unexpected reserved word '${reservedWord}'.`,\n UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n UnexpectedToken: ({\n expected,\n unexpected,\n }: {\n expected?: string | null;\n unexpected?: string | null;\n }) =>\n `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n expected ? `, expected \"${expected}\"` : \"\"\n }`,\n UnexpectedTokenUnaryExponentiation:\n \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n UnexpectedUsingDeclaration:\n \"Using declaration cannot appear in the top level when source type is `script`.\",\n UnsupportedBind: \"Binding should be performed on object property.\",\n UnsupportedDecoratorExport:\n \"A decorated export must export a class declaration.\",\n UnsupportedDefaultExport:\n \"Only expressions, functions or classes are allowed as the `default` export.\",\n UnsupportedImport:\n \"`import` can only be used in `import()` or `import.meta`.\",\n UnsupportedMetaProperty: ({\n target,\n onlyValidPropertyName,\n }: {\n target: string;\n onlyValidPropertyName: string;\n }) =>\n `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n UnsupportedParameterDecorator:\n \"Decorators cannot be used to decorate parameters.\",\n UnsupportedPropertyDecorator:\n \"Decorators cannot be used to decorate object literal properties.\",\n UnsupportedSuper:\n \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n UnterminatedComment: \"Unterminated comment.\",\n UnterminatedRegExp: \"Unterminated regular expression.\",\n UnterminatedString: \"Unterminated string constant.\",\n UnterminatedTemplate: \"Unterminated template.\",\n UsingDeclarationHasBindingPattern:\n \"Using declaration cannot have destructuring patterns.\",\n VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n `Identifier '${identifierName}' has already been declared.`,\n YieldBindingIdentifier:\n \"Can not use 'yield' as identifier inside a generator.\",\n YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n ZeroDigitNumericSeparator:\n \"Numeric separator can not be used after leading 0.\",\n};\n","export default {\n StrictDelete: \"Deleting local variable in strict mode.\",\n\n // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n // is represented as just an `Identifier`[3] in the Babel AST.\n // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n `Assigning to '${referenceName}' in strict mode.`,\n\n // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n // represented as just an `Identifier`[3] in the Babel AST.\n // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n `Binding '${bindingName}' in strict mode.`,\n\n StrictFunction:\n \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n StrictWith: \"'with' in strict mode.\",\n};\n","import toNodeDescription from \"./to-node-description\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n \"ArrowFunctionExpression\",\n \"AssignmentExpression\",\n \"ConditionalExpression\",\n \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType> = T extends Set\n ? M\n : unknown;\n\ntype UnparenthesizedPipeBodyTypes = GetSetMemberType<\n typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n // This error is only used by the smart-mix proposal\n PipeBodyIsTighter:\n \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n PipeTopicRequiresHackPipes:\n 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n PipeTopicUnbound:\n \"Topic reference is unbound; it must be inside a pipe body.\",\n PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n PipeTopicUnused:\n \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n type,\n })}; please wrap it in parentheses.`,\n\n // Messages whose codes start with “Pipeline” or “PrimaryTopic”\n // are retained for backwards compatibility\n // with the deprecated smart-mix pipe operator proposal plugin.\n // They are subject to removal in a future major version.\n PipelineBodyNoArrow:\n 'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n PipelineBodySequenceExpression:\n \"Pipeline body may not be a comma-separated sequence expression.\",\n PipelineHeadSequenceExpression:\n \"Pipeline head should not be a comma-separated sequence expression.\",\n PipelineTopicUnused:\n \"Pipeline is in topic style but does not use topic reference.\",\n PrimaryTopicNotAllowed:\n \"Topic reference was used in a lexical context without topic binding.\",\n PrimaryTopicRequiresSmartPipeline:\n 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n};\n","import { Position } from \"./util/location\";\nimport {\n instantiate,\n ParseErrorCode,\n type ParseErrorCredentials,\n type ToMessage,\n type SyntaxPlugin,\n} from \"./parse-error/credentials\";\nimport type { Undone } from \"./parser/node\";\nimport type { Node } from \"./types\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification {\n // Look, these *could* be readonly, but then Flow complains when we initially\n // set them. We could do a whole dance and make a special interface that's not\n // readonly for when we create the error, then cast it to the readonly\n // interface for public use, but the previous implementation didn't have them\n // as readonly, so let's just not worry about it for now.\n code: ParseErrorCode;\n reasonCode: string;\n syntaxPlugin?: SyntaxPlugin;\n missingPlugin?: string | string[];\n loc: Position;\n details: ErrorDetails;\n\n // We should consider removing this as it now just contains the same\n // information as `loc.index`.\n // pos: number;\n}\n\nexport type ParseError = SyntaxError &\n ParseErrorSpecification;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor = (a: {\n loc: Position;\n details: ErrorDetails;\n}) => ParseError;\n\nfunction toParseErrorConstructor({\n toMessage,\n ...properties\n}: ParseErrorCredentials): ParseErrorConstructor {\n type ConstructorArgument = {\n loc: Position;\n details: ErrorDetails;\n };\n\n return function constructor({ loc, details }: ConstructorArgument) {\n return instantiate(\n SyntaxError,\n { ...properties, loc },\n {\n clone(\n overrides: {\n loc?: Position;\n details?: ErrorDetails;\n } = {},\n ) {\n const loc = (overrides.loc || {}) as Partial;\n return constructor({\n loc: new Position(\n \"line\" in loc ? loc.line : this.loc.line,\n \"column\" in loc ? loc.column : this.loc.column,\n \"index\" in loc ? loc.index : this.loc.index,\n ),\n details: { ...this.details, ...overrides.details },\n });\n },\n details: { value: details, enumerable: false },\n message: {\n get(this: ConstructorArgument): string {\n return `${toMessage(this.details)} (${this.loc.line}:${\n this.loc.column\n })`;\n },\n set(value: string) {\n Object.defineProperty(this, \"message\", { value });\n },\n },\n pos: { reflect: \"loc.index\", enumerable: true },\n missingPlugin: \"missingPlugin\" in details && {\n reflect: \"details.missingPlugin\",\n enumerable: true,\n },\n },\n ) as ParseError;\n };\n}\n\ntype ParseErrorTemplate =\n | string\n | ToMessage\n | { message: string | ToMessage };\n\ntype ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n T extends ParseErrorTemplates,\n>(\n parseErrorTemplates: T,\n) => {\n [K in keyof T]: ParseErrorConstructor<\n T[K] extends { message: string | ToMessage }\n ? T[K][\"message\"] extends ToMessage\n ? Parameters[0]\n : {}\n : T[K] extends ToMessage\n ? Parameters[0]\n : {}\n >;\n};\n\nexport function ParseErrorEnum(\n parseErrorTemplates: T,\n syntaxPlugin?: SyntaxPlugin,\n): {\n [K in keyof T]: ParseErrorConstructor<\n T[K] extends { message: string | ToMessage }\n ? T[K][\"message\"] extends ToMessage\n ? Parameters[0]\n : {}\n : T[K] extends ToMessage\n ? Parameters[0]\n : {}\n >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n// the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n// and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n// ErrorWithStaticMessage: \"message\",\n// ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n// ErrorWithOverriddenCodeAndOrReasonCode: {\n// message: ({ type }: { type: string }) => `${type}`),\n// code: ParseErrorCode.SourceTypeModuleError,\n// ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n// }\n// });\n//\nexport function ParseErrorEnum(\n argument: TemplateStringsArray | ParseErrorTemplates,\n syntaxPlugin?: SyntaxPlugin,\n) {\n // If the first parameter is an array, that means we were called with a tagged\n // template literal. Extract the syntaxPlugin from this, and call again in\n // the \"normalized\" form.\n if (Array.isArray(argument)) {\n return (parseErrorTemplates: ParseErrorTemplates) =>\n ParseErrorEnum(parseErrorTemplates, argument[0]);\n }\n\n const ParseErrorConstructors = {} as Record<\n string,\n ParseErrorConstructor\n >;\n\n for (const reasonCode of Object.keys(argument)) {\n const template = (argument as ParseErrorTemplates)[reasonCode];\n const { message, ...rest } =\n typeof template === \"string\"\n ? { message: () => template }\n : typeof template === \"function\"\n ? { message: template }\n : template;\n const toMessage = typeof message === \"string\" ? () => message : message;\n\n ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n code: ParseErrorCode.SyntaxError,\n reasonCode,\n toMessage,\n ...(syntaxPlugin ? { syntaxPlugin } : {}),\n ...rest,\n });\n }\n\n return ParseErrorConstructors;\n}\n\nexport type RaiseProperties = {\n at: Position | Undone;\n} & ErrorDetails;\n\nimport ModuleErrors from \"./parse-error/module-errors\";\nimport StandardErrors from \"./parse-error/standard-errors\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors\";\n\nexport const Errors = {\n ...ParseErrorEnum(ModuleErrors),\n ...ParseErrorEnum(StandardErrors),\n ...ParseErrorEnum(StrictModeErrors),\n ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors\";\n\nexport * from \"./parse-error/credentials\";\n","import { type TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport type { ExpressionErrors } from \"../parser/util\";\nimport type * as N from \"../types\";\nimport type { Node as NodeType, NodeBase, File } from \"../types\";\nimport type { Position } from \"../util/location\";\nimport { Errors } from \"../parse-error\";\nimport type { Undone } from \"../parser/node\";\nimport type { BindingTypes } from \"../util/scopeflags\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) =>\n defineProperty(object, key, { enumerable: false, value: object[key] });\n\nfunction toESTreeLocation(node: any) {\n node.loc.start && toUnenumerable(node.loc.start, \"index\");\n node.loc.end && toUnenumerable(node.loc.end, \"index\");\n\n return node;\n}\n\nexport default (superClass: typeof Parser) =>\n class ESTreeParserMixin extends superClass implements Parser {\n parse(): File {\n const file = toESTreeLocation(super.parse());\n\n if (this.options.tokens) {\n file.tokens = file.tokens.map(toESTreeLocation);\n }\n\n return file;\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n let regex: RegExp | null = null;\n try {\n regex = new RegExp(pattern, flags);\n } catch (e) {\n // In environments that don't support these flags value will\n // be null as the regex can't be represented natively.\n }\n const node = this.estreeParseLiteral(regex);\n node.regex = { pattern, flags };\n\n return node;\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseBigIntLiteral(value: any): N.Node {\n // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n let bigInt: BigInt | null;\n try {\n bigInt = BigInt(value);\n } catch {\n bigInt = null;\n }\n const node = this.estreeParseLiteral(bigInt);\n node.bigint = String(node.value || value);\n\n return node;\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseDecimalLiteral(value: any): N.Node {\n // https://github.com/estree/estree/blob/master/experimental/decimal.md\n // todo: use BigDecimal when node supports it.\n const decimal: null = null;\n const node = this.estreeParseLiteral(decimal);\n node.decimal = String(node.value || value);\n\n return node;\n }\n\n estreeParseLiteral(value: any) {\n // @ts-expect-error ESTree plugin changes node types\n return this.parseLiteral(value, \"Literal\");\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseStringLiteral(value: any): N.Node {\n return this.estreeParseLiteral(value);\n }\n\n parseNumericLiteral(value: any): any {\n return this.estreeParseLiteral(value);\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseNullLiteral(): N.Node {\n return this.estreeParseLiteral(null);\n }\n\n parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n return this.estreeParseLiteral(value);\n }\n\n // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n const expression = directive.value as any as N.EstreeLiteral;\n delete directive.value;\n\n expression.type = \"Literal\";\n // @ts-expect-error N.EstreeLiteral.raw is not defined.\n expression.raw = expression.extra.raw;\n expression.value = expression.extra.expressionValue;\n\n const stmt = directive as any as N.ExpressionStatement;\n stmt.type = \"ExpressionStatement\";\n stmt.expression = expression;\n // @ts-expect-error N.ExpressionStatement.directive is not defined\n stmt.directive = expression.extra.rawValue;\n\n delete expression.extra;\n\n return stmt;\n }\n\n // ==================================\n // Overrides\n // ==================================\n\n initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n super.initFunction(node, isAsync);\n node.expression = false;\n }\n\n checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n if (node != null && this.isObjectProperty(node)) {\n // @ts-expect-error plugin typings\n this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n } else {\n super.checkDeclaration(node);\n }\n }\n\n getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n return (method as any as N.EstreeProperty | N.EstreeMethodDefinition)\n .value.params;\n }\n\n isValidDirective(stmt: N.Statement): boolean {\n return (\n stmt.type === \"ExpressionStatement\" &&\n stmt.expression.type === \"Literal\" &&\n typeof stmt.expression.value === \"string\" &&\n !stmt.expression.extra?.parenthesized\n );\n }\n\n parseBlockBody(\n node: N.BlockStatementLike,\n allowDirectives: boolean | undefined | null,\n topLevel: boolean,\n end: TokenType,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): void {\n super.parseBlockBody(\n node,\n allowDirectives,\n topLevel,\n end,\n afterBlockParse,\n );\n\n const directiveStatements = node.directives.map(d =>\n this.directiveToStmt(d),\n );\n // @ts-expect-error estree plugin typings\n node.body = directiveStatements.concat(node.body);\n delete node.directives;\n }\n\n pushClassMethod(\n classBody: N.ClassBody,\n method: N.ClassMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowsDirectSuper: boolean,\n ): void {\n this.parseMethod(\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n \"ClassMethod\",\n true,\n );\n if (method.typeParameters) {\n // @ts-expect-error mutate AST types\n method.value.typeParameters = method.typeParameters;\n delete method.typeParameters;\n }\n classBody.body.push(method);\n }\n\n parsePrivateName(): any {\n const node = super.parsePrivateName();\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return node;\n }\n }\n return this.convertPrivateNameToPrivateIdentifier(node);\n }\n\n convertPrivateNameToPrivateIdentifier(\n node: N.PrivateName,\n ): N.EstreePrivateIdentifier {\n const name = super.getPrivateNameSV(node);\n node = node as any;\n delete node.id;\n // @ts-expect-error mutate AST types\n node.name = name;\n // @ts-expect-error mutate AST types\n node.type = \"PrivateIdentifier\";\n return node as unknown as N.EstreePrivateIdentifier;\n }\n\n isPrivateName(node: N.Node): boolean {\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return super.isPrivateName(node);\n }\n }\n return node.type === \"PrivateIdentifier\";\n }\n\n getPrivateNameSV(node: N.Node): string {\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return super.getPrivateNameSV(node);\n }\n }\n return node.name;\n }\n\n // @ts-expect-error plugin may override interfaces\n parseLiteral(value: any, type: T[\"type\"]): T {\n const node = super.parseLiteral(value, type);\n // @ts-expect-error mutating AST types\n node.raw = node.extra.raw;\n delete node.extra;\n\n return node;\n }\n\n parseFunctionBody(\n node: N.Function,\n allowExpression?: boolean | null,\n isMethod: boolean = false,\n ): void {\n super.parseFunctionBody(node, allowExpression, isMethod);\n node.expression = node.body.type !== \"BlockStatement\";\n }\n\n // @ts-expect-error plugin may override interfaces\n parseMethod<\n T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n >(\n node: Undone,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowDirectSuper: boolean,\n type: T[\"type\"],\n inClassScope: boolean = false,\n ): N.EstreeMethodDefinition {\n let funcNode = this.startNode();\n funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n funcNode = super.parseMethod(\n // @ts-expect-error todo(flow->ts)\n funcNode,\n isGenerator,\n isAsync,\n isConstructor,\n allowDirectSuper,\n type,\n inClassScope,\n );\n // @ts-expect-error mutate AST types\n funcNode.type = \"FunctionExpression\";\n delete funcNode.kind;\n // @ts-expect-error mutate AST types\n node.value = funcNode;\n if (type === \"ClassPrivateMethod\") {\n node.computed = false;\n }\n return this.finishNode(\n // @ts-expect-error cast methods to estree types\n node as Undone,\n \"MethodDefinition\",\n );\n }\n\n parseClassProperty(...args: [N.ClassProperty]): any {\n const propertyNode = super.parseClassProperty(...args) as any;\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return propertyNode as N.EstreePropertyDefinition;\n }\n }\n propertyNode.type = \"PropertyDefinition\";\n return propertyNode as N.EstreePropertyDefinition;\n }\n\n parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n const propertyNode = super.parseClassPrivateProperty(...args) as any;\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return propertyNode as N.EstreePropertyDefinition;\n }\n }\n propertyNode.type = \"PropertyDefinition\";\n propertyNode.computed = false;\n return propertyNode as N.EstreePropertyDefinition;\n }\n\n parseObjectMethod(\n prop: N.ObjectMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n isAccessor: boolean,\n ): N.ObjectMethod | undefined | null {\n const node: N.EstreeProperty = super.parseObjectMethod(\n prop,\n isGenerator,\n isAsync,\n isPattern,\n isAccessor,\n ) as any;\n\n if (node) {\n node.type = \"Property\";\n if ((node as any as N.ClassMethod).kind === \"method\") {\n node.kind = \"init\";\n }\n node.shorthand = false;\n }\n\n return node as any;\n }\n\n parseObjectProperty(\n prop: N.ObjectProperty,\n startLoc: Position | undefined | null,\n isPattern: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ObjectProperty | undefined | null {\n const node: N.EstreeProperty = super.parseObjectProperty(\n prop,\n startLoc,\n isPattern,\n refExpressionErrors,\n ) as any;\n\n if (node) {\n node.kind = \"init\";\n node.type = \"Property\";\n }\n\n return node as any;\n }\n\n isValidLVal(\n type: string,\n isUnparenthesizedInAssign: boolean,\n binding: BindingTypes,\n ) {\n return type === \"Property\"\n ? \"value\"\n : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n }\n\n isAssignable(node: N.Node, isBinding?: boolean): boolean {\n if (node != null && this.isObjectProperty(node)) {\n return this.isAssignable(node.value, isBinding);\n }\n return super.isAssignable(node, isBinding);\n }\n\n toAssignable(node: N.Node, isLHS: boolean = false): void {\n if (node != null && this.isObjectProperty(node)) {\n const { key, value } = node;\n if (this.isPrivateName(key)) {\n this.classScope.usePrivateName(\n this.getPrivateNameSV(key),\n key.loc.start,\n );\n }\n this.toAssignable(value, isLHS);\n } else {\n super.toAssignable(node, isLHS);\n }\n }\n\n toAssignableObjectExpressionProp(\n prop: N.Node,\n isLast: boolean,\n isLHS: boolean,\n ) {\n if (prop.kind === \"get\" || prop.kind === \"set\") {\n this.raise(Errors.PatternHasAccessor, { at: prop.key });\n } else if (prop.method) {\n this.raise(Errors.PatternHasMethod, { at: prop.key });\n } else {\n super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n }\n }\n\n finishCallExpression(\n unfinished: Undone,\n optional: boolean,\n ): T {\n const node = super.finishCallExpression(unfinished, optional);\n\n if (node.callee.type === \"Import\") {\n (node as N.Node as N.EstreeImportExpression).type = \"ImportExpression\";\n (node as N.Node as N.EstreeImportExpression).source = node.arguments[0];\n if (this.hasPlugin(\"importAssertions\")) {\n (node as N.Node as N.EstreeImportExpression).attributes =\n node.arguments[1] ?? null;\n }\n // arguments isn't optional in the type definition\n delete node.arguments;\n // callee isn't optional in the type definition\n delete node.callee;\n }\n\n return node;\n }\n\n toReferencedArguments(\n node:\n | N.CallExpression\n | N.OptionalCallExpression\n | N.EstreeImportExpression,\n /* isParenthesizedExpr?: boolean, */\n ) {\n // ImportExpressions do not have an arguments array.\n if (node.type === \"ImportExpression\") {\n return;\n }\n\n super.toReferencedArguments(node);\n }\n\n parseExport(\n unfinished: Undone,\n decorators: N.Decorator[] | null,\n ) {\n const exportStartLoc = this.state.lastTokStartLoc;\n const node = super.parseExport(unfinished, decorators);\n\n switch (node.type) {\n case \"ExportAllDeclaration\":\n // @ts-expect-error mutating AST types\n node.exported = null;\n break;\n\n case \"ExportNamedDeclaration\":\n if (\n node.specifiers.length === 1 &&\n // @ts-expect-error mutating AST types\n node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n ) {\n // @ts-expect-error mutating AST types\n node.type = \"ExportAllDeclaration\";\n // @ts-expect-error mutating AST types\n node.exported = node.specifiers[0].exported;\n delete node.specifiers;\n }\n\n // fallthrough\n case \"ExportDefaultDeclaration\":\n {\n const { declaration } = node;\n if (\n declaration?.type === \"ClassDeclaration\" &&\n declaration.decorators?.length > 0 &&\n // decorator comes before export\n declaration.start === node.start\n ) {\n this.resetStartLocation(\n node,\n // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n // export declaration must start with export.\n // https://github.com/babel/babel/issues/15085\n // Here we reset export declaration's start to be the start of the export token\n exportStartLoc,\n );\n }\n }\n\n break;\n }\n\n return node;\n }\n\n parseSubscript(\n base: N.Expression,\n startLoc: Position,\n noCalls: boolean | undefined | null,\n state: N.ParseSubscriptState,\n ) {\n const node = super.parseSubscript(base, startLoc, noCalls, state);\n\n if (state.optionalChainMember) {\n // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n if (\n node.type === \"OptionalMemberExpression\" ||\n node.type === \"OptionalCallExpression\"\n ) {\n node.type = node.type.substring(8); // strip Optional prefix\n }\n if (state.stop) {\n const chain = this.startNodeAtNode(node);\n chain.expression = node;\n return this.finishNode(chain, \"ChainExpression\");\n }\n } else if (\n node.type === \"MemberExpression\" ||\n node.type === \"CallExpression\"\n ) {\n node.optional = false;\n }\n\n return node;\n }\n\n hasPropertyAsPrivateName(node: N.Node): boolean {\n if (node.type === \"ChainExpression\") {\n node = node.expression;\n }\n return super.hasPropertyAsPrivateName(node);\n }\n\n // @ts-expect-error override interfaces\n isObjectProperty(node: N.Node): boolean {\n return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n }\n\n isObjectMethod(node: N.Node): boolean {\n return node.method || node.kind === \"get\" || node.kind === \"set\";\n }\n\n finishNodeAt(\n node: Undone,\n type: T[\"type\"],\n endLoc: Position,\n ): T {\n return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n }\n\n resetStartLocation(node: N.Node, startLoc: Position) {\n super.resetStartLocation(node, startLoc);\n toESTreeLocation(node);\n }\n\n resetEndLocation(\n node: NodeBase,\n endLoc: Position = this.state.lastTokEndLoc,\n ): void {\n super.resetEndLocation(node, endLoc);\n toESTreeLocation(node);\n }\n };\n","import * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\nconst nonASCIIidentifierStart = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,3104,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n let pos = 0x10000;\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return (\n code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n );\n }\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n if (code < charCodes.digit0) return code === charCodes.dollarSign;\n if (code < charCodes.colon) return true;\n if (code < charCodes.uppercaseA) return false;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n return (\n isInAstralSet(code, astralIdentifierStartCodes) ||\n isInAstralSet(code, astralIdentifierCodes)\n );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n let isFirst = true;\n for (let i = 0; i < name.length; i++) {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = name.charCodeAt(i);\n if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n const trail = name.charCodeAt(++i);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n if (isFirst) {\n isFirst = false;\n if (!isIdentifierStart(cp)) {\n return false;\n }\n } else if (!isIdentifierChar(cp)) {\n return false;\n }\n }\n return !isFirst;\n}\n","const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n","/* eslint max-len: 0 */\n\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n isIdentifierStart,\n isIdentifierChar,\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n current: number,\n next: number,\n next2: number,\n): boolean {\n return (\n current === charCodes.atSign &&\n next === charCodes.atSign &&\n isIdentifierStart(next2)\n );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n // strict\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n // strictBind\n \"eval\",\n \"arguments\",\n // reservedWorkLike\n \"enum\",\n \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n return reservedWordLikeSet.has(word);\n}\n","// Each scope gets a bitset that may contain these flags\n// prettier-ignore\nexport const SCOPE_OTHER = 0b000000000,\n SCOPE_PROGRAM = 0b000000001,\n SCOPE_FUNCTION = 0b000000010,\n SCOPE_ARROW = 0b000000100,\n SCOPE_SIMPLE_CATCH = 0b000001000,\n SCOPE_SUPER = 0b000010000,\n SCOPE_DIRECT_SUPER = 0b000100000,\n SCOPE_CLASS = 0b001000000,\n SCOPE_STATIC_BLOCK = 0b010000000,\n SCOPE_TS_MODULE = 0b100000000,\n SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_STATIC_BLOCK | SCOPE_TS_MODULE;\n\nexport type ScopeFlags =\n | typeof SCOPE_OTHER\n | typeof SCOPE_PROGRAM\n | typeof SCOPE_FUNCTION\n | typeof SCOPE_VAR\n | typeof SCOPE_ARROW\n | typeof SCOPE_SIMPLE_CATCH\n | typeof SCOPE_SUPER\n | typeof SCOPE_DIRECT_SUPER\n | typeof SCOPE_CLASS\n | typeof SCOPE_STATIC_BLOCK;\n\n// These flags are meant to be _only_ used inside the Scope class (or subclasses).\n// prettier-ignore\nexport const BIND_KIND_VALUE = 0b0000000_0000_01,\n BIND_KIND_TYPE = 0b0000000_0000_10,\n // Used in checkLVal and declareName to determine the type of a binding\n BIND_SCOPE_VAR = 0b0000000_0001_00, // Var-style binding\n BIND_SCOPE_LEXICAL = 0b0000000_0010_00, // Let- or const-style binding\n BIND_SCOPE_FUNCTION = 0b0000000_0100_00, // Function declaration\n BIND_SCOPE_OUTSIDE = 0b0000000_1000_00, // Special case for function names as\n // bound inside the function\n // Misc flags\n BIND_FLAGS_NONE = 0b00000001_0000_00,\n BIND_FLAGS_CLASS = 0b00000010_0000_00,\n BIND_FLAGS_TS_ENUM = 0b00000100_0000_00,\n BIND_FLAGS_TS_CONST_ENUM = 0b00001000_0000_00,\n BIND_FLAGS_TS_EXPORT_ONLY = 0b00010000_0000_00,\n BIND_FLAGS_FLOW_DECLARE_FN = 0b00100000_0000_00,\n BIND_FLAGS_TS_IMPORT = 0b01000000_0000_00,\n // Whether \"let\" should be allowed in bound names in sloppy mode\n BIND_FLAGS_NO_LET_IN_LEXICAL = 0b10000000_0000_00;\n\n// These flags are meant to be _only_ used by Scope consumers\n// prettier-ignore\n/* = is value? | is type? | scope | misc flags */\nexport const BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS|BIND_FLAGS_NO_LET_IN_LEXICAL,\n BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | BIND_FLAGS_NO_LET_IN_LEXICAL,\n BIND_CATCH_PARAM = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0 ,\n BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0 ,\n BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0 ,\n BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS ,\n BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0 ,\n BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM|BIND_FLAGS_NO_LET_IN_LEXICAL,\n BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n // These bindings don't introduce anything in the scope. They are used for assignments and\n // function expressions IDs.\n BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE ,\n BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE ,\n\n BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM ,\n BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n BIND_TS_TYPE_IMPORT= 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_TS_IMPORT ,\n\n BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\n\nexport type BindingTypes =\n | typeof BIND_NONE\n | typeof BIND_OUTSIDE\n | typeof BIND_VAR\n | typeof BIND_LEXICAL\n | typeof BIND_CLASS\n | typeof BIND_FUNCTION\n | typeof BIND_TS_INTERFACE\n | typeof BIND_TS_TYPE\n | typeof BIND_TS_ENUM\n | typeof BIND_TS_AMBIENT\n | typeof BIND_TS_NAMESPACE;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_FLAG_STATIC = 0b1_00,\n CLASS_ELEMENT_KIND_GETTER = 0b0_10,\n CLASS_ELEMENT_KIND_SETTER = 0b0_01,\n CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n CLASS_ELEMENT_OTHER = 0;\n\nexport type ClassElementTypes =\n | typeof CLASS_ELEMENT_STATIC_GETTER\n | typeof CLASS_ELEMENT_STATIC_SETTER\n | typeof CLASS_ELEMENT_INSTANCE_GETTER\n | typeof CLASS_ELEMENT_INSTANCE_SETTER\n | typeof CLASS_ELEMENT_OTHER;\n","import {\n SCOPE_ARROW,\n SCOPE_DIRECT_SUPER,\n SCOPE_FUNCTION,\n SCOPE_SIMPLE_CATCH,\n SCOPE_SUPER,\n SCOPE_PROGRAM,\n SCOPE_VAR,\n SCOPE_CLASS,\n SCOPE_STATIC_BLOCK,\n BIND_SCOPE_FUNCTION,\n BIND_SCOPE_VAR,\n BIND_SCOPE_LEXICAL,\n BIND_KIND_VALUE,\n type ScopeFlags,\n type BindingTypes,\n} from \"./scopeflags\";\nimport type { Position } from \"./location\";\nimport type * as N from \"../types\";\nimport { Errors } from \"../parse-error\";\nimport type Tokenizer from \"../tokenizer\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n declare flags: ScopeFlags;\n // A set of var-declared names in the current lexical scope\n var: Set = new Set();\n // A set of lexically-declared names in the current lexical scope\n lexical: Set = new Set();\n // A set of lexically-declared FunctionDeclaration names in the current lexical scope\n functions: Set = new Set();\n\n constructor(flags: ScopeFlags) {\n this.flags = flags;\n }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler {\n parser: Tokenizer;\n scopeStack: Array = [];\n inModule: boolean;\n undefinedExports: Map = new Map();\n\n constructor(parser: Tokenizer, inModule: boolean) {\n this.parser = parser;\n this.inModule = inModule;\n }\n\n get inTopLevel() {\n return (this.currentScope().flags & SCOPE_PROGRAM) > 0;\n }\n get inFunction() {\n return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n }\n get allowSuper() {\n return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n }\n get allowDirectSuper() {\n return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n }\n get inClass() {\n return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n }\n get inClassAndNotInNonArrowFunction() {\n const flags = this.currentThisScopeFlags();\n return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n }\n get inStaticBlock() {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & SCOPE_STATIC_BLOCK) {\n return true;\n }\n if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\n // function body, module body, class property initializers\n return false;\n }\n }\n }\n get inNonArrowFunction() {\n return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n }\n get treatFunctionsAsVar() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n }\n\n createScope(flags: ScopeFlags): Scope {\n return new Scope(flags);\n }\n\n enter(flags: ScopeFlags) {\n /*:: +createScope: (flags: ScopeFlags) => IScope; */\n // @ts-expect-error This method will be overwritten by subclasses\n this.scopeStack.push(this.createScope(flags));\n }\n\n exit(): ScopeFlags {\n const scope = this.scopeStack.pop();\n return scope.flags;\n }\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n treatFunctionsAsVarInScope(scope: IScope): boolean {\n return !!(\n scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) ||\n (!this.parser.inModule && scope.flags & SCOPE_PROGRAM)\n );\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n let scope = this.currentScope();\n if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n scope.functions.add(name);\n } else {\n scope.lexical.add(name);\n }\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n this.maybeExportDefined(scope, name);\n }\n } else if (bindingType & BIND_SCOPE_VAR) {\n for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n scope = this.scopeStack[i];\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n scope.var.add(name);\n this.maybeExportDefined(scope, name);\n\n if (scope.flags & SCOPE_VAR) break;\n }\n }\n if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n maybeExportDefined(scope: IScope, name: string) {\n if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n checkRedeclarationInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n loc: Position,\n ) {\n if (this.isRedeclaredInScope(scope, name, bindingType)) {\n this.parser.raise(Errors.VarRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n }\n\n isRedeclaredInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n return (\n scope.lexical.has(name) ||\n scope.functions.has(name) ||\n scope.var.has(name)\n );\n }\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n return (\n scope.lexical.has(name) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.var.has(name))\n );\n }\n\n return (\n (scope.lexical.has(name) &&\n // Annex B.3.4\n // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n !(\n scope.flags & SCOPE_SIMPLE_CATCH &&\n scope.lexical.values().next().value === name\n )) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name))\n );\n }\n\n checkLocalExport(id: N.Identifier) {\n const { name } = id;\n const topLevelScope = this.scopeStack[0];\n if (\n !topLevelScope.lexical.has(name) &&\n !topLevelScope.var.has(name) &&\n // In strict mode, scope.functions will always be empty.\n // Modules are strict by default, but the `scriptMode` option\n // can overwrite this behavior.\n !topLevelScope.functions.has(name)\n ) {\n this.undefinedExports.set(name, id.loc.start);\n }\n }\n\n currentScope(): IScope {\n return this.scopeStack[this.scopeStack.length - 1];\n }\n\n currentVarScopeFlags(): ScopeFlags {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & SCOPE_VAR) {\n return flags;\n }\n }\n }\n\n // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n currentThisScopeFlags(): ScopeFlags {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n return flags;\n }\n }\n }\n}\n","import type { Position } from \"../../util/location\";\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n BIND_FLAGS_FLOW_DECLARE_FN,\n type ScopeFlags,\n type BindingTypes,\n} from \"../../util/scopeflags\";\nimport type * as N from \"../../types\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n // declare function foo(): type;\n declareFunctions: Set = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler {\n createScope(flags: ScopeFlags): FlowScope {\n return new FlowScope(flags);\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n const scope = this.currentScope();\n if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n this.maybeExportDefined(scope, name);\n scope.declareFunctions.add(name);\n return;\n }\n\n super.declareName(name, bindingType, loc);\n }\n\n isRedeclaredInScope(\n scope: FlowScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n return (\n !scope.declareFunctions.has(name) &&\n (scope.lexical.has(name) || scope.functions.has(name))\n );\n }\n\n return false;\n }\n\n checkLocalExport(id: N.Identifier) {\n if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n super.checkLocalExport(id);\n }\n }\n}\n","import type { Options } from \"../options\";\nimport type State from \"../tokenizer/state\";\nimport type { PluginsMap } from \"./index\";\nimport type ScopeHandler from \"../util/scope\";\nimport type ExpressionScopeHandler from \"../util/expression-scope\";\nimport type ClassScopeHandler from \"../util/class-scope\";\nimport type ProductionParameterHandler from \"../util/production-parameter\";\nimport type {\n ParserPluginWithOptions,\n PluginConfig,\n PluginOptions,\n} from \"../typings\";\n\nexport default class BaseParser {\n // Properties set by constructor in index.js\n declare options: Options;\n declare inModule: boolean;\n declare scope: ScopeHandler;\n declare classScope: ClassScopeHandler;\n declare prodParam: ProductionParameterHandler;\n declare expressionScope: ExpressionScopeHandler;\n declare plugins: PluginsMap;\n declare filename: string | undefined | null;\n // Names of exports store. `default` is stored as a name for both\n // `export default foo;` and `export { foo as default };`.\n declare exportedIdentifiers: Set;\n sawUnambiguousESM: boolean = false;\n ambiguousScriptDifferentAst: boolean = false;\n\n // Initialized by Tokenizer\n declare state: State;\n // input and length are not in state as they are constant and we do\n // not want to ever copy them, which happens if state gets cloned\n declare input: string;\n declare length: number;\n\n // This method accepts either a string (plugin name) or an array pair\n // (plugin name and options object). If an options object is given,\n // then each value is non-recursively checked for identity with that\n // plugin’s actual option value.\n hasPlugin(pluginConfig: PluginConfig): boolean {\n if (typeof pluginConfig === \"string\") {\n return this.plugins.has(pluginConfig);\n } else {\n const [pluginName, pluginOptions] = pluginConfig;\n if (!this.hasPlugin(pluginName)) {\n return false;\n }\n const actualOptions = this.plugins.get(pluginName);\n for (const key of Object.keys(\n pluginOptions,\n ) as (keyof typeof pluginOptions)[]) {\n if (actualOptions?.[key] !== pluginOptions[key]) {\n return false;\n }\n }\n return true;\n }\n }\n\n getPluginOption<\n PluginName extends ParserPluginWithOptions[0],\n OptionName extends keyof PluginOptions,\n >(plugin: PluginName, name: OptionName) {\n return (this.plugins.get(plugin) as null | PluginOptions)?.[\n name\n ];\n }\n}\n","/*:: declare var invariant; */\n\nimport BaseParser from \"./base\";\nimport type { Comment, Node } from \"../types\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n /**\n * the start of the whitespace token.\n */\n start: number;\n /**\n * the end of the whitespace token.\n */\n end: number;\n /**\n * the containing comments\n */\n comments: Array;\n /**\n * the immediately preceding AST node of the whitespace token\n */\n leadingNode: Node | null;\n /**\n * the immediately following AST node of the whitespace token\n */\n trailingNode: Node | null;\n /**\n * the innermost AST node containing the whitespace with minimal size (|end - start|)\n */\n containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone, comments: Array) {\n if (node.trailingComments === undefined) {\n node.trailingComments = comments;\n } else {\n node.trailingComments.unshift(...comments);\n }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone, comments: Array) {\n if (node.leadingComments === undefined) {\n node.leadingComments = comments;\n } else {\n node.leadingComments.unshift(...comments);\n }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(\n node: Undone,\n comments?: Array,\n) {\n if (node.innerComments === undefined) {\n node.innerComments = comments;\n } else {\n node.innerComments.unshift(...comments);\n }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n node: Undone,\n elements: Array,\n commentWS: CommentWhitespace,\n) {\n let lastElement = null;\n let i = elements.length;\n while (lastElement === null && i > 0) {\n lastElement = elements[--i];\n }\n if (lastElement === null || lastElement.start > commentWS.start) {\n setInnerComments(node, commentWS.comments);\n } else {\n setTrailingComments(lastElement, commentWS.comments);\n }\n}\n\nexport default class CommentsParser extends BaseParser {\n addComment(comment: Comment): void {\n if (this.filename) comment.loc.filename = this.filename;\n this.state.comments.push(comment);\n }\n\n /**\n * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n * {@see {@link CommentWhitespace}}\n */\n processComment(node: Node): void {\n const { commentStack } = this.state;\n const commentStackLength = commentStack.length;\n if (commentStackLength === 0) return;\n let i = commentStackLength - 1;\n const lastCommentWS = commentStack[i];\n\n if (lastCommentWS.start === node.end) {\n lastCommentWS.leadingNode = node;\n i--;\n }\n\n const { start: nodeStart } = node;\n // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n for (; i >= 0; i--) {\n const commentWS = commentStack[i];\n const commentEnd = commentWS.end;\n if (commentEnd > nodeStart) {\n // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n // so node can be a containingNode candidate. At this time we can finalize the comment\n // whitespace, because\n // 1) its leadingNode or trailingNode, if exists, will not change\n // 2) its containingNode have been assigned and will not change because it is the\n // innermost minimal-sized AST node\n commentWS.containingNode = node;\n this.finalizeComment(commentWS);\n commentStack.splice(i, 1);\n } else {\n if (commentEnd === nodeStart) {\n commentWS.trailingNode = node;\n }\n // stop the loop when commentEnd <= nodeStart\n break;\n }\n }\n }\n\n /**\n * Assign the comments of comment whitespaces to related AST nodes.\n * Also adjust innerComments following trailing comma.\n */\n finalizeComment(commentWS: CommentWhitespace) {\n const { comments } = commentWS;\n if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n if (commentWS.leadingNode !== null) {\n setTrailingComments(commentWS.leadingNode, comments);\n }\n if (commentWS.trailingNode !== null) {\n setLeadingComments(commentWS.trailingNode, comments);\n }\n } else {\n /*:: invariant(commentWS.containingNode !== null) */\n const { containingNode: node, start: commentStart } = commentWS;\n if (this.input.charCodeAt(commentStart - 1) === charCodes.comma) {\n // If a commentWhitespace follows a comma and the containingNode allows\n // list structures with trailing comma, merge it to the trailingComment\n // of the last non-null list element\n switch (node.type) {\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n case \"RecordExpression\":\n adjustInnerComments(node, node.properties, commentWS);\n break;\n case \"CallExpression\":\n case \"OptionalCallExpression\":\n adjustInnerComments(node, node.arguments, commentWS);\n break;\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n case \"ObjectMethod\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n adjustInnerComments(node, node.params, commentWS);\n break;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n case \"TupleExpression\":\n adjustInnerComments(node, node.elements, commentWS);\n break;\n case \"ExportNamedDeclaration\":\n case \"ImportDeclaration\":\n adjustInnerComments(node, node.specifiers, commentWS);\n break;\n default: {\n setInnerComments(node, comments);\n }\n }\n } else {\n setInnerComments(node, comments);\n }\n }\n }\n\n /**\n * Drains remaining commentStack and applies finalizeComment\n * to each comment whitespace. Used only in parseExpression\n * where the top level AST node is _not_ Program\n * {@see {@link CommentsParser#finalizeComment}}\n */\n finalizeRemainingComments() {\n const { commentStack } = this.state;\n for (let i = commentStack.length - 1; i >= 0; i--) {\n this.finalizeComment(commentStack[i]);\n }\n this.state.commentStack = [];\n }\n\n /* eslint-disable no-irregular-whitespace */\n /**\n * Reset previous node trailing comments. Used in object / class\n * property parsing. We parse `async`, `static`, `set` and `get`\n * as an identifier but may reinterpret it into an async/static/accessor\n * method later. In this case the identifier is not part of the AST and we\n * should sync the knowledge to commentStacks\n *\n * For example, when parsing\n * ```\n * async /* 1 *​/ function f() {}\n * ```\n * the comment whitespace `/* 1 *​/` has leading node Identifier(async). When\n * we see the function token, we create a Function node and mark `/* 1 *​/` as\n * inner comments. So `/* 1 *​/` should be detached from the Identifier node.\n *\n * @param node the last finished AST node _before_ current token\n */\n /* eslint-enable no-irregular-whitespace */\n resetPreviousNodeTrailingComments(node: Node) {\n const { commentStack } = this.state;\n const { length } = commentStack;\n if (length === 0) return;\n const commentWS = commentStack[length - 1];\n if (commentWS.leadingNode === node) {\n commentWS.leadingNode = null;\n }\n }\n\n /**\n * Attach a node to the comment whitespaces right before/after\n * the given range.\n *\n * This is used to properly attach comments around parenthesized\n * expressions as leading/trailing comments of the inner expression.\n */\n takeSurroundingComments(node: Node, start: number, end: number) {\n const { commentStack } = this.state;\n const commentStackLength = commentStack.length;\n if (commentStackLength === 0) return;\n let i = commentStackLength - 1;\n\n for (; i >= 0; i--) {\n const commentWS = commentStack[i];\n const commentEnd = commentWS.end;\n const commentStart = commentWS.start;\n\n if (commentStart === end) {\n commentWS.leadingNode = node;\n } else if (commentEnd === start) {\n commentWS.trailingNode = node;\n } else if (commentEnd < start) {\n break;\n }\n }\n }\n}\n","import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n switch (code) {\n case charCodes.lineFeed:\n case charCodes.carriageReturn:\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n return true;\n\n default:\n return false;\n }\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/g;\n\n// Skip whitespace and single-line comments, including /* no newline here */.\n// After this RegExp matches, its lastIndex points to a line terminator, or\n// the start of multi-line comment (which is effectively a line terminator),\n// or the end of string.\nexport const skipWhiteSpaceToLineBreak = new RegExp(\n // Unfortunately JS doesn't support Perl's atomic /(?>pattern)/ or\n // possessive quantifiers, so we use a trick to prevent backtracking\n // when the look-ahead for line terminator fails.\n \"(?=(\" +\n // Capture the whitespace and comments that should be skipped inside\n // a look-ahead assertion, and then re-match the group as a unit.\n skipWhiteSpaceInLine.source +\n \"))\\\\1\" +\n // Look-ahead for either line terminator, start of multi-line comment,\n // or end of string.\n /(?=[\\n\\r\\u2028\\u2029]|\\/\\*(?!.*?\\*\\/)|$)/.source,\n \"y\", // sticky\n);\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n switch (code) {\n case 0x0009: // CHARACTER TABULATION\n case 0x000b: // LINE TABULATION\n case 0x000c: // FORM FEED\n case charCodes.space:\n case charCodes.nonBreakingSpace:\n case charCodes.oghamSpaceMark:\n case 0x2000: // EN QUAD\n case 0x2001: // EM QUAD\n case 0x2002: // EN SPACE\n case 0x2003: // EM SPACE\n case 0x2004: // THREE-PER-EM SPACE\n case 0x2005: // FOUR-PER-EM SPACE\n case 0x2006: // SIX-PER-EM SPACE\n case 0x2007: // FIGURE SPACE\n case 0x2008: // PUNCTUATION SPACE\n case 0x2009: // THIN SPACE\n case 0x200a: // HAIR SPACE\n case 0x202f: // NARROW NO-BREAK SPACE\n case 0x205f: // MEDIUM MATHEMATICAL SPACE\n case 0x3000: // IDEOGRAPHIC SPACE\n case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n return true;\n\n default:\n return false;\n }\n}\n","import type { Options } from \"../options\";\nimport type * as N from \"../types\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location\";\n\nimport { types as ct, type TokContext } from \"./context\";\nimport { tt, type TokenType } from \"./types\";\nimport type { Errors } from \"../parse-error\";\nimport { type ParseError } from \"../parse-error\";\n\nexport type DeferredStrictError =\n | typeof Errors.StrictNumericEscape\n | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n // When a topic binding has been currently established,\n // then this is 1. Otherwise, it is 0. This is forwards compatible\n // with a future plugin for multiple lexical topics.\n maxNumOfResolvableTopics: number;\n // When a topic binding has been currently established, and if that binding\n // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n // `null`. This is forwards compatible with a future plugin for multiple\n // lexical topics.\n maxTopicIndex: null | 0;\n};\n\nexport default class State {\n strict: boolean;\n curLine: number;\n lineStart: number;\n\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n startLoc: Position;\n endLoc: Position;\n\n init({ strictMode, sourceType, startLine, startColumn }: Options): void {\n this.strict =\n strictMode === false\n ? false\n : strictMode === true\n ? true\n : sourceType === \"module\";\n\n this.curLine = startLine;\n this.lineStart = -startColumn;\n this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\n }\n\n errors: ParseError[] = [];\n\n // Used to signify the start of a potential arrow function\n potentialArrowAt: number = -1;\n\n // Used to signify the start of an expression which looks like a\n // typed arrow function, but it isn't\n // e.g. a ? (b) : c => d\n // ^\n noArrowAt: number[] = [];\n\n // Used to signify the start of an expression whose params, if it looks like\n // an arrow function, shouldn't be converted to assignable nodes.\n // This is used to defer the validation of typed arrow functions inside\n // conditional expressions.\n // e.g. a ? (b) : c => d\n // ^\n noArrowParamsConversionAt: number[] = [];\n\n // Flags to track\n maybeInArrowParameters: boolean = false;\n inType: boolean = false;\n noAnonFunctionType: boolean = false;\n hasFlowComment: boolean = false;\n isAmbientContext: boolean = false;\n inAbstractClass: boolean = false;\n inDisallowConditionalTypesContext: boolean = false;\n\n // For the Hack-style pipelines plugin\n topicContext: TopicContextState = {\n maxNumOfResolvableTopics: 0,\n maxTopicIndex: null,\n };\n\n // For the F#-style pipelines plugin\n soloAwait: boolean = false;\n inFSharpPipelineDirectBody: boolean = false;\n\n // Labels in scope.\n labels: Array<{\n kind: \"loop\" | \"switch\" | undefined | null;\n name?: string | null;\n statementStart?: number;\n }> = [];\n\n // Comment store for Program.comments\n comments: Array = [];\n\n // Comment attachment store\n commentStack: Array = [];\n\n // The current position of the tokenizer in the input.\n pos: number = 0;\n\n // Properties of the current token:\n // Its type\n type: TokenType = tt.eof;\n\n // For tokens that include more information than their type, the value\n value: any = null;\n\n // Its start and end offset\n start: number = 0;\n end: number = 0;\n\n // Position information for the previous token\n // this is initialized when generating the second token.\n lastTokEndLoc: Position = null;\n // this is initialized when generating the second token.\n lastTokStartLoc: Position = null;\n lastTokStart: number = 0;\n\n // The context stack is used to track whether the apostrophe \"`\" starts\n // or ends a string template\n context: Array = [ct.brace];\n // Used to track whether a JSX element is allowed to form\n canStartJSXElement: boolean = true;\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n containsEsc: boolean = false;\n\n // Used to track invalid escape sequences in template literals,\n // that must be reported if the template is not tagged.\n firstInvalidTemplateEscapePos: null | Position = null;\n\n // This property is used to track the following errors\n // - StrictNumericEscape\n // - StrictOctalLiteral\n //\n // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n // todo(JLHwung): set strictErrors to null and avoid recording string errors\n // after a non-directive is parsed\n strictErrors: Map = new Map();\n\n // Tokens length in token store\n tokensLength: number = 0;\n\n curPosition(): Position {\n return new Position(this.curLine, this.pos - this.lineStart, this.pos);\n }\n\n clone(skipArrays?: boolean): State {\n const state = new State();\n const keys = Object.keys(this) as (keyof State)[];\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n let val = this[key];\n\n if (!skipArrays && Array.isArray(val)) {\n val = val.slice();\n }\n\n // @ts-expect-error val must conform to S[key]\n state[key] = val;\n }\n\n return state;\n }\n}\n\nexport type LookaheadState = {\n pos: number;\n value: any;\n type: TokenType;\n start: number;\n end: number;\n context: TokContext[];\n startLoc: Position;\n lastTokEndLoc: Position;\n curLine: number;\n lineStart: number;\n curPosition: () => Position;\n /* Used only in readToken_mult_modulo */\n inType: boolean;\n // These boolean properties are not initialized in createLookaheadState()\n // instead they will only be set by the tokenizer\n containsEsc?: boolean;\n};\n","import * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n decBinOct: new Set([\n charCodes.dot,\n charCodes.uppercaseB,\n charCodes.uppercaseE,\n charCodes.uppercaseO,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseB,\n charCodes.lowercaseE,\n charCodes.lowercaseO,\n ]),\n hex: new Set([\n charCodes.dot,\n charCodes.uppercaseX,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseX,\n ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n // 0 - 1\n bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n // 0 - 7\n oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n // 0 - 9\n dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n // 0 - 9, A - F, a - f,\n hex: (ch: number) =>\n (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n unterminated(\n initialPos: number,\n initialLineStart: number,\n initialCurLine: number,\n ): void;\n};\n\nexport function readStringContents(\n type: \"single\" | \"double\" | \"template\",\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n errors: StringContentsErrorHandlers,\n) {\n const initialPos = pos;\n const initialLineStart = lineStart;\n const initialCurLine = curLine;\n\n let out = \"\";\n let firstInvalidLoc = null;\n let chunkStart = pos;\n const { length } = input;\n for (;;) {\n if (pos >= length) {\n errors.unterminated(initialPos, initialLineStart, initialCurLine);\n out += input.slice(chunkStart, pos);\n break;\n }\n const ch = input.charCodeAt(pos);\n if (isStringEnd(type, ch, input, pos)) {\n out += input.slice(chunkStart, pos);\n break;\n }\n if (ch === charCodes.backslash) {\n out += input.slice(chunkStart, pos);\n const res = readEscapedChar(\n input,\n pos,\n lineStart,\n curLine,\n type === \"template\",\n errors,\n );\n if (res.ch === null && !firstInvalidLoc) {\n firstInvalidLoc = { pos, lineStart, curLine };\n } else {\n out += res.ch;\n }\n ({ pos, lineStart, curLine } = res);\n chunkStart = pos;\n } else if (\n ch === charCodes.lineSeparator ||\n ch === charCodes.paragraphSeparator\n ) {\n ++pos;\n ++curLine;\n lineStart = pos;\n } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n if (type === \"template\") {\n out += input.slice(chunkStart, pos) + \"\\n\";\n ++pos;\n if (\n ch === charCodes.carriageReturn &&\n input.charCodeAt(pos) === charCodes.lineFeed\n ) {\n ++pos;\n }\n ++curLine;\n chunkStart = lineStart = pos;\n } else {\n errors.unterminated(initialPos, initialLineStart, initialCurLine);\n }\n } else {\n ++pos;\n }\n }\n return {\n pos,\n str: out,\n firstInvalidLoc,\n lineStart,\n curLine,\n\n // TODO(Babel 8): This is only needed for backwards compatibility,\n // we can remove it.\n containsInvalid: !!firstInvalidLoc,\n };\n}\n\nfunction isStringEnd(\n type: \"single\" | \"double\" | \"template\",\n ch: number,\n input: string,\n pos: number,\n) {\n if (type === \"template\") {\n return (\n ch === charCodes.graveAccent ||\n (ch === charCodes.dollarSign &&\n input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n );\n }\n return (\n ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n CodePointErrorHandlers & {\n strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n };\n\nfunction readEscapedChar(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n inTemplate: boolean,\n errors: EscapedCharErrorHandlers,\n) {\n const throwOnInvalid = !inTemplate;\n pos++; // skip '\\'\n\n const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n const ch = input.charCodeAt(pos++);\n switch (ch) {\n case charCodes.lowercaseN:\n return res(\"\\n\");\n case charCodes.lowercaseR:\n return res(\"\\r\");\n case charCodes.lowercaseX: {\n let code;\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n 2,\n false,\n throwOnInvalid,\n errors,\n ));\n return res(code === null ? null : String.fromCharCode(code));\n }\n case charCodes.lowercaseU: {\n let code;\n ({ code, pos } = readCodePoint(\n input,\n pos,\n lineStart,\n curLine,\n throwOnInvalid,\n errors,\n ));\n return res(code === null ? null : String.fromCodePoint(code));\n }\n case charCodes.lowercaseT:\n return res(\"\\t\");\n case charCodes.lowercaseB:\n return res(\"\\b\");\n case charCodes.lowercaseV:\n return res(\"\\u000b\");\n case charCodes.lowercaseF:\n return res(\"\\f\");\n case charCodes.carriageReturn:\n if (input.charCodeAt(pos) === charCodes.lineFeed) {\n ++pos;\n }\n // fall through\n case charCodes.lineFeed:\n lineStart = pos;\n ++curLine;\n // fall through\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n return res(\"\");\n case charCodes.digit8:\n case charCodes.digit9:\n if (inTemplate) {\n return res(null);\n } else {\n errors.strictNumericEscape(pos - 1, lineStart, curLine);\n }\n // fall through\n default:\n if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n const startPos = pos - 1;\n const match = input.slice(startPos, pos + 2).match(/^[0-7]+/)!;\n\n let octalStr = match[0];\n\n let octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n pos += octalStr.length - 1;\n const next = input.charCodeAt(pos);\n if (\n octalStr !== \"0\" ||\n next === charCodes.digit8 ||\n next === charCodes.digit9\n ) {\n if (inTemplate) {\n return res(null);\n } else {\n errors.strictNumericEscape(startPos, lineStart, curLine);\n }\n }\n\n return res(String.fromCharCode(octal));\n }\n\n return res(String.fromCharCode(ch));\n }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n len: number,\n forceLen: boolean,\n throwOnInvalid: boolean,\n errors: HexCharErrorHandlers,\n) {\n const initialPos = pos;\n let n;\n ({ n, pos } = readInt(\n input,\n pos,\n lineStart,\n curLine,\n 16,\n len,\n forceLen,\n false,\n errors,\n /* bailOnError */ !throwOnInvalid,\n ));\n if (n === null) {\n if (throwOnInvalid) {\n errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n } else {\n pos = initialPos - 1;\n }\n }\n return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n numericSeparatorInEscapeSequence(\n pos: number,\n lineStart: number,\n curLine: number,\n ): void;\n unexpectedNumericSeparator(\n pos: number,\n lineStart: number,\n curLine: number,\n ): void;\n // It can return \"true\" to indicate that the error was handled\n // and the int parsing should continue.\n invalidDigit(\n pos: number,\n lineStart: number,\n curLine: number,\n radix: number,\n ): boolean;\n};\n\nexport function readInt(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n radix: number,\n len: number | undefined,\n forceLen: boolean,\n allowNumSeparator: boolean | \"bail\",\n errors: IntErrorHandlers,\n bailOnError: boolean,\n) {\n const start = pos;\n const forbiddenSiblings =\n radix === 16\n ? forbiddenNumericSeparatorSiblings.hex\n : forbiddenNumericSeparatorSiblings.decBinOct;\n const isAllowedSibling =\n radix === 16\n ? isAllowedNumericSeparatorSibling.hex\n : radix === 10\n ? isAllowedNumericSeparatorSibling.dec\n : radix === 8\n ? isAllowedNumericSeparatorSibling.oct\n : isAllowedNumericSeparatorSibling.bin;\n\n let invalid = false;\n let total = 0;\n\n for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n const code = input.charCodeAt(pos);\n let val;\n\n if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n const prev = input.charCodeAt(pos - 1);\n const next = input.charCodeAt(pos + 1);\n\n if (!allowNumSeparator) {\n if (bailOnError) return { n: null, pos };\n errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n } else if (\n Number.isNaN(next) ||\n !isAllowedSibling(next) ||\n forbiddenSiblings.has(prev) ||\n forbiddenSiblings.has(next)\n ) {\n if (bailOnError) return { n: null, pos };\n errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n }\n\n // Ignore this _ character\n ++pos;\n continue;\n }\n\n if (code >= charCodes.lowercaseA) {\n val = code - charCodes.lowercaseA + charCodes.lineFeed;\n } else if (code >= charCodes.uppercaseA) {\n val = code - charCodes.uppercaseA + charCodes.lineFeed;\n } else if (charCodes.isDigit(code)) {\n val = code - charCodes.digit0; // 0-9\n } else {\n val = Infinity;\n }\n if (val >= radix) {\n // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n // breaking the loop (this is used for error recovery).\n if (val <= 9 && bailOnError) {\n return { n: null, pos };\n } else if (\n val <= 9 &&\n errors.invalidDigit(pos, lineStart, curLine, radix)\n ) {\n val = 0;\n } else if (forceLen) {\n val = 0;\n invalid = true;\n } else {\n break;\n }\n }\n ++pos;\n total = total * radix + val;\n }\n if (pos === start || (len != null && pos - start !== len) || invalid) {\n return { n: null, pos };\n }\n\n return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n throwOnInvalid: boolean,\n errors: CodePointErrorHandlers,\n) {\n const ch = input.charCodeAt(pos);\n let code;\n\n if (ch === charCodes.leftCurlyBrace) {\n ++pos;\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n input.indexOf(\"}\", pos) - pos,\n true,\n throwOnInvalid,\n errors,\n ));\n ++pos;\n if (code !== null && code > 0x10ffff) {\n if (throwOnInvalid) {\n errors.invalidCodePoint(pos, lineStart, curLine);\n } else {\n return { code: null, pos };\n }\n }\n } else {\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n 4,\n false,\n throwOnInvalid,\n errors,\n ));\n }\n return { code, pos };\n}\n","/*:: declare var invariant; */\n\nimport type { Options } from \"../options\";\nimport {\n Position,\n SourceLocation,\n createPositionWithColumnOffset,\n} from \"../util/location\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments\";\nimport type * as N from \"../types\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier\";\nimport {\n tokenIsKeyword,\n tokenLabelName,\n tt,\n keywords as keywordTypes,\n type TokenType,\n} from \"./types\";\nimport { type TokContext } from \"./context\";\nimport {\n Errors,\n type ParseError,\n type ParseErrorConstructor,\n type RaiseProperties,\n} from \"../parse-error\";\nimport {\n lineBreakG,\n isNewLine,\n isWhitespace,\n skipWhiteSpace,\n skipWhiteSpaceInLine,\n} from \"../util/whitespace\";\nimport State from \"./state\";\nimport type { LookaheadState, DeferredStrictError } from \"./state\";\n\nimport {\n readInt,\n readCodePoint,\n readStringContents,\n type IntErrorHandlers,\n type CodePointErrorHandlers,\n type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n charCodes.lowercaseG,\n charCodes.lowercaseM,\n charCodes.lowercaseS,\n charCodes.lowercaseI,\n charCodes.lowercaseY,\n charCodes.lowercaseU,\n charCodes.lowercaseD,\n // This is only valid when using the regexpUnicodeSets plugin\n charCodes.lowercaseV,\n]);\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n constructor(state: State) {\n this.type = state.type;\n this.value = state.value;\n this.start = state.start;\n this.end = state.end;\n this.loc = new SourceLocation(state.startLoc, state.endLoc);\n }\n\n declare type: TokenType;\n declare value: any;\n declare start: number;\n declare end: number;\n declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n isLookahead: boolean;\n\n // Token store.\n tokens: Array = [];\n\n constructor(options: Options, input: string) {\n super();\n this.state = new State();\n this.state.init(options);\n this.input = input;\n this.length = input.length;\n this.isLookahead = false;\n }\n\n pushToken(token: Token | N.Comment) {\n // Pop out invalid tokens trapped by try-catch parsing.\n // Those parsing branches are mainly created by typescript and flow plugins.\n this.tokens.length = this.state.tokensLength;\n this.tokens.push(token);\n ++this.state.tokensLength;\n }\n\n // Move to the next token\n\n next(): void {\n this.checkKeywordEscapes();\n if (this.options.tokens) {\n this.pushToken(new Token(this.state));\n }\n\n this.state.lastTokStart = this.state.start;\n this.state.lastTokEndLoc = this.state.endLoc;\n this.state.lastTokStartLoc = this.state.startLoc;\n this.nextToken();\n }\n\n eat(type: TokenType): boolean {\n if (this.match(type)) {\n this.next();\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Whether current token matches given type\n */\n match(type: TokenType): boolean {\n return this.state.type === type;\n }\n\n /**\n * Create a LookaheadState from current parser state\n */\n createLookaheadState(state: State): LookaheadState {\n return {\n pos: state.pos,\n value: null,\n type: state.type,\n start: state.start,\n end: state.end,\n context: [this.curContext()],\n inType: state.inType,\n startLoc: state.startLoc,\n lastTokEndLoc: state.lastTokEndLoc,\n curLine: state.curLine,\n lineStart: state.lineStart,\n curPosition: state.curPosition,\n };\n }\n\n /**\n * lookahead peeks the next token, skipping changes to token context and\n * comment stack. For performance it returns a limited LookaheadState\n * instead of full parser state.\n *\n * The { column, line } Loc info is not included in lookahead since such usage\n * is rare. Although it may return other location properties e.g. `curLine` and\n * `lineStart`, these properties are not listed in the LookaheadState interface\n * and thus the returned value is _NOT_ reliable.\n *\n * The tokenizer should make best efforts to avoid using any parser state\n * other than those defined in LookaheadState\n */\n lookahead(): LookaheadState {\n const old = this.state;\n // @ts-expect-error For performance we use a simplified tokenizer state structure\n this.state = this.createLookaheadState(old);\n\n this.isLookahead = true;\n this.nextToken();\n this.isLookahead = false;\n\n const curr = this.state;\n this.state = old;\n return curr;\n }\n\n nextTokenStart(): number {\n return this.nextTokenStartSince(this.state.pos);\n }\n\n nextTokenStartSince(pos: number): number {\n skipWhiteSpace.lastIndex = pos;\n return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n }\n\n lookaheadCharCode(): number {\n return this.input.charCodeAt(this.nextTokenStart());\n }\n\n /**\n * Similar to nextToken, but it will stop at line break when it is seen before the next token\n *\n * @returns {number} position of the next token start or line break, whichever is seen first.\n * @memberof Tokenizer\n */\n nextTokenInLineStart(): number {\n return this.nextTokenInLineStartSince(this.state.pos);\n }\n\n nextTokenInLineStartSince(pos: number): number {\n skipWhiteSpaceInLine.lastIndex = pos;\n return skipWhiteSpaceInLine.test(this.input)\n ? skipWhiteSpaceInLine.lastIndex\n : pos;\n }\n\n /**\n * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n * seen before the next token\n *\n * @returns {number} char code of the next token start or line break, whichever is seen first.\n * @memberof Tokenizer\n */\n lookaheadInLineCharCode(): number {\n return this.input.charCodeAt(this.nextTokenInLineStart());\n }\n\n codePointAtPos(pos: number): number {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = this.input.charCodeAt(pos);\n if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n const trail = this.input.charCodeAt(pos);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n return cp;\n }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n setStrict(strict: boolean): void {\n this.state.strict = strict;\n if (strict) {\n // Throw an error for any string decimal escape found before/immediately\n // after a \"use strict\" directive. Strict mode will be set at parse\n // time for any literals that occur after the next node of the strict\n // directive.\n this.state.strictErrors.forEach(([toParseError, at]) =>\n this.raise(toParseError, { at }),\n );\n this.state.strictErrors.clear();\n }\n }\n\n curContext(): TokContext {\n return this.state.context[this.state.context.length - 1];\n }\n\n // Read a single token, updating the parser object's token-related properties.\n nextToken(): void {\n this.skipSpace();\n this.state.start = this.state.pos;\n if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n if (this.state.pos >= this.length) {\n this.finishToken(tt.eof);\n return;\n }\n\n this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n }\n\n // Skips a block comment, whose end is marked by commentEnd.\n // *-/ is used by the Flow plugin, when parsing block comments nested\n // inside Flow comments.\n skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n let startLoc;\n if (!this.isLookahead) startLoc = this.state.curPosition();\n const start = this.state.pos;\n const end = this.input.indexOf(commentEnd, start + 2);\n if (end === -1) {\n // We have to call this again here because startLoc may not be set...\n // This seems to be for performance reasons:\n // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n throw this.raise(Errors.UnterminatedComment, {\n at: this.state.curPosition(),\n });\n }\n\n this.state.pos = end + commentEnd.length;\n lineBreakG.lastIndex = start + 2;\n while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n ++this.state.curLine;\n this.state.lineStart = lineBreakG.lastIndex;\n }\n\n // If we are doing a lookahead right now we need to advance the position (above code)\n // but we do not want to push the comment to the state.\n if (this.isLookahead) return;\n /*:: invariant(startLoc) */\n\n const comment: N.CommentBlock = {\n type: \"CommentBlock\",\n value: this.input.slice(start + 2, end),\n start,\n end: end + commentEnd.length,\n loc: new SourceLocation(startLoc, this.state.curPosition()),\n };\n if (this.options.tokens) this.pushToken(comment);\n return comment;\n }\n\n skipLineComment(startSkip: number): N.CommentLine | undefined {\n const start = this.state.pos;\n let startLoc;\n if (!this.isLookahead) startLoc = this.state.curPosition();\n let ch = this.input.charCodeAt((this.state.pos += startSkip));\n if (this.state.pos < this.length) {\n while (!isNewLine(ch) && ++this.state.pos < this.length) {\n ch = this.input.charCodeAt(this.state.pos);\n }\n }\n\n // If we are doing a lookahead right now we need to advance the position (above code)\n // but we do not want to push the comment to the state.\n if (this.isLookahead) return;\n /*:: invariant(startLoc) */\n\n const end = this.state.pos;\n const value = this.input.slice(start + startSkip, end);\n\n const comment: N.CommentLine = {\n type: \"CommentLine\",\n value,\n start,\n end,\n loc: new SourceLocation(startLoc, this.state.curPosition()),\n };\n if (this.options.tokens) this.pushToken(comment);\n return comment;\n }\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n skipSpace(): void {\n const spaceStart = this.state.pos;\n const comments = [];\n loop: while (this.state.pos < this.length) {\n const ch = this.input.charCodeAt(this.state.pos);\n switch (ch) {\n case charCodes.space:\n case charCodes.nonBreakingSpace:\n case charCodes.tab:\n ++this.state.pos;\n break;\n case charCodes.carriageReturn:\n if (\n this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n ) {\n ++this.state.pos;\n }\n // fall through\n case charCodes.lineFeed:\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n ++this.state.pos;\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n break;\n\n case charCodes.slash:\n switch (this.input.charCodeAt(this.state.pos + 1)) {\n case charCodes.asterisk: {\n const comment = this.skipBlockComment(\"*/\");\n if (comment !== undefined) {\n this.addComment(comment);\n if (this.options.attachComment) comments.push(comment);\n }\n break;\n }\n\n case charCodes.slash: {\n const comment = this.skipLineComment(2);\n if (comment !== undefined) {\n this.addComment(comment);\n if (this.options.attachComment) comments.push(comment);\n }\n break;\n }\n\n default:\n break loop;\n }\n break;\n\n default:\n if (isWhitespace(ch)) {\n ++this.state.pos;\n } else if (\n ch === charCodes.dash &&\n !this.inModule &&\n this.options.annexB\n ) {\n const pos = this.state.pos;\n if (\n this.input.charCodeAt(pos + 1) === charCodes.dash &&\n this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n (spaceStart === 0 || this.state.lineStart > spaceStart)\n ) {\n // A `-->` line comment\n const comment = this.skipLineComment(3);\n if (comment !== undefined) {\n this.addComment(comment);\n if (this.options.attachComment) comments.push(comment);\n }\n } else {\n break loop;\n }\n } else if (\n ch === charCodes.lessThan &&\n !this.inModule &&\n this.options.annexB\n ) {\n const pos = this.state.pos;\n if (\n this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n this.input.charCodeAt(pos + 2) === charCodes.dash &&\n this.input.charCodeAt(pos + 3) === charCodes.dash\n ) {\n // ` isRef(x) ? x.value = y : x = y + const { right: rVal, operator } = parent; + const rExp = rawExp.slice(rVal.start - 1, rVal.end - 1); + const rExpString = stringifyExpression(processExpression(createSimpleExpression(rExp, false), context, false, false, knownIds)); + return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\n` : ``} ? ${raw}.value ${operator} ${rExpString} : ${raw}`; + } + else if (isUpdateArg) { + // make id replace parent in the code range so the raw update operator + // is removed + id.start = parent.start; + id.end = parent.end; + const { prefix: isPrefix, operator } = parent; + const prefix = isPrefix ? operator : ``; + const postfix = isPrefix ? `` : operator; + // let binding. + // x++ --> isRef(a) ? a.value++ : a++ + return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\n` : ``} ? ${prefix}${raw}.value${postfix} : ${prefix}${raw}${postfix}`; + } + else if (isDestructureAssignment) { + // TODO + // let binding in a destructure assignment - it's very tricky to + // handle both possible cases here without altering the original + // structure of the code, so we just assume it's not a ref here + // for now + return raw; + } + else { + return `${context.helperString(UNREF)}(${raw})`; + } + } + else if (type === "props" /* BindingTypes.PROPS */) { + // use __props which is generated by compileScript so in ts mode + // it gets correct type + return shared.genPropsAccessExp(raw); + } + else if (type === "props-aliased" /* BindingTypes.PROPS_ALIASED */) { + // prop with a different local alias (from defineProps() destructure) + return shared.genPropsAccessExp(bindingMetadata.__propsAliases[raw]); + } + } + else { + if (type && type.startsWith('setup')) { + // setup bindings in non-inline mode + return `$setup.${raw}`; + } + else if (type === "props-aliased" /* BindingTypes.PROPS_ALIASED */) { + return `$props['${bindingMetadata.__propsAliases[raw]}']`; + } + else if (type) { + return `$${type}.${raw}`; + } + } + // fallback to ctx + return `_ctx.${raw}`; + }; + // fast path if expression is a simple identifier. + const rawExp = node.content; + // bail constant on parens (function invocation) and dot (member access) + const bailConstant = rawExp.indexOf(`(`) > -1 || rawExp.indexOf('.') > 0; + if (isSimpleIdentifier(rawExp)) { + const isScopeVarReference = context.identifiers[rawExp]; + const isAllowedGlobal = shared.isGloballyWhitelisted(rawExp); + const isLiteral = isLiteralWhitelisted(rawExp); + if (!asParams && !isScopeVarReference && !isAllowedGlobal && !isLiteral) { + // const bindings exposed from setup can be skipped for patching but + // cannot be hoisted to module scope + if (bindingMetadata[node.content] === "setup-const" /* BindingTypes.SETUP_CONST */) { + node.constType = 1 /* ConstantTypes.CAN_SKIP_PATCH */; + } + node.content = rewriteIdentifier(rawExp); + } + else if (!isScopeVarReference) { + if (isLiteral) { + node.constType = 3 /* ConstantTypes.CAN_STRINGIFY */; + } + else { + node.constType = 2 /* ConstantTypes.CAN_HOIST */; + } + } + return node; + } + let ast; + // exp needs to be parsed differently: + // 1. Multiple inline statements (v-on, with presence of `;`): parse as raw + // exp, but make sure to pad with spaces for consistent ranges + // 2. Expressions: wrap with parens (for e.g. object expressions) + // 3. Function arguments (v-for, v-slot): place in a function argument position + const source = asRawStatements + ? ` ${rawExp} ` + : `(${rawExp})${asParams ? `=>{}` : ``}`; + try { + ast = parser.parse(source, { + plugins: context.expressionPlugins + }).program; + } + catch (e) { + context.onError(createCompilerError(45 /* ErrorCodes.X_INVALID_EXPRESSION */, node.loc, undefined, e.message)); + return node; + } + const ids = []; + const parentStack = []; + const knownIds = Object.create(context.identifiers); + walkIdentifiers(ast, (node, parent, _, isReferenced, isLocal) => { + if (isStaticPropertyKey(node, parent)) { + return; + } + // v2 wrapped filter call + if (node.name.startsWith('_filter_')) { + return; + } + const needPrefix = isReferenced && canPrefix(node); + if (needPrefix && !isLocal) { + if (isStaticProperty(parent) && parent.shorthand) { + node.prefix = `${node.name}: `; + } + node.name = rewriteIdentifier(node.name, parent, node); + ids.push(node); + } + else { + // The identifier is considered constant unless it's pointing to a + // local scope variable (a v-for alias, or a v-slot prop) + if (!(needPrefix && isLocal) && !bailConstant) { + node.isConstant = true; + } + // also generate sub-expressions for other identifiers for better + // source map support. (except for property keys which are static) + ids.push(node); + } + }, true, // invoke on ALL identifiers + parentStack, knownIds); + // We break up the compound expression into an array of strings and sub + // expressions (for identifiers that have been prefixed). In codegen, if + // an ExpressionNode has the `.children` property, it will be used instead of + // `.content`. + const children = []; + ids.sort((a, b) => a.start - b.start); + ids.forEach((id, i) => { + // range is offset by -1 due to the wrapping parens when parsed + const start = id.start - 1; + const end = id.end - 1; + const last = ids[i - 1]; + const leadingText = rawExp.slice(last ? last.end - 1 : 0, start); + if (leadingText.length || id.prefix) { + children.push(leadingText + (id.prefix || ``)); + } + const source = rawExp.slice(start, end); + children.push(createSimpleExpression(id.name, false, { + source, + start: advancePositionWithClone(node.loc.start, source, start), + end: advancePositionWithClone(node.loc.start, source, end) + }, id.isConstant ? 3 /* ConstantTypes.CAN_STRINGIFY */ : 0 /* ConstantTypes.NOT_CONSTANT */)); + if (i === ids.length - 1 && end < rawExp.length) { + children.push(rawExp.slice(end)); + } + }); + let ret; + if (children.length) { + ret = createCompoundExpression(children, node.loc); + } + else { + ret = node; + ret.constType = bailConstant + ? 0 /* ConstantTypes.NOT_CONSTANT */ + : 3 /* ConstantTypes.CAN_STRINGIFY */; + } + ret.identifiers = Object.keys(knownIds); + return ret; +} +function canPrefix(id) { + // skip whitelisted globals + if (shared.isGloballyWhitelisted(id.name)) { + return false; + } + // special case for webpack compilation + if (id.name === 'require') { + return false; + } + return true; +} +function stringifyExpression(exp) { + if (shared.isString(exp)) { + return exp; + } + else if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) { + return exp.content; + } + else { + return exp.children + .map(stringifyExpression) + .join(''); + } +} + +const transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => { + return processIf(node, dir, context, (ifNode, branch, isRoot) => { + // #1587: We need to dynamically increment the key based on the current + // node's sibling nodes, since chained v-if/else branches are + // rendered at the same depth + const siblings = context.parent.children; + let i = siblings.indexOf(ifNode); + let key = 0; + while (i-- >= 0) { + const sibling = siblings[i]; + if (sibling && sibling.type === 9 /* NodeTypes.IF */) { + key += sibling.branches.length; + } + } + // Exit callback. Complete the codegenNode when all children have been + // transformed. + return () => { + if (isRoot) { + ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context); + } + else { + // attach this branch's codegen node to the v-if root. + const parentCondition = getParentCondition(ifNode.codegenNode); + parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context); + } + }; + }); +}); +// target-agnostic transform used for both Client and SSR +function processIf(node, dir, context, processCodegen) { + if (dir.name !== 'else' && + (!dir.exp || !dir.exp.content.trim())) { + const loc = dir.exp ? dir.exp.loc : node.loc; + context.onError(createCompilerError(28 /* ErrorCodes.X_V_IF_NO_EXPRESSION */, dir.loc)); + dir.exp = createSimpleExpression(`true`, false, loc); + } + if (context.prefixIdentifiers && dir.exp) { + // dir.exp can only be simple expression because vIf transform is applied + // before expression transform. + dir.exp = processExpression(dir.exp, context); + } + if (dir.name === 'if') { + const branch = createIfBranch(node, dir); + const ifNode = { + type: 9 /* NodeTypes.IF */, + loc: node.loc, + branches: [branch] + }; + context.replaceNode(ifNode); + if (processCodegen) { + return processCodegen(ifNode, branch, true); + } + } + else { + // locate the adjacent v-if + const siblings = context.parent.children; + const comments = []; + let i = siblings.indexOf(node); + while (i-- >= -1) { + const sibling = siblings[i]; + if (sibling && sibling.type === 3 /* NodeTypes.COMMENT */) { + context.removeNode(sibling); + comments.unshift(sibling); + continue; + } + if (sibling && + sibling.type === 2 /* NodeTypes.TEXT */ && + !sibling.content.trim().length) { + context.removeNode(sibling); + continue; + } + if (sibling && sibling.type === 9 /* NodeTypes.IF */) { + // Check if v-else was followed by v-else-if + if (dir.name === 'else-if' && + sibling.branches[sibling.branches.length - 1].condition === undefined) { + context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc)); + } + // move the node to the if node's branches + context.removeNode(); + const branch = createIfBranch(node, dir); + if (comments.length && + // #3619 ignore comments if the v-if is direct child of + !(context.parent && + context.parent.type === 1 /* NodeTypes.ELEMENT */ && + isBuiltInType(context.parent.tag, 'transition'))) { + branch.children = [...comments, ...branch.children]; + } + // check if user is forcing same key on different branches + { + const key = branch.userKey; + if (key) { + sibling.branches.forEach(({ userKey }) => { + if (isSameKey(userKey, key)) { + context.onError(createCompilerError(29 /* ErrorCodes.X_V_IF_SAME_KEY */, branch.userKey.loc)); + } + }); + } + } + sibling.branches.push(branch); + const onExit = processCodegen && processCodegen(sibling, branch, false); + // since the branch was removed, it will not be traversed. + // make sure to traverse here. + traverseNode(branch, context); + // call on exit + if (onExit) + onExit(); + // make sure to reset currentNode after traversal to indicate this + // node has been removed. + context.currentNode = null; + } + else { + context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc)); + } + break; + } + } +} +function createIfBranch(node, dir) { + const isTemplateIf = node.tagType === 3 /* ElementTypes.TEMPLATE */; + return { + type: 10 /* NodeTypes.IF_BRANCH */, + loc: node.loc, + condition: dir.name === 'else' ? undefined : dir.exp, + children: isTemplateIf && !findDir(node, 'for') ? node.children : [node], + userKey: findProp(node, `key`), + isTemplateIf + }; +} +function createCodegenNodeForBranch(branch, keyIndex, context) { + if (branch.condition) { + return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), + // make sure to pass in asBlock: true so that the comment node call + // closes the current block. + createCallExpression(context.helper(CREATE_COMMENT), [ + '"v-if"' , + 'true' + ])); + } + else { + return createChildrenCodegenNode(branch, keyIndex, context); + } +} +function createChildrenCodegenNode(branch, keyIndex, context) { + const { helper } = context; + const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* ConstantTypes.CAN_HOIST */)); + const { children } = branch; + const firstChild = children[0]; + const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* NodeTypes.ELEMENT */; + if (needFragmentWrapper) { + if (children.length === 1 && firstChild.type === 11 /* NodeTypes.FOR */) { + // optimize away nested fragments when child is a ForNode + const vnodeCall = firstChild.codegenNode; + injectProp(vnodeCall, keyProperty, context); + return vnodeCall; + } + else { + let patchFlag = 64 /* PatchFlags.STABLE_FRAGMENT */; + let patchFlagText = shared.PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */]; + // check if the fragment actually contains a single valid child with + // the rest being comments + if (!branch.isTemplateIf && + children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */).length === 1) { + patchFlag |= 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */; + patchFlagText += `, ${shared.PatchFlagNames[2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]}`; + } + return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, false, false /* isComponent */, branch.loc); + } + } + else { + const ret = firstChild.codegenNode; + const vnodeCall = getMemoedVNodeCall(ret); + // Change createVNode to createBlock. + if (vnodeCall.type === 13 /* NodeTypes.VNODE_CALL */) { + makeBlock(vnodeCall, context); + } + // inject branch key + injectProp(vnodeCall, keyProperty, context); + return ret; + } +} +function isSameKey(a, b) { + if (!a || a.type !== b.type) { + return false; + } + if (a.type === 6 /* NodeTypes.ATTRIBUTE */) { + if (a.value.content !== b.value.content) { + return false; + } + } + else { + // directive + const exp = a.exp; + const branchExp = b.exp; + if (exp.type !== branchExp.type) { + return false; + } + if (exp.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ || + exp.isStatic !== branchExp.isStatic || + exp.content !== branchExp.content) { + return false; + } + } + return true; +} +function getParentCondition(node) { + while (true) { + if (node.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) { + if (node.alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) { + node = node.alternate; + } + else { + return node; + } + } + else if (node.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */) { + node = node.value; + } + } +} + +const transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => { + const { helper, removeHelper } = context; + return processFor(node, dir, context, forNode => { + // create the loop render function expression now, and add the + // iterator on exit after all children have been traversed + const renderExp = createCallExpression(helper(RENDER_LIST), [ + forNode.source + ]); + const isTemplate = isTemplateNode(node); + const memo = findDir(node, 'memo'); + const keyProp = findProp(node, `key`); + const keyExp = keyProp && + (keyProp.type === 6 /* NodeTypes.ATTRIBUTE */ + ? createSimpleExpression(keyProp.value.content, true) + : keyProp.exp); + const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null; + if (isTemplate) { + // #2085 / #5288 process :key and v-memo expressions need to be + // processed on `
-

商品列表

-
-
-
-

{{ item.name}}

-
-

价格:{{item.money}}

- -

剩余数量:{{item.numGame-item.buy}}

- -
- - -
-
-
-

商品列表

-
-
-
-

{{ games.name}}

-
-

价格:{{games.money}}

- -

剩余数量:{{100-games.buy}}

-
-
-

库存为0

-
- -
-
-