jsxpression 0.1.0 → 0.1.2
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 +2 -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,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 analyzeCallExpressions(ast: Program, _schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=call-expressions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-expressions.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/call-expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"call-expressions.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/call-expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CA6BhB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeCallExpressions = analyzeCallExpressions;
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
6
|
+
const utils_js_1 = require("../utils.js");
|
|
7
|
+
function analyzeCallExpressions(ast, _schema, validationContext) {
|
|
8
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
9
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
10
|
+
CallExpression(node) {
|
|
11
|
+
const { callee } = node;
|
|
12
|
+
if (callee.type !== "MemberExpression") {
|
|
13
|
+
analysisReport.addIssue("DIRECT_CALL_NOT_ALLOWED", "only member calls allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (callee.property.type !== "Identifier" || callee.computed) {
|
|
17
|
+
analysisReport.addIssue("DYNAMIC_METHOD_NOT_ALLOWED", "only explicitly allowed methods are permitted", (0, utils_js_1.getNodeRange)(callee), validationContext.getSnapshot());
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
return analysisReport;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=call-expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-expressions.js","sourceRoot":"","sources":["../../../src/analyze/security/call-expressions.ts"],"names":[],"mappings":";;AAOA,wDAiCC;AAvCD,mDAA6C;AAG7C,8DAAuD;AACvD,0CAA2C;AAE3C,SAAgB,sBAAsB,CACpC,GAAY,EACZ,OAAe,EACf,iBAAoC;IAEpC,MAAM,cAAc,GAAG,IAAI,mCAAc,EAAE,CAAC;IAE5C,IAAA,sBAAQ,EAAC,GAAG,EAAE;QACZ,cAAc,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAExB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACvC,cAAc,CAAC,QAAQ,CACrB,yBAAyB,EACzB,2BAA2B,EAC3B,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC7D,cAAc,CAAC,QAAQ,CACrB,4BAA4B,EAC5B,+CAA+C,EAC/C,IAAA,uBAAY,EAAC,MAAM,CAAC,EACpB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,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 analyzeDeclarations(ast: Program, _schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=declarations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/declarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/declarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAuDhB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeDeclarations = analyzeDeclarations;
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
6
|
+
const utils_js_1 = require("../utils.js");
|
|
7
|
+
function analyzeDeclarations(ast, _schema, validationContext) {
|
|
8
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
9
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
10
|
+
ImportDeclaration(node) {
|
|
11
|
+
analysisReport.addIssue("IMPORT_NOT_ALLOWED", "import not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
12
|
+
},
|
|
13
|
+
ExportNamedDeclaration(node) {
|
|
14
|
+
analysisReport.addIssue("EXPORT_NOT_ALLOWED", "export not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
15
|
+
},
|
|
16
|
+
ExportDefaultDeclaration(node) {
|
|
17
|
+
analysisReport.addIssue("EXPORT_NOT_ALLOWED", "export not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
18
|
+
},
|
|
19
|
+
FunctionDeclaration(node) {
|
|
20
|
+
analysisReport.addIssue("FUNCTION_NOT_ALLOWED", "function declarations not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
21
|
+
},
|
|
22
|
+
ClassDeclaration(node) {
|
|
23
|
+
analysisReport.addIssue("CLASS_NOT_ALLOWED", "classes not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
24
|
+
},
|
|
25
|
+
VariableDeclaration(node) {
|
|
26
|
+
analysisReport.addIssue("VARIABLE_NOT_ALLOWED", "variables not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
return analysisReport;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=declarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/analyze/security/declarations.ts"],"names":[],"mappings":";;AAOA,kDA2DC;AAjED,mDAA6C;AAG7C,8DAAuD;AACvD,0CAA2C;AAE3C,SAAgB,mBAAmB,CACjC,GAAY,EACZ,OAAe,EACf,iBAAoC;IAEpC,MAAM,cAAc,GAAG,IAAI,mCAAc,EAAE,CAAC;IAE5C,IAAA,sBAAQ,EAAC,GAAG,EAAE;QACZ,iBAAiB,CAAC,IAAI;YACpB,cAAc,CAAC,QAAQ,CACrB,oBAAoB,EACpB,oBAAoB,EACpB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,sBAAsB,CAAC,IAAI;YACzB,cAAc,CAAC,QAAQ,CACrB,oBAAoB,EACpB,oBAAoB,EACpB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,wBAAwB,CAAC,IAAI;YAC3B,cAAc,CAAC,QAAQ,CACrB,oBAAoB,EACpB,oBAAoB,EACpB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,mBAAmB,CAAC,IAAI;YACtB,cAAc,CAAC,QAAQ,CACrB,sBAAsB,EACtB,mCAAmC,EACnC,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,gBAAgB,CAAC,IAAI;YACnB,cAAc,CAAC,QAAQ,CACrB,mBAAmB,EACnB,qBAAqB,EACrB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,mBAAmB,CAAC,IAAI;YACtB,cAAc,CAAC,QAAQ,CACrB,sBAAsB,EACtB,uBAAuB,EACvB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,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 analyzeExpressions(ast: Program, _schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAwFhB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeExpressions = analyzeExpressions;
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
6
|
+
const utils_js_1 = require("../utils.js");
|
|
7
|
+
function analyzeExpressions(ast, _schema, validationContext) {
|
|
8
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
9
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
10
|
+
NewExpression(node) {
|
|
11
|
+
analysisReport.addIssue("NEW_NOT_ALLOWED", "new not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
12
|
+
},
|
|
13
|
+
ThisExpression(node) {
|
|
14
|
+
analysisReport.addIssue("THIS_NOT_ALLOWED", "this not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
15
|
+
},
|
|
16
|
+
WithStatement(node) {
|
|
17
|
+
analysisReport.addIssue("WITH_NOT_ALLOWED", "with not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
18
|
+
},
|
|
19
|
+
AwaitExpression(node) {
|
|
20
|
+
analysisReport.addIssue("AWAIT_NOT_ALLOWED", "await not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
21
|
+
},
|
|
22
|
+
YieldExpression(node) {
|
|
23
|
+
analysisReport.addIssue("YIELD_NOT_ALLOWED", "yield not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
24
|
+
},
|
|
25
|
+
ArrowFunctionExpression(node) {
|
|
26
|
+
if (node.body.type === "BlockStatement") {
|
|
27
|
+
analysisReport.addIssue("ARROW_FUNCTION_BLOCK_BODY_NOT_ALLOWED", "arrow functions with block body not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
ObjectExpression(node) {
|
|
31
|
+
for (const property of node.properties) {
|
|
32
|
+
if (property.type === "Property" && property.computed) {
|
|
33
|
+
analysisReport.addIssue("COMPUTED_PROPERTY_NOT_ALLOWED", "computed object properties not allowed", (0, utils_js_1.getNodeRange)(property), validationContext.getSnapshot());
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
MemberExpression(node) {
|
|
38
|
+
if (node.computed) {
|
|
39
|
+
// We allow numeric literals for array access (data.items[0])
|
|
40
|
+
if (node.property.type === "Literal" && typeof node.property.value === "number") {
|
|
41
|
+
return; // Allow numeric array indices
|
|
42
|
+
}
|
|
43
|
+
analysisReport.addIssue("COMPUTED_ACCESS_NOT_ALLOWED", "computed member access not allowed", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), [
|
|
44
|
+
"Use dot notation: obj.prop instead of obj[prop]",
|
|
45
|
+
"For arrays, use numeric indices: array[0] instead of array[variable]",
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
return analysisReport;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/analyze/security/expressions.ts"],"names":[],"mappings":";;AAOA,gDA4FC;AAlGD,mDAA6C;AAG7C,8DAAuD;AACvD,0CAA2C;AAE3C,SAAgB,kBAAkB,CAChC,GAAY,EACZ,OAAe,EACf,iBAAoC;IAEpC,MAAM,cAAc,GAAG,IAAI,mCAAc,EAAE,CAAC;IAE5C,IAAA,sBAAQ,EAAC,GAAG,EAAE;QACZ,aAAa,CAAC,IAAI;YAChB,cAAc,CAAC,QAAQ,CACrB,iBAAiB,EACjB,iBAAiB,EACjB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,cAAc,CAAC,IAAI;YACjB,cAAc,CAAC,QAAQ,CACrB,kBAAkB,EAClB,kBAAkB,EAClB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,IAAI;YAChB,cAAc,CAAC,QAAQ,CACrB,kBAAkB,EAClB,kBAAkB,EAClB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,IAAI;YAClB,cAAc,CAAC,QAAQ,CACrB,mBAAmB,EACnB,mBAAmB,EACnB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,IAAI;YAClB,cAAc,CAAC,QAAQ,CACrB,mBAAmB,EACnB,mBAAmB,EACnB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;QACD,uBAAuB,CAAC,IAAI;YAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACxC,cAAc,CAAC,QAAQ,CACrB,uCAAuC,EACvC,6CAA6C,EAC7C,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;YACJ,CAAC;QACH,CAAC;QACD,gBAAgB,CAAC,IAAI;YACnB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBACtD,cAAc,CAAC,QAAQ,CACrB,+BAA+B,EAC/B,wCAAwC,EACxC,IAAA,uBAAY,EAAC,QAAQ,CAAC,EACtB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,gBAAgB,CAAC,IAAI;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,6DAA6D;gBAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAChF,OAAO,CAAC,8BAA8B;gBACxC,CAAC;gBAED,cAAc,CAAC,QAAQ,CACrB,6BAA6B,EAC7B,oCAAoC,EACpC,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,EAC/B;oBACE,iDAAiD;oBACjD,sEAAsE;iBACvE,CACF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,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 analyzeIdentifiers(ast: Program, _schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=identifiers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgD,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgD,OAAO,EAAE,MAAM,UAAU,CAAC;AAEtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAkChB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeIdentifiers = analyzeIdentifiers;
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const builtins_js_1 = require("../../builtins.js");
|
|
6
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
7
|
+
const utils_js_1 = require("../utils.js");
|
|
8
|
+
function analyzeIdentifiers(ast, _schema, validationContext) {
|
|
9
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
10
|
+
const arrowParamScopes = getArrowParamScopes(ast);
|
|
11
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
12
|
+
Identifier(node) {
|
|
13
|
+
const { name } = node;
|
|
14
|
+
const allowedRoots = ["props", "data", ...(0, builtins_js_1.getBuiltinGlobals)()];
|
|
15
|
+
if (allowedRoots.includes(name)) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const arrowParent = findArrowParent(node, ast);
|
|
19
|
+
if (arrowParent) {
|
|
20
|
+
const params = arrowParamScopes.get(arrowParent);
|
|
21
|
+
if (params?.has(name)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
analysisReport.addIssue("IDENTIFIER_NOT_ALLOWED", `Identifier "${name}" not allowed`, (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot(), allowedRoots);
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
return analysisReport;
|
|
29
|
+
}
|
|
30
|
+
// Build a map of arrow functions to their parameter names so we can check if an
|
|
31
|
+
// identifier is a legit arrow function param or something shady. We do this in
|
|
32
|
+
// a separate traversal because it's cleaner than trying to track scope during the
|
|
33
|
+
// main validation pass.
|
|
34
|
+
function getArrowParamScopes(ast) {
|
|
35
|
+
const arrowParamScopes = new Map();
|
|
36
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
37
|
+
ArrowFunctionExpression(node) {
|
|
38
|
+
const { params } = node;
|
|
39
|
+
if (Array.isArray(params)) {
|
|
40
|
+
const paramNames = new Set();
|
|
41
|
+
params.forEach((p) => {
|
|
42
|
+
if (p.type === "Identifier") {
|
|
43
|
+
paramNames.add(p.name);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
arrowParamScopes.set(node, paramNames);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
return arrowParamScopes;
|
|
51
|
+
}
|
|
52
|
+
// Walk up the AST tree to find the nearest ArrowFunctionExpression parent.
|
|
53
|
+
// This lets us check if an identifier is in scope as an arrow function parameter.
|
|
54
|
+
function findArrowParent(targetNode, rootNode) {
|
|
55
|
+
let found = null;
|
|
56
|
+
function walk(node) {
|
|
57
|
+
if (node === targetNode) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
const isArrow = node.type === "ArrowFunctionExpression";
|
|
61
|
+
if (isArrow) {
|
|
62
|
+
found = node;
|
|
63
|
+
}
|
|
64
|
+
for (const key of Object.keys(node)) {
|
|
65
|
+
const value = node[key];
|
|
66
|
+
if (value && typeof value === "object") {
|
|
67
|
+
if (Array.isArray(value)) {
|
|
68
|
+
for (const item of value) {
|
|
69
|
+
if (item && typeof item === "object" && walk(item)) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (walk(value)) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (isArrow) {
|
|
80
|
+
found = null;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
walk(rootNode);
|
|
85
|
+
return found;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=identifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../../src/analyze/security/identifiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeSecurity = void 0;
|
|
4
|
+
var index_js_1 = require("./analyze/index.js");
|
|
5
|
+
Object.defineProperty(exports, "analyzeSecurity", { enumerable: true, get: function () { return index_js_1.analyzeSecurity; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/security/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqD;AAA5C,2GAAA,eAAe,OAAA"}
|
|
@@ -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 analyzeMemberAccess(ast: Program, _schema: Schema, validationContext: ValidationContext): AnalysisReport;
|
|
6
|
+
//# sourceMappingURL=member-access.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-access.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/member-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,
|
|
1
|
+
{"version":3,"file":"member-access.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/member-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,UAAU,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAuBhB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeMemberAccess = analyzeMemberAccess;
|
|
4
|
+
const traverse_js_1 = require("../../traverse.js");
|
|
5
|
+
const analysis_report_js_1 = require("../analysis-report.js");
|
|
6
|
+
const utils_js_1 = require("../utils.js");
|
|
7
|
+
function analyzeMemberAccess(ast, _schema, validationContext) {
|
|
8
|
+
const analysisReport = new analysis_report_js_1.AnalysisReport();
|
|
9
|
+
(0, traverse_js_1.traverse)(ast, {
|
|
10
|
+
MemberExpression(node) {
|
|
11
|
+
let depth = 0;
|
|
12
|
+
let currentNode = node;
|
|
13
|
+
while (currentNode.type === "MemberExpression") {
|
|
14
|
+
depth += 1;
|
|
15
|
+
currentNode = currentNode.object;
|
|
16
|
+
}
|
|
17
|
+
if (depth > 5) {
|
|
18
|
+
analysisReport.addIssue("MEMBER_CHAIN_TOO_DEEP", "member chain too deep", (0, utils_js_1.getNodeRange)(node), validationContext.getSnapshot());
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
return analysisReport;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=member-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-access.js","sourceRoot":"","sources":["../../../src/analyze/security/member-access.ts"],"names":[],"mappings":";;AAOA,kDA2BC;AAjCD,mDAA6C;AAG7C,8DAAuD;AACvD,0CAA2C;AAE3C,SAAgB,mBAAmB,CACjC,GAAY,EACZ,OAAe,EACf,iBAAoC;IAEpC,MAAM,cAAc,GAAG,IAAI,mCAAc,EAAE,CAAC;IAE5C,IAAA,sBAAQ,EAAC,GAAG,EAAE;QACZ,gBAAgB,CAAC,IAAI;YACnB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,WAAW,GAAuB,IAAI,CAAC;YAC3C,OAAO,WAAW,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,IAAI,CAAC,CAAC;gBACX,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;YACnC,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,cAAc,CAAC,QAAQ,CACrB,uBAAuB,EACvB,uBAAuB,EACvB,IAAA,uBAAY,EAAC,IAAI,CAAC,EAClB,iBAAiB,CAAC,WAAW,EAAE,CAChC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/analyze/utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,aAAa,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAwB7C;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAEtG;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAExG;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CActG;AAED,KAAK,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE7E,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,qBAAqB,CAAC;CAC7B"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNodeRange = getNodeRange;
|
|
4
|
+
exports.getElementSimilarityMatchers = getElementSimilarityMatchers;
|
|
5
|
+
exports.getAttributeSimilarityMatchers = getAttributeSimilarityMatchers;
|
|
6
|
+
exports.getBestSimilarityMatcherSuggestion = getBestSimilarityMatcherSuggestion;
|
|
7
|
+
function getNodeRange(node) {
|
|
8
|
+
if (node.loc) {
|
|
9
|
+
return {
|
|
10
|
+
start: {
|
|
11
|
+
line: node.loc.start.line - 1,
|
|
12
|
+
column: node.loc.start.column,
|
|
13
|
+
},
|
|
14
|
+
end: {
|
|
15
|
+
line: node.loc.end.line - 1,
|
|
16
|
+
column: node.loc.end.column,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
start: {
|
|
22
|
+
line: 0,
|
|
23
|
+
column: 0,
|
|
24
|
+
},
|
|
25
|
+
end: {
|
|
26
|
+
line: 0,
|
|
27
|
+
column: 0,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function getElementSimilarityMatchers(invalid, available) {
|
|
32
|
+
return getSimilarityMatchers(invalid, available, "element");
|
|
33
|
+
}
|
|
34
|
+
function getAttributeSimilarityMatchers(invalid, available) {
|
|
35
|
+
return getSimilarityMatchers(invalid, available, "attribute");
|
|
36
|
+
}
|
|
37
|
+
function getBestSimilarityMatcherSuggestion(invalid, available) {
|
|
38
|
+
const similarityMatchers = getElementSimilarityMatchers(invalid, available);
|
|
39
|
+
if (similarityMatchers.length === 0) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const best = similarityMatchers[0];
|
|
43
|
+
if (best.confidence > 0.6) {
|
|
44
|
+
return best.suggestion;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
function getSimilarityMatchers(invalid, available, type) {
|
|
49
|
+
if (available.length === 0) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
return available
|
|
53
|
+
.map((suggestion) => ({
|
|
54
|
+
suggestion,
|
|
55
|
+
distance: levenshteinDistance(invalid.toLowerCase(), suggestion.toLowerCase()),
|
|
56
|
+
type,
|
|
57
|
+
}))
|
|
58
|
+
.filter((similarityMatcher) => similarityMatcher.distance <= Math.max(2, Math.floor(invalid.length * 0.4)))
|
|
59
|
+
.sort((a, b) => a.distance - b.distance)
|
|
60
|
+
.slice(0, 3)
|
|
61
|
+
.map((similarityMatcher) => ({
|
|
62
|
+
...similarityMatcher,
|
|
63
|
+
confidence: 1 - similarityMatcher.distance / Math.max(invalid.length, similarityMatcher.suggestion.length),
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
function levenshteinDistance(x, y) {
|
|
67
|
+
if (x.length === 0) {
|
|
68
|
+
return y.length;
|
|
69
|
+
}
|
|
70
|
+
if (y.length === 0) {
|
|
71
|
+
return x.length;
|
|
72
|
+
}
|
|
73
|
+
const matrix = [];
|
|
74
|
+
for (let i = 0; i <= y.length; i++) {
|
|
75
|
+
matrix[i] = [i];
|
|
76
|
+
}
|
|
77
|
+
for (let j = 0; j <= x.length; j++) {
|
|
78
|
+
matrix[0][j] = j;
|
|
79
|
+
}
|
|
80
|
+
for (let i = 1; i <= y.length; i++) {
|
|
81
|
+
for (let j = 1; j <= x.length; j++) {
|
|
82
|
+
if (y.charAt(i - 1) === x.charAt(j - 1)) {
|
|
83
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return matrix[y.length][x.length];
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/analyze/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-context.d.ts","sourceRoot":"","sources":["../../src/analyze/validation-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,qBAAa,iBAAiB;;IAG5B,IAAI,WAAW,IAAI,MAAM,CAKxB;IAED,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,WAAW,IAAI,IAAI;IAInB,WAAW,IAAI,yBAAyB;CAOzC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationContext = void 0;
|
|
4
|
+
class ValidationContext {
|
|
5
|
+
#elements = [];
|
|
6
|
+
get currentPath() {
|
|
7
|
+
if (this.#elements.length > 0) {
|
|
8
|
+
return this.#elements.join(" > ");
|
|
9
|
+
}
|
|
10
|
+
return "";
|
|
11
|
+
}
|
|
12
|
+
enterElement(element) {
|
|
13
|
+
this.#elements.push(element);
|
|
14
|
+
}
|
|
15
|
+
exitElement() {
|
|
16
|
+
this.#elements.pop();
|
|
17
|
+
}
|
|
18
|
+
getSnapshot() {
|
|
19
|
+
return {
|
|
20
|
+
elements: this.#elements.slice(),
|
|
21
|
+
currentElement: this.#elements[this.#elements.length - 1],
|
|
22
|
+
parentElements: this.#elements.slice(0, -1),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ValidationContext = ValidationContext;
|
|
27
|
+
//# sourceMappingURL=validation-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-context.js","sourceRoot":"","sources":["../../src/analyze/validation-context.ts"],"names":[],"mappings":";;;AAMA,MAAa,iBAAiB;IAC5B,SAAS,GAAa,EAAE,CAAC;IAEzB,IAAI,WAAW;QACb,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,WAAW;QACT,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAChC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACzD,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5C,CAAC;IACJ,CAAC;CACF;AAzBD,8CAyBC"}
|