jsxpression 0.1.2 → 0.1.5
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/lib/analyze/analysis-error.js +1 -5
- package/lib/analyze/analysis-error.js.map +1 -1
- package/lib/analyze/analysis-report.js +1 -5
- package/lib/analyze/analysis-report.js.map +1 -1
- package/lib/analyze/analyze.d.ts +1 -1
- package/lib/analyze/analyze.d.ts.map +1 -1
- package/lib/analyze/analyze.js +6 -9
- package/lib/analyze/analyze.js.map +1 -1
- package/lib/analyze/analyze.test.js +312 -314
- package/lib/analyze/analyze.test.js.map +1 -1
- package/lib/analyze/data/analyze.d.ts +1 -1
- package/lib/analyze/data/analyze.d.ts.map +1 -1
- package/lib/analyze/data/analyze.js +7 -10
- package/lib/analyze/data/analyze.js.map +1 -1
- package/lib/analyze/data/data-access.d.ts +1 -1
- package/lib/analyze/data/data-access.d.ts.map +1 -1
- package/lib/analyze/data/data-access.js +20 -24
- package/lib/analyze/data/data-access.js.map +1 -1
- package/lib/analyze/data/index.d.ts +1 -1
- package/lib/analyze/data/index.d.ts.map +1 -1
- package/lib/analyze/data/index.js +1 -5
- package/lib/analyze/data/index.js.map +1 -1
- package/lib/analyze/data/method-calls.d.ts +1 -1
- package/lib/analyze/data/method-calls.d.ts.map +1 -1
- package/lib/analyze/data/method-calls.js +17 -20
- package/lib/analyze/data/method-calls.js.map +1 -1
- package/lib/analyze/data/utils.d.ts +1 -1
- package/lib/analyze/data/utils.d.ts.map +1 -1
- package/lib/analyze/data/utils.js +22 -29
- package/lib/analyze/data/utils.js.map +1 -1
- package/lib/analyze/index.d.ts +1 -1
- package/lib/analyze/index.d.ts.map +1 -1
- package/lib/analyze/index.js +3 -9
- package/lib/analyze/index.js.map +1 -1
- package/lib/analyze/jsx/analyze.d.ts +1 -1
- package/lib/analyze/jsx/analyze.d.ts.map +1 -1
- package/lib/analyze/jsx/analyze.js +8 -11
- package/lib/analyze/jsx/analyze.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 +21 -24
- 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 +20 -23
- 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 -15
- package/lib/analyze/jsx/element-tags.js.map +1 -1
- package/lib/analyze/jsx/index.d.ts +1 -1
- package/lib/analyze/jsx/index.d.ts.map +1 -1
- package/lib/analyze/jsx/index.js +1 -5
- package/lib/analyze/jsx/index.js.map +1 -1
- package/lib/analyze/security/analyze.d.ts +1 -1
- package/lib/analyze/security/analyze.d.ts.map +1 -1
- package/lib/analyze/security/analyze.js +10 -13
- package/lib/analyze/security/analyze.js.map +1 -1
- package/lib/analyze/security/call-expressions.d.ts +1 -1
- package/lib/analyze/security/call-expressions.d.ts.map +1 -1
- package/lib/analyze/security/call-expressions.js +8 -11
- 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 +12 -15
- package/lib/analyze/security/declarations.js.map +1 -1
- package/lib/analyze/security/expressions.d.ts +1 -1
- package/lib/analyze/security/expressions.d.ts.map +1 -1
- package/lib/analyze/security/expressions.js +14 -17
- package/lib/analyze/security/expressions.js.map +1 -1
- package/lib/analyze/security/identifiers.d.ts +1 -1
- package/lib/analyze/security/identifiers.d.ts.map +1 -1
- package/lib/analyze/security/identifiers.js +10 -13
- package/lib/analyze/security/identifiers.js.map +1 -1
- package/lib/analyze/security/index.d.ts +1 -1
- package/lib/analyze/security/index.d.ts.map +1 -1
- package/lib/analyze/security/index.js +1 -5
- package/lib/analyze/security/index.js.map +1 -1
- package/lib/analyze/security/member-access.d.ts +1 -1
- package/lib/analyze/security/member-access.d.ts.map +1 -1
- package/lib/analyze/security/member-access.js +7 -10
- package/lib/analyze/security/member-access.js.map +1 -1
- package/lib/analyze/utils.js +4 -10
- package/lib/analyze/utils.js.map +1 -1
- package/lib/analyze/validation-context.js +1 -5
- package/lib/analyze/validation-context.js.map +1 -1
- package/lib/builtins.js +9 -20
- package/lib/builtins.js.map +1 -1
- package/lib/codegen/builtins/builtin-types.js +3 -6
- package/lib/codegen/builtins/builtin-types.js.map +1 -1
- package/lib/codegen/builtins/index.js +1 -5
- package/lib/codegen/builtins/index.js.map +1 -1
- package/lib/codegen/generate-typescript-definitions.js +4 -7
- package/lib/codegen/generate-typescript-definitions.js.map +1 -1
- package/lib/codegen/generate-typescript-definitions.test.js +190 -192
- package/lib/codegen/generate-typescript-definitions.test.js.map +1 -1
- package/lib/codegen/index.js +1 -5
- package/lib/codegen/index.js.map +1 -1
- package/lib/codegen/schema/component-types.js +3 -6
- package/lib/codegen/schema/component-types.js.map +1 -1
- package/lib/codegen/schema/data-types.js +3 -6
- package/lib/codegen/schema/data-types.js.map +1 -1
- package/lib/codegen/schema/index.js +2 -7
- package/lib/codegen/schema/index.js.map +1 -1
- package/lib/codegen/schema/utils.js +3 -8
- package/lib/codegen/schema/utils.js.map +1 -1
- package/lib/compile/compilation-error.js +1 -5
- package/lib/compile/compilation-error.js.map +1 -1
- package/lib/compile/compile.d.ts +1 -1
- package/lib/compile/compile.d.ts.map +1 -1
- package/lib/compile/compile.js +20 -25
- package/lib/compile/compile.js.map +1 -1
- package/lib/compile/compile.test.js +110 -112
- package/lib/compile/compile.test.js.map +1 -1
- package/lib/compile/index.d.ts +1 -1
- package/lib/compile/index.d.ts.map +1 -1
- package/lib/compile/index.js +2 -7
- package/lib/compile/index.js.map +1 -1
- package/lib/evaluate/evaluate.js +5 -8
- package/lib/evaluate/evaluate.js.map +1 -1
- package/lib/evaluate/evaluate.test.js +56 -58
- package/lib/evaluate/evaluate.test.js.map +1 -1
- package/lib/evaluate/evaluation-error.js +1 -5
- package/lib/evaluate/evaluation-error.js.map +1 -1
- package/lib/evaluate/index.d.ts +1 -1
- package/lib/evaluate/index.d.ts.map +1 -1
- package/lib/evaluate/index.js +2 -7
- package/lib/evaluate/index.js.map +1 -1
- package/lib/index.js +6 -15
- package/lib/index.js.map +1 -1
- package/lib/jsx.d.ts +1 -1
- package/lib/jsx.d.ts.map +1 -1
- package/lib/jsx.js +10 -22
- package/lib/jsx.js.map +1 -1
- package/lib/parse/index.d.ts +1 -1
- package/lib/parse/index.d.ts.map +1 -1
- package/lib/parse/index.js +2 -7
- package/lib/parse/index.js.map +1 -1
- package/lib/parse/parse-error.js +1 -5
- package/lib/parse/parse-error.js.map +1 -1
- package/lib/parse/parse.d.ts +1 -1
- package/lib/parse/parse.d.ts.map +1 -1
- package/lib/parse/parse.js +7 -13
- package/lib/parse/parse.js.map +1 -1
- package/lib/parse/parse.test.js +56 -58
- package/lib/parse/parse.test.js.map +1 -1
- package/lib/render.d.ts +1 -1
- package/lib/render.d.ts.map +1 -1
- package/lib/render.js +9 -12
- package/lib/render.js.map +1 -1
- package/lib/render.test.js +62 -64
- package/lib/render.test.js.map +1 -1
- package/lib/schema.d.ts +1 -0
- package/lib/schema.d.ts.map +1 -1
- package/lib/schema.js +18 -38
- package/lib/schema.js.map +1 -1
- package/lib/traverse.d.ts +3 -3
- package/lib/traverse.d.ts.map +1 -1
- package/lib/traverse.js +8 -11
- package/lib/traverse.js.map +1 -1
- package/lib/traverse.test.js +34 -36
- package/lib/traverse.test.js.map +1 -1
- package/lib/types.js +1 -2
- package/lib/validate.js +7 -10
- package/lib/validate.js.map +1 -1
- package/package.json +2 -1
- package/src/compile/compile.ts +3 -4
- package/src/schema.ts +1 -0
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.extractPath = extractPath;
|
|
5
|
-
exports.getParentNode = getParentNode;
|
|
6
|
-
exports.getAvailablePropsAtPath = getAvailablePropsAtPath;
|
|
7
|
-
exports.validateSchemaPath = validateSchemaPath;
|
|
8
|
-
const builtins_js_1 = require("../../builtins.js");
|
|
9
|
-
const utils_js_1 = require("../utils.js");
|
|
10
|
-
function isSimpleDataAccess(node) {
|
|
1
|
+
import { isAllowedOnArray, isAllowedOnString, getAvailableArrayMembers, getAvailableStringMembers, } from "../../builtins.js";
|
|
2
|
+
import { getNodeRange } from "../utils.js";
|
|
3
|
+
export function isSimpleDataAccess(node) {
|
|
11
4
|
if (node.computed) {
|
|
12
5
|
return node.property.type === "Literal" && typeof node.property.value === "number";
|
|
13
6
|
}
|
|
@@ -36,7 +29,7 @@ function isSimpleDataAccess(node) {
|
|
|
36
29
|
}
|
|
37
30
|
return false;
|
|
38
31
|
}
|
|
39
|
-
function extractPath(node) {
|
|
32
|
+
export function extractPath(node) {
|
|
40
33
|
const path = [];
|
|
41
34
|
if (node.property.type === "Identifier") {
|
|
42
35
|
path.unshift(node.property.name);
|
|
@@ -59,7 +52,7 @@ function extractPath(node) {
|
|
|
59
52
|
}
|
|
60
53
|
return path;
|
|
61
54
|
}
|
|
62
|
-
function getParentNode(targetNode, ast) {
|
|
55
|
+
export function getParentNode(targetNode, ast) {
|
|
63
56
|
let parent = null;
|
|
64
57
|
function traverseForParent(node, currentParent = null) {
|
|
65
58
|
if (node === targetNode) {
|
|
@@ -85,7 +78,7 @@ function getParentNode(targetNode, ast) {
|
|
|
85
78
|
traverseForParent(ast);
|
|
86
79
|
return parent;
|
|
87
80
|
}
|
|
88
|
-
function getAvailablePropsAtPath(path, depth, schemaData) {
|
|
81
|
+
export function getAvailablePropsAtPath(path, depth, schemaData) {
|
|
89
82
|
if (!schemaData || depth < 0) {
|
|
90
83
|
return schemaData ? Object.keys(schemaData) : [];
|
|
91
84
|
}
|
|
@@ -104,15 +97,15 @@ function getAvailablePropsAtPath(path, depth, schemaData) {
|
|
|
104
97
|
}
|
|
105
98
|
return [];
|
|
106
99
|
}
|
|
107
|
-
function validateSchemaPath(path, schema, analysisReport, node, validationContext) {
|
|
100
|
+
export function validateSchemaPath(path, schema, analysisReport, node, validationContext) {
|
|
108
101
|
const schemaData = schema.data;
|
|
109
102
|
if (!schemaData || path.length === 0) {
|
|
110
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", "Invalid data access - no schema data available",
|
|
103
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", "Invalid data access - no schema data available", getNodeRange(node), validationContext.getSnapshot(), schemaData ? Object.keys(schemaData) : undefined);
|
|
111
104
|
return;
|
|
112
105
|
}
|
|
113
106
|
let current = schemaData[path[0]];
|
|
114
107
|
if (!current) {
|
|
115
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${path[0]}' does not exist in schema`,
|
|
108
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${path[0]}' does not exist in schema`, getNodeRange(node), validationContext.getSnapshot(), Object.keys(schemaData));
|
|
116
109
|
return;
|
|
117
110
|
}
|
|
118
111
|
const elementAccessFlags = getElementAccessFlags(node, path.length);
|
|
@@ -121,16 +114,16 @@ function validateSchemaPath(path, schema, analysisReport, node, validationContex
|
|
|
121
114
|
const isElementAccess = elementAccessFlags[i];
|
|
122
115
|
if (current.type === "array") {
|
|
123
116
|
if (!isElementAccess) {
|
|
124
|
-
if (
|
|
117
|
+
if (isAllowedOnArray(prop)) {
|
|
125
118
|
return;
|
|
126
119
|
}
|
|
127
120
|
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
128
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on array type`,
|
|
121
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on array type`, getNodeRange(node), validationContext.getSnapshot(), getAvailableArrayMembers());
|
|
129
122
|
return;
|
|
130
123
|
}
|
|
131
124
|
const elementType = current.shape || null;
|
|
132
125
|
if (!elementType) {
|
|
133
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on unknown array element type`,
|
|
126
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on unknown array element type`, getNodeRange(node), validationContext.getSnapshot(), getAvailableArrayMembers());
|
|
134
127
|
return;
|
|
135
128
|
}
|
|
136
129
|
if (elementType.type === "object" && elementType.shape) {
|
|
@@ -138,48 +131,48 @@ function validateSchemaPath(path, schema, analysisReport, node, validationContex
|
|
|
138
131
|
if (!next) {
|
|
139
132
|
const paths = path.slice(0, i + 1);
|
|
140
133
|
const suggestions = Object.keys(elementType.shape);
|
|
141
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${paths.join(".")}' does not exist in schema`,
|
|
134
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${paths.join(".")}' does not exist in schema`, getNodeRange(node), validationContext.getSnapshot(), suggestions);
|
|
142
135
|
return;
|
|
143
136
|
}
|
|
144
137
|
current = next;
|
|
145
138
|
continue;
|
|
146
139
|
}
|
|
147
140
|
if (elementType.type === "array") {
|
|
148
|
-
if (
|
|
141
|
+
if (isAllowedOnArray(prop)) {
|
|
149
142
|
return;
|
|
150
143
|
}
|
|
151
144
|
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
152
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on array type`,
|
|
145
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on array type`, getNodeRange(node), validationContext.getSnapshot(), getAvailableArrayMembers());
|
|
153
146
|
return;
|
|
154
147
|
}
|
|
155
148
|
if (elementType.type === "string") {
|
|
156
|
-
if (
|
|
149
|
+
if (isAllowedOnString(prop)) {
|
|
157
150
|
return;
|
|
158
151
|
}
|
|
159
152
|
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
160
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on string type`,
|
|
153
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on string type`, getNodeRange(node), validationContext.getSnapshot(), getAvailableStringMembers());
|
|
161
154
|
return;
|
|
162
155
|
}
|
|
163
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on ${elementType.type || "undefined"} type array element`,
|
|
156
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on ${elementType.type || "undefined"} type array element`, getNodeRange(node), validationContext.getSnapshot());
|
|
164
157
|
return;
|
|
165
158
|
}
|
|
166
159
|
if (current.type === "string") {
|
|
167
|
-
if (
|
|
160
|
+
if (isAllowedOnString(prop)) {
|
|
168
161
|
return;
|
|
169
162
|
}
|
|
170
163
|
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
171
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on string type`,
|
|
164
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on string type`, getNodeRange(node), validationContext.getSnapshot(), getAvailableStringMembers());
|
|
172
165
|
return;
|
|
173
166
|
}
|
|
174
167
|
if (current.type !== "object" || !current.shape) {
|
|
175
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on ${current.type || "undefined"} type`,
|
|
168
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on ${current.type || "undefined"} type`, getNodeRange(node), validationContext.getSnapshot());
|
|
176
169
|
return;
|
|
177
170
|
}
|
|
178
171
|
current = current.shape[prop];
|
|
179
172
|
if (!current) {
|
|
180
173
|
const availableProps = getAvailablePropsAtPath(path, i - 1, schemaData);
|
|
181
174
|
const paths = path.slice(0, i + 1);
|
|
182
|
-
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${paths.join(".")}' does not exist in schema`,
|
|
175
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${paths.join(".")}' does not exist in schema`, getNodeRange(node), validationContext.getSnapshot(), availableProps);
|
|
183
176
|
}
|
|
184
177
|
}
|
|
185
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/analyze/data/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/analyze/data/utils.ts"],"names":[],"mappings":"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"}
|
package/lib/analyze/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
package/lib/analyze/index.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var index_js_1 = require("./analyze/index.js");
|
|
5
|
-
Object.defineProperty(exports, "analyze", { enumerable: true, get: function () { return index_js_1.analyze; } });
|
|
6
|
-
var analysis_error_js_1 = require("./analysis-error.js");
|
|
7
|
-
Object.defineProperty(exports, "AnalysisError", { enumerable: true, get: function () { return analysis_error_js_1.AnalysisError; } });
|
|
8
|
-
var analysis_report_js_1 = require("./analysis-report.js");
|
|
9
|
-
Object.defineProperty(exports, "AnalysisReport", { enumerable: true, get: function () { return analysis_report_js_1.AnalysisReport; } });
|
|
1
|
+
export { analyze } from "./analyze.js";
|
|
2
|
+
export { AnalysisError } from "./analysis-error.js";
|
|
3
|
+
export { AnalysisReport } from "./analysis-report.js";
|
|
10
4
|
//# sourceMappingURL=index.js.map
|
package/lib/analyze/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAQvE"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
function analyzeJsx(ast, schema) {
|
|
10
|
-
const validationContext = new validation_context_js_1.ValidationContext();
|
|
11
|
-
return new analysis_report_js_1.AnalysisReport().merge((0, element_tags_js_1.analyzeElementTags)(ast, schema, validationContext), (0, element_attributes_js_1.analyzeElementAttributes)(ast, schema, validationContext), (0, element_children_js_1.analyzeElementChildren)(ast, schema, validationContext));
|
|
1
|
+
import { AnalysisReport } from "../analysis-report.js";
|
|
2
|
+
import { ValidationContext } from "../validation-context.js";
|
|
3
|
+
import { analyzeElementAttributes } from "./element-attributes.js";
|
|
4
|
+
import { analyzeElementChildren } from "./element-children.js";
|
|
5
|
+
import { analyzeElementTags } from "./element-tags.js";
|
|
6
|
+
export function analyzeJsx(ast, schema) {
|
|
7
|
+
const validationContext = new ValidationContext();
|
|
8
|
+
return new AnalysisReport().merge(analyzeElementTags(ast, schema, validationContext), analyzeElementAttributes(ast, schema, validationContext), analyzeElementChildren(ast, schema, validationContext));
|
|
12
9
|
}
|
|
13
10
|
//# sourceMappingURL=analyze.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/analyze/jsx/analyze.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/analyze/jsx/analyze.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,UAAU,CAAC,GAAY,EAAE,MAAc;IACrD,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAElD,OAAO,IAAI,cAAc,EAAE,CAAC,KAAK,CAC/B,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAClD,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EACxD,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,CACvD,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-attributes.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/element-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"element-attributes.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/element-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EACL,KAAK,MAAM,EAMZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAkGhB"}
|
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
function analyzeElementAttributes(ast, schema, validationContext) {
|
|
10
|
-
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
11
|
-
(0, traverse_js_1.traverse)(ast, {
|
|
1
|
+
import { traverse } from "../../traverse.js";
|
|
2
|
+
import { isAttributeAllowed, getAllowedAttributes, getRequiredAttributes, getAttributeSchema, getEnumValues, } from "../../schema.js";
|
|
3
|
+
import { isJsxAttribute, isJsxExpressionContainer } from "../../jsx.js";
|
|
4
|
+
import { AnalysisReport } from "../analysis-report.js";
|
|
5
|
+
import { getNodeRange, getAttributeSimilarityMatchers, getBestSimilarityMatcherSuggestion } from "../utils.js";
|
|
6
|
+
export function analyzeElementAttributes(ast, schema, validationContext) {
|
|
7
|
+
const analysisReport = new AnalysisReport();
|
|
8
|
+
traverse(ast, {
|
|
12
9
|
JSXElement(node) {
|
|
13
10
|
const tagName = node.openingElement.name.name;
|
|
14
11
|
validationContext.enterElement(tagName);
|
|
15
12
|
const currentContext = validationContext.getSnapshot();
|
|
16
|
-
const allowedAttributes =
|
|
17
|
-
const requiredAttributes =
|
|
13
|
+
const allowedAttributes = getAllowedAttributes(schema, tagName);
|
|
14
|
+
const requiredAttributes = getRequiredAttributes(schema, tagName);
|
|
18
15
|
for (const attribute of node.openingElement.attributes) {
|
|
19
|
-
if (!
|
|
16
|
+
if (!isJsxAttribute(attribute)) {
|
|
20
17
|
continue;
|
|
21
18
|
}
|
|
22
19
|
const attributeName = attribute.name.name;
|
|
23
|
-
const range =
|
|
24
|
-
if (!
|
|
25
|
-
const suggestions =
|
|
26
|
-
const suggestionMatch =
|
|
20
|
+
const range = getNodeRange(attribute);
|
|
21
|
+
if (!isAttributeAllowed(schema, tagName, attributeName)) {
|
|
22
|
+
const suggestions = getAttributeSimilarityMatchers(attributeName, allowedAttributes);
|
|
23
|
+
const suggestionMatch = getBestSimilarityMatcherSuggestion(attributeName, allowedAttributes);
|
|
27
24
|
let message = `Attribute "${attributeName}" not allowed on <${tagName}>`;
|
|
28
25
|
if (suggestionMatch) {
|
|
29
26
|
message += `. Did you mean "${suggestionMatch}"?`;
|
|
@@ -38,13 +35,13 @@ function analyzeElementAttributes(ast, schema, validationContext) {
|
|
|
38
35
|
analysisReport.addIssue("INVALID_ATTRIBUTE", message, range, currentContext, suggestions.map((suggestion) => suggestion.suggestion));
|
|
39
36
|
continue;
|
|
40
37
|
}
|
|
41
|
-
const attributeSchema =
|
|
42
|
-
const enumValues = attributeSchema ?
|
|
38
|
+
const attributeSchema = getAttributeSchema(schema, tagName, attributeName);
|
|
39
|
+
const enumValues = attributeSchema ? getEnumValues(attributeSchema) : undefined;
|
|
43
40
|
if (enumValues && enumValues.length > 0) {
|
|
44
41
|
const literalValue = getAttributeLiteralValue(attribute);
|
|
45
42
|
if (isEnumComparableValue(literalValue) && !enumValues.includes(literalValue)) {
|
|
46
43
|
const stringEnumValues = enumValues.map((value) => String(value));
|
|
47
|
-
const suggestionMatch =
|
|
44
|
+
const suggestionMatch = getBestSimilarityMatcherSuggestion(String(literalValue), stringEnumValues);
|
|
48
45
|
let message = `Value ${JSON.stringify(literalValue)} is not allowed for attribute "${attributeName}" on <${tagName}>`;
|
|
49
46
|
if (suggestionMatch) {
|
|
50
47
|
message += `. Did you mean "${suggestionMatch}"?`;
|
|
@@ -57,10 +54,10 @@ function analyzeElementAttributes(ast, schema, validationContext) {
|
|
|
57
54
|
}
|
|
58
55
|
}
|
|
59
56
|
// Check for missing required attributes
|
|
60
|
-
const providedAttributes = node.openingElement.attributes.filter(
|
|
57
|
+
const providedAttributes = node.openingElement.attributes.filter(isJsxAttribute).map((attr) => attr.name.name);
|
|
61
58
|
for (const requiredAttribute of requiredAttributes) {
|
|
62
59
|
if (!providedAttributes.includes(requiredAttribute)) {
|
|
63
|
-
analysisReport.addIssue("MISSING_REQUIRED_ATTRIBUTE", `Required attribute "${requiredAttribute}" missing on <${tagName}>`,
|
|
60
|
+
analysisReport.addIssue("MISSING_REQUIRED_ATTRIBUTE", `Required attribute "${requiredAttribute}" missing on <${tagName}>`, getNodeRange(node.openingElement), currentContext, [requiredAttribute]);
|
|
64
61
|
}
|
|
65
62
|
}
|
|
66
63
|
validationContext.exitElement();
|
|
@@ -78,7 +75,7 @@ function getAttributeLiteralValue(attribute) {
|
|
|
78
75
|
if (attribute.value.type === "Literal") {
|
|
79
76
|
return attribute.value.value;
|
|
80
77
|
}
|
|
81
|
-
if (
|
|
78
|
+
if (isJsxExpressionContainer(attribute.value)) {
|
|
82
79
|
const expression = attribute.value.expression;
|
|
83
80
|
if (expression?.type === "Literal") {
|
|
84
81
|
return expression.value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-attributes.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-attributes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"element-attributes.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-attributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-children.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/element-children.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"element-children.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/element-children.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EAAE,KAAK,MAAM,EAAqC,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAoFhB"}
|
|
@@ -1,59 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
function analyzeElementChildren(ast, schema, validationContext) {
|
|
10
|
-
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
11
|
-
(0, traverse_js_1.traverse)(ast, {
|
|
1
|
+
import { traverse } from "../../traverse.js";
|
|
2
|
+
import { getAllowedChildren, isSelfClosing } from "../../schema.js";
|
|
3
|
+
import { isJsxElement, isJsxFragment, isJsxText, isJsxLeafNode } from "../../jsx.js";
|
|
4
|
+
import { AnalysisReport } from "../analysis-report.js";
|
|
5
|
+
import { getNodeRange, getElementSimilarityMatchers, getBestSimilarityMatcherSuggestion } from "../utils.js";
|
|
6
|
+
export function analyzeElementChildren(ast, schema, validationContext) {
|
|
7
|
+
const analysisReport = new AnalysisReport();
|
|
8
|
+
traverse(ast, {
|
|
12
9
|
JSXElement(node) {
|
|
13
10
|
const parentTag = node.openingElement.name.name;
|
|
14
11
|
validationContext.enterElement(parentTag);
|
|
15
12
|
const currentContext = validationContext.getSnapshot();
|
|
16
|
-
const allowedChildren =
|
|
13
|
+
const allowedChildren = getAllowedChildren(schema, parentTag);
|
|
17
14
|
if (!allowedChildren) {
|
|
18
15
|
validationContext.exitElement();
|
|
19
16
|
return;
|
|
20
17
|
}
|
|
21
|
-
if (
|
|
18
|
+
if (isSelfClosing(schema, parentTag) && node.children.length > 0) {
|
|
22
19
|
const hasNonWhitespaceContent = node.children.some((child) => {
|
|
23
|
-
if (
|
|
20
|
+
if (isJsxText(child)) {
|
|
24
21
|
return child.value.trim().length > 0;
|
|
25
22
|
}
|
|
26
|
-
return !
|
|
23
|
+
return !isJsxLeafNode(child) || !isJsxText(child);
|
|
27
24
|
});
|
|
28
25
|
if (hasNonWhitespaceContent) {
|
|
29
26
|
const firstMeaningfulChild = node.children.find((child) => {
|
|
30
|
-
if (
|
|
27
|
+
if (isJsxText(child)) {
|
|
31
28
|
return child.value.trim().length > 0;
|
|
32
29
|
}
|
|
33
30
|
return true;
|
|
34
31
|
});
|
|
35
|
-
analysisReport.addIssue("SELF_CLOSING_WITH_CHILDREN", `Element <${parentTag}> cannot have children. It is self-closing.`,
|
|
32
|
+
analysisReport.addIssue("SELF_CLOSING_WITH_CHILDREN", `Element <${parentTag}> cannot have children. It is self-closing.`, getNodeRange(firstMeaningfulChild || node.children[0]), currentContext);
|
|
36
33
|
}
|
|
37
34
|
}
|
|
38
35
|
for (const child of node.children) {
|
|
39
|
-
if (
|
|
36
|
+
if (isJsxElement(child)) {
|
|
40
37
|
const childTag = child.openingElement.name.name;
|
|
41
38
|
if (!allowedChildren.includes(childTag)) {
|
|
42
|
-
const elementSimilarityMatchers =
|
|
43
|
-
const bestSimilarityMatcherSuggestion =
|
|
39
|
+
const elementSimilarityMatchers = getElementSimilarityMatchers(childTag, allowedChildren);
|
|
40
|
+
const bestSimilarityMatcherSuggestion = getBestSimilarityMatcherSuggestion(childTag, allowedChildren);
|
|
44
41
|
let message = `Element <${childTag}> not allowed in <${parentTag}>`;
|
|
45
42
|
if (bestSimilarityMatcherSuggestion) {
|
|
46
43
|
message += `. Did you mean <${bestSimilarityMatcherSuggestion}>?`;
|
|
47
44
|
}
|
|
48
45
|
message += `. Allowed children: ${allowedChildren.join(", ")}`;
|
|
49
|
-
analysisReport.addIssue("INVALID_CHILD_ELEMENT", message,
|
|
46
|
+
analysisReport.addIssue("INVALID_CHILD_ELEMENT", message, getNodeRange(child), currentContext, elementSimilarityMatchers.map((similarityMatcher) => similarityMatcher.suggestion));
|
|
50
47
|
}
|
|
51
48
|
}
|
|
52
|
-
else if (
|
|
49
|
+
else if (isJsxFragment(child)) {
|
|
53
50
|
// TODO: Recursively validate fragment children
|
|
54
51
|
// For now, we allow fragments but should add more specific validation in the future
|
|
55
52
|
}
|
|
56
|
-
else if (
|
|
53
|
+
else if (isJsxText(child)) {
|
|
57
54
|
const hasContent = child.value.trim().length > 0;
|
|
58
55
|
if (!hasContent) {
|
|
59
56
|
// Allow whitespace-only text nodes (very common in JSX formatting)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-children.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-children.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"element-children.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-children.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-tags.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/element-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"element-tags.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/element-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EAAE,KAAK,MAAM,EAAoC,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,cAAc,CA+CrH"}
|
|
@@ -1,22 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
function analyzeElementTags(ast, schema, validationContext) {
|
|
9
|
-
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
10
|
-
(0, traverse_js_1.traverse)(ast, {
|
|
1
|
+
import { traverse } from "../../traverse.js";
|
|
2
|
+
import { isElementAllowed, getAllElements } from "../../schema.js";
|
|
3
|
+
import { AnalysisReport } from "../analysis-report.js";
|
|
4
|
+
import { getNodeRange, getElementSimilarityMatchers, getBestSimilarityMatcherSuggestion } from "../utils.js";
|
|
5
|
+
export function analyzeElementTags(ast, schema, validationContext) {
|
|
6
|
+
const analysisReport = new AnalysisReport();
|
|
7
|
+
traverse(ast, {
|
|
11
8
|
JSXElement(node) {
|
|
12
9
|
const tagName = node.openingElement.name.name;
|
|
13
10
|
validationContext.enterElement(tagName);
|
|
14
11
|
const snapshot = validationContext.getSnapshot();
|
|
15
|
-
const range =
|
|
16
|
-
if (!
|
|
17
|
-
const availableElements =
|
|
18
|
-
const elementSimilarityMatchers =
|
|
19
|
-
const bestSuggestionMatch =
|
|
12
|
+
const range = getNodeRange(node);
|
|
13
|
+
if (!isElementAllowed(schema, tagName)) {
|
|
14
|
+
const availableElements = getAllElements(schema);
|
|
15
|
+
const elementSimilarityMatchers = getElementSimilarityMatchers(tagName, availableElements);
|
|
16
|
+
const bestSuggestionMatch = getBestSimilarityMatcherSuggestion(tagName, availableElements);
|
|
20
17
|
let message = `Element <${tagName}> not allowed`;
|
|
21
18
|
if (snapshot.elements.length > 1) {
|
|
22
19
|
message += ` in ${validationContext.currentPath}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-tags.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-tags.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"element-tags.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-tags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAe,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,4BAA4B,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAC;AAE7G,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,MAAc,EAAE,iBAAoC;IACnG,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAE5C,QAAQ,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,IAAI;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAE9C,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAExC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;gBACvC,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBACjD,MAAM,yBAAyB,GAAG,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAC3F,MAAM,mBAAmB,GAAG,kCAAkC,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAE3F,IAAI,OAAO,GAAG,YAAY,OAAO,eAAe,CAAC;gBAEjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,OAAO,IAAI,OAAO,iBAAiB,CAAC,WAAW,EAAE,CAAC;gBACpD,CAAC;gBAED,IAAI,mBAAmB,EAAE,CAAC;oBACxB,OAAO,IAAI,mBAAmB,mBAAmB,IAAI,CAAC;gBACxD,CAAC;qBAAM,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtD,OAAO,IAAI,yBAAyB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,OAAO,IAAI,SAAS,iBAAiB,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBAED,cAAc,CAAC,QAAQ,CACrB,iBAAiB,EACjB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,yBAAyB,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CACnF,CAAC;YACJ,CAAC;YAED,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { analyzeJsx } from "./analyze
|
|
1
|
+
export { analyzeJsx } from "./analyze.js";
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyze/jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
package/lib/analyze/jsx/index.js
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.analyzeJsx = void 0;
|
|
4
|
-
var index_js_1 = require("./analyze/index.js");
|
|
5
|
-
Object.defineProperty(exports, "analyzeJsx", { enumerable: true, get: function () { return index_js_1.analyzeJsx; } });
|
|
1
|
+
export { analyzeJsx } from "./analyze.js";
|
|
6
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/jsx/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|