jsxpression 0.1.28 → 0.1.31
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 +155 -188
- package/lib/analyze/analysis-report.d.ts +2 -2
- package/lib/analyze/analysis-report.d.ts.map +1 -1
- package/lib/analyze/analysis-report.js +4 -0
- package/lib/analyze/analysis-report.js.map +1 -1
- package/lib/analyze/data/data-access.d.ts.map +1 -1
- package/lib/analyze/data/data-access.js +45 -82
- package/lib/analyze/data/data-access.js.map +1 -1
- package/lib/analyze/data/method-calls.d.ts.map +1 -1
- package/lib/analyze/data/method-calls.js +4 -3
- package/lib/analyze/data/method-calls.js.map +1 -1
- package/lib/analyze/data/utils.d.ts +2 -3
- package/lib/analyze/data/utils.d.ts.map +1 -1
- package/lib/analyze/data/utils.js +10 -36
- package/lib/analyze/data/utils.js.map +1 -1
- package/lib/analyze/jsx/element-attributes.d.ts +1 -1
- package/lib/analyze/jsx/element-attributes.d.ts.map +1 -1
- package/lib/analyze/jsx/element-attributes.js +13 -3
- package/lib/analyze/jsx/element-attributes.js.map +1 -1
- package/lib/analyze/jsx/element-children.d.ts +1 -1
- package/lib/analyze/jsx/element-children.d.ts.map +1 -1
- package/lib/analyze/jsx/element-children.js +16 -5
- package/lib/analyze/jsx/element-children.js.map +1 -1
- package/lib/analyze/jsx/element-tags.d.ts +1 -1
- package/lib/analyze/jsx/element-tags.d.ts.map +1 -1
- package/lib/analyze/jsx/element-tags.js +12 -2
- package/lib/analyze/jsx/element-tags.js.map +1 -1
- package/lib/analyze/security/analyze.d.ts.map +1 -1
- package/lib/analyze/security/analyze.js +2 -4
- package/lib/analyze/security/analyze.js.map +1 -1
- package/lib/analyze/security/call-expressions.d.ts +2 -2
- package/lib/analyze/security/call-expressions.d.ts.map +1 -1
- package/lib/analyze/security/call-expressions.js +21 -5
- package/lib/analyze/security/call-expressions.js.map +1 -1
- package/lib/analyze/security/declarations.d.ts +1 -1
- package/lib/analyze/security/declarations.d.ts.map +1 -1
- package/lib/analyze/security/declarations.js +22 -2
- package/lib/analyze/security/declarations.js.map +1 -1
- package/lib/analyze/security/expressions.d.ts.map +1 -1
- package/lib/analyze/security/expressions.js +10 -2
- package/lib/analyze/security/expressions.js.map +1 -1
- package/lib/analyze/security/identifiers.d.ts +2 -2
- package/lib/analyze/security/identifiers.d.ts.map +1 -1
- package/lib/analyze/security/identifiers.js +159 -19
- package/lib/analyze/security/identifiers.js.map +1 -1
- package/lib/builtins.d.ts.map +1 -1
- package/lib/builtins.js +5 -0
- package/lib/builtins.js.map +1 -1
- package/lib/codegen/builtins/builtin-types.d.ts.map +1 -1
- package/lib/codegen/builtins/builtin-types.js +7 -1
- package/lib/codegen/builtins/builtin-types.js.map +1 -1
- package/lib/compile/compile.d.ts.map +1 -1
- package/lib/compile/compile.js +131 -61
- package/lib/compile/compile.js.map +1 -1
- package/lib/evaluate/evaluate.d.ts +3 -3
- package/lib/evaluate/evaluate.d.ts.map +1 -1
- package/lib/evaluate/evaluate.js +28 -7
- package/lib/evaluate/evaluate.js.map +1 -1
- package/lib/jsx.d.ts +2 -19
- package/lib/jsx.d.ts.map +1 -1
- package/lib/jsx.js +0 -6
- package/lib/jsx.js.map +1 -1
- package/lib/parse/parse.d.ts.map +1 -1
- package/lib/parse/parse.js +4 -3
- package/lib/parse/parse.js.map +1 -1
- package/lib/render.d.ts +4 -4
- package/lib/render.d.ts.map +1 -1
- package/lib/render.js +7 -9
- package/lib/render.js.map +1 -1
- package/lib/schema.d.ts +2 -7
- package/lib/schema.d.ts.map +1 -1
- package/lib/schema.js +0 -43
- package/lib/schema.js.map +1 -1
- package/lib/traverse.d.ts +4 -4
- package/lib/traverse.d.ts.map +1 -1
- package/lib/traverse.js +118 -40
- package/lib/traverse.js.map +1 -1
- package/lib/validate.d.ts +1 -1
- package/lib/validate.js +1 -1
- package/package.json +4 -3
- package/src/analyze/analysis-report.ts +6 -2
- package/src/analyze/analyze.test.ts +108 -69
- package/src/analyze/data/data-access.ts +45 -90
- package/src/analyze/data/method-calls.ts +4 -3
- package/src/analyze/data/utils.ts +11 -40
- package/src/analyze/jsx/element-attributes.ts +24 -9
- package/src/analyze/jsx/element-children.ts +20 -6
- package/src/analyze/jsx/element-tags.ts +15 -3
- package/src/analyze/security/analyze.ts +1 -3
- package/src/analyze/security/call-expressions.ts +37 -17
- package/src/analyze/security/declarations.ts +35 -9
- package/src/analyze/security/expressions.ts +17 -3
- package/src/analyze/security/identifiers.ts +172 -28
- package/src/builtins.ts +6 -0
- package/src/codegen/builtins/builtin-types.ts +7 -1
- package/src/codegen/generate-typescript-definitions.test.ts +16 -23
- package/src/compile/compile.test.ts +153 -30
- package/src/compile/compile.ts +163 -73
- package/src/evaluate/evaluate.test.ts +276 -14
- package/src/evaluate/evaluate.ts +34 -10
- package/src/jsx.ts +2 -31
- package/src/parse/parse.test.ts +4 -4
- package/src/parse/parse.ts +4 -3
- package/src/render.test.ts +476 -27
- package/src/render.ts +7 -14
- package/src/schema.ts +1 -55
- package/src/traverse.ts +135 -49
- package/src/validate.ts +1 -1
- package/LICENSE +0 -21
- package/lib/analyze/analyze.test.d.ts +0 -2
- package/lib/analyze/analyze.test.d.ts.map +0 -1
- package/lib/analyze/analyze.test.js +0 -763
- package/lib/analyze/analyze.test.js.map +0 -1
- package/lib/analyze/security/member-access.d.ts +0 -6
- package/lib/codegen/generate-typescript-definitions.test.d.ts +0 -2
- package/lib/codegen/generate-typescript-definitions.test.d.ts.map +0 -1
- package/lib/codegen/generate-typescript-definitions.test.js +0 -649
- package/lib/codegen/generate-typescript-definitions.test.js.map +0 -1
- package/lib/compile/compile.test.d.ts +0 -2
- package/lib/compile/compile.test.d.ts.map +0 -1
- package/lib/compile/compile.test.js +0 -146
- package/lib/compile/compile.test.js.map +0 -1
- package/lib/evaluate/evaluate.test.d.ts +0 -2
- package/lib/evaluate/evaluate.test.d.ts.map +0 -1
- package/lib/evaluate/evaluate.test.js +0 -260
- package/lib/evaluate/evaluate.test.js.map +0 -1
- package/lib/parse/parse.test.d.ts +0 -2
- package/lib/parse/parse.test.d.ts.map +0 -1
- package/lib/parse/parse.test.js +0 -80
- package/lib/parse/parse.test.js.map +0 -1
- package/lib/render.test.d.ts +0 -2
- package/lib/render.test.d.ts.map +0 -1
- package/lib/render.test.js +0 -301
- package/lib/render.test.js.map +0 -1
- package/lib/traverse.test.d.ts +0 -2
- package/lib/traverse.test.d.ts.map +0 -1
- package/lib/traverse.test.js +0 -84
- package/lib/traverse.test.js.map +0 -1
- package/lib/types.d.ts +0 -12
- package/src/analyze/security/member-access.ts +0 -35
- package/src/types.ts +0 -17
package/lib/evaluate/evaluate.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { canHaveChildren, isElementAllowed } from "../schema.js";
|
|
1
2
|
import { EvaluationError } from "./evaluation-error.js";
|
|
2
|
-
|
|
3
|
+
const RESERVED_PARAMS = new Set(["h", "Math"]);
|
|
4
|
+
const VALID_IDENTIFIER = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
|
|
3
5
|
export function evaluate(source, schema, options) {
|
|
4
6
|
const { data = {}, components = {}, functions = {}, createElement } = options;
|
|
7
|
+
const dataKeys = Object.keys(data);
|
|
8
|
+
const functionKeys = Object.keys(functions);
|
|
9
|
+
validateParamKeys(dataKeys, functionKeys);
|
|
5
10
|
const h = createH(components, createElement || defaultCreateElement, schema);
|
|
6
|
-
const frozen = deepFreezeData(data);
|
|
11
|
+
const frozen = deepFreezeData(structuredClone(data));
|
|
7
12
|
try {
|
|
8
13
|
// eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
|
|
9
|
-
return new Function("h", "Math", ...
|
|
14
|
+
return new Function("h", "Math", ...dataKeys, ...functionKeys, source)(h, Math, ...Object.values(frozen), ...Object.values(functions));
|
|
10
15
|
}
|
|
11
16
|
catch (error) {
|
|
12
17
|
// We may have thrown an EvaluationError from createH()
|
|
@@ -16,8 +21,23 @@ export function evaluate(source, schema, options) {
|
|
|
16
21
|
throw new EvaluationError(error instanceof Error ? error.message : "Evaluation failed");
|
|
17
22
|
}
|
|
18
23
|
}
|
|
24
|
+
function validateParamKeys(dataKeys, functionKeys) {
|
|
25
|
+
const seen = new Set(RESERVED_PARAMS);
|
|
26
|
+
for (const key of [...dataKeys, ...functionKeys]) {
|
|
27
|
+
if (!VALID_IDENTIFIER.test(key)) {
|
|
28
|
+
throw new EvaluationError(`Invalid key "${key}": must be a valid JavaScript identifier`);
|
|
29
|
+
}
|
|
30
|
+
if (seen.has(key)) {
|
|
31
|
+
throw new EvaluationError(`Duplicate or reserved parameter name "${key}"`);
|
|
32
|
+
}
|
|
33
|
+
seen.add(key);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
19
36
|
function createH(components, createElement, schema) {
|
|
20
37
|
return function h(type, props, ...children) {
|
|
38
|
+
if (typeof type === "function") {
|
|
39
|
+
return createElement(type, props, ...children.flat().filter(Boolean));
|
|
40
|
+
}
|
|
21
41
|
const Component = components[type];
|
|
22
42
|
if (!Component) {
|
|
23
43
|
if (isElementAllowed(schema, type)) {
|
|
@@ -32,12 +52,13 @@ function createH(components, createElement, schema) {
|
|
|
32
52
|
}
|
|
33
53
|
function deepFreezeData(obj) {
|
|
34
54
|
Object.freeze(obj);
|
|
35
|
-
Object.values(obj)
|
|
55
|
+
for (const value of Object.values(obj)) {
|
|
56
|
+
if (typeof value === "object" && value !== null) {
|
|
57
|
+
deepFreezeData(value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
36
60
|
return obj;
|
|
37
61
|
}
|
|
38
|
-
function isDataDict(value) {
|
|
39
|
-
return typeof value === "object" && value !== null;
|
|
40
|
-
}
|
|
41
62
|
function defaultCreateElement(Component, props = {}, ...children) {
|
|
42
63
|
return Component({ ...props, children });
|
|
43
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/evaluate/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/evaluate/evaluate.ts"],"names":[],"mappings":"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"}
|
package/lib/jsx.d.ts
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import type { ArrayExpression, ArrowFunctionExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, UnaryExpression } from "acorn";
|
|
2
|
-
export type
|
|
2
|
+
export type JSXLiteral = {
|
|
3
3
|
type: "Literal";
|
|
4
|
-
value: string;
|
|
5
|
-
};
|
|
6
|
-
export type JSXNumberLiteral = {
|
|
7
|
-
type: "Literal";
|
|
8
|
-
value: number;
|
|
9
|
-
};
|
|
10
|
-
export type JSXBooleanLiteral = {
|
|
11
|
-
type: "Literal";
|
|
12
|
-
value: boolean;
|
|
13
|
-
};
|
|
14
|
-
export type JSXNullLiteral = {
|
|
15
|
-
type: "Literal";
|
|
16
|
-
value: null;
|
|
4
|
+
value: string | number | boolean | null;
|
|
17
5
|
};
|
|
18
|
-
export type JSXLiteral = JSXStringLiteral | JSXNumberLiteral | JSXBooleanLiteral | JSXNullLiteral;
|
|
19
6
|
export type JSXAttributeValue = JSXLiteral | JSXExpressionContainer;
|
|
20
7
|
export type JSXNameNode = {
|
|
21
8
|
type: "JSXIdentifier";
|
|
@@ -77,16 +64,12 @@ export type JSXNode = JSXElement | JSXFragment | JSXText | JSXEmptyExpression |
|
|
|
77
64
|
export type JSXRoot = JSXElement | JSXFragment | JSXExpressionContainer;
|
|
78
65
|
export type JSXNodeWithChildren = JSXElement | JSXFragment;
|
|
79
66
|
export type JSXLeafNode = JSXText | JSXEmptyExpression;
|
|
80
|
-
export type JSXExpressionHost = JSXExpressionContainer;
|
|
81
|
-
export type GetAttributeValue<T extends JSXAttribute> = T["value"];
|
|
82
67
|
export declare function isJsxElement(value: unknown): value is JSXElement;
|
|
83
68
|
export declare function isJsxFragment(value: unknown): value is JSXFragment;
|
|
84
69
|
export declare function isJsxRoot(value: unknown): value is JSXRoot;
|
|
85
70
|
export declare function isJsxAttribute(value: unknown): value is JSXAttribute;
|
|
86
|
-
export declare function isJsxLiteral(value: unknown): value is JSXLiteral;
|
|
87
71
|
export declare function isJsxExpressionContainer(value: unknown): value is JSXExpressionContainer;
|
|
88
72
|
export declare function isJsxEmptyExpression(value: unknown): value is JSXEmptyExpression;
|
|
89
73
|
export declare function isJsxText(value: unknown): value is JSXText;
|
|
90
|
-
export declare function isJsxNodeWithChildren(value: JSXNode): value is JSXNodeWithChildren;
|
|
91
74
|
export declare function isJsxLeafNode(value: JSXNode): value is JSXLeafNode;
|
|
92
75
|
//# sourceMappingURL=jsx.d.ts.map
|
package/lib/jsx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EAChB,MAAM,OAAO,CAAC;AAEf,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"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"}
|
package/lib/jsx.js
CHANGED
|
@@ -10,9 +10,6 @@ export function isJsxRoot(value) {
|
|
|
10
10
|
export function isJsxAttribute(value) {
|
|
11
11
|
return value?.type === "JSXAttribute";
|
|
12
12
|
}
|
|
13
|
-
export function isJsxLiteral(value) {
|
|
14
|
-
return value?.type === "Literal";
|
|
15
|
-
}
|
|
16
13
|
export function isJsxExpressionContainer(value) {
|
|
17
14
|
return value?.type === "JSXExpressionContainer";
|
|
18
15
|
}
|
|
@@ -22,9 +19,6 @@ export function isJsxEmptyExpression(value) {
|
|
|
22
19
|
export function isJsxText(value) {
|
|
23
20
|
return value?.type === "JSXText";
|
|
24
21
|
}
|
|
25
|
-
export function isJsxNodeWithChildren(value) {
|
|
26
|
-
return isJsxElement(value) || isJsxFragment(value);
|
|
27
|
-
}
|
|
28
22
|
export function isJsxLeafNode(value) {
|
|
29
23
|
return value?.type === "JSXText" || isJsxEmptyExpression(value);
|
|
30
24
|
}
|
package/lib/jsx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"AAqGA,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAQ,KAAoB,EAAE,IAAI,KAAK,YAAY,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAQ,KAAqB,EAAE,IAAI,KAAK,aAAa,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAQ,KAAsB,EAAE,IAAI,KAAK,cAAc,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAQ,KAAgC,EAAE,IAAI,KAAK,wBAAwB,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAQ,KAA4B,EAAE,IAAI,KAAK,oBAAoB,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAQ,KAAiB,EAAE,IAAI,KAAK,SAAS,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAQ,KAAiB,EAAE,IAAI,KAAK,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC"}
|
package/lib/parse/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAO7C,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAoB7C"}
|
package/lib/parse/parse.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Parser } from "acorn";
|
|
2
|
-
import
|
|
2
|
+
import { tsPlugin } from "acorn-typescript";
|
|
3
3
|
import { ParseError } from "./parse-error.js";
|
|
4
|
-
|
|
4
|
+
// @ts-expect-error acorn-typescript jsx option types mismatch
|
|
5
|
+
const TSXParser = Parser.extend(tsPlugin({ jsx: true }));
|
|
5
6
|
export function parse(source) {
|
|
6
7
|
try {
|
|
7
|
-
return
|
|
8
|
+
return TSXParser.parse(source, {
|
|
8
9
|
ecmaVersion: "latest",
|
|
9
10
|
sourceType: "module",
|
|
10
11
|
locations: true,
|
package/lib/parse/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,OAAO,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,8DAA8D;AAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEzD,MAAM,UAAU,KAAK,CAAC,MAAc;IAClC,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;YAC7B,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,QAAQ;YACpB,SAAS,EAAE,IAAI;YACf,0BAA0B,EAAE,IAAI;SACjC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,oEAAoE;QACpE,wDAAwD;QACxD,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,iEAAiE;YACjE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;YAEpE,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAEnD,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,IAAK,KAAoB,CAAC,GAAG,KAAK,SAAS,CAAC;AAC3E,CAAC"}
|
package/lib/render.d.ts
CHANGED
|
@@ -21,10 +21,10 @@ export interface RenderOptions<T = any> extends EvaluateOptions<T> {
|
|
|
21
21
|
* compiles it to executable code, and evaluates it with the provided data and components.
|
|
22
22
|
*
|
|
23
23
|
* @template T - The return type of the rendered JSX (e.g., ReactElement, VNode, string)
|
|
24
|
-
* @param source - JSX expression source code to render (e.g., `"<Text x={
|
|
24
|
+
* @param source - JSX expression source code to render (e.g., `"<Text x={user.name}>Hello</Text>"`)
|
|
25
25
|
* @param schema - Schema defining allowed data properties, JSX elements, and hierarchy rules
|
|
26
26
|
* @param options - Rendering configuration
|
|
27
|
-
* @param options.data - Data object
|
|
27
|
+
* @param options.data - Data object whose keys become top-level variables in expressions
|
|
28
28
|
* @param options.components - Map of component names to component functions
|
|
29
29
|
* @param options.createElement - Function to create elements (e.g., React.createElement)
|
|
30
30
|
* @param options.minSeverity - Minimum severity (1=info, 2=warning, 3=error) required to abort rendering; defaults to `3`
|
|
@@ -44,7 +44,7 @@ export interface RenderOptions<T = any> extends EvaluateOptions<T> {
|
|
|
44
44
|
* };
|
|
45
45
|
*
|
|
46
46
|
* const result = render(
|
|
47
|
-
* "<Text>Hello {
|
|
47
|
+
* "<Text>Hello {user.name}!</Text>",
|
|
48
48
|
* schema,
|
|
49
49
|
* {
|
|
50
50
|
* data: { user: { name: "World" } },
|
|
@@ -55,5 +55,5 @@ export interface RenderOptions<T = any> extends EvaluateOptions<T> {
|
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
57
|
export declare function render<T = any>(source: string, schema: Schema, { minSeverity, ...options }?: RenderOptions<T>): T;
|
|
58
|
-
export declare function compile<T = any>(source: string, schema: Schema, { minSeverity }?: RenderOptions<T
|
|
58
|
+
export declare function compile<T = any>(source: string, schema: Schema, { minSeverity }?: RenderOptions<T>): string;
|
|
59
59
|
//# sourceMappingURL=render.d.ts.map
|
package/lib/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAChE;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,GAAG,EAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,EAAE,WAAe,EAAE,GAAG,OAAO,EAAE,GAAE,aAAa,CAAC,CAAC,CAAM,GACrD,CAAC,CASH;AAED,wBAAgB,OAAO,CAAC,CAAC,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAChE;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,GAAG,EAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,EAAE,WAAe,EAAE,GAAG,OAAO,EAAE,GAAE,aAAa,CAAC,CAAC,CAAM,GACrD,CAAC,CASH;AAED,wBAAgB,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,WAAe,EAAE,GAAE,aAAa,CAAC,CAAC,CAAM,GAAG,MAAM,CAOnH"}
|
package/lib/render.js
CHANGED
|
@@ -9,10 +9,10 @@ import { analyze, AnalysisError } from "./analyze/index.js";
|
|
|
9
9
|
* compiles it to executable code, and evaluates it with the provided data and components.
|
|
10
10
|
*
|
|
11
11
|
* @template T - The return type of the rendered JSX (e.g., ReactElement, VNode, string)
|
|
12
|
-
* @param source - JSX expression source code to render (e.g., `"<Text x={
|
|
12
|
+
* @param source - JSX expression source code to render (e.g., `"<Text x={user.name}>Hello</Text>"`)
|
|
13
13
|
* @param schema - Schema defining allowed data properties, JSX elements, and hierarchy rules
|
|
14
14
|
* @param options - Rendering configuration
|
|
15
|
-
* @param options.data - Data object
|
|
15
|
+
* @param options.data - Data object whose keys become top-level variables in expressions
|
|
16
16
|
* @param options.components - Map of component names to component functions
|
|
17
17
|
* @param options.createElement - Function to create elements (e.g., React.createElement)
|
|
18
18
|
* @param options.minSeverity - Minimum severity (1=info, 2=warning, 3=error) required to abort rendering; defaults to `3`
|
|
@@ -32,7 +32,7 @@ import { analyze, AnalysisError } from "./analyze/index.js";
|
|
|
32
32
|
* };
|
|
33
33
|
*
|
|
34
34
|
* const result = render(
|
|
35
|
-
* "<Text>Hello {
|
|
35
|
+
* "<Text>Hello {user.name}!</Text>",
|
|
36
36
|
* schema,
|
|
37
37
|
* {
|
|
38
38
|
* data: { user: { name: "World" } },
|
|
@@ -50,13 +50,11 @@ export function render(source, schema, { minSeverity = 3, ...options } = {}) {
|
|
|
50
50
|
}
|
|
51
51
|
return evaluate(compileInternal(ast), schema, options);
|
|
52
52
|
}
|
|
53
|
-
export function compile(source, schema, { minSeverity = 3 } = {}
|
|
53
|
+
export function compile(source, schema, { minSeverity = 3 } = {}) {
|
|
54
54
|
const ast = parse(source);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
throw AnalysisError.fromReport(report);
|
|
59
|
-
}
|
|
55
|
+
const report = analyze(ast, schema);
|
|
56
|
+
if (report.hasIssues(minSeverity)) {
|
|
57
|
+
throw AnalysisError.fromReport(report);
|
|
60
58
|
}
|
|
61
59
|
return compileInternal(ast);
|
|
62
60
|
}
|
package/lib/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAmB,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAiB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,MAAM,CACpB,MAAc,EACd,MAAc,EACd,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,KAAuB,EAAE;IAEtD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEpC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAM,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,OAAO,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAmB,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAiB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,MAAM,CACpB,MAAc,EACd,MAAc,EACd,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,KAAuB,EAAE;IAEtD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEpC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAM,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,OAAO,CAAU,MAAc,EAAE,MAAc,EAAE,EAAE,WAAW,GAAG,CAAC,KAAuB,EAAE;IACzG,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC"}
|
package/lib/schema.d.ts
CHANGED
|
@@ -73,14 +73,9 @@ export declare function canHaveChildren(schema: Schema, tagName: string): boolea
|
|
|
73
73
|
export declare function isSelfClosing(schema: Schema, tagName: string): boolean;
|
|
74
74
|
export declare function isChildAllowed(schema: Schema, parentTag: string, childTag: string): boolean;
|
|
75
75
|
export declare function getAllElements(schema: Schema): string[];
|
|
76
|
-
export declare function getElementConfig(schema: Schema, tagName: string): ElementSchema | undefined;
|
|
77
76
|
export declare function getAttributeSchema(schema: Schema, tagName: string, attributeName: string): PropertySchema | undefined;
|
|
78
77
|
export declare function getRequiredAttributes(schema: Schema, tagName: string): string[];
|
|
79
|
-
|
|
80
|
-
export declare function isAttributeRequired(schema: Schema, tagName: string, attributeName: string): boolean;
|
|
81
|
-
export declare function getDataSchema(schema: Schema): Record<string, PropertySchema> | undefined;
|
|
82
|
-
export declare function getPropertyAtPath(schema: Schema, path: string[]): PropertySchema | undefined;
|
|
83
|
-
export declare function getAvailablePropertiesAtPath(schema: Schema, path: string[]): string[];
|
|
84
|
-
export type PropertyEnumValue = string | number | boolean;
|
|
78
|
+
type PropertyEnumValue = string | number | boolean;
|
|
85
79
|
export declare function getEnumValues(property: PropertySchema): readonly PropertyEnumValue[] | undefined;
|
|
80
|
+
export {};
|
|
86
81
|
//# sourceMappingURL=schema.d.ts.map
|
package/lib/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/lib/schema.js
CHANGED
|
@@ -32,9 +32,6 @@ export function isChildAllowed(schema, parentTag, childTag) {
|
|
|
32
32
|
export function getAllElements(schema) {
|
|
33
33
|
return schema.elements ? Object.keys(schema.elements) : [];
|
|
34
34
|
}
|
|
35
|
-
export function getElementConfig(schema, tagName) {
|
|
36
|
-
return getElementSchema(schema, tagName);
|
|
37
|
-
}
|
|
38
35
|
export function getAttributeSchema(schema, tagName, attributeName) {
|
|
39
36
|
const elementSchema = getElementSchema(schema, tagName);
|
|
40
37
|
return elementSchema?.props?.[attributeName];
|
|
@@ -52,46 +49,6 @@ export function getRequiredAttributes(schema, tagName) {
|
|
|
52
49
|
}
|
|
53
50
|
return required;
|
|
54
51
|
}
|
|
55
|
-
export function getOptionalAttributes(schema, tagName) {
|
|
56
|
-
const allAttributes = getAllowedAttributes(schema, tagName);
|
|
57
|
-
const requiredAttributes = getRequiredAttributes(schema, tagName);
|
|
58
|
-
return allAttributes.filter((attr) => !requiredAttributes.includes(attr));
|
|
59
|
-
}
|
|
60
|
-
export function isAttributeRequired(schema, tagName, attributeName) {
|
|
61
|
-
const requiredAttributes = getRequiredAttributes(schema, tagName);
|
|
62
|
-
return requiredAttributes.includes(attributeName);
|
|
63
|
-
}
|
|
64
|
-
export function getDataSchema(schema) {
|
|
65
|
-
return schema.data;
|
|
66
|
-
}
|
|
67
|
-
export function getPropertyAtPath(schema, path) {
|
|
68
|
-
if (!schema.data || path.length === 0) {
|
|
69
|
-
return undefined;
|
|
70
|
-
}
|
|
71
|
-
let current = path[0] !== undefined ? schema.data[path[0]] : undefined;
|
|
72
|
-
for (let i = 1; i < path.length && current; i++) {
|
|
73
|
-
if (current.type === "object" && current.shape) {
|
|
74
|
-
current = current.shape[path[i]];
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
return undefined;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return current;
|
|
81
|
-
}
|
|
82
|
-
export function getAvailablePropertiesAtPath(schema, path) {
|
|
83
|
-
if (!schema.data) {
|
|
84
|
-
return [];
|
|
85
|
-
}
|
|
86
|
-
if (path.length === 0) {
|
|
87
|
-
return Object.keys(schema.data);
|
|
88
|
-
}
|
|
89
|
-
const parentProperty = getPropertyAtPath(schema, path);
|
|
90
|
-
if (parentProperty?.type === "object" && parentProperty.shape) {
|
|
91
|
-
return Object.keys(parentProperty.shape);
|
|
92
|
-
}
|
|
93
|
-
return [];
|
|
94
|
-
}
|
|
95
52
|
export function getEnumValues(property) {
|
|
96
53
|
switch (property.type) {
|
|
97
54
|
case "string":
|
package/lib/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAqFA,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAAe;IAC9D,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAAe;IAC9D,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,OAAe;IAClE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAE,aAAqB;IACvF,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,OAAe;IAChE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,aAAa,EAAE,eAAe,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,OAAe;IAC7D,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,eAAe,KAAK,SAAS,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAe;IAC3D,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,eAAe,KAAK,SAAS,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,SAAiB,EAAE,QAAgB;IAChF,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9D,OAAO,eAAe,KAAK,SAAS,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/lib/traverse.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Program } from "acorn";
|
|
2
|
-
import { SimpleVisitors } from "acorn-walk";
|
|
3
|
-
import { JSXAttribute, JSXElement, JSXExpressionContainer, JSXFragment, JSXOpeningElement, JSXSpreadAttribute } from "./jsx.js";
|
|
1
|
+
import type { Program } from "acorn";
|
|
2
|
+
import { type SimpleVisitors } from "acorn-walk";
|
|
3
|
+
import { type JSXAttribute, type JSXElement, type JSXExpressionContainer, type JSXFragment, type JSXOpeningElement, type JSXSpreadAttribute } from "./jsx.js";
|
|
4
4
|
type SimpleVisitor<T> = (node: T, state: unknown) => void;
|
|
5
5
|
type ExtendedSimpleVisitors = SimpleVisitors<unknown> & {
|
|
6
6
|
JSXAttribute?: SimpleVisitor<JSXAttribute>;
|
|
@@ -10,6 +10,6 @@ type ExtendedSimpleVisitors = SimpleVisitors<unknown> & {
|
|
|
10
10
|
JSXOpeningElement?: SimpleVisitor<JSXOpeningElement>;
|
|
11
11
|
JSXSpreadAttribute?: SimpleVisitor<JSXSpreadAttribute>;
|
|
12
12
|
};
|
|
13
|
-
export declare function traverse(ast: Program, visitors:
|
|
13
|
+
export declare function traverse(ast: Program, visitors: ExtendedSimpleVisitors): void;
|
|
14
14
|
export {};
|
|
15
15
|
//# sourceMappingURL=traverse.d.ts.map
|
package/lib/traverse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAgC,KAAK,cAAc,EAAU,MAAM,YAAY,CAAC;AACvF,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAIlB,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAW1D,KAAK,sBAAsB,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG;IACtD,YAAY,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACvC,sBAAsB,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACzC,iBAAiB,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACrD,kBAAkB,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;CACxD,CAAC;AA4HF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAM7E"}
|
package/lib/traverse.js
CHANGED
|
@@ -1,46 +1,124 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { base, simple } from "acorn-walk";
|
|
2
|
+
import { isJsxEmptyExpression, isJsxText, } from "./jsx.js";
|
|
3
|
+
const tsNodeTypes = [
|
|
4
|
+
"TSInterfaceDeclaration",
|
|
5
|
+
"TSInterfaceBody",
|
|
6
|
+
"TSTypeAliasDeclaration",
|
|
7
|
+
"TSTypeAnnotation",
|
|
8
|
+
"TSTypeReference",
|
|
9
|
+
"TSTypeParameterDeclaration",
|
|
10
|
+
"TSTypeParameterInstantiation",
|
|
11
|
+
"TSTypeParameter",
|
|
12
|
+
"TSAsExpression",
|
|
13
|
+
"TSSatisfiesExpression",
|
|
14
|
+
"TSNonNullExpression",
|
|
15
|
+
"TSTypeAssertion",
|
|
16
|
+
"TSEnumDeclaration",
|
|
17
|
+
"TSEnumMember",
|
|
18
|
+
"TSModuleDeclaration",
|
|
19
|
+
"TSModuleBlock",
|
|
20
|
+
"TSImportEqualsDeclaration",
|
|
21
|
+
"TSExportAssignment",
|
|
22
|
+
"TSNamespaceExportDeclaration",
|
|
23
|
+
"TSDeclareFunction",
|
|
24
|
+
"TSDeclareMethod",
|
|
25
|
+
"TSExternalModuleReference",
|
|
26
|
+
"TSInstantiationExpression",
|
|
27
|
+
"TSTypeCastExpression",
|
|
28
|
+
"TSParameterProperty",
|
|
29
|
+
"TSIndexSignature",
|
|
30
|
+
"TSCallSignatureDeclaration",
|
|
31
|
+
"TSConstructSignatureDeclaration",
|
|
32
|
+
"TSPropertySignature",
|
|
33
|
+
"TSMethodSignature",
|
|
34
|
+
"TSTypePredicate",
|
|
35
|
+
"TSTypeQuery",
|
|
36
|
+
"TSTypeLiteral",
|
|
37
|
+
"TSTypeOperator",
|
|
38
|
+
"TSMappedType",
|
|
39
|
+
"TSConditionalType",
|
|
40
|
+
"TSInferType",
|
|
41
|
+
"TSImportType",
|
|
42
|
+
"TSExpressionWithTypeArguments",
|
|
43
|
+
"TSQualifiedName",
|
|
44
|
+
"TSFunctionType",
|
|
45
|
+
"TSConstructorType",
|
|
46
|
+
"TSUnionType",
|
|
47
|
+
"TSIntersectionType",
|
|
48
|
+
"TSTupleType",
|
|
49
|
+
"TSNamedTupleMember",
|
|
50
|
+
"TSArrayType",
|
|
51
|
+
"TSOptionalType",
|
|
52
|
+
"TSRestType",
|
|
53
|
+
"TSLiteralType",
|
|
54
|
+
"TSIndexedAccessType",
|
|
55
|
+
"TSParenthesizedType",
|
|
56
|
+
"TSAnyKeyword",
|
|
57
|
+
"TSBooleanKeyword",
|
|
58
|
+
"TSBigIntKeyword",
|
|
59
|
+
"TSNeverKeyword",
|
|
60
|
+
"TSNullKeyword",
|
|
61
|
+
"TSNumberKeyword",
|
|
62
|
+
"TSObjectKeyword",
|
|
63
|
+
"TSStringKeyword",
|
|
64
|
+
"TSSymbolKeyword",
|
|
65
|
+
"TSUndefinedKeyword",
|
|
66
|
+
"TSUnknownKeyword",
|
|
67
|
+
"TSVoidKeyword",
|
|
68
|
+
"TSThisType",
|
|
69
|
+
];
|
|
70
|
+
const tsWalkers = {};
|
|
71
|
+
for (const nodeType of tsNodeTypes) {
|
|
72
|
+
tsWalkers[nodeType] = () => { };
|
|
73
|
+
}
|
|
74
|
+
const jsxWalkers = {
|
|
75
|
+
JSXElement(node, state, visit) {
|
|
76
|
+
const element = node;
|
|
77
|
+
visit(element.openingElement, state);
|
|
78
|
+
for (const child of element.children) {
|
|
79
|
+
if (isJsxText(child) || isJsxEmptyExpression(child)) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
visit(child, state);
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
JSXFragment(node, state, visit) {
|
|
86
|
+
const fragment = node;
|
|
87
|
+
for (const child of fragment.children) {
|
|
88
|
+
if (isJsxText(child) || isJsxEmptyExpression(child)) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
visit(child, state);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
JSXOpeningElement(node, state, visit) {
|
|
95
|
+
const opening = node;
|
|
96
|
+
for (const attr of opening.attributes) {
|
|
97
|
+
visit(attr, state);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
JSXAttribute(node, state, visit) {
|
|
101
|
+
const attr = node;
|
|
102
|
+
if (attr.value) {
|
|
103
|
+
visit(attr.value, state);
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
JSXSpreadAttribute(node, state, visit) {
|
|
107
|
+
const spread = node;
|
|
108
|
+
visit(spread.argument, state);
|
|
109
|
+
},
|
|
110
|
+
JSXExpressionContainer(node, state, visit) {
|
|
111
|
+
const container = node;
|
|
112
|
+
if (!isJsxEmptyExpression(container.expression)) {
|
|
113
|
+
visit(container.expression, state);
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
};
|
|
3
117
|
export function traverse(ast, visitors) {
|
|
4
118
|
simple(ast, visitors, {
|
|
5
119
|
...base,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
visit(node.value, state);
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
JSXElement(node, state, visit) {
|
|
12
|
-
const { openingElement } = node;
|
|
13
|
-
if (openingElement && Array.isArray(openingElement.attributes)) {
|
|
14
|
-
for (const attribute of openingElement.attributes) {
|
|
15
|
-
visit(attribute, state);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
for (const child of node.children) {
|
|
19
|
-
if (!isJsxText(child)) {
|
|
20
|
-
visit(child, state);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
JSXExpressionContainer(node, state, visit) {
|
|
25
|
-
if (!isJsxEmptyExpression(node.expression)) {
|
|
26
|
-
visit(node.expression, state);
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
JSXFragment(node, state, visit) {
|
|
30
|
-
for (const child of node.children) {
|
|
31
|
-
if (!isJsxText(child)) {
|
|
32
|
-
visit(child, state);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
JSXOpeningElement(node, state, visit) {
|
|
37
|
-
for (const attribute of node.attributes) {
|
|
38
|
-
visit(attribute, state);
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
JSXSpreadAttribute(node, state, visit) {
|
|
42
|
-
visit(node.argument, state);
|
|
43
|
-
},
|
|
120
|
+
...jsxWalkers,
|
|
121
|
+
...tsWalkers,
|
|
44
122
|
});
|
|
45
123
|
}
|
|
46
124
|
//# sourceMappingURL=traverse.js.map
|
package/lib/traverse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse.js","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"traverse.js","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":"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"}
|
package/lib/validate.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export interface ValidateOptions {
|
|
|
28
28
|
*
|
|
29
29
|
* @example
|
|
30
30
|
* ```typescript
|
|
31
|
-
* const result = validate("<Text>{
|
|
31
|
+
* const result = validate("<Text>{user.name}</Text>", schema);
|
|
32
32
|
* if (result.ok) {
|
|
33
33
|
* console.log("JSX is valid!");
|
|
34
34
|
* } else {
|
package/lib/validate.js
CHANGED
|
@@ -15,7 +15,7 @@ import { parse, ParseError } from "./parse/index.js";
|
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
|
-
* const result = validate("<Text>{
|
|
18
|
+
* const result = validate("<Text>{user.name}</Text>", schema);
|
|
19
19
|
* if (result.ok) {
|
|
20
20
|
* console.log("JSX is valid!");
|
|
21
21
|
* } else {
|