@velarscript/web 0.31.0 → 0.32.0
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/README.md +1 -1
- package/dist/analysis/calls/intrinsics/config.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/config.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/config.js +19 -0
- package/dist/analysis/calls/intrinsics/config.js.map +1 -0
- package/dist/analysis/calls/intrinsics/forms.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/forms.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/forms.js +38 -0
- package/dist/analysis/calls/intrinsics/forms.js.map +1 -0
- package/dist/analysis/calls/intrinsics/http.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/http.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/http.js +37 -0
- package/dist/analysis/calls/intrinsics/http.js.map +1 -0
- package/dist/analysis/calls/intrinsics/reactive.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/reactive.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/reactive.js +30 -0
- package/dist/analysis/calls/intrinsics/reactive.js.map +1 -0
- package/dist/analysis/calls/intrinsics/storage.d.ts +12 -0
- package/dist/analysis/calls/intrinsics/storage.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/storage.js +86 -0
- package/dist/analysis/calls/intrinsics/storage.js.map +1 -0
- package/dist/analysis/calls/intrinsics/web.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/web.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/web.js +100 -0
- package/dist/analysis/calls/intrinsics/web.js.map +1 -0
- package/dist/analysis/calls/intrinsics.d.ts +13 -0
- package/dist/analysis/calls/intrinsics.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics.js +31 -0
- package/dist/analysis/calls/intrinsics.js.map +1 -0
- package/dist/analysis/components/contracts.d.ts +19 -0
- package/dist/analysis/components/contracts.d.ts.map +1 -0
- package/dist/analysis/components/contracts.js +83 -0
- package/dist/analysis/components/contracts.js.map +1 -0
- package/dist/analysis/components/declaration.d.ts +4 -0
- package/dist/analysis/components/declaration.d.ts.map +1 -0
- package/dist/analysis/components/declaration.js +163 -0
- package/dist/analysis/components/declaration.js.map +1 -0
- package/dist/analysis/components/host.d.ts +61 -0
- package/dist/analysis/components/host.d.ts.map +1 -0
- package/dist/analysis/components/host.js +22 -0
- package/dist/analysis/components/host.js.map +1 -0
- package/dist/analysis/components/lifecycle.d.ts +22 -0
- package/dist/analysis/components/lifecycle.d.ts.map +1 -0
- package/dist/analysis/components/lifecycle.js +33 -0
- package/dist/analysis/components/lifecycle.js.map +1 -0
- package/dist/analysis/components/ownership.d.ts +74 -0
- package/dist/analysis/components/ownership.d.ts.map +1 -0
- package/dist/analysis/components/ownership.js +106 -0
- package/dist/analysis/components/ownership.js.map +1 -0
- package/dist/analysis/declarations.d.ts +99 -0
- package/dist/analysis/declarations.d.ts.map +1 -0
- package/dist/analysis/declarations.js +176 -0
- package/dist/analysis/declarations.js.map +1 -0
- package/dist/analysis/inference.d.ts +67 -0
- package/dist/analysis/inference.d.ts.map +1 -0
- package/dist/analysis/inference.js +236 -0
- package/dist/analysis/inference.js.map +1 -0
- package/dist/analysis/jsx/attributes.d.ts +103 -0
- package/dist/analysis/jsx/attributes.d.ts.map +1 -0
- package/dist/analysis/jsx/attributes.js +601 -0
- package/dist/analysis/jsx/attributes.js.map +1 -0
- package/dist/analysis/jsx/elements.d.ts +17 -0
- package/dist/analysis/jsx/elements.d.ts.map +1 -0
- package/dist/analysis/jsx/elements.js +213 -0
- package/dist/analysis/jsx/elements.js.map +1 -0
- package/dist/analysis/jsx/host.d.ts +61 -0
- package/dist/analysis/jsx/host.d.ts.map +1 -0
- package/dist/analysis/jsx/host.js +15 -0
- package/dist/analysis/jsx/host.js.map +1 -0
- package/dist/analysis/jsx/keys.d.ts +15 -0
- package/dist/analysis/jsx/keys.d.ts.map +1 -0
- package/dist/analysis/jsx/keys.js +67 -0
- package/dist/analysis/jsx/keys.js.map +1 -0
- package/dist/analysis/jsx/security.d.ts +29 -0
- package/dist/analysis/jsx/security.d.ts.map +1 -0
- package/dist/analysis/jsx/security.js +61 -0
- package/dist/analysis/jsx/security.js.map +1 -0
- package/dist/analysis/jsx-detection.d.ts +49 -0
- package/dist/analysis/jsx-detection.d.ts.map +1 -0
- package/dist/analysis/jsx-detection.js +196 -0
- package/dist/analysis/jsx-detection.js.map +1 -0
- package/dist/analysis/keyed-rebuild.d.ts +148 -0
- package/dist/analysis/keyed-rebuild.d.ts.map +1 -0
- package/dist/analysis/keyed-rebuild.js +299 -0
- package/dist/analysis/keyed-rebuild.js.map +1 -0
- package/dist/analysis/keyframes-analysis.d.ts +6 -0
- package/dist/analysis/keyframes-analysis.d.ts.map +1 -0
- package/dist/analysis/keyframes-analysis.js +79 -0
- package/dist/analysis/keyframes-analysis.js.map +1 -0
- package/dist/analysis/look/builders.d.ts +29 -0
- package/dist/analysis/look/builders.d.ts.map +1 -0
- package/dist/analysis/look/builders.js +168 -0
- package/dist/analysis/look/builders.js.map +1 -0
- package/dist/analysis/look/conditions.d.ts +13 -0
- package/dist/analysis/look/conditions.d.ts.map +1 -0
- package/dist/analysis/look/conditions.js +84 -0
- package/dist/analysis/look/conditions.js.map +1 -0
- package/dist/analysis/look/edits.d.ts +25 -0
- package/dist/analysis/look/edits.d.ts.map +1 -0
- package/dist/analysis/look/edits.js +57 -0
- package/dist/analysis/look/edits.js.map +1 -0
- package/dist/analysis/look/entries.d.ts +56 -0
- package/dist/analysis/look/entries.d.ts.map +1 -0
- package/dist/analysis/look/entries.js +223 -0
- package/dist/analysis/look/entries.js.map +1 -0
- package/dist/analysis/look/host.d.ts +47 -0
- package/dist/analysis/look/host.d.ts.map +1 -0
- package/dist/analysis/look/host.js +16 -0
- package/dist/analysis/look/host.js.map +1 -0
- package/dist/analysis/look/tokens.d.ts +75 -0
- package/dist/analysis/look/tokens.d.ts.map +1 -0
- package/dist/analysis/look/tokens.js +151 -0
- package/dist/analysis/look/tokens.js.map +1 -0
- package/dist/analysis/look/values.d.ts +45 -0
- package/dist/analysis/look/values.d.ts.map +1 -0
- package/dist/analysis/look/values.js +148 -0
- package/dist/analysis/look/values.js.map +1 -0
- package/dist/analysis/look-conditions.d.ts +47 -0
- package/dist/analysis/look-conditions.d.ts.map +1 -0
- package/dist/analysis/look-conditions.js +157 -0
- package/dist/analysis/look-conditions.js.map +1 -0
- package/dist/analysis/look-sites.d.ts +54 -0
- package/dist/analysis/look-sites.d.ts.map +1 -0
- package/dist/analysis/look-sites.js +104 -0
- package/dist/analysis/look-sites.js.map +1 -0
- package/dist/analysis/look-vocabulary-guidance.d.ts +76 -0
- package/dist/analysis/look-vocabulary-guidance.d.ts.map +1 -0
- package/dist/analysis/look-vocabulary-guidance.js +338 -0
- package/dist/analysis/look-vocabulary-guidance.js.map +1 -0
- package/dist/analysis/media-conditions.d.ts +33 -0
- package/dist/analysis/media-conditions.d.ts.map +1 -0
- package/dist/analysis/media-conditions.js +92 -0
- package/dist/analysis/media-conditions.js.map +1 -0
- package/dist/analysis/program-passes.d.ts +106 -0
- package/dist/analysis/program-passes.d.ts.map +1 -0
- package/dist/analysis/program-passes.js +149 -0
- package/dist/analysis/program-passes.js.map +1 -0
- package/dist/analysis/reactivity/bindings.d.ts +37 -0
- package/dist/analysis/reactivity/bindings.d.ts.map +1 -0
- package/dist/analysis/reactivity/bindings.js +88 -0
- package/dist/analysis/reactivity/bindings.js.map +1 -0
- package/dist/analysis/reactivity/derived.d.ts +39 -0
- package/dist/analysis/reactivity/derived.d.ts.map +1 -0
- package/dist/analysis/reactivity/derived.js +80 -0
- package/dist/analysis/reactivity/derived.js.map +1 -0
- package/dist/analysis/reactivity/host.d.ts +38 -0
- package/dist/analysis/reactivity/host.d.ts.map +1 -0
- package/dist/analysis/reactivity/host.js +14 -0
- package/dist/analysis/reactivity/host.js.map +1 -0
- package/dist/analysis/reactivity/retired-accessors.d.ts +82 -0
- package/dist/analysis/reactivity/retired-accessors.d.ts.map +1 -0
- package/dist/analysis/reactivity/retired-accessors.js +118 -0
- package/dist/analysis/reactivity/retired-accessors.js.map +1 -0
- package/dist/analysis/renderable.d.ts +47 -0
- package/dist/analysis/renderable.d.ts.map +1 -0
- package/dist/analysis/renderable.js +105 -0
- package/dist/analysis/renderable.js.map +1 -0
- package/dist/analysis/routes.d.ts +64 -0
- package/dist/analysis/routes.d.ts.map +1 -0
- package/dist/analysis/routes.js +182 -0
- package/dist/analysis/routes.js.map +1 -0
- package/dist/analysis/url-attributes.d.ts +12 -0
- package/dist/analysis/url-attributes.d.ts.map +1 -0
- package/dist/analysis/url-attributes.js +48 -0
- package/dist/analysis/url-attributes.js.map +1 -0
- package/dist/analysis/watch-cycles.d.ts +102 -0
- package/dist/analysis/watch-cycles.d.ts.map +1 -1
- package/dist/analysis/watch-cycles.js +240 -1
- package/dist/analysis/watch-cycles.js.map +1 -1
- package/dist/analysis/watch-subject.d.ts +45 -0
- package/dist/analysis/watch-subject.d.ts.map +1 -0
- package/dist/analysis/watch-subject.js +272 -0
- package/dist/analysis/watch-subject.js.map +1 -0
- package/dist/analysis/web-types.d.ts +27 -0
- package/dist/analysis/web-types.d.ts.map +1 -0
- package/dist/analysis/web-types.js +170 -0
- package/dist/analysis/web-types.js.map +1 -0
- package/dist/analyzer.d.ts +18 -617
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +208 -4853
- package/dist/analyzer.js.map +1 -1
- package/dist/compiler.d.ts +20 -0
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +29 -864
- package/dist/compiler.js.map +1 -1
- package/dist/documentation.d.ts +28 -0
- package/dist/documentation.d.ts.map +1 -0
- package/dist/documentation.js +67 -0
- package/dist/documentation.js.map +1 -0
- package/dist/editor/completions.d.ts +12 -0
- package/dist/editor/completions.d.ts.map +1 -0
- package/dist/editor/completions.js +6 -0
- package/dist/editor/completions.js.map +1 -0
- package/dist/editor/jsx-completion.d.ts +12 -0
- package/dist/editor/jsx-completion.d.ts.map +1 -0
- package/dist/editor/jsx-completion.js +137 -0
- package/dist/editor/jsx-completion.js.map +1 -0
- package/dist/editor/look-completion.d.ts +29 -0
- package/dist/editor/look-completion.d.ts.map +1 -0
- package/dist/editor/look-completion.js +159 -0
- package/dist/editor/look-completion.js.map +1 -0
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +12 -288
- package/dist/editor.js.map +1 -1
- package/dist/emit/components.d.ts +33 -0
- package/dist/emit/components.d.ts.map +1 -0
- package/dist/emit/components.js +135 -0
- package/dist/emit/components.js.map +1 -0
- package/dist/emit/jsx.d.ts +57 -0
- package/dist/emit/jsx.d.ts.map +1 -0
- package/dist/emit/jsx.js +384 -0
- package/dist/emit/jsx.js.map +1 -0
- package/dist/emit/look-css.d.ts +44 -0
- package/dist/emit/look-css.d.ts.map +1 -0
- package/dist/emit/look-css.js +177 -0
- package/dist/emit/look-css.js.map +1 -0
- package/dist/emit/look.d.ts +39 -0
- package/dist/emit/look.d.ts.map +1 -0
- package/dist/emit/look.js +218 -0
- package/dist/emit/look.js.map +1 -0
- package/dist/emit/runtime-imports.d.ts +40 -0
- package/dist/emit/runtime-imports.d.ts.map +1 -0
- package/dist/emit/runtime-imports.js +184 -0
- package/dist/emit/runtime-imports.js.map +1 -0
- package/dist/emitter.d.ts +15 -68
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +79 -1008
- package/dist/emitter.js.map +1 -1
- package/dist/look/animation.d.ts +7 -0
- package/dist/look/animation.d.ts.map +1 -0
- package/dist/look/animation.js +13 -0
- package/dist/look/animation.js.map +1 -0
- package/dist/look/builders.d.ts +35 -0
- package/dist/look/builders.d.ts.map +1 -0
- package/dist/look/builders.js +74 -0
- package/dist/look/builders.js.map +1 -0
- package/dist/look/css-functions.d.ts +28 -0
- package/dist/look/css-functions.d.ts.map +1 -0
- package/dist/look/css-functions.js +54 -0
- package/dist/look/css-functions.js.map +1 -0
- package/dist/look/keyword-sets.d.ts +41 -0
- package/dist/look/keyword-sets.d.ts.map +1 -0
- package/dist/look/keyword-sets.js +117 -0
- package/dist/look/keyword-sets.js.map +1 -0
- package/dist/look/keywords.d.ts +55 -0
- package/dist/look/keywords.d.ts.map +1 -0
- package/dist/look/keywords.js +387 -0
- package/dist/look/keywords.js.map +1 -0
- package/dist/look/media.d.ts +19 -0
- package/dist/look/media.d.ts.map +1 -0
- package/dist/look/media.js +27 -0
- package/dist/look/media.js.map +1 -0
- package/dist/look/naming.d.ts +9 -0
- package/dist/look/naming.d.ts.map +1 -0
- package/dist/look/naming.js +45 -0
- package/dist/look/naming.js.map +1 -0
- package/dist/look/properties.d.ts +16 -0
- package/dist/look/properties.d.ts.map +1 -0
- package/dist/look/properties.js +52 -0
- package/dist/look/properties.js.map +1 -0
- package/dist/look/shorthands.d.ts +25 -0
- package/dist/look/shorthands.d.ts.map +1 -0
- package/dist/look/shorthands.js +130 -0
- package/dist/look/shorthands.js.map +1 -0
- package/dist/look/tokens.d.ts +38 -0
- package/dist/look/tokens.d.ts.map +1 -0
- package/dist/look/tokens.js +59 -0
- package/dist/look/tokens.js.map +1 -0
- package/dist/look/units.d.ts +24 -0
- package/dist/look/units.d.ts.map +1 -0
- package/dist/look/units.js +33 -0
- package/dist/look/units.js.map +1 -0
- package/dist/look.d.ts +32 -227
- package/dist/look.d.ts.map +1 -1
- package/dist/look.js +28 -933
- package/dist/look.js.map +1 -1
- package/dist/module-roster.d.ts +16 -0
- package/dist/module-roster.d.ts.map +1 -0
- package/dist/module-roster.js +28 -0
- package/dist/module-roster.js.map +1 -0
- package/dist/modules/app.d.ts +9 -0
- package/dist/modules/app.d.ts.map +1 -0
- package/dist/modules/app.js +20 -0
- package/dist/modules/app.js.map +1 -0
- package/dist/modules/browser-test.d.ts +9 -0
- package/dist/modules/browser-test.d.ts.map +1 -0
- package/dist/modules/browser-test.js +67 -0
- package/dist/modules/browser-test.js.map +1 -0
- package/dist/modules/browser.d.ts +10 -0
- package/dist/modules/browser.d.ts.map +1 -0
- package/dist/modules/browser.js +89 -0
- package/dist/modules/browser.js.map +1 -0
- package/dist/modules/config.d.ts +9 -0
- package/dist/modules/config.d.ts.map +1 -0
- package/dist/modules/config.js +14 -0
- package/dist/modules/config.js.map +1 -0
- package/dist/modules/files.d.ts +9 -0
- package/dist/modules/files.d.ts.map +1 -0
- package/dist/modules/files.js +16 -0
- package/dist/modules/files.js.map +1 -0
- package/dist/modules/forms.d.ts +9 -0
- package/dist/modules/forms.d.ts.map +1 -0
- package/dist/modules/forms.js +26 -0
- package/dist/modules/forms.js.map +1 -0
- package/dist/modules/http.d.ts +9 -0
- package/dist/modules/http.d.ts.map +1 -0
- package/dist/modules/http.js +127 -0
- package/dist/modules/http.js.map +1 -0
- package/dist/modules/look.d.ts +9 -0
- package/dist/modules/look.d.ts.map +1 -0
- package/dist/modules/look.js +58 -0
- package/dist/modules/look.js.map +1 -0
- package/dist/modules/realtime.d.ts +9 -0
- package/dist/modules/realtime.d.ts.map +1 -0
- package/dist/modules/realtime.js +163 -0
- package/dist/modules/realtime.js.map +1 -0
- package/dist/modules/storage.d.ts +9 -0
- package/dist/modules/storage.d.ts.map +1 -0
- package/dist/modules/storage.js +59 -0
- package/dist/modules/storage.js.map +1 -0
- package/dist/modules/types.d.ts +78 -0
- package/dist/modules/types.d.ts.map +1 -0
- package/dist/modules/types.js +154 -0
- package/dist/modules/types.js.map +1 -0
- package/dist/modules/web.d.ts +9 -0
- package/dist/modules/web.d.ts.map +1 -0
- package/dist/modules/web.js +63 -0
- package/dist/modules/web.js.map +1 -0
- package/dist/modules/websocket.d.ts +11 -0
- package/dist/modules/websocket.d.ts.map +1 -0
- package/dist/modules/websocket.js +75 -0
- package/dist/modules/websocket.js.map +1 -0
- package/dist/parser/expressions/jsx.d.ts +17 -0
- package/dist/parser/expressions/jsx.d.ts.map +1 -0
- package/dist/parser/expressions/jsx.js +43 -0
- package/dist/parser/expressions/jsx.js.map +1 -0
- package/dist/parser/expressions/keyframes.d.ts +15 -0
- package/dist/parser/expressions/keyframes.d.ts.map +1 -0
- package/dist/parser/expressions/keyframes.js +33 -0
- package/dist/parser/expressions/keyframes.js.map +1 -0
- package/dist/parser/expressions/look.d.ts +16 -0
- package/dist/parser/expressions/look.d.ts.map +1 -0
- package/dist/parser/expressions/look.js +37 -0
- package/dist/parser/expressions/look.js.map +1 -0
- package/dist/parser/expressions/visual-block.d.ts +17 -0
- package/dist/parser/expressions/visual-block.d.ts.map +1 -0
- package/dist/parser/expressions/visual-block.js +21 -0
- package/dist/parser/expressions/visual-block.js.map +1 -0
- package/dist/parser/keyframes-source.d.ts +24 -0
- package/dist/parser/keyframes-source.d.ts.map +1 -0
- package/dist/parser/keyframes-source.js +133 -0
- package/dist/parser/keyframes-source.js.map +1 -0
- package/dist/parser/look-source.d.ts +25 -0
- package/dist/parser/look-source.d.ts.map +1 -0
- package/dist/parser/look-source.js +189 -0
- package/dist/parser/look-source.js.map +1 -0
- package/dist/parser/spans.d.ts +24 -0
- package/dist/parser/spans.d.ts.map +1 -0
- package/dist/parser/spans.js +113 -0
- package/dist/parser/spans.js.map +1 -0
- package/dist/parser/statements/components.d.ts +37 -0
- package/dist/parser/statements/components.d.ts.map +1 -0
- package/dist/parser/statements/components.js +185 -0
- package/dist/parser/statements/components.js.map +1 -0
- package/dist/parser/statements/heads.d.ts +38 -0
- package/dist/parser/statements/heads.d.ts.map +1 -0
- package/dist/parser/statements/heads.js +55 -0
- package/dist/parser/statements/heads.js.map +1 -0
- package/dist/parser/statements/imports.d.ts +9 -0
- package/dist/parser/statements/imports.d.ts.map +1 -0
- package/dist/parser/statements/imports.js +31 -0
- package/dist/parser/statements/imports.js.map +1 -0
- package/dist/parser/statements/reactive.d.ts +31 -0
- package/dist/parser/statements/reactive.d.ts.map +1 -0
- package/dist/parser/statements/reactive.js +68 -0
- package/dist/parser/statements/reactive.js.map +1 -0
- package/dist/parser/statements/unsafe-css.d.ts +21 -0
- package/dist/parser/statements/unsafe-css.d.ts.map +1 -0
- package/dist/parser/statements/unsafe-css.js +42 -0
- package/dist/parser/statements/unsafe-css.js.map +1 -0
- package/dist/parser.d.ts +37 -50
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +98 -882
- package/dist/parser.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { spanIdentity } from "@velarscript/compiler/extension";
|
|
2
|
+
import { isWebJsx, webWatchSubjectLabel, } from "../ast.js";
|
|
3
|
+
export function emitComponent(host, statement, depth) {
|
|
4
|
+
const indentation = " ".repeat(depth);
|
|
5
|
+
const outerIndent = " ".repeat(depth + 1);
|
|
6
|
+
const bodyIndent = " ".repeat(depth + 2);
|
|
7
|
+
const previousScope = host.currentScope;
|
|
8
|
+
const previousJsxNamespace = host.currentJsxNamespace;
|
|
9
|
+
host.currentScope = "__velarComponentScope";
|
|
10
|
+
host.currentJsxNamespace = "__velarNamespace";
|
|
11
|
+
// Props are live reactive inputs: every parameter becomes a read-only
|
|
12
|
+
// handle over the per-instance props store, so prop reads lower through
|
|
13
|
+
// .get() exactly like state reads do.
|
|
14
|
+
const lines = [];
|
|
15
|
+
for (const parameter of statement.parameters) {
|
|
16
|
+
if (parameter.defaultValue) {
|
|
17
|
+
lines.push(`${bodyIndent}const ${parameter.name} = __velarProp(__velarProps, ${JSON.stringify(parameter.name)}, () => (${host.emitMappedExpression(parameter.defaultValue)}));`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
lines.push(`${bodyIndent}const ${parameter.name} = __velarRequiredProp(__velarProps, ${JSON.stringify(parameter.name)}, ${JSON.stringify(statement.name)});`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
let render = null;
|
|
24
|
+
let expose = null;
|
|
25
|
+
let mountedBody = [];
|
|
26
|
+
let cleanupBody = [];
|
|
27
|
+
for (const item of statement.body) {
|
|
28
|
+
if (item.kind === "ExtensionStatement:web:state") {
|
|
29
|
+
lines.push(`${bodyIndent}const ${item.name} = __velarState(${host.emitMappedExpression(item.initializer)}, ${JSON.stringify(item.name)});`);
|
|
30
|
+
}
|
|
31
|
+
else if (item.kind === "ExtensionStatement:web:computed") {
|
|
32
|
+
lines.push(`${bodyIndent}const ${item.name} = __velarComputed(() => (${host.emitMappedExpression(item.initializer)}));`);
|
|
33
|
+
}
|
|
34
|
+
else if (item.kind === "ExtensionStatement:web:resource") {
|
|
35
|
+
lines.push(`${bodyIndent}const ${item.name} = __velarResource(() => ${host.emitMappedExpression(item.initializer)}, __velarComponentScope, ${JSON.stringify(item.name)});`);
|
|
36
|
+
}
|
|
37
|
+
else if (item.kind === "ExtensionStatement:web:action") {
|
|
38
|
+
const parameters = item.parameters.map((parameter) => host.emitParameter(parameter.name, parameter.defaultValue, parameter.rest)).join(", ");
|
|
39
|
+
const actionLines = [...host.emitStatementLines(item.body, depth + 3)];
|
|
40
|
+
if (!host.blockAlwaysReturns(item.body))
|
|
41
|
+
actionLines.push(`${" ".repeat(depth + 3)}return null;`);
|
|
42
|
+
const actionBody = actionLines.join("\n");
|
|
43
|
+
lines.push(`${bodyIndent}const ${item.name} = __velarAction(async (${parameters}) => {${actionBody ? `\n${actionBody}\n${bodyIndent}` : ""}}, __velarComponentScope, ${JSON.stringify(item.name)});`);
|
|
44
|
+
}
|
|
45
|
+
else if (item.kind === "ExtensionStatement:web:watch") {
|
|
46
|
+
const parameters = [item.currentName, item.previousName].filter((name) => name !== null).join(", ");
|
|
47
|
+
const watchLines = host.emitStatementLines(item.body, depth + 3).join("\n");
|
|
48
|
+
lines.push(`${bodyIndent}__velarWatch(() => ${host.emitMappedExpression(item.expression)}, (${parameters}) => {${watchLines ? `\n${watchLines}\n${bodyIndent}` : ""}}, __velarComponentScope, ${JSON.stringify(webWatchSubjectLabel(item.expression))});`);
|
|
49
|
+
}
|
|
50
|
+
else if (item.kind === "ExtensionStatement:web:expose") {
|
|
51
|
+
expose ??= item.value;
|
|
52
|
+
}
|
|
53
|
+
else if (item.kind === "ExtensionStatement:web:mounted") {
|
|
54
|
+
mountedBody = item.body;
|
|
55
|
+
}
|
|
56
|
+
else if (item.kind === "ExtensionStatement:web:cleanup") {
|
|
57
|
+
cleanupBody = item.body;
|
|
58
|
+
}
|
|
59
|
+
else if (item.kind === "ReturnStatement") {
|
|
60
|
+
render = item.value;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
lines.push(host.emitMappedStatement(item, depth + 2));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// A direct JSX root owns its own attribute/child observers and keeps a
|
|
67
|
+
// stable host. Every other WebNode expression is a live root position:
|
|
68
|
+
// evaluate it inside a dedicated child scope so conditions and helper
|
|
69
|
+
// calls can replace the root without rerunning component setup.
|
|
70
|
+
let renderedRoot = "__velarDomCreateComment(\"missing render\")";
|
|
71
|
+
if (render) {
|
|
72
|
+
if (isWebJsx(render))
|
|
73
|
+
renderedRoot = host.emitMappedExpression(render);
|
|
74
|
+
else {
|
|
75
|
+
const rootScope = host.currentScope;
|
|
76
|
+
host.currentScope = "__velarDynamicScope";
|
|
77
|
+
try {
|
|
78
|
+
renderedRoot = `__velarDynamicComponent((__velarDynamicScope) => ${host.emitMappedExpression(render)}, __velarComponentScope)`;
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
host.currentScope = rootScope;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
lines.push(`${bodyIndent}const __velarRoot = ${renderedRoot};`);
|
|
86
|
+
lines.push(`${bodyIndent}const __velarHandle = ${expose ? `__velarComponentHandle(${host.emitMappedExpression(expose)}, ${JSON.stringify(statement.name)})` : "null"};`);
|
|
87
|
+
lines.push(`${bodyIndent}if (__velarProps.class !== undefined) __velarClassBindRoot(__velarRoot, () => __velarProps.class, __velarComponentScope);`);
|
|
88
|
+
lines.push(`${bodyIndent}if (__velarProps.look !== undefined) __velarLookBindRoot(__velarRoot, () => __velarProps.look, __velarComponentScope);`);
|
|
89
|
+
// 'class' and 'look' are fields a component may declare and read, so they
|
|
90
|
+
// arrive as props. The 'style:' slot is not: it is bound to the instance
|
|
91
|
+
// root by whoever wrote it, at the instantiation site, for every component
|
|
92
|
+
// alike -- see __velarInstantiate.
|
|
93
|
+
const mounted = host.emitStatementLines(mountedBody, depth + 3).join("\n");
|
|
94
|
+
const cleanup = cleanupBody.map((child) => {
|
|
95
|
+
if (["VariableDeclaration", "FunctionDeclaration", "ClassDeclaration", "TypeDeclaration", "EnumDeclaration"].includes(child.kind)) {
|
|
96
|
+
return host.emitMappedStatement(child, depth + 3);
|
|
97
|
+
}
|
|
98
|
+
const inner = host.emitMappedStatement(child, depth + 4);
|
|
99
|
+
if (!inner)
|
|
100
|
+
return "";
|
|
101
|
+
const cleanupIndent = " ".repeat(depth + 3);
|
|
102
|
+
return `${cleanupIndent}__velarCleanupStep(() => {\n${inner}\n${cleanupIndent}}, __velarComponentScope);`;
|
|
103
|
+
}).filter(Boolean).join("\n");
|
|
104
|
+
const cleanupBodyText = `() => {${cleanup ? `\n${cleanup}\n${bodyIndent}` : ""}}`;
|
|
105
|
+
const functionLines = [
|
|
106
|
+
`${outerIndent}const __velarComponentScope = __velarSetupBegin(__velarScope(${JSON.stringify(statement.name)}));`,
|
|
107
|
+
`${outerIndent}let __velarConstructionCleanup = () => {};`,
|
|
108
|
+
`${outerIndent}try {`,
|
|
109
|
+
`${bodyIndent}__velarConstructionCleanup = ${cleanupBodyText};`,
|
|
110
|
+
...lines,
|
|
111
|
+
`${bodyIndent}return __velarSetupEnd(__velarComponent(__velarRoot, __velarComponentScope, async () => {${mounted ? `\n${mounted}\n${bodyIndent}` : ""}}, __velarConstructionCleanup, __velarHandle));`,
|
|
112
|
+
`${outerIndent}} catch (__velarConstructionError) {`,
|
|
113
|
+
`${bodyIndent}__velarSetupEnd(null);`,
|
|
114
|
+
`${bodyIndent}try { __velarConstructionCleanup(); } catch (__velarCleanupError) { __velarReport(__velarCleanupError, "cleanup", __velarComponentScope); }`,
|
|
115
|
+
`${bodyIndent}__velarDestroyScope(__velarComponentScope);`,
|
|
116
|
+
`${bodyIndent}throw __velarConstructionError;`,
|
|
117
|
+
`${outerIndent}}`,
|
|
118
|
+
];
|
|
119
|
+
host.currentScope = previousScope;
|
|
120
|
+
host.currentJsxNamespace = previousJsxNamespace;
|
|
121
|
+
return `${indentation}${statement.exported ? "export " : ""}function ${statement.name}(__velarProps = {}, __velarNamespace = "html") {\n${functionLines.filter(Boolean).join("\n")}\n${indentation}}`;
|
|
122
|
+
}
|
|
123
|
+
export function emitReactiveAssignment(host, statement, depth) {
|
|
124
|
+
const indentation = " ".repeat(depth);
|
|
125
|
+
if (statement.target.kind === "IdentifierExpression"
|
|
126
|
+
&& host.hints.reactiveReferences.get(spanIdentity(statement.target.span)) === "state") {
|
|
127
|
+
const state = statement.target.name;
|
|
128
|
+
const value = host.emitMappedExpression(statement.value);
|
|
129
|
+
if (statement.operator === "=")
|
|
130
|
+
return `${indentation}${state}.set(${value});`;
|
|
131
|
+
return `${indentation}${state}.set(${state}.get() ${statement.operator.slice(0, -1)} ${value});`;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/emit/components.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,QAAQ,EACR,oBAAoB,GAErB,MAAM,WAAW,CAAC;AAoBnB,MAAM,UAAU,aAAa,CAAC,IAAuB,EAAE,SAA+B,EAAE,KAAa;IACnG,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,YAAY,GAAG,uBAAuB,CAAC;IAC5C,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;IAC9C,sEAAsE;IACtE,wEAAwE;IACxE,sCAAsC;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,SAAS,CAAC,IAAI,gCAAgC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnL,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,SAAS,CAAC,IAAI,wCAAwC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChK,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,IAAI,WAAW,GAAyB,EAAE,CAAC;IAC3C,IAAI,WAAW,GAAyB,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,8BAA8B,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9I,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iCAAiC,EAAE,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,IAAI,CAAC,IAAI,6BAA6B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3H,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iCAAiC,EAAE,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,IAAI,CAAC,IAAI,4BAA4B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9K,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,+BAA+B,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7I,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;YACnG,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,IAAI,CAAC,IAAI,2BAA2B,UAAU,SAAS,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxM,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,8BAA8B,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpH,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5E,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,sBAAsB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,UAAU,SAAS,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,6BAA6B,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7P,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,+BAA+B,EAAE,CAAC;YACzD,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAgC,EAAE,CAAC;YAC1D,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAgC,EAAE,CAAC;YAC1D,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC3C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,sEAAsE;IACtE,gEAAgE;IAChE,IAAI,YAAY,GAAG,6CAA6C,CAAC;IACjE,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,QAAQ,CAAC,MAAM,CAAC;YAAE,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;aAClE,CAAC;YACJ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;YACpC,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC;YAC1C,IAAI,CAAC;gBACH,YAAY,GAAG,oDAAoD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,0BAA0B,CAAC;YACjI,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,uBAAuB,YAAY,GAAG,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,yBAAyB,MAAM,CAAC,CAAC,CAAC,0BAA0B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzK,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,2HAA2H,CAAC,CAAC;IACrJ,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,wHAAwH,CAAC,CAAC;IAClJ,0EAA0E;IAC1E,yEAAyE;IACzE,2EAA2E;IAC3E,mCAAmC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACvH,IAAI,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClI,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7C,OAAO,GAAG,aAAa,+BAA+B,KAAK,KAAK,aAAa,4BAA4B,CAAC;IAC5G,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,eAAe,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAClF,MAAM,aAAa,GAAG;QACpB,GAAG,WAAW,gEAAgE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK;QACjH,GAAG,WAAW,4CAA4C;QAC1D,GAAG,WAAW,OAAO;QACrB,GAAG,UAAU,gCAAgC,eAAe,GAAG;QAC/D,GAAG,KAAK;QACR,GAAG,UAAU,4FAA4F,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,iDAAiD;QACtM,GAAG,WAAW,sCAAsC;QACpD,GAAG,UAAU,wBAAwB;QACrC,GAAG,UAAU,6IAA6I;QAC1J,GAAG,UAAU,6CAA6C;QAC1D,GAAG,UAAU,iCAAiC;QAC9C,GAAG,WAAW,GAAG;KAClB,CAAC;IAEF,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;IAClC,IAAI,CAAC,mBAAmB,GAAG,oBAAoB,CAAC;IAChD,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,SAAS,CAAC,IAAI,qDAAqD,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,WAAW,GAAG,CAAC;AACxM,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAuB,EAAE,SAA8B,EAAE,KAAa;IAC3G,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAsB;WAC/C,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxF,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,SAAS,CAAC,QAAQ,KAAK,GAAG;YAAE,OAAO,GAAG,WAAW,GAAG,KAAK,QAAQ,KAAK,IAAI,CAAC;QAC/E,OAAO,GAAG,WAAW,GAAG,KAAK,QAAQ,KAAK,UAAU,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IACnG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What JSX becomes: a component instance, a native element and its attributes,
|
|
3
|
+
* and the children each of them owns.
|
|
4
|
+
*
|
|
5
|
+
* D115 P4 R3d: the family owns every lowering that builds DOM, plus the two
|
|
6
|
+
* recognizers the analyzer shares with it — `jsxKeyedList` and
|
|
7
|
+
* `dynamicChildLeaves` — so the fast path emission takes and the fast path
|
|
8
|
+
* analysis diagnoses are one definition.
|
|
9
|
+
*/
|
|
10
|
+
import type { Expression, LoweringHints, Span, Statement } from "@velarscript/compiler/extension";
|
|
11
|
+
import { type WebJsxAttribute as JSXAttribute, type WebJsxElementExpression as JSXElementExpression } from "../ast.ts";
|
|
12
|
+
/**
|
|
13
|
+
* What JSX emission reads and writes on the emitter. The three scope fields are
|
|
14
|
+
* live: a nested element is emitted while they name the scope it builds into,
|
|
15
|
+
* and every path restores what it found.
|
|
16
|
+
*/
|
|
17
|
+
export interface JsxEmitHost {
|
|
18
|
+
currentJsxNamespace: string;
|
|
19
|
+
currentScope: string | null;
|
|
20
|
+
readonly hints: LoweringHints;
|
|
21
|
+
jsxId: number;
|
|
22
|
+
readonly moduleEvaluation: boolean;
|
|
23
|
+
emitMappedExpression(expression: Expression): string;
|
|
24
|
+
emitMappedJavaScript(sourceSpan: Span, render: () => string): string;
|
|
25
|
+
emitObjectKey(name: string): string;
|
|
26
|
+
emitStatement(statement: Statement, depth: number): string;
|
|
27
|
+
}
|
|
28
|
+
export declare function emitJsx(host: JsxEmitHost, expression: JSXElementExpression, scope: string, asChild: boolean, namespace: string, mapped?: boolean): string;
|
|
29
|
+
export interface JsxKeyedList {
|
|
30
|
+
readonly source: Expression;
|
|
31
|
+
readonly arrow: Extract<Expression, {
|
|
32
|
+
kind: "ArrowFunctionExpression";
|
|
33
|
+
}> & {
|
|
34
|
+
readonly body: JSXElementExpression;
|
|
35
|
+
};
|
|
36
|
+
readonly key: JSXAttribute | null;
|
|
37
|
+
}
|
|
38
|
+
export interface DynamicChildGuard {
|
|
39
|
+
readonly condition: Expression;
|
|
40
|
+
readonly thenBranch: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface DynamicChildLeaf {
|
|
43
|
+
readonly expression: Expression;
|
|
44
|
+
readonly list: JsxKeyedList | null;
|
|
45
|
+
readonly guards: readonly DynamicChildGuard[];
|
|
46
|
+
}
|
|
47
|
+
export declare function jsxKeyedList(expression: Expression): JsxKeyedList | null;
|
|
48
|
+
/**
|
|
49
|
+
* F1: the analyzer's verdict that an interpolation's checked type renders as
|
|
50
|
+
* exactly one text node. The emitter cannot re-derive it — the checked type is
|
|
51
|
+
* gone by lowering time — so the analyzer stamps the child expression's span
|
|
52
|
+
* and the emitter reads it back through the extension-hint channel that
|
|
53
|
+
* `LOOK_ARITHMETIC_HINT` already uses.
|
|
54
|
+
*/
|
|
55
|
+
export declare const JSX_SCALAR_TEXT_HINT = "@velarscript/web:jsx-scalar-text";
|
|
56
|
+
export declare function dynamicChildLeaves(expression: Expression, guards?: readonly DynamicChildGuard[]): readonly DynamicChildLeaf[];
|
|
57
|
+
//# sourceMappingURL=jsx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../src/emit/jsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAElG,OAAO,EACL,KAAK,eAAe,IAAI,YAAY,EACpC,KAAK,uBAAuB,IAAI,oBAAoB,EACrD,MAAM,WAAW,CAAC;AAInB;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;IACrD,oBAAoB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC;IACrE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,MAAM,CAGtJ;AA4UD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,yBAAyB,CAAA;KAAE,CAAC,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE,CAAC;IACnH,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC/C;AAOD,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAOxE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,qCAAqC,CAAC;AAoBvE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,GAAE,SAAS,iBAAiB,EAAO,GAAG,SAAS,gBAAgB,EAAE,CAUjI"}
|
package/dist/emit/jsx.js
ADDED
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import { spanIdentity } from "@velarscript/compiler/extension";
|
|
2
|
+
import {} from "../ast.js";
|
|
3
|
+
import { cssPropertyName } from "../look.js";
|
|
4
|
+
import { lookToken } from "./look-css.js";
|
|
5
|
+
export function emitJsx(host, expression, scope, asChild, namespace, mapped = true) {
|
|
6
|
+
const render = () => emitJsxCode(host, expression, scope, asChild, namespace);
|
|
7
|
+
return mapped ? host.emitMappedJavaScript(expression.span, render) : render();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A capitalized tag is a component instance; everything else is an element the
|
|
11
|
+
* emitter builds itself.
|
|
12
|
+
*/
|
|
13
|
+
function emitJsxCode(host, expression, scope, asChild, namespace) {
|
|
14
|
+
return /^[A-Z]/u.test(expression.tag)
|
|
15
|
+
? emitComponentElement(host, expression, scope, asChild, namespace)
|
|
16
|
+
: emitNativeElement(host, expression, scope, namespace);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* `<App … />`: the props, Look and Style slots, children thunk and `ref` setter
|
|
20
|
+
* one component instantiation is handed, and which of the four instantiation
|
|
21
|
+
* forms the position calls for.
|
|
22
|
+
*/
|
|
23
|
+
function emitComponentElement(host, expression, scope, asChild, namespace) {
|
|
24
|
+
const reactiveComponent = host.hints.reactiveReferences.has(spanIdentity(expression.tagSpan));
|
|
25
|
+
const componentScope = reactiveComponent ? "__velarDynamicScope" : scope;
|
|
26
|
+
const previousScope = host.currentScope;
|
|
27
|
+
if (reactiveComponent)
|
|
28
|
+
host.currentScope = componentScope;
|
|
29
|
+
try {
|
|
30
|
+
// Static component identity keeps the existing stable child fast path.
|
|
31
|
+
// A reactive Component value owns a dynamic region that remounts only
|
|
32
|
+
// when the constructor identity itself changes; ordinary prop updates
|
|
33
|
+
// continue through the child's live prop cells.
|
|
34
|
+
const properties = expression.attributes
|
|
35
|
+
.filter((attribute) => attribute.name !== "key" && attribute.name !== "ref" && attribute.name !== "look" && !attribute.name.startsWith("look:")
|
|
36
|
+
&& attribute.name !== "style" && !attribute.name.startsWith("style:"))
|
|
37
|
+
.map((attribute) => host.emitMappedJavaScript(attribute.span, () => `${host.emitObjectKey(attribute.name)}: () => (${emitJsxAttributeValue(host, attribute)})`));
|
|
38
|
+
const lookValue = emitJsxLookValue(host, expression);
|
|
39
|
+
const lookAttribute = expression.attributes.find((attribute) => attribute.name === "look" || attribute.name.startsWith("look:"));
|
|
40
|
+
if (lookValue && lookAttribute) {
|
|
41
|
+
properties.push(host.emitMappedJavaScript(lookAttribute.span, () => `look: () => (${lookValue})`));
|
|
42
|
+
}
|
|
43
|
+
const styleValue = emitJsxStyleValue(host, expression);
|
|
44
|
+
const styleAttribute = expression.attributes.find((attribute) => attribute.name.startsWith("style:"));
|
|
45
|
+
if (styleValue && styleAttribute) {
|
|
46
|
+
properties.push(host.emitMappedJavaScript(styleAttribute.span, () => `__velarStyle: () => (${styleValue})`));
|
|
47
|
+
}
|
|
48
|
+
// Children stay a thunk so the charter's evaluation order holds at
|
|
49
|
+
// the runtime boundary: props left to right, then children, then the
|
|
50
|
+
// component function. The thunk takes the scope to build into, so the
|
|
51
|
+
// position that shows the slot owns what it built and destroys it when
|
|
52
|
+
// it stops showing it.
|
|
53
|
+
const children = hasMeaningfulChildren(expression.children)
|
|
54
|
+
? `(__velarChildrenScope = ${componentScope}) => (${emitJsxChildrenCode(host, expression.children, namespace)})`
|
|
55
|
+
: "undefined";
|
|
56
|
+
const ref = expression.attributes.find((attribute) => attribute.name === "ref")?.value;
|
|
57
|
+
const refSetter = ref && typeof ref !== "string" && ref.kind === "IdentifierExpression"
|
|
58
|
+
? `(next, previous) => { if (previous === undefined || ${ref.name} === previous) ${ref.name} = next; }`
|
|
59
|
+
: null;
|
|
60
|
+
const component = reactiveComponent ? `${expression.tag}.get()` : expression.tag;
|
|
61
|
+
const arguments_ = `${component}, { ${properties.join(", ")} }, ${children}, ${componentScope}, ${namespace}${refSetter ? `, ${refSetter}` : ""}`;
|
|
62
|
+
if (reactiveComponent) {
|
|
63
|
+
return `__velarDynamicComponent((__velarDynamicScope) => __velarChild(${arguments_}), ${scope})`;
|
|
64
|
+
}
|
|
65
|
+
if (asChild)
|
|
66
|
+
return `__velarChild(${arguments_})`;
|
|
67
|
+
// D90 R4-b's designed site: `const root = <App />` builds its instance
|
|
68
|
+
// while the module evaluates, which is outside every transaction the
|
|
69
|
+
// runtime owns. The site stays legal and eager; only its failure moves,
|
|
70
|
+
// from an uncaught module-evaluation throw to the same no-blank-page
|
|
71
|
+
// machinery `mount` has always run.
|
|
72
|
+
return `${host.moduleEvaluation ? "__velarModuleInstantiate" : "__velarInstantiate"}(${arguments_})`;
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
host.currentScope = previousScope;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* `<div … />`: the element, the attributes bound to it, and the children
|
|
80
|
+
* appended to it, all inside the immediately-invoked builder the position
|
|
81
|
+
* evaluates.
|
|
82
|
+
*/
|
|
83
|
+
function emitNativeElement(host, expression, scope, namespace) {
|
|
84
|
+
const id = ++host.jsxId;
|
|
85
|
+
const element = `__velarElement${id}`;
|
|
86
|
+
const elementNamespace = expression.tag === "svg" ? '"svg"' : namespace;
|
|
87
|
+
const childNamespace = expression.tag === "foreignObject" ? '"html"' : elementNamespace;
|
|
88
|
+
const lines = [expression.tag
|
|
89
|
+
? `const ${element} = __velarCreateElement(${JSON.stringify(expression.tag)}, ${elementNamespace});`
|
|
90
|
+
: `const ${element} = __velarDomCreateFragment();`];
|
|
91
|
+
let emittedLook = false;
|
|
92
|
+
let emittedStyle = false;
|
|
93
|
+
for (const attribute of expression.attributes) {
|
|
94
|
+
if (attribute.name === "key")
|
|
95
|
+
continue;
|
|
96
|
+
if (attribute.name === "look" || attribute.name.startsWith("look:")) {
|
|
97
|
+
if (!emittedLook) {
|
|
98
|
+
emittedLook = true;
|
|
99
|
+
const lookValue = emitJsxLookValue(host, expression);
|
|
100
|
+
if (lookValue)
|
|
101
|
+
lines.push(host.emitMappedJavaScript(attribute.span, () => `__velarLookBind(${element}, () => ${lookValue}, ${scope});`));
|
|
102
|
+
}
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (attribute.name.startsWith("style:")) {
|
|
106
|
+
if (!emittedStyle) {
|
|
107
|
+
emittedStyle = true;
|
|
108
|
+
const styleValue = emitJsxStyleValue(host, expression);
|
|
109
|
+
if (styleValue)
|
|
110
|
+
lines.push(host.emitMappedJavaScript(attribute.span, () => `__velarStyleBind(${element}, () => (${styleValue}), ${scope});`));
|
|
111
|
+
}
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (attribute.name === "style")
|
|
115
|
+
continue;
|
|
116
|
+
lines.push(host.emitMappedJavaScript(attribute.span, () => emitNativeAttribute(host, expression, attribute, element, scope)));
|
|
117
|
+
}
|
|
118
|
+
for (const child of expression.children) {
|
|
119
|
+
const line = emitNativeChild(host, child, element, scope, childNamespace);
|
|
120
|
+
if (line !== null)
|
|
121
|
+
lines.push(line);
|
|
122
|
+
}
|
|
123
|
+
lines.push(`return ${element};`);
|
|
124
|
+
return `(() => { ${lines.join(" ")} })()`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* One attribute of a native element, after the `key`, `look:` and `style:`
|
|
128
|
+
* slots the element itself answers. Each arm is the whole lowering of one
|
|
129
|
+
* attribute family, and the last two are the plain attribute: a literal written
|
|
130
|
+
* once, an expression bound to the scope.
|
|
131
|
+
*/
|
|
132
|
+
function emitNativeAttribute(host, expression, attribute, element, scope) {
|
|
133
|
+
const value = attribute.value;
|
|
134
|
+
if (attribute.name === "ref" && value && typeof value !== "string" && value.kind === "IdentifierExpression") {
|
|
135
|
+
return `${value.name} = ${element}; __velarAppendOwned(${scope}.cleanups, () => { if (${value.name} === ${element}) ${value.name} = null; });`;
|
|
136
|
+
}
|
|
137
|
+
if (attribute.name.startsWith("on:") && value && typeof value !== "string") {
|
|
138
|
+
const [event, ...modifiers] = attribute.name.slice(3).split(".");
|
|
139
|
+
return `__velarOn(${element}, ${JSON.stringify(event)}, () => (${host.emitMappedExpression(value)}), ${scope}, ${JSON.stringify(modifiers)});`;
|
|
140
|
+
}
|
|
141
|
+
if (attribute.name === "bind:value" && value && typeof value !== "string") {
|
|
142
|
+
const numeric = expression.tag === "input" && expression.attributes.some((item) => item.name === "type" && item.value === "number");
|
|
143
|
+
const enumName = host.hints.enumValueBindings.get(attribute.span.start);
|
|
144
|
+
return `__velarBindValue(${element}, ${emitBindTarget(host, value)}, ${scope}, ${numeric}${enumName ? `, ${enumName}.parse` : ""});`;
|
|
145
|
+
}
|
|
146
|
+
if (attribute.name === "bind:checked" && value && typeof value !== "string") {
|
|
147
|
+
return `__velarBindChecked(${element}, ${emitBindTarget(host, value)}, ${scope});`;
|
|
148
|
+
}
|
|
149
|
+
if (attribute.name === "bind:group" && value && typeof value !== "string") {
|
|
150
|
+
const multiple = expression.attributes.some((item) => item.name === "type" && item.value === "checkbox");
|
|
151
|
+
const enumName = host.hints.enumValueBindings.get(attribute.span.start);
|
|
152
|
+
return `__velarBindGroup(${element}, ${emitBindTarget(host, value)}, ${scope}, ${multiple}${enumName ? `, ${enumName}.parse` : ""});`;
|
|
153
|
+
}
|
|
154
|
+
if (attribute.name.startsWith("class:") && value && typeof value !== "string") {
|
|
155
|
+
return `__velarClass(${element}, ${JSON.stringify(attribute.name.slice(6))}, () => ${host.emitMappedExpression(value)}, ${scope});`;
|
|
156
|
+
}
|
|
157
|
+
if (attribute.name === "host")
|
|
158
|
+
return `${element}.__velarHost = true;`;
|
|
159
|
+
if (attribute.name === "class" && value && typeof value !== "string") {
|
|
160
|
+
return `__velarClassBind(${element}, () => ${host.emitMappedExpression(value)}, ${scope});`;
|
|
161
|
+
}
|
|
162
|
+
if (attribute.name === "unsafe:html") {
|
|
163
|
+
const html = typeof value === "string" ? JSON.stringify(value) : value === null ? '""' : host.emitMappedExpression(value);
|
|
164
|
+
return `__velarHtml(${element}, () => ${html}, ${scope});`;
|
|
165
|
+
}
|
|
166
|
+
if (typeof value === "string" || value === null) {
|
|
167
|
+
return `__velarStaticAttr(${element}, ${JSON.stringify(attribute.name)}, ${value === null ? "true" : JSON.stringify(value)});`;
|
|
168
|
+
}
|
|
169
|
+
return `__velarAttr(${element}, ${JSON.stringify(attribute.name)}, () => ${host.emitMappedExpression(value)}, ${scope});`;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* One child of a native element: static text, a nested element, or an
|
|
173
|
+
* interpolation that owns a region of its own. Whitespace-only text answers
|
|
174
|
+
* `null` — it appends nothing, and must not record a source-map span either.
|
|
175
|
+
*/
|
|
176
|
+
function emitNativeChild(host, child, element, scope, childNamespace) {
|
|
177
|
+
if (child.kind === "JSXText") {
|
|
178
|
+
const text = normalizeJsxText(child.value);
|
|
179
|
+
return text ? host.emitMappedJavaScript(child.span, () => `__velarDomAppend(${element}, __velarDomCreateTextNode(${JSON.stringify(text)}));`) : null;
|
|
180
|
+
}
|
|
181
|
+
if (child.kind === "ExtensionExpression:web:jsx") {
|
|
182
|
+
return host.emitMappedJavaScript(child.span, () => `__velarAppend(${element}, ${emitJsx(host, child, scope, true, childNamespace)});`);
|
|
183
|
+
}
|
|
184
|
+
return host.emitMappedJavaScript(child.expression.span, () => emitDynamicChild(host, element, child.expression, scope, childNamespace));
|
|
185
|
+
}
|
|
186
|
+
function emitJsxChildren(host, children, scope, namespace) {
|
|
187
|
+
const fragmentSpan = children[0]?.span ?? { start: 0, end: 0 };
|
|
188
|
+
const fragment = { kind: "ExtensionExpression:web:jsx", tag: "", tagSpan: { start: fragmentSpan.start, end: fragmentSpan.start }, attributes: [], children, span: fragmentSpan };
|
|
189
|
+
return emitJsx(host, fragment, scope, true, namespace);
|
|
190
|
+
}
|
|
191
|
+
// The slot body builds into whichever scope the consuming position hands it,
|
|
192
|
+
// so every observer, ref and cleanup it registers dies with that position
|
|
193
|
+
// rather than accumulating on the caller for the component's whole lifetime.
|
|
194
|
+
function emitJsxChildrenCode(host, children, namespace) {
|
|
195
|
+
const previousScope = host.currentScope;
|
|
196
|
+
host.currentScope = "__velarChildrenScope";
|
|
197
|
+
try {
|
|
198
|
+
return emitJsxChildren(host, children, "__velarChildrenScope", namespace);
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
host.currentScope = previousScope;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function emitDynamicChild(host, parent, expression, scope, namespace) {
|
|
205
|
+
const leaves = dynamicChildLeaves(expression);
|
|
206
|
+
const previousScope = host.currentScope;
|
|
207
|
+
const previousJsxNamespace = host.currentJsxNamespace;
|
|
208
|
+
host.currentScope = "__velarChildScope";
|
|
209
|
+
host.currentJsxNamespace = namespace;
|
|
210
|
+
// A conditional splits into one region per branch leaf only when a keyed
|
|
211
|
+
// list is somewhere among them; each region gates itself on the shared
|
|
212
|
+
// branch conditions, so at most one region renders content at a time and
|
|
213
|
+
// the keyed list keeps identity-preserving children across the branch flip.
|
|
214
|
+
// Without a keyed leaf the interpolation stays one dynamic region -- unless
|
|
215
|
+
// its checked type can only ever be one text node, which is the whole tree
|
|
216
|
+
// of a conversation surface and is answered by one text node instead (F1).
|
|
217
|
+
const keyed = leaves.some((leaf) => leaf.list?.key);
|
|
218
|
+
const scalarText = !keyed && isScalarTextChild(host, expression);
|
|
219
|
+
// A scalar region owns no child scope, so nothing inside it may address
|
|
220
|
+
// one; the guard above proves nothing does.
|
|
221
|
+
if (scalarText)
|
|
222
|
+
host.currentScope = scope;
|
|
223
|
+
const statements = keyed
|
|
224
|
+
? leaves.map((leaf) => emitDynamicChildLeaf(host, parent, leaf, scope, namespace))
|
|
225
|
+
: scalarText
|
|
226
|
+
? [`__velarText(${parent}, () => ${host.emitMappedExpression(expression)}, ${scope});`]
|
|
227
|
+
: [`__velarDynamic(${parent}, (__velarChildScope) => ${host.emitMappedExpression(expression)}, ${scope});`];
|
|
228
|
+
host.currentScope = previousScope;
|
|
229
|
+
host.currentJsxNamespace = previousJsxNamespace;
|
|
230
|
+
return statements.join(" ");
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* The two conditions for the scalar-text fast path, both of which must hold:
|
|
234
|
+
* the analyzer proved the checked type renders as exactly one text node, and
|
|
235
|
+
* the expression builds no JSX of its own. Everything else keeps the full
|
|
236
|
+
* dynamic region, so a widening of the type rule can only ever be a
|
|
237
|
+
* deliberate edit to `VelarWebAnalyzer.isScalarTextType`.
|
|
238
|
+
*/
|
|
239
|
+
function isScalarTextChild(host, expression) {
|
|
240
|
+
return host.hints.extensionCalls.get(spanIdentity(expression.span)) === JSX_SCALAR_TEXT_HINT
|
|
241
|
+
&& !containsJsxExpression(expression);
|
|
242
|
+
}
|
|
243
|
+
function emitDynamicChildLeaf(host, parent, leaf, scope, namespace) {
|
|
244
|
+
const list = leaf.list;
|
|
245
|
+
if (list?.key) {
|
|
246
|
+
const source = emitGuardedExpression(host, leaf.guards, host.emitMappedExpression(list.source), "[]");
|
|
247
|
+
const parameter = list.arrow.parameters[0].name;
|
|
248
|
+
const key = emitJsxAttributeValue(host, list.key);
|
|
249
|
+
const render = emitJsx(host, list.arrow.body, "__velarChildScope", true, namespace);
|
|
250
|
+
return `__velarKeyed(${parent}, () => ${source}, (${parameter}) => ${key}, (${parameter}, __velarChildScope) => ${render}, ${scope});`;
|
|
251
|
+
}
|
|
252
|
+
const value = emitGuardedExpression(host, leaf.guards, host.emitMappedExpression(leaf.expression), "null");
|
|
253
|
+
return `__velarDynamic(${parent}, (__velarChildScope) => ${value}, ${scope});`;
|
|
254
|
+
}
|
|
255
|
+
// Wraps a leaf's expression in its branch conditions, innermost last, so the
|
|
256
|
+
// leaf evaluates only while its branch is active and yields the inactive
|
|
257
|
+
// placeholder ('[]' for keyed reads, 'null' for dynamic regions) otherwise.
|
|
258
|
+
function emitGuardedExpression(host, guards, inner, inactive) {
|
|
259
|
+
let output = inner;
|
|
260
|
+
for (let index = guards.length - 1; index >= 0; index -= 1) {
|
|
261
|
+
const guard = guards[index];
|
|
262
|
+
const condition = host.emitMappedExpression(guard.condition);
|
|
263
|
+
output = guard.thenBranch
|
|
264
|
+
? `(${condition}) ? (${output}) : ${inactive}`
|
|
265
|
+
: `(${condition}) ? ${inactive} : (${output})`;
|
|
266
|
+
}
|
|
267
|
+
return output;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* D47 rule 84(A): a bind target is a state cell, or a writable reactive
|
|
271
|
+
* location inside one. A member/index path lowers to the get/set pair the
|
|
272
|
+
* binding helpers already expect, so a field of state reads and writes through
|
|
273
|
+
* exactly the same statements the author would have written by hand.
|
|
274
|
+
*/
|
|
275
|
+
function emitBindTarget(host, value) {
|
|
276
|
+
if (value.kind === "IdentifierExpression")
|
|
277
|
+
return value.name;
|
|
278
|
+
const next = { kind: "IdentifierExpression", name: "__velarBindNext", span: value.span };
|
|
279
|
+
const read = host.emitMappedExpression(value);
|
|
280
|
+
const assignment = { kind: "AssignmentStatement", target: value, value: next, operator: "=", span: value.span };
|
|
281
|
+
const write = host.emitStatement(assignment, 0).trim();
|
|
282
|
+
return `{ get: () => (${read}), set: (__velarBindNext) => { ${write} } }`;
|
|
283
|
+
}
|
|
284
|
+
function emitJsxAttributeValue(host, attribute) {
|
|
285
|
+
if (attribute.value === null)
|
|
286
|
+
return "true";
|
|
287
|
+
if (typeof attribute.value === "string")
|
|
288
|
+
return JSON.stringify(attribute.value);
|
|
289
|
+
return host.emitMappedExpression(attribute.value);
|
|
290
|
+
}
|
|
291
|
+
function emitJsxLookValue(host, expression) {
|
|
292
|
+
const base = expression.attributes.find((attribute) => attribute.name === "look");
|
|
293
|
+
const inline = expression.attributes.filter((attribute) => attribute.name.startsWith("look:"));
|
|
294
|
+
const baseValue = base?.value && typeof base.value !== "string" ? host.emitMappedExpression(base.value) : null;
|
|
295
|
+
if (inline.length === 0)
|
|
296
|
+
return baseValue;
|
|
297
|
+
const rules = inline.map((attribute) => {
|
|
298
|
+
const property = cssPropertyName(attribute.name.slice("look:".length));
|
|
299
|
+
const token = lookToken([], "", property);
|
|
300
|
+
const value = attribute.value === null ? "null"
|
|
301
|
+
: typeof attribute.value === "string" ? JSON.stringify(attribute.value)
|
|
302
|
+
: host.emitMappedExpression(attribute.value);
|
|
303
|
+
return `${JSON.stringify(token)}: ${value}`;
|
|
304
|
+
});
|
|
305
|
+
const anonymous = `{ rules: { ${rules.join(", ")} } }`;
|
|
306
|
+
return `__velarLook([${[baseValue, anonymous].filter(Boolean).join(", ")}])`;
|
|
307
|
+
}
|
|
308
|
+
function emitJsxStyleValue(host, expression) {
|
|
309
|
+
const inline = expression.attributes.filter((attribute) => attribute.name.startsWith("style:"));
|
|
310
|
+
if (inline.length === 0)
|
|
311
|
+
return null;
|
|
312
|
+
const properties = inline.map((attribute) => {
|
|
313
|
+
const property = cssPropertyName(attribute.name.slice("style:".length));
|
|
314
|
+
const value = attribute.value === null ? "null"
|
|
315
|
+
: typeof attribute.value === "string" ? JSON.stringify(attribute.value)
|
|
316
|
+
: host.emitMappedExpression(attribute.value);
|
|
317
|
+
return `${JSON.stringify(property)}: ${value}`;
|
|
318
|
+
});
|
|
319
|
+
return `{ ${properties.join(", ")} }`;
|
|
320
|
+
}
|
|
321
|
+
function normalizeJsxText(value) {
|
|
322
|
+
const normalized = value.replace(/\s+/gu, " ");
|
|
323
|
+
if (!value.includes("\n"))
|
|
324
|
+
return normalized;
|
|
325
|
+
return (/^\s*\n/u.test(value) ? normalized.trimStart() : normalized).replace(/\n\s*$/u.test(value) ? /\s+$/u : /$^/u, "");
|
|
326
|
+
}
|
|
327
|
+
function hasMeaningfulChildren(children) {
|
|
328
|
+
return children.some((child) => child.kind !== "JSXText" || child.value.trim().length > 0);
|
|
329
|
+
}
|
|
330
|
+
// The keyed-children fast path is syntactic: an interpolation leaf must be
|
|
331
|
+
// exactly `source.map(single-parameter arrow returning JSX)`, keyed when the
|
|
332
|
+
// arrow's root element carries a `key` attribute. The analyzer mirrors this
|
|
333
|
+
// recognizer through dynamicChildLeaves, so anything the emitter demotes to a
|
|
334
|
+
// rebuild-all dynamic region is diagnosed rather than silently forfeited.
|
|
335
|
+
export function jsxKeyedList(expression) {
|
|
336
|
+
if (expression.kind !== "CallExpression" || expression.callee.kind !== "MemberExpression" || expression.callee.property !== "map")
|
|
337
|
+
return null;
|
|
338
|
+
const callback = expression.arguments[0];
|
|
339
|
+
if (!callback || callback.kind !== "ArrowFunctionExpression" || callback.asynchronous || callback.parameters.length !== 1 || callback.body.kind !== "ExtensionExpression:web:jsx")
|
|
340
|
+
return null;
|
|
341
|
+
const arrow = callback;
|
|
342
|
+
const key = arrow.body.attributes.find((attribute) => attribute.name === "key") ?? null;
|
|
343
|
+
return { source: expression.callee.object, arrow, key };
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* F1: the analyzer's verdict that an interpolation's checked type renders as
|
|
347
|
+
* exactly one text node. The emitter cannot re-derive it — the checked type is
|
|
348
|
+
* gone by lowering time — so the analyzer stamps the child expression's span
|
|
349
|
+
* and the emitter reads it back through the extension-hint channel that
|
|
350
|
+
* `LOOK_ARITHMETIC_HINT` already uses.
|
|
351
|
+
*/
|
|
352
|
+
export const JSX_SCALAR_TEXT_HINT = "@velarscript/web:jsx-scalar-text";
|
|
353
|
+
/**
|
|
354
|
+
* The one thing a scalar interpolation must not contain. `__velarText` owns no
|
|
355
|
+
* child scope, so a nested element inside the expression — legal where a
|
|
356
|
+
* function takes a `WebNode` and answers text — would have nothing to register
|
|
357
|
+
* its observers and cleanups against. The type says one text node; this says
|
|
358
|
+
* nothing was built to make it.
|
|
359
|
+
*/
|
|
360
|
+
function containsJsxExpression(value) {
|
|
361
|
+
if (!value || typeof value !== "object")
|
|
362
|
+
return false;
|
|
363
|
+
const record = value;
|
|
364
|
+
if (record.kind === "ExtensionExpression:web:jsx")
|
|
365
|
+
return true;
|
|
366
|
+
return Object.values(record).some((child) => Array.isArray(child) ? child.some(containsJsxExpression) : containsJsxExpression(child));
|
|
367
|
+
}
|
|
368
|
+
// Flattens an interpolation into render leaves. A conditional contributes its
|
|
369
|
+
// branch leaves, each remembering the chain of branch conditions that keeps it
|
|
370
|
+
// active, so an empty-state ternary around a keyed list still reaches the
|
|
371
|
+
// keyed fast path instead of demoting every child to rebuild-all updates.
|
|
372
|
+
export function dynamicChildLeaves(expression, guards = []) {
|
|
373
|
+
const list = jsxKeyedList(expression);
|
|
374
|
+
if (list)
|
|
375
|
+
return [{ expression, list, guards }];
|
|
376
|
+
if (expression.kind === "ConditionalExpression") {
|
|
377
|
+
return [
|
|
378
|
+
...dynamicChildLeaves(expression.thenValue, [...guards, { condition: expression.condition, thenBranch: true }]),
|
|
379
|
+
...dynamicChildLeaves(expression.elseValue, [...guards, { condition: expression.condition, thenBranch: false }]),
|
|
380
|
+
];
|
|
381
|
+
}
|
|
382
|
+
return [{ expression, list: null, guards }];
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=jsx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../src/emit/jsx.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAGN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAmB1C,MAAM,UAAU,OAAO,CAAC,IAAiB,EAAE,UAAgC,EAAE,KAAa,EAAE,OAAgB,EAAE,SAAiB,EAAE,MAAM,GAAG,IAAI;IAC5I,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACtF,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAiB,EAAE,UAAgC,EAAE,KAAa,EAAE,OAAgB,EAAE,SAAiB;IAC1H,OAAO,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACnC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;QACnE,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,IAAiB,EAAE,UAAgC,EAAE,KAAa,EAAE,OAAgB,EAAE,SAAiB;IACnI,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9F,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,IAAI,iBAAiB;QAAE,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;IAC1D,IAAI,CAAC;QACH,uEAAuE;QACvE,sEAAsE;QACtE,sEAAsE;QACtE,gDAAgD;QAChD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU;aACrC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;eAC1I,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aACvE,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAC3C,SAAS,CAAC,IAAI,EACd,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CACjG,CAAC,CAAC;QACL,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACjI,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,SAAS,GAAG,CAAC,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtG,IAAI,UAAU,IAAI,cAAc,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,wBAAwB,UAAU,GAAG,CAAC,CAAC,CAAC;QAC/G,CAAC;QACD,mEAAmE;QACnE,qEAAqE;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,uBAAuB;QACvB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC;YACzD,CAAC,CAAC,2BAA2B,cAAc,SAAS,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;YAChH,CAAC,CAAC,WAAW,CAAC;QAChB,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,KAAK,CAAC;QACvF,MAAM,SAAS,GAAG,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB;YACrF,CAAC,CAAC,uDAAuD,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,IAAI,YAAY;YACvG,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QACjF,MAAM,UAAU,GAAG,GAAG,SAAS,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,QAAQ,KAAK,cAAc,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClJ,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,iEAAiE,UAAU,MAAM,KAAK,GAAG,CAAC;QACnG,CAAC;QACD,IAAI,OAAO;YAAE,OAAO,gBAAgB,UAAU,GAAG,CAAC;QAClD,uEAAuE;QACvE,qEAAqE;QACrE,wEAAwE;QACxE,qEAAqE;QACrE,oCAAoC;QACpC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,oBAAoB,IAAI,UAAU,GAAG,CAAC;IACvG,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAiB,EAAE,UAAgC,EAAE,KAAa,EAAE,SAAiB;IAC9G,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,iBAAiB,EAAE,EAAE,CAAC;IACtC,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,KAAK,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACxF,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,GAAG;YAC3B,CAAC,CAAC,SAAS,OAAO,2BAA2B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,gBAAgB,IAAI;YACpG,CAAC,CAAC,SAAS,OAAO,gCAAgC,CAAC,CAAC;IACtD,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC9C,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;YAAE,SAAS;QACvC,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACrD,IAAI,SAAS;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,mBAAmB,OAAO,WAAW,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;YAC3I,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACvD,IAAI,UAAU;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,oBAAoB,OAAO,YAAY,UAAU,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC;YAChJ,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS;QACzC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAChI,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAC1E,IAAI,IAAI,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC;IACjC,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,IAAiB,EAAE,UAAgC,EAAE,SAAuB,EAAE,OAAe,EAAE,KAAa;IACvI,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC9B,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAC5G,OAAO,GAAG,KAAK,CAAC,IAAI,MAAM,OAAO,wBAAwB,KAAK,0BAA0B,KAAK,CAAC,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC,IAAI,cAAc,CAAC;IACjJ,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3E,MAAM,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,aAAa,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;IACjJ,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,KAAK,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;QACpI,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,oBAAoB,OAAO,KAAK,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACvI,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO,sBAAsB,OAAO,KAAK,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IACrF,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,oBAAoB,OAAO,KAAK,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACxI,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9E,OAAO,gBAAgB,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IACtI,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,OAAO,sBAAsB,CAAC;IACvE,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,oBAAoB,OAAO,WAAW,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAC9F,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1H,OAAO,eAAe,OAAO,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,qBAAqB,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IACjI,CAAC;IACD,OAAO,eAAe,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;AAC5H,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CACtB,IAAiB,EACjB,KAA+C,EAC/C,OAAe,EACf,KAAa,EACb,cAAsB;IAEtB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,oBAAoB,OAAO,8BAA8B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,6BAA6B,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,iBAAiB,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;IACzI,CAAC;IACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AAC1I,CAAC;AAED,SAAS,eAAe,CAAC,IAAiB,EAAE,QAA0C,EAAE,KAAa,EAAE,SAAiB;IACtH,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAyB,EAAE,IAAI,EAAE,6BAA6B,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACvM,OAAO,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,6EAA6E;AAC7E,0EAA0E;AAC1E,6EAA6E;AAC7E,SAAS,mBAAmB,CAAC,IAAiB,EAAE,QAA0C,EAAE,SAAiB;IAC3G,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,IAAI,CAAC,YAAY,GAAG,sBAAsB,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAiB,EAAE,MAAc,EAAE,UAAsB,EAAE,KAAa,EAAE,SAAiB;IACnH,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,YAAY,GAAG,mBAAmB,CAAC;IACxC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACrC,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACjE,wEAAwE;IACxE,4CAA4C;IAC5C,IAAI,UAAU;QAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK;QACtB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAClF,CAAC,CAAC,UAAU;YACV,CAAC,CAAC,CAAC,eAAe,MAAM,WAAW,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC;YACvF,CAAC,CAAC,CAAC,kBAAkB,MAAM,4BAA4B,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAChH,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;IAClC,IAAI,CAAC,mBAAmB,GAAG,oBAAoB,CAAC;IAChD,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,IAAiB,EAAE,UAAsB;IAClE,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,oBAAoB;WACvF,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAiB,EAAE,MAAc,EAAE,IAAsB,EAAE,KAAa,EAAE,SAAiB;IACvH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QACtG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC;QACjD,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACpF,OAAO,gBAAgB,MAAM,WAAW,MAAM,MAAM,SAAS,QAAQ,GAAG,MAAM,SAAS,2BAA2B,MAAM,KAAK,KAAK,IAAI,CAAC;IACzI,CAAC;IACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3G,OAAO,kBAAkB,MAAM,4BAA4B,KAAK,KAAK,KAAK,IAAI,CAAC;AACjF,CAAC;AAED,6EAA6E;AAC7E,yEAAyE;AACzE,4EAA4E;AAC5E,SAAS,qBAAqB,CAAC,IAAiB,EAAE,MAAoC,EAAE,KAAa,EAAE,QAAgB;IACrH,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,GAAG,KAAK,CAAC,UAAU;YACvB,CAAC,CAAC,IAAI,SAAS,QAAQ,MAAM,OAAO,QAAQ,EAAE;YAC9C,CAAC,CAAC,IAAI,SAAS,OAAO,QAAQ,OAAO,MAAM,GAAG,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAAiB,EAAE,KAAiB;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACrG,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAA0B,CAAC;IACxI,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,iBAAiB,IAAI,kCAAkC,KAAK,MAAM,CAAC;AAC5E,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAiB,EAAE,SAAuB;IACvE,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAiB,EAAE,UAAgC;IAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/G,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM;YAC7C,CAAC,CAAC,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;gBACrE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACvD,OAAO,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB,EAAE,UAAgC;IAC5E,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM;YAC7C,CAAC,CAAC,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;gBACrE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7C,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5H,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA0C;IACvE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7F,CAAC;AAmBD,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,UAAsB;IACjD,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/I,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,yBAAyB,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,6BAA6B;QAAE,OAAO,IAAI,CAAC;IAC/L,MAAM,KAAK,GAAG,QAAqE,CAAC;IACpF,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC;IACxF,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,kCAAkC,CAAC;AAEvE;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,MAAM,CAAC,IAAI,KAAK,6BAA6B;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;AACxI,CAAC;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,0EAA0E;AAC1E,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,UAAsB,EAAE,MAAM,GAAiC,EAAE;IAClG,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,IAAI;QAAE,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,IAAI,UAAU,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;QAChD,OAAO;YACL,GAAG,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,GAAG,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;SACjH,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|