@velarscript/compiler 0.10.1

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.
Files changed (159) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +70 -0
  3. package/dist/analyzer.d.ts +1175 -0
  4. package/dist/analyzer.d.ts.map +1 -0
  5. package/dist/analyzer.js +12130 -0
  6. package/dist/analyzer.js.map +1 -0
  7. package/dist/application-package-host.d.ts +28 -0
  8. package/dist/application-package-host.d.ts.map +1 -0
  9. package/dist/application-package-host.js +2 -0
  10. package/dist/application-package-host.js.map +1 -0
  11. package/dist/ast.d.ts +853 -0
  12. package/dist/ast.d.ts.map +1 -0
  13. package/dist/ast.js +245 -0
  14. package/dist/ast.js.map +1 -0
  15. package/dist/class-runtime.d.ts +6 -0
  16. package/dist/class-runtime.d.ts.map +1 -0
  17. package/dist/class-runtime.js +45 -0
  18. package/dist/class-runtime.js.map +1 -0
  19. package/dist/collection-lowering-runtime.d.ts +7 -0
  20. package/dist/collection-lowering-runtime.d.ts.map +1 -0
  21. package/dist/collection-lowering-runtime.js +952 -0
  22. package/dist/collection-lowering-runtime.js.map +1 -0
  23. package/dist/collection-runtime.d.ts +16 -0
  24. package/dist/collection-runtime.d.ts.map +1 -0
  25. package/dist/collection-runtime.js +231 -0
  26. package/dist/collection-runtime.js.map +1 -0
  27. package/dist/core-vocabulary.d.ts +141 -0
  28. package/dist/core-vocabulary.d.ts.map +1 -0
  29. package/dist/core-vocabulary.js +88 -0
  30. package/dist/core-vocabulary.js.map +1 -0
  31. package/dist/diagnostic.d.ts +42 -0
  32. package/dist/diagnostic.d.ts.map +1 -0
  33. package/dist/diagnostic.js +66 -0
  34. package/dist/diagnostic.js.map +1 -0
  35. package/dist/embedded-javascript.d.ts +74 -0
  36. package/dist/embedded-javascript.d.ts.map +1 -0
  37. package/dist/embedded-javascript.js +341 -0
  38. package/dist/embedded-javascript.js.map +1 -0
  39. package/dist/embedded-module.d.ts +11 -0
  40. package/dist/embedded-module.d.ts.map +1 -0
  41. package/dist/embedded-module.js +67 -0
  42. package/dist/embedded-module.js.map +1 -0
  43. package/dist/embedded-source.d.ts +19 -0
  44. package/dist/embedded-source.d.ts.map +1 -0
  45. package/dist/embedded-source.js +61 -0
  46. package/dist/embedded-source.js.map +1 -0
  47. package/dist/emitter.d.ts +188 -0
  48. package/dist/emitter.d.ts.map +1 -0
  49. package/dist/emitter.js +3254 -0
  50. package/dist/emitter.js.map +1 -0
  51. package/dist/error-runtime.d.ts +17 -0
  52. package/dist/error-runtime.d.ts.map +1 -0
  53. package/dist/error-runtime.js +109 -0
  54. package/dist/error-runtime.js.map +1 -0
  55. package/dist/extension.d.ts +373 -0
  56. package/dist/extension.d.ts.map +1 -0
  57. package/dist/extension.js +25 -0
  58. package/dist/extension.js.map +1 -0
  59. package/dist/formatter.d.ts +13 -0
  60. package/dist/formatter.d.ts.map +1 -0
  61. package/dist/formatter.js +1440 -0
  62. package/dist/formatter.js.map +1 -0
  63. package/dist/framework-host.d.ts +87 -0
  64. package/dist/framework-host.d.ts.map +1 -0
  65. package/dist/framework-host.js +2 -0
  66. package/dist/framework-host.js.map +1 -0
  67. package/dist/index.d.ts +75 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +932 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/interpolated-string.d.ts +47 -0
  72. package/dist/interpolated-string.d.ts.map +1 -0
  73. package/dist/interpolated-string.js +344 -0
  74. package/dist/interpolated-string.js.map +1 -0
  75. package/dist/json-runtime.d.ts +2 -0
  76. package/dist/json-runtime.d.ts.map +1 -0
  77. package/dist/json-runtime.js +193 -0
  78. package/dist/json-runtime.js.map +1 -0
  79. package/dist/language-guidance.d.ts +31 -0
  80. package/dist/language-guidance.d.ts.map +1 -0
  81. package/dist/language-guidance.js +187 -0
  82. package/dist/language-guidance.js.map +1 -0
  83. package/dist/lexer.d.ts +85 -0
  84. package/dist/lexer.d.ts.map +1 -0
  85. package/dist/lexer.js +1004 -0
  86. package/dist/lexer.js.map +1 -0
  87. package/dist/limits.d.ts +2 -0
  88. package/dist/limits.d.ts.map +1 -0
  89. package/dist/limits.js +2 -0
  90. package/dist/limits.js.map +1 -0
  91. package/dist/mechanical-fix.d.ts +26 -0
  92. package/dist/mechanical-fix.d.ts.map +1 -0
  93. package/dist/mechanical-fix.js +61 -0
  94. package/dist/mechanical-fix.js.map +1 -0
  95. package/dist/narrowing-runtime.d.ts +5 -0
  96. package/dist/narrowing-runtime.d.ts.map +1 -0
  97. package/dist/narrowing-runtime.js +27 -0
  98. package/dist/narrowing-runtime.js.map +1 -0
  99. package/dist/number-runtime.d.ts +3 -0
  100. package/dist/number-runtime.d.ts.map +1 -0
  101. package/dist/number-runtime.js +37 -0
  102. package/dist/number-runtime.js.map +1 -0
  103. package/dist/parser.d.ts +245 -0
  104. package/dist/parser.d.ts.map +1 -0
  105. package/dist/parser.js +3582 -0
  106. package/dist/parser.js.map +1 -0
  107. package/dist/primitive-runtime.d.ts +4 -0
  108. package/dist/primitive-runtime.d.ts.map +1 -0
  109. package/dist/primitive-runtime.js +39 -0
  110. package/dist/primitive-runtime.js.map +1 -0
  111. package/dist/promise-runtime.d.ts +6 -0
  112. package/dist/promise-runtime.d.ts.map +1 -0
  113. package/dist/promise-runtime.js +86 -0
  114. package/dist/promise-runtime.js.map +1 -0
  115. package/dist/reactive-bridge-runtime.d.ts +7 -0
  116. package/dist/reactive-bridge-runtime.d.ts.map +1 -0
  117. package/dist/reactive-bridge-runtime.js +112 -0
  118. package/dist/reactive-bridge-runtime.js.map +1 -0
  119. package/dist/runtime-abi.d.ts +24 -0
  120. package/dist/runtime-abi.d.ts.map +1 -0
  121. package/dist/runtime-abi.js +24 -0
  122. package/dist/runtime-abi.js.map +1 -0
  123. package/dist/semantic.d.ts +142 -0
  124. package/dist/semantic.d.ts.map +1 -0
  125. package/dist/semantic.js +845 -0
  126. package/dist/semantic.js.map +1 -0
  127. package/dist/source-names.d.ts +32 -0
  128. package/dist/source-names.d.ts.map +1 -0
  129. package/dist/source-names.js +101 -0
  130. package/dist/source-names.js.map +1 -0
  131. package/dist/source.d.ts +19 -0
  132. package/dist/source.d.ts.map +1 -0
  133. package/dist/source.js +64 -0
  134. package/dist/source.js.map +1 -0
  135. package/dist/text-runtime.d.ts +2 -0
  136. package/dist/text-runtime.d.ts.map +1 -0
  137. package/dist/text-runtime.js +285 -0
  138. package/dist/text-runtime.js.map +1 -0
  139. package/dist/token.d.ts +19 -0
  140. package/dist/token.d.ts.map +1 -0
  141. package/dist/token.js +51 -0
  142. package/dist/token.js.map +1 -0
  143. package/dist/type-registry-runtime.d.ts +7 -0
  144. package/dist/type-registry-runtime.d.ts.map +1 -0
  145. package/dist/type-registry-runtime.js +51 -0
  146. package/dist/type-registry-runtime.js.map +1 -0
  147. package/dist/type-validation-runtime.d.ts +17 -0
  148. package/dist/type-validation-runtime.d.ts.map +1 -0
  149. package/dist/type-validation-runtime.js +150 -0
  150. package/dist/type-validation-runtime.js.map +1 -0
  151. package/dist/types.d.ts +356 -0
  152. package/dist/types.d.ts.map +1 -0
  153. package/dist/types.js +1170 -0
  154. package/dist/types.js.map +1 -0
  155. package/dist/utf8-runtime.d.ts +7 -0
  156. package/dist/utf8-runtime.d.ts.map +1 -0
  157. package/dist/utf8-runtime.js +43 -0
  158. package/dist/utf8-runtime.js.map +1 -0
  159. package/package.json +48 -0
