@vesk/compiler 0.2.41 → 0.2.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +17 -1
- package/dist/client-codegen.d.ts +17 -0
- package/dist/client-codegen.d.ts.map +1 -1
- package/dist/client-codegen.js +219 -16
- package/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +15 -0
- package/dist/ir-generator.d.ts.map +1 -1
- package/dist/ir-generator.js +303 -199
- package/dist/ir.d.ts +22 -1
- package/dist/ir.d.ts.map +1 -1
- package/dist/ir.js +18 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +25 -1
- package/dist/precompile-runtime.d.ts.map +1 -1
- package/dist/precompile-runtime.js +4 -0
- package/dist/precompile.js +6 -2
- package/dist/server-jsgen.d.ts.map +1 -1
- package/dist/server-jsgen.js +8 -1
- package/dist/server-render.d.ts.map +1 -1
- package/dist/server-render.js +9 -2
- package/dist/server-utils.d.ts.map +1 -1
- package/dist/server-utils.js +33 -5
- package/dist/tokens.d.ts +28 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +200 -19
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/vesk-plugin.d.ts +2 -0
- package/dist/vesk-plugin.d.ts.map +1 -1
- package/dist/vesk-plugin.js +28 -1
- package/dist/vsk-imports.d.ts +51 -0
- package/dist/vsk-imports.d.ts.map +1 -1
- package/dist/vsk-imports.js +106 -9
- package/package.json +2 -2
package/dist/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAOtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,cAAc,EAAE,CAAA;CAAE,CA4LpG;AAED,wBAAgB,gBAAgB,IAAI,OAAO,KAAK,CAAC,MAAM,CAEtD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAuEzE"}
|
package/dist/parser.js
CHANGED
|
@@ -3,6 +3,7 @@ import { tsPlugin } from './acorn-ts-plugin/index.js';
|
|
|
3
3
|
import { VeskParserPlugin } from '@vesk/compiler/src/vesk-plugin';
|
|
4
4
|
import { blankComments, containsForOfIn } from '@vesk/compiler/src/scan';
|
|
5
5
|
import { VeskError, codeFrame } from '@vesk/compiler/src/errors';
|
|
6
|
+
import { findSpecifierExports, hasTopLevelValueDeclaration } from '@vesk/compiler/src/tokens';
|
|
6
7
|
function isIdentChar(code) {
|
|
7
8
|
return ((code >= 97 && code <= 122) || (code >= 65 && code <= 90) || (code >= 48 && code <= 57) || code === 95 || code === 36);
|
|
8
9
|
}
|
|
@@ -258,8 +259,28 @@ export function createBaseParser() {
|
|
|
258
259
|
export function parse(source, options = {}) {
|
|
259
260
|
const ParserClass = createBaseParser();
|
|
260
261
|
const { code, annotations } = preprocessForClauses(blankComments(source));
|
|
262
|
+
// Acorn validates that every `export { X }` names a real top-level binding.
|
|
263
|
+
// A `.vsk` component is a registry entry, not a binding, so acorn rejects
|
|
264
|
+
// `export { MyComponent }`. Remove only those specifier lists — one whose
|
|
265
|
+
// local IS a real declaration keeps native module semantics — and carry the
|
|
266
|
+
// pairs on the AST; the IR generator turns them into registry aliases.
|
|
267
|
+
const vskSource = !options.filename || String(options.filename).endsWith('.vsk');
|
|
268
|
+
const specifierExports = vskSource
|
|
269
|
+
? findSpecifierExports(code).filter((e) => !hasTopLevelValueDeclaration(code, e.local))
|
|
270
|
+
: [];
|
|
271
|
+
let parseable = code;
|
|
272
|
+
if (specifierExports.length > 0) {
|
|
273
|
+
const edits = specifierExports
|
|
274
|
+
.map((e) => code.slice(e.start, e.end))
|
|
275
|
+
.map((text) => text.split('').map((ch) => (ch === '\n' ? '\n' : ' ')).join(''));
|
|
276
|
+
let cut = 0;
|
|
277
|
+
for (const spec of specifierExports) {
|
|
278
|
+
const blanked = edits[cut++];
|
|
279
|
+
parseable = parseable.slice(0, spec.start) + blanked + parseable.slice(spec.end);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
261
282
|
try {
|
|
262
|
-
const ast = ParserClass.parse(
|
|
283
|
+
const ast = ParserClass.parse(parseable, {
|
|
263
284
|
ecmaVersion: 'latest',
|
|
264
285
|
sourceType: 'module',
|
|
265
286
|
locations: true,
|
|
@@ -269,6 +290,9 @@ export function parse(source, options = {}) {
|
|
|
269
290
|
if (annotations.length > 0) {
|
|
270
291
|
ast.__vskAnnotations = annotations;
|
|
271
292
|
}
|
|
293
|
+
if (specifierExports.length > 0) {
|
|
294
|
+
ast.__vskSpecifierExports = specifierExports.map((e) => ({ local: e.local, exported: e.exported }));
|
|
295
|
+
}
|
|
272
296
|
return ast;
|
|
273
297
|
}
|
|
274
298
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"precompile-runtime.d.ts","sourceRoot":"","sources":["../src/precompile-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"precompile-runtime.d.ts","sourceRoot":"","sources":["../src/precompile-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA0BlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAe9F,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAExD,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IACnB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,2CAA2C;IAC3C,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,iEAAiE;IACjE,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,2CAA2C;IAC3C,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,6EAA6E;IAC7E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAqCD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiBhD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0BlD;AAgHD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,CAE7E"}
|
|
@@ -2,6 +2,7 @@ import { createRequire } from 'node:module';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { Expression, IRRoot, ComponentIR, StaticNode, TextNode, DynamicBinding, OpaqueDynamicRegion, MapRegion, ComponentRef, ComponentCall, SlotNode, WhileLoop, SwitchCase, SwitchBlock, TryCatch, TrackDecl, RuntimeStatement, ForLoop, ServerBlock, ClientBlock, HeadBlock, } from '@vesk/compiler/src/ir';
|
|
4
4
|
import { loadRuntimeImports, evalTopLevelCode } from '@vesk/compiler/src/server-utils';
|
|
5
|
+
import { applyVskRegistryAliases, vskRegistryAliases } from '@vesk/compiler/src/vsk-imports';
|
|
5
6
|
// ---------------------------------------------------------------------------
|
|
6
7
|
// IR serialization.
|
|
7
8
|
// ---------------------------------------------------------------------------
|
|
@@ -199,6 +200,9 @@ function hydrateFile(plan, seen) {
|
|
|
199
200
|
__vesk[key] = subResult.__vesk[key];
|
|
200
201
|
}
|
|
201
202
|
}
|
|
203
|
+
// `export { A as B }` / `import { A as B } from './x.vsk'` are registry
|
|
204
|
+
// aliases, not emitted JS — register them once every sub-file has merged in.
|
|
205
|
+
applyVskRegistryAliases(componentMap, vskRegistryAliases(plan.runtimeImports || [], ir.exportAliases));
|
|
202
206
|
return { ir, componentMap, __vesk };
|
|
203
207
|
}
|
|
204
208
|
/**
|
package/dist/precompile.js
CHANGED
|
@@ -5,7 +5,7 @@ import { generateIR } from '@vesk/compiler/src/ir-generator';
|
|
|
5
5
|
import { setVskHydrate } from '@vesk/compiler/src/server-utils';
|
|
6
6
|
import { buildComponentEntries } from '@vesk/compiler/src/server-jsgen';
|
|
7
7
|
import { transformTopLevelForActions } from '@vesk/compiler/src/actions';
|
|
8
|
-
import { collectVskImportPaths } from '@vesk/compiler/src/vsk-imports';
|
|
8
|
+
import { collectVskImportPaths, collectVskReexportPaths } from '@vesk/compiler/src/vsk-imports';
|
|
9
9
|
import { inlineMdImportsFrom, guessProjectRoots } from '@vesk/compiler/src/md-inline';
|
|
10
10
|
import { collectModuleBundle, } from '@vesk/compiler/src/module-imports';
|
|
11
11
|
import { irToJSON } from '@vesk/compiler/src/precompile-runtime';
|
|
@@ -50,7 +50,11 @@ function precompileFileInternal(source, sourcePath, seenImportFiles) {
|
|
|
50
50
|
const bindings = sourcePath !== undefined ? collectModuleBundle(ir.imports, dirname(sourcePath), collector) : [];
|
|
51
51
|
const subFiles = [];
|
|
52
52
|
if (sourcePath !== undefined) {
|
|
53
|
-
|
|
53
|
+
const vskPaths = [
|
|
54
|
+
...collectVskImportPaths(ir.imports, sourcePath),
|
|
55
|
+
...collectVskReexportPaths(ir.reexportSources, sourcePath),
|
|
56
|
+
];
|
|
57
|
+
for (const importPath of vskPaths) {
|
|
54
58
|
if (seenImportFiles.has(importPath))
|
|
55
59
|
continue;
|
|
56
60
|
seenImportFiles.add(importPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-jsgen.d.ts","sourceRoot":"","sources":["../src/server-jsgen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAOzE,OAAO,EAAkG,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"server-jsgen.d.ts","sourceRoot":"","sources":["../src/server-jsgen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAOzE,OAAO,EAAkG,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAoDrK,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,OAAO,GAAE,OAAe,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,CAgEjJ;AA4XD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAqD1F;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAkCzE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAYhG"}
|
package/dist/server-jsgen.js
CHANGED
|
@@ -3,6 +3,7 @@ import { isStaticIR, collectTrackedNames, transformTracked, transformTrackedInit
|
|
|
3
3
|
import { unwrapTrackCall, stripTrackGeneric, hasTopLevelComma, skipWhitespace, findBalancedEnd, startsWithIdentifier } from '@vesk/compiler/src/scan';
|
|
4
4
|
import { escapeHtml, indent, exprJS, extractTopLevelNames, extractRuntimeNames, buildParamInit, __vskHydrate, __vskMarkerless, __vskImportedNames, setVskImportedNames, setVskForceClaim, takeVskForceClaim, nextVskId, } from '@vesk/compiler/src/server-utils';
|
|
5
5
|
import { localValueImportNames } from '@vesk/compiler/src/module-imports';
|
|
6
|
+
import { vskImportValueNames } from '@vesk/compiler/src/vsk-imports';
|
|
6
7
|
// Hydrate-mode component-boundary wrapper. Each server-rendered component call
|
|
7
8
|
// is preceded by a `<!--vsk-->` marker and a single container element: the
|
|
8
9
|
// hydration walker adopts that element as the component root
|
|
@@ -580,7 +581,13 @@ export function buildComponentEntries(irRoot) {
|
|
|
580
581
|
const importedNames = new Set([...runtimeNames, ...localValueNames, ...topValueNames]);
|
|
581
582
|
const hasTracked = irRoot.components.some((c) => c.body.some((n) => n instanceof TrackDecl));
|
|
582
583
|
const extraNames = hasTracked ? ['get', 'set', 'track'] : [];
|
|
583
|
-
|
|
584
|
+
// Values exported by a `.vsk` module (`export const MAX = 10`) are hoisted
|
|
585
|
+
// into this file's `__vesk` and must be destructured into component scope.
|
|
586
|
+
// They are excluded from `importedNames` above: a name imported from a `.vsk`
|
|
587
|
+
// file may name a component, and components must keep resolving through the
|
|
588
|
+
// registry rather than a scope local.
|
|
589
|
+
const vskValueNames = vskImportValueNames(irRoot.imports);
|
|
590
|
+
const allNames = [...new Set([...runtimeNames, ...topNames, ...extraNames, ...localValueNames, ...vskValueNames])];
|
|
584
591
|
const scopeDecl = allNames.length > 0 ? `const { ${allNames.join(', ')} } = __vesk;\n` : '';
|
|
585
592
|
setVskImportedNames(importedNames);
|
|
586
593
|
const entries = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-render.d.ts","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAqB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AA6BvJ,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,CAEhG;
|
|
1
|
+
{"version":3,"file":"server-render.d.ts","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"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"}
|
package/dist/server-render.js
CHANGED
|
@@ -8,7 +8,7 @@ import { isStatic, prettifyHtml, resetVskState, loadRuntimeImports, evalTopLevel
|
|
|
8
8
|
import { renderHeadHtml, mergeHeadHtml } from '@vesk/compiler/src/server-head';
|
|
9
9
|
import { buildComponentMap } from '@vesk/compiler/src/server-jsgen';
|
|
10
10
|
import { transformTopLevelForActions } from '@vesk/compiler/src/actions';
|
|
11
|
-
import { collectVskImportPaths } from '@vesk/compiler/src/vsk-imports';
|
|
11
|
+
import { collectVskImportPaths, collectVskReexportPaths, vskRegistryAliases, applyVskRegistryAliases } from '@vesk/compiler/src/vsk-imports';
|
|
12
12
|
import { inlineMdImportsFrom, guessProjectRoots } from '@vesk/compiler/src/md-inline';
|
|
13
13
|
import { withSsrStore, ssrSink } from '@vesk/compiler/src/ssr-store';
|
|
14
14
|
import { applyLocalModuleImports } from '@vesk/compiler/src/module-imports';
|
|
@@ -36,7 +36,11 @@ function compileFileInternal(source, sourcePath, seenImportFiles) {
|
|
|
36
36
|
const __vesk = loadRuntimeImports(ir.imports);
|
|
37
37
|
applyLocalModuleImports(__vesk, ir.imports, sourcePath);
|
|
38
38
|
if (sourcePath) {
|
|
39
|
-
|
|
39
|
+
const vskPaths = [
|
|
40
|
+
...collectVskImportPaths(ir.imports, sourcePath),
|
|
41
|
+
...collectVskReexportPaths(ir.reexportSources, sourcePath),
|
|
42
|
+
];
|
|
43
|
+
for (const importPath of vskPaths) {
|
|
40
44
|
if (seenImportFiles.has(importPath))
|
|
41
45
|
continue;
|
|
42
46
|
seenImportFiles.add(importPath);
|
|
@@ -67,6 +71,9 @@ function compileFileInternal(source, sourcePath, seenImportFiles) {
|
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
evalTopLevelCode(transformTopLevelForActions(ir.topLevelCode, 'server'), __vesk);
|
|
74
|
+
// `export { A as B }` and `import { A as B } from './x.vsk'` are registry
|
|
75
|
+
// aliases, not emitted JS — register them once every sub-file has merged in.
|
|
76
|
+
applyVskRegistryAliases(componentMap, vskRegistryAliases(ir.imports, ir.exportAliases));
|
|
70
77
|
// Sub-file components arrive pre-scoped from the recursive call below;
|
|
71
78
|
// scope the remaining (own) components to this file's bindings.
|
|
72
79
|
for (const name of ownComponentNames) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../src/server-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../src/server-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/server-utils.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as __defaultRuntimeModule from '@vesk/runtime/src/index-server';
|
|
|
3
3
|
import { parse } from '@vesk/compiler/src/parser';
|
|
4
4
|
import { generateIR } from '@vesk/compiler/src/ir-generator';
|
|
5
5
|
import { htmlTagName, htmlTagEnd } from '@vesk/compiler/src/scan';
|
|
6
|
-
import { importModuleTarget, extractImportNames } from '@vesk/compiler/src/tokens';
|
|
6
|
+
import { importModuleTarget, extractImportNames, stripTrackDeclMarkers } from '@vesk/compiler/src/tokens';
|
|
7
7
|
const VOID_ELEMENTS = new Set([
|
|
8
8
|
'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr',
|
|
9
9
|
]);
|
|
@@ -1124,6 +1124,18 @@ export function loadRuntimeImports(importStrs) {
|
|
|
1124
1124
|
}
|
|
1125
1125
|
return {};
|
|
1126
1126
|
}
|
|
1127
|
+
/** Binding name of one TrackDecl pattern element, or null for a hole. */
|
|
1128
|
+
function patternElementName(element) {
|
|
1129
|
+
if (!element)
|
|
1130
|
+
return null;
|
|
1131
|
+
if (element.type === 'Identifier')
|
|
1132
|
+
return element.name;
|
|
1133
|
+
if (element.type === 'AssignmentPattern' && element.left)
|
|
1134
|
+
return patternElementName(element.left);
|
|
1135
|
+
if (element.type === 'RestElement' && element.argument)
|
|
1136
|
+
return patternElementName(element.argument);
|
|
1137
|
+
return null;
|
|
1138
|
+
}
|
|
1127
1139
|
export function evalTopLevelCode(topLevelCode, __vesk) {
|
|
1128
1140
|
for (const code of topLevelCode) {
|
|
1129
1141
|
const ast = tryParseTopLevel(code);
|
|
@@ -1135,9 +1147,19 @@ export function evalTopLevelCode(topLevelCode, __vesk) {
|
|
|
1135
1147
|
continue;
|
|
1136
1148
|
if (target.type === 'VariableDeclaration') {
|
|
1137
1149
|
for (const d of target.declarations) {
|
|
1138
|
-
if (!d.id
|
|
1150
|
+
if (!d.id)
|
|
1151
|
+
continue;
|
|
1152
|
+
// A TrackDecl declarator's `id` is the parser's `lazy` ArrayPattern
|
|
1153
|
+
// (`const &[count, rawCell] = track(0)`), not an Identifier. Its
|
|
1154
|
+
// initializer yields a TUPLE, so each name takes its own index —
|
|
1155
|
+
// the whole value is not bound to every name.
|
|
1156
|
+
const isTrack = d.id.type === 'ArrayPattern' && d.id.lazy === true;
|
|
1157
|
+
const names = isTrack
|
|
1158
|
+
? (d.id.elements || []).map(patternElementName)
|
|
1159
|
+
: d.id.type === 'Identifier' ? [d.id.name] : [];
|
|
1160
|
+
if (names.every((n) => n === null))
|
|
1139
1161
|
continue;
|
|
1140
|
-
const initSrc = d.init ? code.slice(d.init.start, d.init.end) : 'undefined';
|
|
1162
|
+
const initSrc = d.init ? stripTrackDeclMarkers(code.slice(d.init.start, d.init.end), d.init.start, d.init) : 'undefined';
|
|
1141
1163
|
try {
|
|
1142
1164
|
const keys = Object.keys(__vesk);
|
|
1143
1165
|
const params = [...keys, '__vesk', 'result'];
|
|
@@ -1145,7 +1167,13 @@ export function evalTopLevelCode(topLevelCode, __vesk) {
|
|
|
1145
1167
|
const fn = new Function(...params, body);
|
|
1146
1168
|
const result = { value: undefined };
|
|
1147
1169
|
fn(...keys.map(k => __vesk[k]), __vesk, result);
|
|
1148
|
-
|
|
1170
|
+
names.forEach((name, i) => {
|
|
1171
|
+
if (name === null)
|
|
1172
|
+
return;
|
|
1173
|
+
__vesk[name] = isTrack
|
|
1174
|
+
? (Array.isArray(result.value) ? result.value[i] : undefined)
|
|
1175
|
+
: result.value;
|
|
1176
|
+
});
|
|
1149
1177
|
}
|
|
1150
1178
|
catch {
|
|
1151
1179
|
// skip evaluation errors
|
|
@@ -1160,7 +1188,7 @@ export function evalTopLevelCode(topLevelCode, __vesk) {
|
|
|
1160
1188
|
const paramSrc = target.params.length
|
|
1161
1189
|
? code.slice(target.params[0].start, target.params[target.params.length - 1].end)
|
|
1162
1190
|
: '';
|
|
1163
|
-
const bodySrc = code.slice(target.body.start, target.body.end);
|
|
1191
|
+
const bodySrc = stripTrackDeclMarkers(code.slice(target.body.start, target.body.end), target.body.start, target.body);
|
|
1164
1192
|
const asyncKw = target.async ? 'async ' : '';
|
|
1165
1193
|
const fn = new Function(...params, `__vesk['${target.id.name}'] = ${asyncKw}function ${target.id.name}(${paramSrc}) ${bodySrc};`);
|
|
1166
1194
|
fn(...keys.map(k => __vesk[k]), __vesk);
|
package/dist/tokens.d.ts
CHANGED
|
@@ -47,4 +47,32 @@ export declare function extractImportNames(importText: string): string[];
|
|
|
47
47
|
* after `from` (or the bare side-effect string). `null` when none found.
|
|
48
48
|
*/
|
|
49
49
|
export declare function importModuleTarget(importText: string): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* True when `code` declares `name` as a real top-level value (`const`/`let`/
|
|
52
|
+
* `var`/`function`/`class`). Used to tell a `.vsk` component — a registry entry
|
|
53
|
+
* with no binding — apart from an ordinary JS/TS declaration, whose
|
|
54
|
+
* `export { name }` must keep native module semantics.
|
|
55
|
+
*/
|
|
56
|
+
export declare function hasTopLevelValueDeclaration(code: string, name: string): boolean;
|
|
57
|
+
/** One entry of a same-file `export { A, B as C }` specifier list. */
|
|
58
|
+
export interface VskSpecifierExport {
|
|
59
|
+
local: string;
|
|
60
|
+
exported: string;
|
|
61
|
+
/** Byte span of the whole `export { … }` statement, including any `;`. */
|
|
62
|
+
start: number;
|
|
63
|
+
end: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Finds same-file export *specifier lists* — `export { A }`, `export { A as B }`
|
|
67
|
+
* — and returns them with their source spans so the caller can remove them.
|
|
68
|
+
*
|
|
69
|
+
* A `.vsk` component is a registry entry keyed by its declared name, not a
|
|
70
|
+
* top-level binding, so acorn's module validator rejects `export { A }` with
|
|
71
|
+
* `Export 'A' is not defined`. Export *declarations* (`export component A`,
|
|
72
|
+
* `export const A = 1`) and re-exports (`export … from '…'`) are left alone:
|
|
73
|
+
* those parse fine and are handled in the IR generator.
|
|
74
|
+
*/
|
|
75
|
+
export declare function findSpecifierExports(code: string): VskSpecifierExport[];
|
|
76
|
+
/** `text` must be `source.slice(base, …)`; `node` is AST parsed from `source`. */
|
|
77
|
+
export declare function stripTrackDeclMarkers(text: string, base: number, node: any): string;
|
|
50
78
|
//# sourceMappingURL=tokens.d.ts.map
|
package/dist/tokens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CA0B7D;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CA2BlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAStE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBxE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAuC/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE;AAwID;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAkB/E;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAkCvE;AA6DD,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAcnF"}
|
package/dist/tokens.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* unparsable text.
|
|
9
9
|
*/
|
|
10
10
|
import { createBaseParser } from '@vesk/compiler/src/parser';
|
|
11
|
+
import { withStandaloneTokens } from '@vesk/compiler/src/vesk-plugin';
|
|
11
12
|
import { skipString, skipComment, skipWhitespace, skipTrackGeneric, isIdentStart, isIdentChar, } from '@vesk/compiler/src/scan';
|
|
12
13
|
/**
|
|
13
14
|
* Tokenizes `code` with the Vesk parser's tokenizer. Returns an array of
|
|
@@ -16,27 +17,32 @@ import { skipString, skipComment, skipWhitespace, skipTrackGeneric, isIdentStart
|
|
|
16
17
|
* their span so callers can read the actual character via `code[start]`.
|
|
17
18
|
*/
|
|
18
19
|
export function tokenizeCode(code) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
out.push({
|
|
29
|
-
label: t.type.label,
|
|
30
|
-
value: typeof t.value === 'string' ? t.value : '',
|
|
31
|
-
start: t.start,
|
|
32
|
-
end: t.end,
|
|
20
|
+
// No parser runs here, so the plugin cannot infer component bodies from its
|
|
21
|
+
// own component-depth counter and every JSX tag would be read as relational
|
|
22
|
+
// operators. `withStandaloneTokens` asks it to read JSX tags directly.
|
|
23
|
+
return withStandaloneTokens(() => {
|
|
24
|
+
try {
|
|
25
|
+
const ParserClass = createBaseParser();
|
|
26
|
+
const tok = ParserClass.tokenizer(code, {
|
|
27
|
+
ecmaVersion: 'latest',
|
|
28
|
+
sourceType: 'module',
|
|
33
29
|
});
|
|
30
|
+
const out = [];
|
|
31
|
+
let t;
|
|
32
|
+
while ((t = tok.getToken()) && t.type && t.type.label !== 'eof') {
|
|
33
|
+
out.push({
|
|
34
|
+
label: t.type.label,
|
|
35
|
+
value: typeof t.value === 'string' ? t.value : '',
|
|
36
|
+
start: t.start,
|
|
37
|
+
end: t.end,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
34
41
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
40
46
|
}
|
|
41
47
|
/**
|
|
42
48
|
* Returns the set of identifiers in `code` that are called — an identifier
|
|
@@ -355,3 +361,178 @@ function manualExtractImportNames(importText) {
|
|
|
355
361
|
}
|
|
356
362
|
return names;
|
|
357
363
|
}
|
|
364
|
+
/**
|
|
365
|
+
* True when `code` declares `name` as a real top-level value (`const`/`let`/
|
|
366
|
+
* `var`/`function`/`class`). Used to tell a `.vsk` component — a registry entry
|
|
367
|
+
* with no binding — apart from an ordinary JS/TS declaration, whose
|
|
368
|
+
* `export { name }` must keep native module semantics.
|
|
369
|
+
*/
|
|
370
|
+
export function hasTopLevelValueDeclaration(code, name) {
|
|
371
|
+
const tokens = tokenizeCode(code);
|
|
372
|
+
if (tokens === null)
|
|
373
|
+
return false;
|
|
374
|
+
const declWords = ['const', 'let', 'var', 'function', 'class'];
|
|
375
|
+
for (let i = 1; i < tokens.length; i++) {
|
|
376
|
+
if (tokens[i].label !== 'name' || tokens[i].value !== name)
|
|
377
|
+
continue;
|
|
378
|
+
const prev = tokens[i - 1];
|
|
379
|
+
// Declaration keywords carry their own token label (`const`, `var`,
|
|
380
|
+
// `function`, `class`); `let` arrives as a plain name. Match on value.
|
|
381
|
+
if (!prev || !declWords.includes(prev.value))
|
|
382
|
+
continue;
|
|
383
|
+
// `export const X` / `export function X` are preceded by `export`.
|
|
384
|
+
if (i >= 2) {
|
|
385
|
+
const pp = tokens[i - 2];
|
|
386
|
+
if (pp && pp.label === 'name' && pp.value === 'export')
|
|
387
|
+
continue;
|
|
388
|
+
}
|
|
389
|
+
return true;
|
|
390
|
+
}
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Finds same-file export *specifier lists* — `export { A }`, `export { A as B }`
|
|
395
|
+
* — and returns them with their source spans so the caller can remove them.
|
|
396
|
+
*
|
|
397
|
+
* A `.vsk` component is a registry entry keyed by its declared name, not a
|
|
398
|
+
* top-level binding, so acorn's module validator rejects `export { A }` with
|
|
399
|
+
* `Export 'A' is not defined`. Export *declarations* (`export component A`,
|
|
400
|
+
* `export const A = 1`) and re-exports (`export … from '…'`) are left alone:
|
|
401
|
+
* those parse fine and are handled in the IR generator.
|
|
402
|
+
*/
|
|
403
|
+
export function findSpecifierExports(code) {
|
|
404
|
+
const tokens = tokenizeCode(code);
|
|
405
|
+
if (tokens === null)
|
|
406
|
+
return [];
|
|
407
|
+
const out = [];
|
|
408
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
409
|
+
if (tokens[i].label !== 'export')
|
|
410
|
+
continue;
|
|
411
|
+
// A specifier list starts with `{`. `export default`, `export const` and
|
|
412
|
+
// `export *` take another route and are left for the IR generator.
|
|
413
|
+
if (!tokens[i + 1] || tokens[i + 1].label !== '{')
|
|
414
|
+
continue;
|
|
415
|
+
// Find this statement's `}` and note any module source, which makes it a
|
|
416
|
+
// re-export (`export { A } from './x.vsk'`) rather than a specifier list.
|
|
417
|
+
let k = i + 2;
|
|
418
|
+
let depth = 1;
|
|
419
|
+
for (; k < tokens.length; k++) {
|
|
420
|
+
const lbl = tokens[k].label;
|
|
421
|
+
if (lbl === 'string') {
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
if (lbl === '{')
|
|
425
|
+
depth++;
|
|
426
|
+
else if (lbl === '}') {
|
|
427
|
+
depth--;
|
|
428
|
+
if (depth === 0)
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// A re-export puts `from '…'` AFTER the closing brace, so check past it.
|
|
433
|
+
let isReexport = false;
|
|
434
|
+
for (let j = k + 1; j < tokens.length; j++) {
|
|
435
|
+
const lbl = tokens[j].label;
|
|
436
|
+
if (lbl === 'string') {
|
|
437
|
+
isReexport = true;
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
if (lbl === ';' || lbl === 'export' || lbl === 'import' || lbl === '}')
|
|
441
|
+
break;
|
|
442
|
+
}
|
|
443
|
+
if (depth !== 0 || isReexport)
|
|
444
|
+
continue;
|
|
445
|
+
const pairs = readSpecifierPairs(code, tokens[i + 1].end, tokens[k].end);
|
|
446
|
+
if (pairs === null)
|
|
447
|
+
continue;
|
|
448
|
+
const stmtEnd = tokens[k].end;
|
|
449
|
+
for (const [local, exported] of pairs)
|
|
450
|
+
out.push({ local, exported, start: tokens[i].start, end: stmtEnd });
|
|
451
|
+
i = k;
|
|
452
|
+
}
|
|
453
|
+
return out;
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Reads `A, B as C` pairs from the text between a `{` and its matching `}`.
|
|
457
|
+
* Returns `null` for anything that is not a plain (optionally `as`-aliased)
|
|
458
|
+
* identifier list, so unusual forms are left to the normal parser.
|
|
459
|
+
*/
|
|
460
|
+
function readSpecifierPairs(code, from, to) {
|
|
461
|
+
// Wrapped in parens so a leading `{` is a block, not the start of an object.
|
|
462
|
+
const tokens = tokenizeCode(`(${code.slice(from, to)})`);
|
|
463
|
+
if (tokens === null || tokens.length < 2)
|
|
464
|
+
return null;
|
|
465
|
+
const pairs = [];
|
|
466
|
+
let i = 1; // skip the '('
|
|
467
|
+
while (i < tokens.length) {
|
|
468
|
+
const local = tokens[i];
|
|
469
|
+
if (!local || local.label === ')' || local.label === ';')
|
|
470
|
+
break;
|
|
471
|
+
if (local.label !== 'name')
|
|
472
|
+
return null;
|
|
473
|
+
const asTok = tokens[i + 1];
|
|
474
|
+
if (asTok && asTok.label === 'name' && asTok.value === 'as') {
|
|
475
|
+
const exported = tokens[i + 2];
|
|
476
|
+
if (!exported || exported.label !== 'name')
|
|
477
|
+
return null;
|
|
478
|
+
pairs.push([local.value, exported.value]);
|
|
479
|
+
i += 3;
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
pairs.push([local.value, local.value]);
|
|
483
|
+
i += 1;
|
|
484
|
+
}
|
|
485
|
+
const sep = tokens[i];
|
|
486
|
+
if (!sep || sep.label !== ',')
|
|
487
|
+
break;
|
|
488
|
+
i += 1;
|
|
489
|
+
}
|
|
490
|
+
return pairs.length > 0 ? pairs : null;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* The Vesk TrackDecl form `const &[count] = track(0)` exists only for the
|
|
494
|
+
* parser: `VeskParserPlugin` consumes the `&` and returns an `ArrayPattern`
|
|
495
|
+
* tagged `lazy: true` whose `start` points at the `[`. The marker character
|
|
496
|
+
* itself survives in the source text, so every raw slice of that text is
|
|
497
|
+
* invalid JavaScript — `new Function` rejects it, and a browser rejects the
|
|
498
|
+
* whole module.
|
|
499
|
+
*
|
|
500
|
+
* Blank exactly those marker characters. Offsets come from the already parsed
|
|
501
|
+
* AST (each `lazy` pattern's `start - 1`), never from a text scan.
|
|
502
|
+
*/
|
|
503
|
+
function collectTrackDeclMarkers(node, out) {
|
|
504
|
+
if (!node || typeof node !== 'object')
|
|
505
|
+
return;
|
|
506
|
+
if (Array.isArray(node)) {
|
|
507
|
+
for (const child of node)
|
|
508
|
+
collectTrackDeclMarkers(child, out);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
if (node.type === 'ArrayPattern' && node.lazy === true && typeof node.start === 'number') {
|
|
512
|
+
out.add(node.start - 1);
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
for (const key of Object.keys(node)) {
|
|
516
|
+
const value = node[key];
|
|
517
|
+
if (value && typeof value === 'object')
|
|
518
|
+
collectTrackDeclMarkers(value, out);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
/** `text` must be `source.slice(base, …)`; `node` is AST parsed from `source`. */
|
|
522
|
+
export function stripTrackDeclMarkers(text, base, node) {
|
|
523
|
+
const offsets = new Set();
|
|
524
|
+
collectTrackDeclMarkers(node, offsets);
|
|
525
|
+
if (offsets.size === 0)
|
|
526
|
+
return text;
|
|
527
|
+
const sorted = [...offsets].sort((a, b) => a - b);
|
|
528
|
+
let out = '';
|
|
529
|
+
let prev = 0;
|
|
530
|
+
for (const offset of sorted) {
|
|
531
|
+
const i = offset - base;
|
|
532
|
+
if (i < prev || i >= text.length)
|
|
533
|
+
continue;
|
|
534
|
+
out += text.slice(prev, i) + ' ';
|
|
535
|
+
prev = i + 1;
|
|
536
|
+
}
|
|
537
|
+
return out + text.slice(prev);
|
|
538
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IRRoot } from '@vesk/compiler/src/ir';
|
|
2
|
-
export type { RouteNode, ApiRouteNode, MiddlewareContext, ServerEventContext, VeskEventHandlers, VeskPlugin, VeskCors, VeskRateLimit, VeskSecurityPreset, VeskSecurity, VeskConfig, MdConfig, MdHtmlMode, MdProps, MarkdownOptions, MdHtmlWarning, MiddlewareEntry, MiddlewareChainOptions, RenderPageResult, SSGResult, DataScriptPayload, ExternalDataScript, Tracked, Resource, UseFetchOptions, UseFetchStreamOptions, SsrDataSink, VeskResponse, SetCookieOptions, } from '@vesk/types';
|
|
2
|
+
export type { RouteNode, ApiRouteNode, MiddlewareContext, ServerEventContext, VeskEventHandlers, VeskPlugin, VeskCors, VeskRateLimit, VeskSecurityPreset, VeskSecurity, VeskConfig, MdConfig, MdHtmlMode, MdProps, MarkdownOptions, MdHtmlWarning, VeskLeafComponent, VeskPrimitiveComponent, VeskTaggedLeafComponent, VeskComponentRegistry, VeskScope, MiddlewareEntry, MiddlewareChainOptions, RenderPageResult, SSGResult, DataScriptPayload, ExternalDataScript, Tracked, Resource, UseFetchOptions, UseFetchStreamOptions, SsrDataSink, VeskResponse, SetCookieOptions, } from '@vesk/types';
|
|
3
3
|
export interface CompileFileResult {
|
|
4
4
|
ir: IRRoot;
|
|
5
5
|
componentMap: Map<string, Function>;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,YAAY,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,eAAe,EACf,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,OAAO,EACP,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,aAAa,EAAE,kBAAkB,CAAC;IAC9D,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC;IAC7C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,shBAahB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,YAAY,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,SAAS,EACT,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,OAAO,EACP,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,aAAa,EAAE,kBAAkB,CAAC;IAC9D,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC;IAC7C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,shBAahB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/vesk-plugin.d.ts
CHANGED
|
@@ -52,5 +52,7 @@ declare module 'acorn' {
|
|
|
52
52
|
export interface VeskPluginConfig {
|
|
53
53
|
[key: string]: unknown;
|
|
54
54
|
}
|
|
55
|
+
/** Runs `fn` with JSX tag recognition enabled without a parser driving it. */
|
|
56
|
+
export declare function withStandaloneTokens<T>(fn: () => T): T;
|
|
55
57
|
export declare function VeskParserPlugin(config?: VeskPluginConfig): (Parser: typeof acorn.Parser) => typeof acorn.Parser;
|
|
56
58
|
//# sourceMappingURL=vesk-plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vesk-plugin.d.ts","sourceRoot":"","sources":["../src/vesk-plugin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vesk-plugin.d.ts","sourceRoot":"","sources":["../src/vesk-plugin.ts"],"names":[],"mappings":"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"}
|