jsxpression 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/analyze/analysis-error.d.ts +7 -0
- package/lib/analyze/analysis-error.d.ts.map +1 -1
- package/lib/analyze/analysis-error.js +26 -0
- package/lib/analyze/analysis-error.js.map +1 -0
- package/lib/analyze/analysis-report.d.ts +2 -2
- package/lib/analyze/analysis-report.d.ts.map +1 -1
- package/lib/analyze/analyze.d.ts +5 -0
- package/lib/analyze/analyze.d.ts.map +1 -1
- package/lib/analyze/analyze.js +11 -0
- package/lib/analyze/analyze.js.map +1 -0
- package/lib/analyze/analyze.test.js +312 -312
- package/lib/analyze/analyze.test.js.map +1 -1
- package/lib/analyze/data/analyze.d.ts +5 -0
- package/lib/analyze/data/analyze.d.ts.map +1 -1
- package/lib/analyze/data/analyze.js +12 -0
- package/lib/analyze/data/analyze.js.map +1 -0
- package/lib/analyze/data/data-access.d.ts +7 -0
- package/lib/analyze/data/data-access.d.ts.map +1 -1
- package/lib/analyze/data/data-access.js +275 -0
- package/lib/analyze/data/data-access.js.map +1 -0
- package/lib/analyze/data/index.d.ts +2 -0
- package/lib/analyze/data/index.d.ts.map +1 -1
- package/lib/analyze/data/index.js +6 -0
- package/lib/analyze/data/index.js.map +1 -0
- package/lib/analyze/data/method-calls.d.ts +6 -0
- package/lib/analyze/data/method-calls.d.ts.map +1 -1
- package/lib/analyze/data/method-calls.js +58 -0
- package/lib/analyze/data/method-calls.js.map +1 -0
- package/lib/analyze/data/utils.d.ts +10 -0
- package/lib/analyze/data/utils.d.ts.map +1 -1
- package/lib/analyze/data/utils.js +212 -0
- package/lib/analyze/data/utils.js.map +1 -0
- package/lib/analyze/index.d.ts +4 -0
- package/lib/analyze/index.d.ts.map +1 -1
- package/lib/analyze/index.js +10 -0
- package/lib/analyze/index.js.map +1 -0
- package/lib/analyze/jsx/analyze.d.ts +5 -0
- package/lib/analyze/jsx/analyze.d.ts.map +1 -1
- package/lib/analyze/jsx/analyze.js +13 -0
- package/lib/analyze/jsx/analyze.js.map +1 -0
- package/lib/analyze/jsx/element-attributes.d.ts +6 -0
- package/lib/analyze/jsx/element-attributes.d.ts.map +1 -1
- package/lib/analyze/jsx/element-attributes.js +20 -20
- package/lib/analyze/jsx/element-attributes.js.map +1 -1
- package/lib/analyze/jsx/element-children.d.ts +6 -0
- package/lib/analyze/jsx/element-children.d.ts.map +1 -1
- package/lib/analyze/jsx/element-children.js +69 -0
- package/lib/analyze/jsx/element-children.js.map +1 -0
- package/lib/analyze/jsx/element-tags.d.ts +6 -0
- package/lib/analyze/jsx/element-tags.d.ts.map +1 -1
- package/lib/analyze/jsx/element-tags.js +41 -0
- package/lib/analyze/jsx/element-tags.js.map +1 -0
- package/lib/analyze/jsx/index.d.ts +2 -0
- package/lib/analyze/jsx/index.d.ts.map +1 -1
- package/lib/analyze/jsx/index.js +6 -0
- package/lib/analyze/jsx/index.js.map +1 -0
- package/lib/analyze/security/analyze.d.ts +5 -0
- package/lib/analyze/security/analyze.d.ts.map +1 -1
- package/lib/analyze/security/analyze.js +15 -0
- package/lib/analyze/security/analyze.js.map +1 -0
- package/lib/analyze/security/call-expressions.d.ts +6 -0
- package/lib/analyze/security/call-expressions.d.ts.map +1 -1
- package/lib/analyze/security/call-expressions.js +23 -0
- package/lib/analyze/security/call-expressions.js.map +1 -0
- package/lib/analyze/security/declarations.d.ts +6 -0
- package/lib/analyze/security/declarations.d.ts.map +1 -1
- package/lib/analyze/security/declarations.js +31 -0
- package/lib/analyze/security/declarations.js.map +1 -0
- package/lib/analyze/security/expressions.d.ts +6 -0
- package/lib/analyze/security/expressions.d.ts.map +1 -1
- package/lib/analyze/security/expressions.js +52 -0
- package/lib/analyze/security/expressions.js.map +1 -0
- package/lib/analyze/security/identifiers.d.ts +6 -0
- package/lib/analyze/security/identifiers.d.ts.map +1 -1
- package/lib/analyze/security/identifiers.js +87 -0
- package/lib/analyze/security/identifiers.js.map +1 -0
- package/lib/analyze/security/index.d.ts +2 -0
- package/lib/analyze/security/index.d.ts.map +1 -1
- package/lib/analyze/security/index.js +6 -0
- package/lib/analyze/security/index.js.map +1 -0
- package/lib/analyze/security/member-access.d.ts +6 -0
- package/lib/analyze/security/member-access.d.ts.map +1 -1
- package/lib/analyze/security/member-access.js +24 -0
- package/lib/analyze/security/member-access.js.map +1 -0
- package/lib/analyze/utils.d.ts.map +1 -0
- package/lib/analyze/utils.js +92 -0
- package/lib/analyze/utils.js.map +1 -0
- package/lib/analyze/validation-context.d.ts.map +1 -0
- package/lib/analyze/validation-context.js +27 -0
- package/lib/analyze/validation-context.js.map +1 -0
- package/lib/codegen/generate-typescript-definitions.test.js +190 -190
- package/lib/codegen/generate-typescript-definitions.test.js.map +1 -1
- package/lib/compile/compilation-error.d.ts.map +1 -0
- package/lib/compile/compilation-error.js +28 -0
- package/lib/compile/compilation-error.js.map +1 -0
- package/lib/compile/compile.d.ts +3 -0
- package/lib/compile/compile.d.ts.map +1 -1
- package/lib/compile/compile.js +17 -17
- package/lib/compile/compile.js.map +1 -1
- package/lib/compile/compile.test.js +110 -110
- package/lib/compile/compile.test.js.map +1 -1
- package/lib/compile/index.d.ts +3 -0
- package/lib/compile/index.d.ts.map +1 -0
- package/lib/compile/index.js +8 -0
- package/lib/compile/index.js.map +1 -0
- package/lib/evaluate/evaluate.js +9 -5
- package/lib/evaluate/evaluate.js.map +1 -0
- package/lib/evaluate/evaluate.test.d.ts.map +1 -0
- package/lib/evaluate/evaluate.test.js +252 -0
- package/lib/evaluate/evaluate.test.js.map +1 -0
- package/lib/evaluate/evaluation-error.js +6 -1
- package/lib/evaluate/evaluation-error.js.map +1 -0
- package/lib/evaluate/index.d.ts +3 -0
- package/lib/evaluate/index.d.ts.map +1 -0
- package/lib/evaluate/index.js +8 -0
- package/lib/evaluate/index.js.map +1 -0
- package/lib/index.d.ts +7 -7
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +12 -12
- package/lib/index.js.map +1 -1
- package/lib/jsx.d.ts +92 -0
- package/lib/jsx.d.ts.map +1 -0
- package/lib/jsx.js +43 -0
- package/lib/jsx.js.map +1 -0
- package/lib/parse/index.d.ts +3 -0
- package/lib/parse/index.d.ts.map +1 -0
- package/lib/parse/index.js +8 -0
- package/lib/parse/index.js.map +1 -0
- package/lib/parse/parse-error.d.ts.map +1 -0
- package/lib/parse/parse-error.js +13 -0
- package/lib/parse/parse-error.js.map +1 -0
- package/lib/parse/parse.d.ts +3 -0
- package/lib/parse/parse.d.ts.map +1 -0
- package/lib/parse/parse.js +35 -0
- package/lib/parse/parse.js.map +1 -0
- package/lib/parse/parse.test.d.ts.map +1 -0
- package/lib/parse/parse.test.js +82 -0
- package/lib/parse/parse.test.js.map +1 -0
- package/lib/render.d.ts +2 -2
- package/lib/render.d.ts.map +1 -1
- package/lib/render.js +13 -9
- package/lib/render.js.map +1 -0
- package/lib/render.test.js +303 -0
- package/lib/render.test.js.map +1 -0
- package/lib/schema.js +39 -18
- package/lib/schema.js.map +1 -0
- package/lib/traverse.d.ts +15 -0
- package/lib/traverse.d.ts.map +1 -0
- package/lib/traverse.js +49 -0
- package/lib/traverse.js.map +1 -0
- package/lib/traverse.test.d.ts.map +1 -0
- package/lib/traverse.test.js +86 -0
- package/lib/traverse.test.js.map +1 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/validate.d.ts +3 -3
- package/lib/validate.d.ts.map +1 -1
- package/lib/validate.js +11 -7
- package/lib/validate.js.map +1 -0
- package/package.json +1 -1
- package/src/analyze/analysis-error.ts +1 -1
- package/src/analyze/analysis-report.ts +2 -2
- package/src/analyze/analyze.test.ts +4 -4
- package/src/analyze/analyze.ts +5 -5
- package/src/analyze/data/analyze.ts +5 -5
- package/src/analyze/data/data-access.ts +6 -6
- package/src/analyze/data/index.ts +1 -1
- package/src/analyze/data/method-calls.ts +7 -7
- package/src/analyze/data/utils.ts +5 -5
- package/src/analyze/index.ts +3 -3
- package/src/analyze/jsx/analyze.ts +6 -6
- package/src/analyze/jsx/element-attributes.ts +6 -6
- package/src/analyze/jsx/element-children.ts +6 -6
- package/src/analyze/jsx/element-tags.ts +5 -5
- package/src/analyze/jsx/index.ts +1 -1
- package/src/analyze/security/analyze.ts +8 -8
- package/src/analyze/security/call-expressions.ts +5 -5
- package/src/analyze/security/declarations.ts +5 -5
- package/src/analyze/security/expressions.ts +5 -5
- package/src/analyze/security/identifiers.ts +6 -6
- package/src/analyze/security/index.ts +1 -1
- package/src/analyze/security/member-access.ts +5 -5
- package/src/codegen/generate-typescript-definitions.test.ts +2 -2
- package/src/compile/compile.test.ts +2 -2
- package/src/compile/compile.ts +2 -2
- package/src/compile/index.ts +2 -2
- package/src/evaluate/evaluate.test.ts +4 -4
- package/src/evaluate/evaluate.ts +1 -1
- package/src/evaluate/index.ts +2 -2
- package/src/index.ts +7 -7
- package/src/parse/index.ts +2 -2
- package/src/parse/parse.test.ts +2 -2
- package/src/parse/parse.ts +1 -1
- package/src/render.test.ts +4 -4
- package/src/render.ts +5 -5
- package/src/traverse.test.ts +2 -2
- package/src/traverse.ts +1 -1
- package/src/validate.ts +3 -3
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSimpleDataAccess = isSimpleDataAccess;
|
|
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) {
|
|
11
|
+
if (node.computed) {
|
|
12
|
+
return node.property.type === "Literal" && typeof node.property.value === "number";
|
|
13
|
+
}
|
|
14
|
+
if (node.property.type !== "Identifier") {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
let current = node.object;
|
|
18
|
+
while (current) {
|
|
19
|
+
if (current.type === "Identifier") {
|
|
20
|
+
return current.name === "data";
|
|
21
|
+
}
|
|
22
|
+
if (current.type === "MemberExpression") {
|
|
23
|
+
if (current.computed) {
|
|
24
|
+
if (!(current.property.type === "Literal" && typeof current.property.value === "number")) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (current.property.type !== "Identifier") {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
current = current.object;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
function extractPath(node) {
|
|
40
|
+
const path = [];
|
|
41
|
+
if (node.property.type === "Identifier") {
|
|
42
|
+
path.unshift(node.property.name);
|
|
43
|
+
}
|
|
44
|
+
let current = node.object;
|
|
45
|
+
while (current) {
|
|
46
|
+
if (current.type === "Identifier") {
|
|
47
|
+
path.unshift(current.name);
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
if (current.type === "MemberExpression") {
|
|
51
|
+
if (current.property.type === "Identifier") {
|
|
52
|
+
path.unshift(current.property.name);
|
|
53
|
+
}
|
|
54
|
+
current = current.object;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return path;
|
|
61
|
+
}
|
|
62
|
+
function getParentNode(targetNode, ast) {
|
|
63
|
+
let parent = null;
|
|
64
|
+
function traverseForParent(node, currentParent = null) {
|
|
65
|
+
if (node === targetNode) {
|
|
66
|
+
parent = currentParent;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
for (const key of Object.keys(node)) {
|
|
70
|
+
const value = node[key];
|
|
71
|
+
if (value && typeof value === "object") {
|
|
72
|
+
if (Array.isArray(value)) {
|
|
73
|
+
value.forEach((child) => {
|
|
74
|
+
if (child && typeof child === "object" && child.type) {
|
|
75
|
+
traverseForParent(child, node);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else if (value.type) {
|
|
80
|
+
traverseForParent(value, node);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
traverseForParent(ast);
|
|
86
|
+
return parent;
|
|
87
|
+
}
|
|
88
|
+
function getAvailablePropsAtPath(path, depth, schemaData) {
|
|
89
|
+
if (!schemaData || depth < 0) {
|
|
90
|
+
return schemaData ? Object.keys(schemaData) : [];
|
|
91
|
+
}
|
|
92
|
+
if (depth === 0) {
|
|
93
|
+
return Object.keys(schemaData);
|
|
94
|
+
}
|
|
95
|
+
let current = schemaData[path[0]];
|
|
96
|
+
for (let i = 1; i <= depth; i++) {
|
|
97
|
+
if (!current || current.type !== "object" || !current.shape) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
current = current.shape[path[i]];
|
|
101
|
+
}
|
|
102
|
+
if (current && current.type === "object" && current.shape) {
|
|
103
|
+
return Object.keys(current.shape);
|
|
104
|
+
}
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
function validateSchemaPath(path, schema, analysisReport, node, validationContext) {
|
|
108
|
+
const schemaData = schema.data;
|
|
109
|
+
if (!schemaData || path.length === 0) {
|
|
110
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", "Invalid data access - no schema data available", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), schemaData ? Object.keys(schemaData) : undefined);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
let current = schemaData[path[0]];
|
|
114
|
+
if (!current) {
|
|
115
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${path[0]}' does not exist in schema`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), Object.keys(schemaData));
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const elementAccessFlags = getElementAccessFlags(node, path.length);
|
|
119
|
+
for (let i = 1; i < path.length; i++) {
|
|
120
|
+
const prop = path[i];
|
|
121
|
+
const isElementAccess = elementAccessFlags[i];
|
|
122
|
+
if (current.type === "array") {
|
|
123
|
+
if (!isElementAccess) {
|
|
124
|
+
if ((0, builtins_js_1.isAllowedOnArray)(prop)) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
128
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on array type`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), (0, builtins_js_1.getAvailableArrayMembers)());
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const elementType = current.shape || null;
|
|
132
|
+
if (!elementType) {
|
|
133
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on unknown array element type`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), (0, builtins_js_1.getAvailableArrayMembers)());
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (elementType.type === "object" && elementType.shape) {
|
|
137
|
+
const next = elementType.shape[prop];
|
|
138
|
+
if (!next) {
|
|
139
|
+
const paths = path.slice(0, i + 1);
|
|
140
|
+
const suggestions = Object.keys(elementType.shape);
|
|
141
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${paths.join(".")}' does not exist in schema`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), suggestions);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
current = next;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (elementType.type === "array") {
|
|
148
|
+
if ((0, builtins_js_1.isAllowedOnArray)(prop)) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
152
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on array type`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), (0, builtins_js_1.getAvailableArrayMembers)());
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (elementType.type === "string") {
|
|
156
|
+
if ((0, builtins_js_1.isAllowedOnString)(prop)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
160
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on string type`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), (0, builtins_js_1.getAvailableStringMembers)());
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on ${elementType.type || "undefined"} type array element`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (current.type === "string") {
|
|
167
|
+
if ((0, builtins_js_1.isAllowedOnString)(prop)) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const accessedPath = ["data", ...path.slice(0, i), prop].join(".");
|
|
171
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property '${accessedPath}' does not exist on string type`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), (0, builtins_js_1.getAvailableStringMembers)());
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if (current.type !== "object" || !current.shape) {
|
|
175
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Cannot access property '${prop}' on ${current.type || "undefined"} type`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
current = current.shape[prop];
|
|
179
|
+
if (!current) {
|
|
180
|
+
const availableProps = getAvailablePropsAtPath(path, i - 1, schemaData);
|
|
181
|
+
const paths = path.slice(0, i + 1);
|
|
182
|
+
analysisReport.addIssue("INVALID_DATA_ACCESS", `Property 'data.${paths.join(".")}' does not exist in schema`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), availableProps);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function getElementAccessFlags(node, pathLength) {
|
|
187
|
+
const flags = Array(pathLength).fill(false);
|
|
188
|
+
const segments = [];
|
|
189
|
+
let current = node;
|
|
190
|
+
while (current && current.type === "MemberExpression") {
|
|
191
|
+
segments.unshift({ property: current.property, computed: current.computed });
|
|
192
|
+
current = current.object;
|
|
193
|
+
}
|
|
194
|
+
let schemaIndex = -1;
|
|
195
|
+
let lastWasComputedNumeric = false;
|
|
196
|
+
for (const segment of segments) {
|
|
197
|
+
if (segment.property?.type === "Identifier") {
|
|
198
|
+
schemaIndex += 1;
|
|
199
|
+
if (schemaIndex < pathLength) {
|
|
200
|
+
flags[schemaIndex] = lastWasComputedNumeric;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (segment.computed && segment.property?.type === "Literal" && typeof segment.property.value === "number") {
|
|
204
|
+
lastWasComputedNumeric = true;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
lastWasComputedNumeric = false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return flags;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/analyze/data/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,oBAAoB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalysisReport = exports.AnalysisError = exports.analyze = void 0;
|
|
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; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAApC,mGAAA,OAAO,OAAA;AAChB,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AACtB,2DAAsD;AAA7C,oHAAA,cAAc,OAAA"}
|
|
@@ -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,UAAU,CAAC;AACnC,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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeJsx = analyzeJsx;
|
|
4
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
5
|
+
const validation_context_js_1 = require("../validation-context.js");
|
|
6
|
+
const element_attributes_js_1 = require("./element-attributes.js");
|
|
7
|
+
const element_children_js_1 = require("./element-children.js");
|
|
8
|
+
const element_tags_js_1 = require("./element-tags.js");
|
|
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));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/analyze/jsx/analyze.ts"],"names":[],"mappings":";;AAQA,gCAQC;AAdD,8DAAuD;AACvD,oEAA6D;AAC7D,mEAAmE;AACnE,+DAA+D;AAC/D,uDAAuD;AAEvD,SAAgB,UAAU,CAAC,GAAY,EAAE,MAAc;IACrD,MAAM,iBAAiB,GAAG,IAAI,yCAAiB,EAAE,CAAC;IAElD,OAAO,IAAI,mCAAc,EAAE,CAAC,KAAK,CAC/B,IAAA,oCAAkB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAClD,IAAA,gDAAwB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EACxD,IAAA,4CAAsB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,CACvD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Program } from "acorn.js";
|
|
2
|
+
import { type Schema } from "../../schema.js";
|
|
3
|
+
import { ValidationContext } from "../validation-context.js";
|
|
4
|
+
import { AnalysisReport } from "../analysis-report.js";
|
|
5
|
+
export declare function analyzeElementAttributes(ast: Program, schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=element-attributes.d.ts.map
|
|
@@ -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,UAAU,CAAC;AAExC,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,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.analyzeElementAttributes = analyzeElementAttributes;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const schema_js_1 = require("../../schema.js");
|
|
6
|
+
const index_js_1 = require("../../jsx/index.js");
|
|
7
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
8
|
+
const utils_js_1 = require("../utils.js");
|
|
9
9
|
function analyzeElementAttributes(ast, schema, validationContext) {
|
|
10
|
-
const analysisReport = new
|
|
11
|
-
(0,
|
|
10
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
11
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
12
12
|
JSXElement(node) {
|
|
13
13
|
const tagName = node.openingElement.name.name;
|
|
14
14
|
validationContext.enterElement(tagName);
|
|
15
15
|
const currentContext = validationContext.getSnapshot();
|
|
16
|
-
const allowedAttributes = (0,
|
|
17
|
-
const requiredAttributes = (0,
|
|
16
|
+
const allowedAttributes = (0, schema_js_1.getAllowedAttributes)(schema, tagName);
|
|
17
|
+
const requiredAttributes = (0, schema_js_1.getRequiredAttributes)(schema, tagName);
|
|
18
18
|
for (const attribute of node.openingElement.attributes) {
|
|
19
|
-
if (!(0,
|
|
19
|
+
if (!(0, index_js_1.isJsxAttribute)(attribute)) {
|
|
20
20
|
continue;
|
|
21
21
|
}
|
|
22
22
|
const attributeName = attribute.name.name;
|
|
23
|
-
const range = (0,
|
|
24
|
-
if (!(0,
|
|
25
|
-
const suggestions = (0,
|
|
26
|
-
const suggestionMatch = (0,
|
|
23
|
+
const range = (0, utils_js_1.getNodeRange)(attribute);
|
|
24
|
+
if (!(0, schema_js_1.isAttributeAllowed)(schema, tagName, attributeName)) {
|
|
25
|
+
const suggestions = (0, utils_js_1.getAttributeSimilarityMatchers)(attributeName, allowedAttributes);
|
|
26
|
+
const suggestionMatch = (0, utils_js_1.getBestSimilarityMatcherSuggestion)(attributeName, allowedAttributes);
|
|
27
27
|
let message = `Attribute "${attributeName}" not allowed on <${tagName}>`;
|
|
28
28
|
if (suggestionMatch) {
|
|
29
29
|
message += `. Did you mean "${suggestionMatch}"?`;
|
|
@@ -38,13 +38,13 @@ function analyzeElementAttributes(ast, schema, validationContext) {
|
|
|
38
38
|
analysisReport.addIssue("INVALID_ATTRIBUTE", message, range, currentContext, suggestions.map((suggestion) => suggestion.suggestion));
|
|
39
39
|
continue;
|
|
40
40
|
}
|
|
41
|
-
const attributeSchema = (0,
|
|
42
|
-
const enumValues = attributeSchema ? (0,
|
|
41
|
+
const attributeSchema = (0, schema_js_1.getAttributeSchema)(schema, tagName, attributeName);
|
|
42
|
+
const enumValues = attributeSchema ? (0, schema_js_1.getEnumValues)(attributeSchema) : undefined;
|
|
43
43
|
if (enumValues && enumValues.length > 0) {
|
|
44
44
|
const literalValue = getAttributeLiteralValue(attribute);
|
|
45
45
|
if (isEnumComparableValue(literalValue) && !enumValues.includes(literalValue)) {
|
|
46
46
|
const stringEnumValues = enumValues.map((value) => String(value));
|
|
47
|
-
const suggestionMatch = (0,
|
|
47
|
+
const suggestionMatch = (0, utils_js_1.getBestSimilarityMatcherSuggestion)(String(literalValue), stringEnumValues);
|
|
48
48
|
let message = `Value ${JSON.stringify(literalValue)} is not allowed for attribute "${attributeName}" on <${tagName}>`;
|
|
49
49
|
if (suggestionMatch) {
|
|
50
50
|
message += `. Did you mean "${suggestionMatch}"?`;
|
|
@@ -57,10 +57,10 @@ function analyzeElementAttributes(ast, schema, validationContext) {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
// Check for missing required attributes
|
|
60
|
-
const providedAttributes = node.openingElement.attributes.filter(
|
|
60
|
+
const providedAttributes = node.openingElement.attributes.filter(index_js_1.isJsxAttribute).map((attr) => attr.name.name);
|
|
61
61
|
for (const requiredAttribute of requiredAttributes) {
|
|
62
62
|
if (!providedAttributes.includes(requiredAttribute)) {
|
|
63
|
-
analysisReport.addIssue("MISSING_REQUIRED_ATTRIBUTE", `Required attribute "${requiredAttribute}" missing on <${tagName}>`, (0,
|
|
63
|
+
analysisReport.addIssue("MISSING_REQUIRED_ATTRIBUTE", `Required attribute "${requiredAttribute}" missing on <${tagName}>`, (0, utils_js_1.getNodeRange)(node.openingElement), currentContext, [requiredAttribute]);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
validationContext.exitElement();
|
|
@@ -78,7 +78,7 @@ function getAttributeLiteralValue(attribute) {
|
|
|
78
78
|
if (attribute.value.type === "Literal") {
|
|
79
79
|
return attribute.value.value;
|
|
80
80
|
}
|
|
81
|
-
if ((0,
|
|
81
|
+
if ((0, index_js_1.isJsxExpressionContainer)(attribute.value)) {
|
|
82
82
|
const expression = attribute.value.expression;
|
|
83
83
|
if (expression?.type === "Literal") {
|
|
84
84
|
return expression.value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-attributes.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-attributes.ts"],"names":[],"mappings":";;AAgBA,4DAsGC;AArHD,
|
|
1
|
+
{"version":3,"file":"element-attributes.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-attributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Program } from "acorn.js";
|
|
2
|
+
import { type Schema } from "../../schema.js";
|
|
3
|
+
import { ValidationContext } from "../validation-context.js";
|
|
4
|
+
import { AnalysisReport } from "../analysis-report.js";
|
|
5
|
+
export declare function analyzeElementChildren(ast: Program, schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=element-children.d.ts.map
|
|
@@ -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,UAAU,CAAC;AAExC,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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeElementChildren = analyzeElementChildren;
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const schema_js_1 = require("../../schema.js");
|
|
6
|
+
const index_js_1 = require("../../jsx/index.js");
|
|
7
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
8
|
+
const utils_js_1 = require("../utils.js");
|
|
9
|
+
function analyzeElementChildren(ast, schema, validationContext) {
|
|
10
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
11
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
12
|
+
JSXElement(node) {
|
|
13
|
+
const parentTag = node.openingElement.name.name;
|
|
14
|
+
validationContext.enterElement(parentTag);
|
|
15
|
+
const currentContext = validationContext.getSnapshot();
|
|
16
|
+
const allowedChildren = (0, schema_js_1.getAllowedChildren)(schema, parentTag);
|
|
17
|
+
if (!allowedChildren) {
|
|
18
|
+
validationContext.exitElement();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if ((0, schema_js_1.isSelfClosing)(schema, parentTag) && node.children.length > 0) {
|
|
22
|
+
const hasNonWhitespaceContent = node.children.some((child) => {
|
|
23
|
+
if ((0, index_js_1.isJsxText)(child)) {
|
|
24
|
+
return child.value.trim().length > 0;
|
|
25
|
+
}
|
|
26
|
+
return !(0, index_js_1.isJsxLeafNode)(child) || !(0, index_js_1.isJsxText)(child);
|
|
27
|
+
});
|
|
28
|
+
if (hasNonWhitespaceContent) {
|
|
29
|
+
const firstMeaningfulChild = node.children.find((child) => {
|
|
30
|
+
if ((0, index_js_1.isJsxText)(child)) {
|
|
31
|
+
return child.value.trim().length > 0;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
});
|
|
35
|
+
analysisReport.addIssue("SELF_CLOSING_WITH_CHILDREN", `Element <${parentTag}> cannot have children. It is self-closing.`, (0, utils_js_1.getNodeRange)(firstMeaningfulChild || node.children[0]), currentContext);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (const child of node.children) {
|
|
39
|
+
if ((0, index_js_1.isJsxElement)(child)) {
|
|
40
|
+
const childTag = child.openingElement.name.name;
|
|
41
|
+
if (!allowedChildren.includes(childTag)) {
|
|
42
|
+
const elementSimilarityMatchers = (0, utils_js_1.getElementSimilarityMatchers)(childTag, allowedChildren);
|
|
43
|
+
const bestSimilarityMatcherSuggestion = (0, utils_js_1.getBestSimilarityMatcherSuggestion)(childTag, allowedChildren);
|
|
44
|
+
let message = `Element <${childTag}> not allowed in <${parentTag}>`;
|
|
45
|
+
if (bestSimilarityMatcherSuggestion) {
|
|
46
|
+
message += `. Did you mean <${bestSimilarityMatcherSuggestion}>?`;
|
|
47
|
+
}
|
|
48
|
+
message += `. Allowed children: ${allowedChildren.join(", ")}`;
|
|
49
|
+
analysisReport.addIssue("INVALID_CHILD_ELEMENT", message, (0, utils_js_1.getNodeRange)(child), currentContext, elementSimilarityMatchers.map((similarityMatcher) => similarityMatcher.suggestion));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if ((0, index_js_1.isJsxFragment)(child)) {
|
|
53
|
+
// TODO: Recursively validate fragment children
|
|
54
|
+
// For now, we allow fragments but should add more specific validation in the future
|
|
55
|
+
}
|
|
56
|
+
else if ((0, index_js_1.isJsxText)(child)) {
|
|
57
|
+
const hasContent = child.value.trim().length > 0;
|
|
58
|
+
if (!hasContent) {
|
|
59
|
+
// Allow whitespace-only text nodes (very common in JSX formatting)
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
validationContext.exitElement();
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
return analysisReport;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=element-children.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-children.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-children.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Program } from "acorn.js";
|
|
2
|
+
import { type Schema } from "../../schema.js";
|
|
3
|
+
import { ValidationContext } from "../validation-context.js";
|
|
4
|
+
import { AnalysisReport } from "../analysis-report.js";
|
|
5
|
+
export declare function analyzeElementTags(ast: Program, schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=element-tags.d.ts.map
|
|
@@ -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,UAAU,CAAC;AAExC,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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeElementTags = analyzeElementTags;
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const schema_js_1 = require("../../schema.js");
|
|
6
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
7
|
+
const utils_js_1 = require("../utils.js");
|
|
8
|
+
function analyzeElementTags(ast, schema, validationContext) {
|
|
9
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
10
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
11
|
+
JSXElement(node) {
|
|
12
|
+
const tagName = node.openingElement.name.name;
|
|
13
|
+
validationContext.enterElement(tagName);
|
|
14
|
+
const snapshot = validationContext.getSnapshot();
|
|
15
|
+
const range = (0, utils_js_1.getNodeRange)(node);
|
|
16
|
+
if (!(0, schema_js_1.isElementAllowed)(schema, tagName)) {
|
|
17
|
+
const availableElements = (0, schema_js_1.getAllElements)(schema);
|
|
18
|
+
const elementSimilarityMatchers = (0, utils_js_1.getElementSimilarityMatchers)(tagName, availableElements);
|
|
19
|
+
const bestSuggestionMatch = (0, utils_js_1.getBestSimilarityMatcherSuggestion)(tagName, availableElements);
|
|
20
|
+
let message = `Element <${tagName}> not allowed`;
|
|
21
|
+
if (snapshot.elements.length > 1) {
|
|
22
|
+
message += ` in ${validationContext.currentPath}`;
|
|
23
|
+
}
|
|
24
|
+
if (bestSuggestionMatch) {
|
|
25
|
+
message += `. Did you mean <${bestSuggestionMatch}>?`;
|
|
26
|
+
}
|
|
27
|
+
else if (availableElements.length > 0) {
|
|
28
|
+
const displayElements = availableElements.slice(0, 5);
|
|
29
|
+
message += `. Available elements: ${displayElements.join(", ")}`;
|
|
30
|
+
if (availableElements.length > 5) {
|
|
31
|
+
message += ` (and ${availableElements.length - 5} more)`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
analysisReport.addIssue("INVALID_ELEMENT", message, range, snapshot, elementSimilarityMatchers.map((similarityMatcher) => similarityMatcher.suggestion));
|
|
35
|
+
}
|
|
36
|
+
validationContext.exitElement();
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
return analysisReport;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=element-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-tags.js","sourceRoot":"","sources":["../../../src/analyze/jsx/element-tags.ts"],"names":[],"mappings":";;AAOA,gDA+CC;AArDD,mDAA6C;AAC7C,+CAAgF;AAEhF,8DAAuD;AACvD,0CAA6G;AAE7G,SAAgB,kBAAkB,CAAC,GAAY,EAAE,MAAc,EAAE,iBAAoC;IACnG,MAAM,cAAc,GAAG,IAAI,mCAAc,EAAE,CAAC;IAE5C,IAAA,sBAAQ,EAAC,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,IAAA,uBAAY,EAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,CAAC,IAAA,4BAAgB,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;gBACvC,MAAM,iBAAiB,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,CAAC;gBACjD,MAAM,yBAAyB,GAAG,IAAA,uCAA4B,EAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAC3F,MAAM,mBAAmB,GAAG,IAAA,6CAAkC,EAAC,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 +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,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
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; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/jsx/index.ts"],"names":[],"mappings":";;;AAAA,+CAAgD;AAAvC,sGAAA,UAAU,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQvD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAU5E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeSecurity = analyzeSecurity;
|
|
4
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
5
|
+
const validation_context_js_1 = require("../validation-context.js");
|
|
6
|
+
const call_expressions_js_1 = require("./call-expressions.js");
|
|
7
|
+
const declarations_js_1 = require("./declarations.js");
|
|
8
|
+
const expressions_js_1 = require("./expressions.js");
|
|
9
|
+
const identifiers_js_1 = require("./identifiers.js");
|
|
10
|
+
const member_access_js_1 = require("./member-access.js");
|
|
11
|
+
function analyzeSecurity(ast, schema) {
|
|
12
|
+
const validationContext = new validation_context_js_1.ValidationContext();
|
|
13
|
+
return new analysis_report_js_1.AnalysisReport().merge((0, declarations_js_1.analyzeDeclarations)(ast, schema, validationContext), (0, identifiers_js_1.analyzeIdentifiers)(ast, schema, validationContext), (0, expressions_js_1.analyzeExpressions)(ast, schema, validationContext), (0, member_access_js_1.analyzeMemberAccess)(ast, schema, validationContext), (0, call_expressions_js_1.analyzeCallExpressions)(ast, schema, validationContext));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/analyze/security/analyze.ts"],"names":[],"mappings":";;AAUA,0CAUC;AAlBD,8DAAuD;AACvD,oEAA6D;AAC7D,+DAA+D;AAC/D,uDAAwD;AACxD,qDAAsD;AACtD,qDAAsD;AACtD,yDAAyD;AAEzD,SAAgB,eAAe,CAAC,GAAY,EAAE,MAAc;IAC1D,MAAM,iBAAiB,GAAG,IAAI,yCAAiB,EAAE,CAAC;IAElD,OAAO,IAAI,mCAAc,EAAE,CAAC,KAAK,CAC/B,IAAA,qCAAmB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EACnD,IAAA,mCAAkB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAClD,IAAA,mCAAkB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAClD,IAAA,sCAAmB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,EACnD,IAAA,4CAAsB,EAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,CACvD,CAAC;AACJ,CAAC"}
|