@@ -0,0 +1,66 @@
1
+ export function diagnostic(code, message, span, fix) {
2
+ return fix ? { code, message, span, fix } : { code, message, span };
3
+ }
4
+ export function recoveredDiagnostic(code, message, span, fix) {
5
+ return fix ? { code, message, span, recovered: true, fix } : { code, message, span, recovered: true };
6
+ }
7
+ /** Builds the one-edit mechanical rewrite of `span` to `text`. */
8
+ export function mechanicalFix(span, text, title) {
9
+ return { edits: [{ span, text }], title };
10
+ }
11
+ /** Builds a mechanical rewrite whose one spelling change needs more than one edit. */
12
+ export function mechanicalEdits(edits, title) {
13
+ return { edits, title };
14
+ }
15
+ export function formatDiagnostic(source, item) {
16
+ const location = source.location(item.span.start);
17
+ const maximumLine = 240;
18
+ const rawLine = source.lineText(location.line);
19
+ const rawLength = rawLine.length;
20
+ const start = rawLength > maximumLine
21
+ ? Math.max(0, Math.min(rawLength - maximumLine, location.column - 81))
22
+ : 0;
23
+ const clipped = rawLine.slice(start, start + maximumLine);
24
+ const prefix = start > 0 ? "…" : "";
25
+ const suffix = start + maximumLine < rawLength ? "…" : "";
26
+ const line = `${prefix}${clipped}${suffix}`;
27
+ const localColumn = Math.max(0, location.column - 1 - start);
28
+ const markerSource = clipped.slice(localColumn, localColumn + Math.max(1, item.span.end - item.span.start));
29
+ const marker = `${" ".repeat(terminalTextWidth(prefix + clipped.slice(0, localColumn)))}${"^".repeat(Math.max(1, terminalTextWidth(markerSource)))}`;
30
+ return [
31
+ `${source.path.replaceAll("\\", "/")}:${location.line}:${location.column} error ${item.code}: ${item.message}`,
32
+ line,
33
+ marker,
34
+ ].join("\n");
35
+ }
36
+ const graphemeSegmenter = typeof Intl.Segmenter === "function"
37
+ ? new Intl.Segmenter(undefined, { granularity: "grapheme" })
38
+ : null;
39
+ /** Terminal-cell width, distinct from the UTF-16 columns used by LSP. */
40
+ function terminalTextWidth(value) {
41
+ const graphemes = graphemeSegmenter
42
+ ? [...graphemeSegmenter.segment(value)].map((entry) => entry.segment)
43
+ : [...value];
44
+ let width = 0;
45
+ for (const grapheme of graphemes) {
46
+ if (/^[\p{Mark}\p{Cf}]*$/u.test(grapheme))
47
+ continue;
48
+ const codePoint = grapheme.codePointAt(0) ?? 0;
49
+ width += /\p{Extended_Pictographic}/u.test(grapheme) || isWideCodePoint(codePoint) ? 2 : 1;
50
+ }
51
+ return width;
52
+ }
53
+ function isWideCodePoint(value) {
54
+ return value >= 0x1100 && (value <= 0x115f
55
+ || value === 0x2329 || value === 0x232a
56
+ || (value >= 0x2e80 && value <= 0xa4cf && value !== 0x303f)
57
+ || (value >= 0xac00 && value <= 0xd7a3)
58
+ || (value >= 0xf900 && value <= 0xfaff)
59
+ || (value >= 0xfe10 && value <= 0xfe19)
60
+ || (value >= 0xfe30 && value <= 0xfe6f)
61
+ || (value >= 0xff00 && value <= 0xff60)
62
+ || (value >= 0xffe0 && value <= 0xffe6)
63
+ || (value >= 0x1b000 && value <= 0x1ffff)
64
+ || (value >= 0x20000 && value <= 0x3fffd));
65
+ }
66
+ //# sourceMappingURL=diagnostic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../src/diagnostic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { type Span } from "./source.ts";
2
+ export type EmbeddedJavaScriptKind = "checked" | "unsafe";
3
+ export interface EmbeddedJavaScriptLiteralScan {
4
+ readonly kind: EmbeddedJavaScriptKind;
5
+ readonly start: number;
6
+ readonly sourceStart: number;
7
+ readonly sourceEnd: number;
8
+ readonly end: number;
9
+ readonly closed: boolean;
10
+ readonly openingLineBreak: boolean;
11
+ }
12
+ export interface EmbeddedJavaScriptTokenPayload {
13
+ readonly embeddedJavaScript: true;
14
+ readonly kind: EmbeddedJavaScriptKind;
15
+ readonly sourceSpan: Span;
16
+ }
17
+ export interface InspectedEmbeddedJavaScriptExport {
18
+ readonly name: string;
19
+ readonly nameSpan: Span;
20
+ readonly local: string;
21
+ readonly localSpan: Span;
22
+ }
23
+ export interface InspectedEmbeddedJavaScriptImport {
24
+ readonly span: Span;
25
+ }
26
+ export interface InspectedEmbeddedJavaScriptDependency {
27
+ readonly source: string;
28
+ readonly span: Span;
29
+ readonly dynamic: boolean;
30
+ }
31
+ export interface InspectedEmbeddedJavaScriptBinding {
32
+ readonly name: string;
33
+ readonly nameSpan: Span;
34
+ }
35
+ export interface EmbeddedJavaScriptFactoryEdit {
36
+ readonly span: Span;
37
+ readonly replacement: string;
38
+ }
39
+ export interface EmbeddedJavaScriptIssue {
40
+ readonly message: string;
41
+ readonly span: Span;
42
+ }
43
+ export interface EmbeddedJavaScriptInspection {
44
+ readonly exports: readonly InspectedEmbeddedJavaScriptExport[];
45
+ readonly imports: readonly InspectedEmbeddedJavaScriptImport[];
46
+ readonly dependencies: readonly InspectedEmbeddedJavaScriptDependency[];
47
+ readonly bindings: readonly InspectedEmbeddedJavaScriptBinding[];
48
+ /**
49
+ * AST-derived edits that turn a checked module body into a factory body:
50
+ * imports leave the body, declaration exports lose only `export`, and export
51
+ * lists leave the body because their local-to-exported mapping is in
52
+ * `exports`. The emitter applies these to the original source slice, so no
53
+ * foreign code is regenerated or formatted by Core.
54
+ */
55
+ readonly factoryEdits: readonly EmbeddedJavaScriptFactoryEdit[];
56
+ readonly issues: readonly EmbeddedJavaScriptIssue[];
57
+ }
58
+ /**
59
+ * Recognizes the only two Core-owned tagged raw block headers. This is a small
60
+ * scanner for VelarScript's header shape, not for JavaScript: the latter is
61
+ * always parsed by Acorn below.
62
+ */
63
+ export declare function embeddedJavaScriptHeaderKind(source: string, backtick: number): EmbeddedJavaScriptKind | null;
64
+ /**
65
+ * Scans one D53 raw block. The closing backtick is deliberately structural:
66
+ * it is the only backtick at the declaration's indentation on an otherwise
67
+ * empty line (apart from the checked block's `:`). JavaScript template
68
+ * literals therefore remain ordinary source bytes and never need escaping.
69
+ */
70
+ export declare function scanEmbeddedJavaScriptLiteral(source: string, start: number): EmbeddedJavaScriptLiteralScan | null;
71
+ export declare function isEmbeddedJavaScriptTokenPayload(value: unknown): value is EmbeddedJavaScriptTokenPayload;
72
+ /** Parses a raw source slice as an ECMAScript module and derives all lowering metadata from its AST. */
73
+ export declare function inspectEmbeddedJavaScript(source: string, sourceStart: number, checked: boolean): EmbeddedJavaScriptInspection;
74
+ //# sourceMappingURL=embedded-javascript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-javascript.d.ts","sourceRoot":"","sources":["../src/embedded-javascript.ts"],"names":[],"mappings":"AAcA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,iCAAiC,EAAE,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS,iCAAiC,EAAE,CAAC;IAC/D,QAAQ,CAAC,YAAY,EAAE,SAAS,qCAAqC,EAAE,CAAC;IACxE,QAAQ,CAAC,QAAQ,EAAE,SAAS,kCAAkC,EAAE,CAAC;IACjE;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CA2B5G;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,6BAA6B,GAAG,IAAI,CAcjH;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,8BAA8B,CAOxG;AAED,wGAAwG;AACxG,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACf,4BAA4B,CAsG9B"}
@@ -0,0 +1,341 @@
1
+ import { parse, } from "acorn";
2
+ import { scanOpaqueEmbeddedSource } from "./embedded-source.js";
3
+ import { bindingNameRestriction } from "./source-names.js";
4
+ import { span } from "./source.js";
5
+ /**
6
+ * Recognizes the only two Core-owned tagged raw block headers. This is a small
7
+ * scanner for VelarScript's header shape, not for JavaScript: the latter is
8
+ * always parsed by Acorn below.
9
+ */
10
+ export function embeddedJavaScriptHeaderKind(source, backtick) {
11
+ if (source[backtick] !== "`")
12
+ return null;
13
+ const lineStart = previousLineStart(source, backtick);
14
+ let cursor = lineStart;
15
+ while (source[cursor] === " " || source[cursor] === "\t")
16
+ cursor += 1;
17
+ const first = readWord(source, cursor, backtick);
18
+ if (!first)
19
+ return null;
20
+ cursor = skipHorizontalWhitespace(source, first.end, backtick);
21
+ const second = readWord(source, cursor, backtick);
22
+ if (!second || second.value !== "js")
23
+ return null;
24
+ cursor = skipHorizontalWhitespace(source, second.end, backtick);
25
+ if (first.value === "unsafe")
26
+ return cursor === backtick ? "unsafe" : null;
27
+ if (first.value !== "extern" || source[cursor] !== "(")
28
+ return null;
29
+ let depth = 0;
30
+ for (; cursor < backtick; cursor += 1) {
31
+ const character = source[cursor];
32
+ if (character === "(")
33
+ depth += 1;
34
+ else if (character === ")") {
35
+ depth -= 1;
36
+ if (depth === 0) {
37
+ cursor = skipHorizontalWhitespace(source, cursor + 1, backtick);
38
+ return cursor === backtick ? "checked" : null;
39
+ }
40
+ }
41
+ }
42
+ return null;
43
+ }
44
+ /**
45
+ * Scans one D53 raw block. The closing backtick is deliberately structural:
46
+ * it is the only backtick at the declaration's indentation on an otherwise
47
+ * empty line (apart from the checked block's `:`). JavaScript template
48
+ * literals therefore remain ordinary source bytes and never need escaping.
49
+ */
50
+ export function scanEmbeddedJavaScriptLiteral(source, start) {
51
+ const kind = embeddedJavaScriptHeaderKind(source, start);
52
+ if (!kind)
53
+ return null;
54
+ const headerLineStart = previousLineStart(source, start);
55
+ const indentation = /^[ \t]*/u.exec(source.slice(headerLineStart, start))?.[0] ?? "";
56
+ return {
57
+ kind,
58
+ ...scanOpaqueEmbeddedSource(source, start, indentation, (tail) => tail.trim() === (kind === "checked" ? ":" : "")),
59
+ };
60
+ }
61
+ export function isEmbeddedJavaScriptTokenPayload(value) {
62
+ if (typeof value !== "object" || value === null)
63
+ return false;
64
+ const payload = value;
65
+ return payload.embeddedJavaScript === true
66
+ && (payload.kind === "checked" || payload.kind === "unsafe")
67
+ && typeof payload.sourceSpan?.start === "number"
68
+ && typeof payload.sourceSpan.end === "number";
69
+ }
70
+ /** Parses a raw source slice as an ECMAScript module and derives all lowering metadata from its AST. */
71
+ export function inspectEmbeddedJavaScript(source, sourceStart, checked) {
72
+ let program;
73
+ try {
74
+ program = parse(source, { ecmaVersion: "latest", sourceType: "module" });
75
+ }
76
+ catch (error) {
77
+ const position = syntaxErrorPosition(error);
78
+ const message = error instanceof Error ? error.message.replace(/ \(\d+:\d+\)$/u, "") : String(error);
79
+ return {
80
+ exports: [],
81
+ imports: [],
82
+ dependencies: [],
83
+ bindings: [],
84
+ factoryEdits: [],
85
+ issues: [{
86
+ message: `JavaScript syntax error: ${message}`,
87
+ span: span(sourceStart + position, sourceStart + Math.min(source.length, position + 1)),
88
+ }],
89
+ };
90
+ }
91
+ const exports = [];
92
+ const imports = [];
93
+ const dependencies = [];
94
+ const bindings = [];
95
+ const factoryEdits = [];
96
+ const issues = [];
97
+ const absolute = (node) => span(sourceStart + node.start, sourceStart + node.end);
98
+ const issue = (message, node) => {
99
+ issues.push({ message, span: absolute(node) });
100
+ };
101
+ const addExport = (nameNode, localNode) => {
102
+ const name = nodeName(nameNode);
103
+ const local = nodeName(localNode);
104
+ if (name === "default") {
105
+ issue("An inline JavaScript block cannot export 'default'; every export enters VelarScript scope by its own name", nameNode);
106
+ return;
107
+ }
108
+ const restriction = bindingNameRestriction(name);
109
+ if (restriction) {
110
+ issue(`JavaScript export ${JSON.stringify(name)} cannot enter VelarScript scope; export it under a valid, non-reserved VelarScript binding name`, nameNode);
111
+ return;
112
+ }
113
+ if (local.length === 0) {
114
+ issue(`JavaScript export ${JSON.stringify(name)} has no statically addressable local binding`, localNode);
115
+ return;
116
+ }
117
+ exports.push({ name, nameSpan: absolute(nameNode), local, localSpan: absolute(localNode) });
118
+ };
119
+ for (const statement of program.body) {
120
+ if (statement.type === "ImportDeclaration") {
121
+ rejectRelativeEmbeddedModuleSource(statement.source, issue);
122
+ imports.push({ span: absolute(statement) });
123
+ if (typeof statement.source.value === "string" && !statement.source.value.startsWith(".")) {
124
+ dependencies.push({ source: statement.source.value, span: absolute(statement.source), dynamic: false });
125
+ }
126
+ for (const specifier of statement.specifiers) {
127
+ bindings.push({ name: specifier.local.name, nameSpan: absolute(specifier.local) });
128
+ }
129
+ if (checked)
130
+ factoryEdits.push({ span: absolute(statement), replacement: "" });
131
+ continue;
132
+ }
133
+ for (const binding of topLevelStatementBindings(statement)) {
134
+ bindings.push({ name: binding.name, nameSpan: absolute(binding) });
135
+ }
136
+ if (statement.type === "ExportDefaultDeclaration") {
137
+ issue("An inline JavaScript block cannot use a default export; export a named declaration so it can enter VelarScript scope", statement);
138
+ continue;
139
+ }
140
+ if (statement.type === "ExportAllDeclaration") {
141
+ rejectRelativeEmbeddedModuleSource(statement.source, issue);
142
+ if (typeof statement.source.value === "string" && !statement.source.value.startsWith(".")) {
143
+ dependencies.push({ source: statement.source.value, span: absolute(statement.source), dynamic: false });
144
+ }
145
+ inspectExportAll(statement, checked, addExport, issue);
146
+ continue;
147
+ }
148
+ if (statement.type !== "ExportNamedDeclaration")
149
+ continue;
150
+ if (statement.source) {
151
+ rejectRelativeEmbeddedModuleSource(statement.source, issue);
152
+ if (typeof statement.source.value === "string" && !statement.source.value.startsWith(".")) {
153
+ dependencies.push({ source: statement.source.value, span: absolute(statement.source), dynamic: false });
154
+ }
155
+ }
156
+ inspectNamedExport(statement, checked, addExport, issue, factoryEdits, absolute);
157
+ }
158
+ for (const imported of dynamicImportSources(program)) {
159
+ if (imported.value === null) {
160
+ issue("A dynamic import inside inline JavaScript must use a literal package specifier; computed paths cannot be emitted consistently by run and production builds", imported.node);
161
+ }
162
+ else if (imported.value.startsWith(".")) {
163
+ issue(`Relative JavaScript import target '${imported.value}' cannot be emitted from an inline block; combine the source into this block or move it into a package`, imported.node);
164
+ }
165
+ else {
166
+ dependencies.push({ source: imported.value, span: absolute(imported.node), dynamic: true });
167
+ }
168
+ }
169
+ if (checked && containsTopLevelAwait(program)) {
170
+ issue("A captured inline JavaScript block cannot use top-level await; captures are passed to a synchronous factory, and an async factory has not been specified", firstTopLevelAwait(program) ?? program);
171
+ }
172
+ return { exports, imports, dependencies, bindings, factoryEdits, issues };
173
+ }
174
+ function rejectRelativeEmbeddedModuleSource(source, issue) {
175
+ if (typeof source.value !== "string" || !source.value.startsWith("."))
176
+ return;
177
+ issue(`Relative JavaScript import target '${source.value}' cannot be emitted from an inline block; combine the source into this block or move it into a package`, source);
178
+ }
179
+ function dynamicImportSources(program) {
180
+ const found = [];
181
+ const visit = (node) => {
182
+ if (node.type === "ImportExpression") {
183
+ const source = node.source;
184
+ if (isNode(source)) {
185
+ const literal = source;
186
+ const value = typeof literal.value === "string"
187
+ ? literal.value
188
+ : literal.type === "TemplateLiteral" && literal.expressions?.length === 0
189
+ && typeof literal.quasis?.[0]?.value?.cooked === "string"
190
+ ? literal.quasis[0].value.cooked
191
+ : null;
192
+ found.push({ value, node: source });
193
+ }
194
+ else {
195
+ found.push({ value: null, node });
196
+ }
197
+ return;
198
+ }
199
+ for (const [key, value] of Object.entries(node)) {
200
+ if (key === "loc" || key === "range" || key === "start" || key === "end")
201
+ continue;
202
+ if (isNode(value))
203
+ visit(value);
204
+ else if (Array.isArray(value))
205
+ for (const item of value)
206
+ if (isNode(item))
207
+ visit(item);
208
+ }
209
+ };
210
+ visit(program);
211
+ return found;
212
+ }
213
+ function inspectNamedExport(statement, checked, addExport, issue, factoryEdits, absolute) {
214
+ if (statement.source && checked) {
215
+ issue("A captured inline JavaScript block cannot re-export from another module; import the value normally, then export its local binding", statement);
216
+ }
217
+ if (statement.declaration) {
218
+ for (const binding of declarationBindings(statement.declaration))
219
+ addExport(binding, binding);
220
+ if (checked) {
221
+ factoryEdits.push({
222
+ span: span(absolute(statement).start, absolute(statement.declaration).start),
223
+ replacement: "",
224
+ });
225
+ }
226
+ return;
227
+ }
228
+ for (const specifier of statement.specifiers)
229
+ addExport(specifier.exported, specifier.local);
230
+ if (checked && !statement.source)
231
+ factoryEdits.push({ span: absolute(statement), replacement: "" });
232
+ }
233
+ function inspectExportAll(statement, checked, addExport, issue) {
234
+ if (!statement.exported) {
235
+ issue("An inline JavaScript block cannot use bare 'export *'; its exports must be statically enumerable", statement);
236
+ return;
237
+ }
238
+ if (checked) {
239
+ issue("A captured inline JavaScript block cannot re-export a namespace; import it normally, then export its local binding", statement);
240
+ return;
241
+ }
242
+ addExport(statement.exported, statement.exported);
243
+ }
244
+ function declarationBindings(declaration) {
245
+ switch (declaration.type) {
246
+ case "FunctionDeclaration":
247
+ case "ClassDeclaration":
248
+ return [declaration.id];
249
+ case "VariableDeclaration":
250
+ return declaration.declarations.flatMap((item) => patternBindings(item.id));
251
+ }
252
+ }
253
+ function topLevelStatementBindings(statement) {
254
+ if (statement.type === "FunctionDeclaration" || statement.type === "ClassDeclaration" || statement.type === "VariableDeclaration") {
255
+ return declarationBindings(statement);
256
+ }
257
+ if (statement.type === "ExportNamedDeclaration" && statement.declaration)
258
+ return declarationBindings(statement.declaration);
259
+ if (statement.type === "ExportDefaultDeclaration"
260
+ && (statement.declaration.type === "FunctionDeclaration" || statement.declaration.type === "ClassDeclaration")
261
+ && statement.declaration.id)
262
+ return [statement.declaration.id];
263
+ return [];
264
+ }
265
+ function patternBindings(pattern) {
266
+ switch (pattern.type) {
267
+ case "Identifier": return [pattern];
268
+ case "ObjectPattern": return pattern.properties.flatMap((property) => property.type === "RestElement" ? patternBindings(property.argument) : patternBindings(property.value));
269
+ case "ArrayPattern": return pattern.elements.flatMap((element) => element ? patternBindings(element) : []);
270
+ case "RestElement": return patternBindings(pattern.argument);
271
+ case "AssignmentPattern": return patternBindings(pattern.left);
272
+ case "MemberExpression": return [];
273
+ }
274
+ }
275
+ function nodeName(node) {
276
+ if ("name" in node && typeof node.name === "string")
277
+ return node.name;
278
+ return "value" in node && typeof node.value === "string" ? node.value : "";
279
+ }
280
+ function containsTopLevelAwait(program) {
281
+ return firstTopLevelAwait(program) !== null;
282
+ }
283
+ function firstTopLevelAwait(program) {
284
+ const visit = (node) => {
285
+ if (node.type === "AwaitExpression" || (node.type === "ForOfStatement" && node.await))
286
+ return node;
287
+ if (node.type === "FunctionDeclaration" || node.type === "FunctionExpression" || node.type === "ArrowFunctionExpression")
288
+ return null;
289
+ for (const [key, value] of Object.entries(node)) {
290
+ if (key === "loc" || key === "range" || key === "start" || key === "end")
291
+ continue;
292
+ if (isNode(value)) {
293
+ const found = visit(value);
294
+ if (found)
295
+ return found;
296
+ }
297
+ else if (Array.isArray(value)) {
298
+ for (const item of value) {
299
+ if (!isNode(item))
300
+ continue;
301
+ const found = visit(item);
302
+ if (found)
303
+ return found;
304
+ }
305
+ }
306
+ }
307
+ return null;
308
+ };
309
+ return visit(program);
310
+ }
311
+ function isNode(value) {
312
+ return typeof value === "object" && value !== null
313
+ && typeof value.type === "string"
314
+ && typeof value.start === "number"
315
+ && typeof value.end === "number";
316
+ }
317
+ function syntaxErrorPosition(error) {
318
+ if (typeof error !== "object" || error === null || !("pos" in error))
319
+ return 0;
320
+ const position = error.pos;
321
+ return typeof position === "number" && Number.isSafeInteger(position) && position >= 0 ? position : 0;
322
+ }
323
+ function readWord(source, start, limit) {
324
+ if (!/[A-Za-z_$]/u.test(source[start] ?? ""))
325
+ return null;
326
+ let end = start + 1;
327
+ while (end < limit && /[A-Za-z0-9_$]/u.test(source[end] ?? ""))
328
+ end += 1;
329
+ return { value: source.slice(start, end), end };
330
+ }
331
+ function skipHorizontalWhitespace(source, start, limit) {
332
+ while (start < limit && (source[start] === " " || source[start] === "\t"))
333
+ start += 1;
334
+ return start;
335
+ }
336
+ function previousLineStart(source, index) {
337
+ while (index > 0 && source[index - 1] !== "\n" && source[index - 1] !== "\r")
338
+ index -= 1;
339
+ return index;
340
+ }
341
+ //# sourceMappingURL=embedded-javascript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-javascript.js","sourceRoot":"","sources":["../src/embedded-javascript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Program } from "./ast.ts";
2
+ /** Stable sibling ESM name shared by analysis and emission. */
3
+ export declare function embeddedJavaScriptSpecifier(sourcePath: string, ordinal: number): `./${string}.js`;
4
+ /**
5
+ * Presents embedded-JS contracts to the existing extern/import analyzer
6
+ * machinery without publishing the generated sibling as a project dependency.
7
+ * Project resolution and dependency walks continue to consume the original
8
+ * program; only semantic analysis and interface construction see this view.
9
+ */
10
+ export declare function programWithEmbeddedJavaScriptImports(program: Program, sourcePath: string): Program;
11
+ //# sourceMappingURL=embedded-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-module.d.ts","sourceRoot":"","sources":["../src/embedded-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,OAAO,EAER,MAAM,UAAU,CAAC;AAElB,+DAA+D;AAC/D,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,KAAK,CAajG;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAclG"}
@@ -0,0 +1,67 @@
1
+ /** Stable sibling ESM name shared by analysis and emission. */
2
+ export function embeddedJavaScriptSpecifier(sourcePath, ordinal) {
3
+ const file = sourcePath.replaceAll("\\", "/").split("/").at(-1) ?? "module.vel";
4
+ const rawStem = file.replace(/\.vel$/u, "");
5
+ const stem = rawStem.replace(/[^A-Za-z0-9._-]+/gu, "-").replace(/^-+|-+$/gu, "") || "module";
6
+ // Two source basenames can normalize to the same filesystem-safe stem
7
+ // (`a b.vel` and `a-b.vel`). The exact-name digest keeps their sibling
8
+ // artifacts distinct without making output depend on the checkout path.
9
+ let digest = 0x811c9dc5;
10
+ for (let index = 0; index < rawStem.length; index += 1) {
11
+ digest ^= rawStem.charCodeAt(index);
12
+ digest = Math.imul(digest, 0x01000193);
13
+ }
14
+ return `./${stem}.${(digest >>> 0).toString(36)}.embedded-${ordinal + 1}.js`;
15
+ }
16
+ /**
17
+ * Presents embedded-JS contracts to the existing extern/import analyzer
18
+ * machinery without publishing the generated sibling as a project dependency.
19
+ * Project resolution and dependency walks continue to consume the original
20
+ * program; only semantic analysis and interface construction see this view.
21
+ */
22
+ export function programWithEmbeddedJavaScriptImports(program, sourcePath) {
23
+ let ordinal = 0;
24
+ const body = [];
25
+ for (const statement of program.body) {
26
+ if (statement.kind !== "EmbeddedJavaScriptDeclaration") {
27
+ body.push(statement);
28
+ continue;
29
+ }
30
+ const specifier = embeddedJavaScriptSpecifier(sourcePath, ordinal++);
31
+ if (statement.contract)
32
+ body.push(syntheticExternModule(statement, specifier));
33
+ body.push(syntheticImport(statement, specifier));
34
+ body.push(statement);
35
+ }
36
+ return { ...program, body };
37
+ }
38
+ function syntheticExternModule(statement, source) {
39
+ return {
40
+ kind: "ExternModuleDeclaration",
41
+ source,
42
+ functions: statement.contract.functions,
43
+ constants: statement.contract.constants,
44
+ classes: statement.contract.classes,
45
+ span: statement.contract.span,
46
+ };
47
+ }
48
+ function syntheticImport(statement, source) {
49
+ const specifiers = (statement.contract
50
+ ? [
51
+ ...statement.contract.functions.map((item) => ({ name: item.name, span: item.span })),
52
+ ...statement.contract.constants.map((item) => ({ name: item.name, span: item.span })),
53
+ ...statement.contract.classes.map((item) => ({ name: item.name, span: item.span })),
54
+ ]
55
+ : statement.exports.map((item) => ({ name: item.name, span: item.nameSpan })))
56
+ .map((item) => ({ imported: item.name, local: item.name, namespace: false, span: item.span }));
57
+ return {
58
+ kind: "ImportDeclaration",
59
+ source,
60
+ sourceSpan: { start: statement.span.start, end: statement.span.start },
61
+ javascript: true,
62
+ unsafe: statement.unsafe,
63
+ specifiers,
64
+ span: statement.span,
65
+ };
66
+ }
67
+ //# sourceMappingURL=embedded-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-module.js","sourceRoot":"","sources":["../src/embedded-module.ts"],"names":[],"mappings":"AASA,+DAA+D;AAC/D,MAAM,UAAU,2BAA2B,CAAC,UAAkB,EAAE,OAAe;IAC7E,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;IAChF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;IAC7F,sEAAsE;IACtE,uEAAuE;IACvE,wEAAwE;IACxE,IAAI,MAAM,GAAG,UAAU,CAAC;IACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,OAAO,GAAG,CAAC,KAAK,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oCAAoC,CAAC,OAAgB,EAAE,UAAkB;IACvF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,IAAI,KAAK,+BAA+B,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,2BAA2B,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,SAAS,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,qBAAqB,CAC5B,SAAwC,EACxC,MAAc;IAEd,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,MAAM;QACN,SAAS,EAAE,SAAS,CAAC,QAAS,CAAC,SAAS;QACxC,SAAS,EAAE,SAAS,CAAC,QAAS,CAAC,SAAS;QACxC,OAAO,EAAE,SAAS,CAAC,QAAS,CAAC,OAAO;QACpC,IAAI,EAAE,SAAS,CAAC,QAAS,CAAC,IAAI;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,SAAwC,EACxC,MAAc;IAEd,MAAM,UAAU,GAAsB,CAAC,SAAS,CAAC,QAAQ;QACvD,CAAC,CAAC;YACA,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACrF,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACrF,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACpF;QACD,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SAC7E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjG,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,MAAM;QACN,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE;QACtE,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,UAAU;QACV,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** A contiguous raw source slice delimited by a structural multiline backtick. */
2
+ export interface OpaqueEmbeddedSourceScan {
3
+ readonly start: number;
4
+ readonly sourceStart: number;
5
+ readonly sourceEnd: number;
6
+ readonly end: number;
7
+ readonly closed: boolean;
8
+ readonly openingLineBreak: boolean;
9
+ readonly closingTailStart: number | null;
10
+ readonly closingTailEnd: number | null;
11
+ }
12
+ /**
13
+ * Scans an opaque multiline payload without knowing its language or owner.
14
+ * The closing backtick must appear at `declarationIndentation`, alone except
15
+ * for a tail accepted by its language owner. Content is never decoded,
16
+ * dedented, or searched for language constructs.
17
+ */
18
+ export declare function scanOpaqueEmbeddedSource(source: string, start: number, declarationIndentation: string, acceptsClosingTail: (tail: string) => boolean): OpaqueEmbeddedSourceScan;
19
+ //# sourceMappingURL=embedded-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-source.d.ts","sourceRoot":"","sources":["../src/embedded-source.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,sBAAsB,EAAE,MAAM,EAC9B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAC5C,wBAAwB,CAyC1B"}