vue-html-bridge 0.1.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/LICENSE +21 -0
- package/README.md +60 -0
- package/dist/expressions.d.ts +38 -0
- package/dist/expressions.d.ts.map +1 -0
- package/dist/expressions.js +301 -0
- package/dist/expressions.js.map +1 -0
- package/dist/generate.d.ts +5 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +1067 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/mapping.d.ts +3 -0
- package/dist/mapping.d.ts.map +1 -0
- package/dist/mapping.js +49 -0
- package/dist/mapping.js.map +1 -0
- package/dist/type-analysis.d.ts +26 -0
- package/dist/type-analysis.d.ts.map +1 -0
- package/dist/type-analysis.js +372 -0
- package/dist/type-analysis.js.map +1 -0
- package/dist/types.d.ts +92 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +32 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Masato Nagashima
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# `vue-html-bridge`
|
|
2
|
+
|
|
3
|
+
The core of [vue-html-bridge](https://github.com/vue-html-bridge/vue-html-bridge):
|
|
4
|
+
parses a Vue 3 Single-File Component template and generates one or more
|
|
5
|
+
concrete, static HTML variants — one per meaningfully distinct combination of
|
|
6
|
+
`v-if`/`v-else`/`v-for`/dynamic-binding outcomes — with source mapping back
|
|
7
|
+
to the original `.vue` file. Any plain HTML validator can then check those
|
|
8
|
+
variants without knowing anything about Vue.
|
|
9
|
+
|
|
10
|
+
This package has no knowledge of any particular HTML validator, the language
|
|
11
|
+
server, or the CLI. It is a pure "Vue template → static HTML" engine; the
|
|
12
|
+
validation pipeline that consumes its output lives in
|
|
13
|
+
[`@vue-html-bridge/analyzer`](../analyzer).
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
npm install vue-html-bridge
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Most consumers should not need this package directly — reach for
|
|
22
|
+
`@vue-html-bridge/analyzer`'s `createWorkspaceAnalyzer`/`analyze`, which
|
|
23
|
+
orchestrates generation, validation, and reverse-mapping together. Import
|
|
24
|
+
this package directly only if you are building a new host that needs
|
|
25
|
+
generation without validation.
|
|
26
|
+
|
|
27
|
+
## Minimal example
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { generateVariants, createTypeAnalysisContext } from "vue-html-bridge";
|
|
31
|
+
|
|
32
|
+
const result = await generateVariants({
|
|
33
|
+
filename: "/workspace/src/components/Menu.vue",
|
|
34
|
+
source: await readFile("/workspace/src/components/Menu.vue", "utf8"),
|
|
35
|
+
typeContext: createTypeAnalysisContext(),
|
|
36
|
+
signal: new AbortController().signal,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
for (const variant of result.variants) {
|
|
40
|
+
console.log(variant.id, variant.html);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`createTypeAnalysisContext()` gives the generator a thin, caller-owned
|
|
45
|
+
filesystem/TypeScript-project abstraction (ADR-0002) — one instance is meant
|
|
46
|
+
to be created once per workspace root and reused across calls, not recreated
|
|
47
|
+
per file.
|
|
48
|
+
|
|
49
|
+
## What it does not do
|
|
50
|
+
|
|
51
|
+
- Run any HTML validator (`@vue-html-bridge/adapter-markuplint` and other
|
|
52
|
+
adapters implement `@vue-html-bridge/validator-api` for that).
|
|
53
|
+
- Reverse-map validator diagnostics back to source coordinates on its own —
|
|
54
|
+
it exposes `findSourceOrigins` and `MappingEntry`s for a caller to do that;
|
|
55
|
+
`@vue-html-bridge/analyzer` is the caller that actually does it.
|
|
56
|
+
- Cache anything across calls, or know about LSP/CLI concerns.
|
|
57
|
+
|
|
58
|
+
See [`docs/design/packages/core.md`](../../docs/design/packages/core.md) for
|
|
59
|
+
the full design: variant-generation semantics, the Decision Model, and the
|
|
60
|
+
source-mapping contract.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import type { JsonValue } from "./types.js";
|
|
3
|
+
export interface ExpressionEnvironment {
|
|
4
|
+
resolve(path: string): {
|
|
5
|
+
found: true;
|
|
6
|
+
value: JsonValue;
|
|
7
|
+
} | {
|
|
8
|
+
found: false;
|
|
9
|
+
};
|
|
10
|
+
resolvePredicate(source: string): boolean | undefined;
|
|
11
|
+
}
|
|
12
|
+
export type EvaluationResult = {
|
|
13
|
+
kind: "known";
|
|
14
|
+
value: JsonValue | undefined;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "unknown";
|
|
17
|
+
reason: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function parseExpression(source: string): ts.Expression | undefined;
|
|
20
|
+
export declare function evaluateExpression(source: string, environment: ExpressionEnvironment): EvaluationResult;
|
|
21
|
+
export declare function referencedPaths(source: string): readonly string[];
|
|
22
|
+
export declare function isSideEffectFreeExpression(source: string): boolean;
|
|
23
|
+
export declare function normalizeExpression(source: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Whether `expression` compares `lengthPath` (e.g. "items.length") against a
|
|
26
|
+
* fixed threshold such that the comparison's TRUE branch is actually
|
|
27
|
+
* reachable by one of v-for's {0, 1, 2} cardinality exemplars (core.md
|
|
28
|
+
* §4.5) — each exemplar is a concrete array of that literal size, so e.g.
|
|
29
|
+
* `items.length === 2` is exactly correct for the 2-item exemplar.
|
|
30
|
+
*
|
|
31
|
+
* A bare `v-if="items.length"` is a truthiness check, equivalent to `> 0`.
|
|
32
|
+
* A "`> 2`-style predicate" (or `>= 3`, `=== 5`, ...) can never be true for
|
|
33
|
+
* any exemplar we ever generate — correlating it anyway would silently make
|
|
34
|
+
* it always false and never exercise its true branch at all, so the caller
|
|
35
|
+
* should fall back to treating it as an independent predicate instead.
|
|
36
|
+
*/
|
|
37
|
+
export declare function lengthComparisonSafety(expression: string, lengthPath: string): "safe" | "unsafe" | "not-a-length-comparison";
|
|
38
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IAC5E,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAWzE;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,qBAAqB,GACjC,gBAAgB,CASlB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAWjE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA0BlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAaD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,QAAQ,GAAG,yBAAyB,CAgC/C"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
export function parseExpression(source) {
|
|
3
|
+
const file = ts.createSourceFile("expression.ts", `(${source})`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
4
|
+
const statement = file.statements[0];
|
|
5
|
+
if (!statement || !ts.isExpressionStatement(statement))
|
|
6
|
+
return undefined;
|
|
7
|
+
return unwrap(statement.expression);
|
|
8
|
+
}
|
|
9
|
+
export function evaluateExpression(source, environment) {
|
|
10
|
+
const expression = parseExpression(source);
|
|
11
|
+
if (!expression)
|
|
12
|
+
return { kind: "unknown", reason: "parse-error" };
|
|
13
|
+
const result = evaluate(expression, environment);
|
|
14
|
+
if (result.kind === "unknown") {
|
|
15
|
+
const predicate = environment.resolvePredicate(normalizeExpression(source));
|
|
16
|
+
if (predicate !== undefined)
|
|
17
|
+
return { kind: "known", value: predicate };
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
export function referencedPaths(source) {
|
|
22
|
+
const root = parseExpression(source);
|
|
23
|
+
if (!root)
|
|
24
|
+
return [];
|
|
25
|
+
const paths = new Set();
|
|
26
|
+
function visit(node) {
|
|
27
|
+
const path = accessPath(node);
|
|
28
|
+
if (path && !isPartOfLongerAccess(node))
|
|
29
|
+
paths.add(path);
|
|
30
|
+
ts.forEachChild(node, visit);
|
|
31
|
+
}
|
|
32
|
+
visit(root);
|
|
33
|
+
return [...paths].sort();
|
|
34
|
+
}
|
|
35
|
+
export function isSideEffectFreeExpression(source) {
|
|
36
|
+
const root = parseExpression(source);
|
|
37
|
+
if (!root)
|
|
38
|
+
return false;
|
|
39
|
+
let safe = true;
|
|
40
|
+
function visit(node) {
|
|
41
|
+
if (ts.isCallExpression(node) ||
|
|
42
|
+
ts.isNewExpression(node) ||
|
|
43
|
+
ts.isAwaitExpression(node) ||
|
|
44
|
+
ts.isYieldExpression(node) ||
|
|
45
|
+
ts.isPostfixUnaryExpression(node) ||
|
|
46
|
+
(ts.isPrefixUnaryExpression(node) &&
|
|
47
|
+
node.operator !== ts.SyntaxKind.ExclamationToken &&
|
|
48
|
+
node.operator !== ts.SyntaxKind.PlusToken &&
|
|
49
|
+
node.operator !== ts.SyntaxKind.MinusToken) ||
|
|
50
|
+
(ts.isBinaryExpression(node) &&
|
|
51
|
+
node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
52
|
+
node.operatorToken.kind <= ts.SyntaxKind.LastAssignment)) {
|
|
53
|
+
safe = false;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
ts.forEachChild(node, visit);
|
|
57
|
+
}
|
|
58
|
+
visit(root);
|
|
59
|
+
return safe;
|
|
60
|
+
}
|
|
61
|
+
export function normalizeExpression(source) {
|
|
62
|
+
return source.replace(/\s+/g, "").replace(/^!/, (match) => match);
|
|
63
|
+
}
|
|
64
|
+
const LENGTH_COMPARISON_OPERATORS = new Set([
|
|
65
|
+
ts.SyntaxKind.GreaterThanToken,
|
|
66
|
+
ts.SyntaxKind.GreaterThanEqualsToken,
|
|
67
|
+
ts.SyntaxKind.LessThanToken,
|
|
68
|
+
ts.SyntaxKind.LessThanEqualsToken,
|
|
69
|
+
ts.SyntaxKind.EqualsEqualsToken,
|
|
70
|
+
ts.SyntaxKind.EqualsEqualsEqualsToken,
|
|
71
|
+
ts.SyntaxKind.ExclamationEqualsToken,
|
|
72
|
+
ts.SyntaxKind.ExclamationEqualsEqualsToken,
|
|
73
|
+
]);
|
|
74
|
+
/**
|
|
75
|
+
* Whether `expression` compares `lengthPath` (e.g. "items.length") against a
|
|
76
|
+
* fixed threshold such that the comparison's TRUE branch is actually
|
|
77
|
+
* reachable by one of v-for's {0, 1, 2} cardinality exemplars (core.md
|
|
78
|
+
* §4.5) — each exemplar is a concrete array of that literal size, so e.g.
|
|
79
|
+
* `items.length === 2` is exactly correct for the 2-item exemplar.
|
|
80
|
+
*
|
|
81
|
+
* A bare `v-if="items.length"` is a truthiness check, equivalent to `> 0`.
|
|
82
|
+
* A "`> 2`-style predicate" (or `>= 3`, `=== 5`, ...) can never be true for
|
|
83
|
+
* any exemplar we ever generate — correlating it anyway would silently make
|
|
84
|
+
* it always false and never exercise its true branch at all, so the caller
|
|
85
|
+
* should fall back to treating it as an independent predicate instead.
|
|
86
|
+
*/
|
|
87
|
+
export function lengthComparisonSafety(expression, lengthPath) {
|
|
88
|
+
const root = parseExpression(expression);
|
|
89
|
+
if (!root)
|
|
90
|
+
return "not-a-length-comparison";
|
|
91
|
+
const normalizedPath = normalizeExpression(lengthPath);
|
|
92
|
+
if (normalizeExpression(root.getText()) === normalizedPath) {
|
|
93
|
+
return "safe"; // bare truthiness check, equivalent to "> 0"
|
|
94
|
+
}
|
|
95
|
+
if (!ts.isBinaryExpression(root))
|
|
96
|
+
return "not-a-length-comparison";
|
|
97
|
+
if (!LENGTH_COMPARISON_OPERATORS.has(root.operatorToken.kind)) {
|
|
98
|
+
return "not-a-length-comparison";
|
|
99
|
+
}
|
|
100
|
+
const { left, right, operatorToken } = root;
|
|
101
|
+
let threshold;
|
|
102
|
+
let operator = operatorToken.kind;
|
|
103
|
+
if (ts.isNumericLiteral(right) &&
|
|
104
|
+
normalizeExpression(left.getText()) === normalizedPath) {
|
|
105
|
+
threshold = Number(right.text);
|
|
106
|
+
}
|
|
107
|
+
else if (ts.isNumericLiteral(left) &&
|
|
108
|
+
normalizeExpression(right.getText()) === normalizedPath) {
|
|
109
|
+
// "2 < items.length" reads right-to-left from the path's perspective —
|
|
110
|
+
// equivalent to "items.length > 2", so the operator flips.
|
|
111
|
+
threshold = Number(left.text);
|
|
112
|
+
operator = flip(operator);
|
|
113
|
+
}
|
|
114
|
+
if (threshold === undefined)
|
|
115
|
+
return "not-a-length-comparison";
|
|
116
|
+
return trueBranchReachable(operator, threshold) ? "safe" : "unsafe";
|
|
117
|
+
}
|
|
118
|
+
function flip(operator) {
|
|
119
|
+
switch (operator) {
|
|
120
|
+
case ts.SyntaxKind.GreaterThanToken:
|
|
121
|
+
return ts.SyntaxKind.LessThanToken;
|
|
122
|
+
case ts.SyntaxKind.GreaterThanEqualsToken:
|
|
123
|
+
return ts.SyntaxKind.LessThanEqualsToken;
|
|
124
|
+
case ts.SyntaxKind.LessThanToken:
|
|
125
|
+
return ts.SyntaxKind.GreaterThanToken;
|
|
126
|
+
case ts.SyntaxKind.LessThanEqualsToken:
|
|
127
|
+
return ts.SyntaxKind.GreaterThanEqualsToken;
|
|
128
|
+
default:
|
|
129
|
+
return operator; // ===/!==/==/!= are symmetric
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** Is there some n in {0, 1, 2} for which `n <operator> threshold` is true? */
|
|
133
|
+
function trueBranchReachable(operator, threshold) {
|
|
134
|
+
switch (operator) {
|
|
135
|
+
case ts.SyntaxKind.GreaterThanToken:
|
|
136
|
+
return threshold < 2;
|
|
137
|
+
case ts.SyntaxKind.GreaterThanEqualsToken:
|
|
138
|
+
return threshold <= 2;
|
|
139
|
+
case ts.SyntaxKind.LessThanToken:
|
|
140
|
+
return threshold > 0;
|
|
141
|
+
case ts.SyntaxKind.LessThanEqualsToken:
|
|
142
|
+
return threshold >= 0;
|
|
143
|
+
case ts.SyntaxKind.EqualsEqualsToken:
|
|
144
|
+
case ts.SyntaxKind.EqualsEqualsEqualsToken:
|
|
145
|
+
return threshold >= 0 && threshold <= 2;
|
|
146
|
+
case ts.SyntaxKind.ExclamationEqualsToken:
|
|
147
|
+
case ts.SyntaxKind.ExclamationEqualsEqualsToken:
|
|
148
|
+
return true; // {0,1,2} always has a member other than any single threshold
|
|
149
|
+
default:
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function evaluate(node, environment) {
|
|
154
|
+
node = unwrap(node);
|
|
155
|
+
if (ts.isStringLiteral(node))
|
|
156
|
+
return known(node.text);
|
|
157
|
+
if (ts.isNumericLiteral(node))
|
|
158
|
+
return known(Number(node.text));
|
|
159
|
+
if (node.kind === ts.SyntaxKind.TrueKeyword)
|
|
160
|
+
return known(true);
|
|
161
|
+
if (node.kind === ts.SyntaxKind.FalseKeyword)
|
|
162
|
+
return known(false);
|
|
163
|
+
if (node.kind === ts.SyntaxKind.NullKeyword)
|
|
164
|
+
return known(null);
|
|
165
|
+
if (ts.isIdentifier(node) && node.text === "undefined")
|
|
166
|
+
return known(undefined);
|
|
167
|
+
const path = accessPath(node);
|
|
168
|
+
if (path) {
|
|
169
|
+
const resolved = environment.resolve(path);
|
|
170
|
+
return resolved.found
|
|
171
|
+
? known(resolved.value)
|
|
172
|
+
: { kind: "unknown", reason: `unresolved:${path}` };
|
|
173
|
+
}
|
|
174
|
+
if (ts.isPrefixUnaryExpression(node)) {
|
|
175
|
+
const operand = evaluate(node.operand, environment);
|
|
176
|
+
if (operand.kind === "unknown")
|
|
177
|
+
return operand;
|
|
178
|
+
if (node.operator === ts.SyntaxKind.ExclamationToken) {
|
|
179
|
+
return known(!operand.value);
|
|
180
|
+
}
|
|
181
|
+
if (node.operator === ts.SyntaxKind.MinusToken &&
|
|
182
|
+
typeof operand.value === "number") {
|
|
183
|
+
return known(-operand.value);
|
|
184
|
+
}
|
|
185
|
+
if (node.operator === ts.SyntaxKind.PlusToken &&
|
|
186
|
+
typeof operand.value === "number") {
|
|
187
|
+
return known(operand.value);
|
|
188
|
+
}
|
|
189
|
+
return { kind: "unknown", reason: "unsupported-unary" };
|
|
190
|
+
}
|
|
191
|
+
if (ts.isConditionalExpression(node)) {
|
|
192
|
+
const condition = evaluate(node.condition, environment);
|
|
193
|
+
if (condition.kind === "unknown")
|
|
194
|
+
return condition;
|
|
195
|
+
return evaluate(condition.value ? node.whenTrue : node.whenFalse, environment);
|
|
196
|
+
}
|
|
197
|
+
if (ts.isBinaryExpression(node)) {
|
|
198
|
+
const left = evaluate(node.left, environment);
|
|
199
|
+
if (left.kind === "unknown")
|
|
200
|
+
return left;
|
|
201
|
+
const kind = node.operatorToken.kind;
|
|
202
|
+
if (kind === ts.SyntaxKind.AmpersandAmpersandToken && !left.value)
|
|
203
|
+
return left;
|
|
204
|
+
if (kind === ts.SyntaxKind.BarBarToken && left.value)
|
|
205
|
+
return left;
|
|
206
|
+
if (kind === ts.SyntaxKind.QuestionQuestionToken &&
|
|
207
|
+
left.value !== null &&
|
|
208
|
+
left.value !== undefined) {
|
|
209
|
+
return left;
|
|
210
|
+
}
|
|
211
|
+
const right = evaluate(node.right, environment);
|
|
212
|
+
if (right.kind === "unknown")
|
|
213
|
+
return right;
|
|
214
|
+
switch (kind) {
|
|
215
|
+
case ts.SyntaxKind.AmpersandAmpersandToken:
|
|
216
|
+
case ts.SyntaxKind.BarBarToken:
|
|
217
|
+
case ts.SyntaxKind.QuestionQuestionToken:
|
|
218
|
+
return right;
|
|
219
|
+
case ts.SyntaxKind.EqualsEqualsEqualsToken:
|
|
220
|
+
return known(left.value === right.value);
|
|
221
|
+
case ts.SyntaxKind.ExclamationEqualsEqualsToken:
|
|
222
|
+
return known(left.value !== right.value);
|
|
223
|
+
case ts.SyntaxKind.EqualsEqualsToken:
|
|
224
|
+
return known(String(left.value) === String(right.value));
|
|
225
|
+
case ts.SyntaxKind.ExclamationEqualsToken:
|
|
226
|
+
return known(String(left.value) !== String(right.value));
|
|
227
|
+
case ts.SyntaxKind.GreaterThanToken:
|
|
228
|
+
return known(Number(left.value) > Number(right.value));
|
|
229
|
+
case ts.SyntaxKind.GreaterThanEqualsToken:
|
|
230
|
+
return known(Number(left.value) >= Number(right.value));
|
|
231
|
+
case ts.SyntaxKind.LessThanToken:
|
|
232
|
+
return known(Number(left.value) < Number(right.value));
|
|
233
|
+
case ts.SyntaxKind.LessThanEqualsToken:
|
|
234
|
+
return known(Number(left.value) <= Number(right.value));
|
|
235
|
+
default:
|
|
236
|
+
return { kind: "unknown", reason: "unsupported-binary" };
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (ts.isArrayLiteralExpression(node)) {
|
|
240
|
+
const values = [];
|
|
241
|
+
for (const element of node.elements) {
|
|
242
|
+
const value = evaluate(element, environment);
|
|
243
|
+
if (value.kind === "unknown" || value.value === undefined)
|
|
244
|
+
return value;
|
|
245
|
+
values.push(value.value);
|
|
246
|
+
}
|
|
247
|
+
return known(values);
|
|
248
|
+
}
|
|
249
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
250
|
+
const object = Object.create(null);
|
|
251
|
+
for (const property of node.properties) {
|
|
252
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
253
|
+
return { kind: "unknown", reason: "unsupported-object-member" };
|
|
254
|
+
}
|
|
255
|
+
const value = evaluate(property.initializer, environment);
|
|
256
|
+
if (value.kind === "unknown" || value.value === undefined)
|
|
257
|
+
return value;
|
|
258
|
+
object[property.name.getText().replace(/^['"]|['"]$/g, "")] = value.value;
|
|
259
|
+
}
|
|
260
|
+
return known(object);
|
|
261
|
+
}
|
|
262
|
+
return { kind: "unknown", reason: `unsupported:${ts.SyntaxKind[node.kind]}` };
|
|
263
|
+
}
|
|
264
|
+
function accessPath(node) {
|
|
265
|
+
if (ts.isIdentifier(node))
|
|
266
|
+
return node.text;
|
|
267
|
+
if (ts.isPropertyAccessExpression(node)) {
|
|
268
|
+
const base = accessPath(node.expression);
|
|
269
|
+
return base ? `${base}.${node.name.text}` : undefined;
|
|
270
|
+
}
|
|
271
|
+
if (ts.isElementAccessExpression(node) && node.argumentExpression) {
|
|
272
|
+
const base = accessPath(node.expression);
|
|
273
|
+
const argument = node.argumentExpression;
|
|
274
|
+
if (!base)
|
|
275
|
+
return undefined;
|
|
276
|
+
if (ts.isStringLiteral(argument) || ts.isNumericLiteral(argument)) {
|
|
277
|
+
return `${base}.${argument.text}`;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return undefined;
|
|
281
|
+
}
|
|
282
|
+
function isPartOfLongerAccess(node) {
|
|
283
|
+
return Boolean(node.parent &&
|
|
284
|
+
((ts.isPropertyAccessExpression(node.parent) &&
|
|
285
|
+
node.parent.expression === node) ||
|
|
286
|
+
(ts.isElementAccessExpression(node.parent) &&
|
|
287
|
+
node.parent.expression === node)));
|
|
288
|
+
}
|
|
289
|
+
function unwrap(expression) {
|
|
290
|
+
let current = expression;
|
|
291
|
+
while (ts.isParenthesizedExpression(current) ||
|
|
292
|
+
ts.isAsExpression(current) ||
|
|
293
|
+
ts.isNonNullExpression(current)) {
|
|
294
|
+
current = current.expression;
|
|
295
|
+
}
|
|
296
|
+
return current;
|
|
297
|
+
}
|
|
298
|
+
function known(value) {
|
|
299
|
+
return { kind: "known", value };
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createTypeAnalysisContext } from "./type-analysis.js";
|
|
2
|
+
import type { GenerateRequest, GenerateResult } from "./types.js";
|
|
3
|
+
export { createTypeAnalysisContext };
|
|
4
|
+
export declare function generateVariants(request: GenerateRequest): Promise<GenerateResult>;
|
|
5
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAyBA,OAAO,EAEL,yBAAyB,EAE1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EAMf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,CAAC;AAyJrC,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAoJzB"}
|