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.
Files changed (199) hide show
  1. package/lib/analyze/analysis-error.d.ts +7 -0
  2. package/lib/analyze/analysis-error.d.ts.map +1 -1
  3. package/lib/analyze/analysis-error.js +26 -0
  4. package/lib/analyze/analysis-error.js.map +1 -0
  5. package/lib/analyze/analysis-report.d.ts +2 -2
  6. package/lib/analyze/analysis-report.d.ts.map +1 -1
  7. package/lib/analyze/analyze.d.ts +5 -0
  8. package/lib/analyze/analyze.d.ts.map +1 -1
  9. package/lib/analyze/analyze.js +11 -0
  10. package/lib/analyze/analyze.js.map +1 -0
  11. package/lib/analyze/analyze.test.js +312 -312
  12. package/lib/analyze/analyze.test.js.map +1 -1
  13. package/lib/analyze/data/analyze.d.ts +5 -0
  14. package/lib/analyze/data/analyze.d.ts.map +1 -1
  15. package/lib/analyze/data/analyze.js +12 -0
  16. package/lib/analyze/data/analyze.js.map +1 -0
  17. package/lib/analyze/data/data-access.d.ts +7 -0
  18. package/lib/analyze/data/data-access.d.ts.map +1 -1
  19. package/lib/analyze/data/data-access.js +275 -0
  20. package/lib/analyze/data/data-access.js.map +1 -0
  21. package/lib/analyze/data/index.d.ts +2 -0
  22. package/lib/analyze/data/index.d.ts.map +1 -1
  23. package/lib/analyze/data/index.js +6 -0
  24. package/lib/analyze/data/index.js.map +1 -0
  25. package/lib/analyze/data/method-calls.d.ts +6 -0
  26. package/lib/analyze/data/method-calls.d.ts.map +1 -1
  27. package/lib/analyze/data/method-calls.js +58 -0
  28. package/lib/analyze/data/method-calls.js.map +1 -0
  29. package/lib/analyze/data/utils.d.ts +10 -0
  30. package/lib/analyze/data/utils.d.ts.map +1 -1
  31. package/lib/analyze/data/utils.js +212 -0
  32. package/lib/analyze/data/utils.js.map +1 -0
  33. package/lib/analyze/index.d.ts +4 -0
  34. package/lib/analyze/index.d.ts.map +1 -1
  35. package/lib/analyze/index.js +10 -0
  36. package/lib/analyze/index.js.map +1 -0
  37. package/lib/analyze/jsx/analyze.d.ts +5 -0
  38. package/lib/analyze/jsx/analyze.d.ts.map +1 -1
  39. package/lib/analyze/jsx/analyze.js +13 -0
  40. package/lib/analyze/jsx/analyze.js.map +1 -0
  41. package/lib/analyze/jsx/element-attributes.d.ts +6 -0
  42. package/lib/analyze/jsx/element-attributes.d.ts.map +1 -1
  43. package/lib/analyze/jsx/element-attributes.js +20 -20
  44. package/lib/analyze/jsx/element-attributes.js.map +1 -1
  45. package/lib/analyze/jsx/element-children.d.ts +6 -0
  46. package/lib/analyze/jsx/element-children.d.ts.map +1 -1
  47. package/lib/analyze/jsx/element-children.js +69 -0
  48. package/lib/analyze/jsx/element-children.js.map +1 -0
  49. package/lib/analyze/jsx/element-tags.d.ts +6 -0
  50. package/lib/analyze/jsx/element-tags.d.ts.map +1 -1
  51. package/lib/analyze/jsx/element-tags.js +41 -0
  52. package/lib/analyze/jsx/element-tags.js.map +1 -0
  53. package/lib/analyze/jsx/index.d.ts +2 -0
  54. package/lib/analyze/jsx/index.d.ts.map +1 -1
  55. package/lib/analyze/jsx/index.js +6 -0
  56. package/lib/analyze/jsx/index.js.map +1 -0
  57. package/lib/analyze/security/analyze.d.ts +5 -0
  58. package/lib/analyze/security/analyze.d.ts.map +1 -1
  59. package/lib/analyze/security/analyze.js +15 -0
  60. package/lib/analyze/security/analyze.js.map +1 -0
  61. package/lib/analyze/security/call-expressions.d.ts +6 -0
  62. package/lib/analyze/security/call-expressions.d.ts.map +1 -1
  63. package/lib/analyze/security/call-expressions.js +23 -0
  64. package/lib/analyze/security/call-expressions.js.map +1 -0
  65. package/lib/analyze/security/declarations.d.ts +6 -0
  66. package/lib/analyze/security/declarations.d.ts.map +1 -1
  67. package/lib/analyze/security/declarations.js +31 -0
  68. package/lib/analyze/security/declarations.js.map +1 -0
  69. package/lib/analyze/security/expressions.d.ts +6 -0
  70. package/lib/analyze/security/expressions.d.ts.map +1 -1
  71. package/lib/analyze/security/expressions.js +52 -0
  72. package/lib/analyze/security/expressions.js.map +1 -0
  73. package/lib/analyze/security/identifiers.d.ts +6 -0
  74. package/lib/analyze/security/identifiers.d.ts.map +1 -1
  75. package/lib/analyze/security/identifiers.js +87 -0
  76. package/lib/analyze/security/identifiers.js.map +1 -0
  77. package/lib/analyze/security/index.d.ts +2 -0
  78. package/lib/analyze/security/index.d.ts.map +1 -1
  79. package/lib/analyze/security/index.js +6 -0
  80. package/lib/analyze/security/index.js.map +1 -0
  81. package/lib/analyze/security/member-access.d.ts +6 -0
  82. package/lib/analyze/security/member-access.d.ts.map +1 -1
  83. package/lib/analyze/security/member-access.js +24 -0
  84. package/lib/analyze/security/member-access.js.map +1 -0
  85. package/lib/analyze/utils.d.ts.map +1 -0
  86. package/lib/analyze/utils.js +92 -0
  87. package/lib/analyze/utils.js.map +1 -0
  88. package/lib/analyze/validation-context.d.ts.map +1 -0
  89. package/lib/analyze/validation-context.js +27 -0
  90. package/lib/analyze/validation-context.js.map +1 -0
  91. package/lib/codegen/generate-typescript-definitions.test.js +190 -190
  92. package/lib/codegen/generate-typescript-definitions.test.js.map +1 -1
  93. package/lib/compile/compilation-error.d.ts.map +1 -0
  94. package/lib/compile/compilation-error.js +28 -0
  95. package/lib/compile/compilation-error.js.map +1 -0
  96. package/lib/compile/compile.d.ts +3 -0
  97. package/lib/compile/compile.d.ts.map +1 -1
  98. package/lib/compile/compile.js +17 -17
  99. package/lib/compile/compile.js.map +1 -1
  100. package/lib/compile/compile.test.js +110 -110
  101. package/lib/compile/compile.test.js.map +1 -1
  102. package/lib/compile/index.d.ts +3 -0
  103. package/lib/compile/index.d.ts.map +1 -0
  104. package/lib/compile/index.js +8 -0
  105. package/lib/compile/index.js.map +1 -0
  106. package/lib/evaluate/evaluate.js +9 -5
  107. package/lib/evaluate/evaluate.js.map +1 -0
  108. package/lib/evaluate/evaluate.test.d.ts.map +1 -0
  109. package/lib/evaluate/evaluate.test.js +252 -0
  110. package/lib/evaluate/evaluate.test.js.map +1 -0
  111. package/lib/evaluate/evaluation-error.js +6 -1
  112. package/lib/evaluate/evaluation-error.js.map +1 -0
  113. package/lib/evaluate/index.d.ts +3 -0
  114. package/lib/evaluate/index.d.ts.map +1 -0
  115. package/lib/evaluate/index.js +8 -0
  116. package/lib/evaluate/index.js.map +1 -0
  117. package/lib/index.d.ts +7 -7
  118. package/lib/index.d.ts.map +1 -1
  119. package/lib/index.js +12 -12
  120. package/lib/index.js.map +1 -1
  121. package/lib/jsx.d.ts +92 -0
  122. package/lib/jsx.d.ts.map +1 -0
  123. package/lib/jsx.js +43 -0
  124. package/lib/jsx.js.map +1 -0
  125. package/lib/parse/index.d.ts +3 -0
  126. package/lib/parse/index.d.ts.map +1 -0
  127. package/lib/parse/index.js +8 -0
  128. package/lib/parse/index.js.map +1 -0
  129. package/lib/parse/parse-error.d.ts.map +1 -0
  130. package/lib/parse/parse-error.js +13 -0
  131. package/lib/parse/parse-error.js.map +1 -0
  132. package/lib/parse/parse.d.ts +3 -0
  133. package/lib/parse/parse.d.ts.map +1 -0
  134. package/lib/parse/parse.js +35 -0
  135. package/lib/parse/parse.js.map +1 -0
  136. package/lib/parse/parse.test.d.ts.map +1 -0
  137. package/lib/parse/parse.test.js +82 -0
  138. package/lib/parse/parse.test.js.map +1 -0
  139. package/lib/render.d.ts +2 -2
  140. package/lib/render.d.ts.map +1 -1
  141. package/lib/render.js +13 -9
  142. package/lib/render.js.map +1 -0
  143. package/lib/render.test.js +303 -0
  144. package/lib/render.test.js.map +1 -0
  145. package/lib/schema.js +39 -18
  146. package/lib/schema.js.map +1 -0
  147. package/lib/traverse.d.ts +15 -0
  148. package/lib/traverse.d.ts.map +1 -0
  149. package/lib/traverse.js +49 -0
  150. package/lib/traverse.js.map +1 -0
  151. package/lib/traverse.test.d.ts.map +1 -0
  152. package/lib/traverse.test.js +86 -0
  153. package/lib/traverse.test.js.map +1 -0
  154. package/lib/types.d.ts.map +1 -0
  155. package/lib/types.js +3 -0
  156. package/lib/types.js.map +1 -0
  157. package/lib/validate.d.ts +3 -3
  158. package/lib/validate.d.ts.map +1 -1
  159. package/lib/validate.js +11 -7
  160. package/lib/validate.js.map +1 -0
  161. package/package.json +2 -1
  162. package/src/analyze/analysis-error.ts +1 -1
  163. package/src/analyze/analysis-report.ts +2 -2
  164. package/src/analyze/analyze.test.ts +4 -4
  165. package/src/analyze/analyze.ts +5 -5
  166. package/src/analyze/data/analyze.ts +5 -5
  167. package/src/analyze/data/data-access.ts +6 -6
  168. package/src/analyze/data/index.ts +1 -1
  169. package/src/analyze/data/method-calls.ts +7 -7
  170. package/src/analyze/data/utils.ts +5 -5
  171. package/src/analyze/index.ts +3 -3
  172. package/src/analyze/jsx/analyze.ts +6 -6
  173. package/src/analyze/jsx/element-attributes.ts +6 -6
  174. package/src/analyze/jsx/element-children.ts +6 -6
  175. package/src/analyze/jsx/element-tags.ts +5 -5
  176. package/src/analyze/jsx/index.ts +1 -1
  177. package/src/analyze/security/analyze.ts +8 -8
  178. package/src/analyze/security/call-expressions.ts +5 -5
  179. package/src/analyze/security/declarations.ts +5 -5
  180. package/src/analyze/security/expressions.ts +5 -5
  181. package/src/analyze/security/identifiers.ts +6 -6
  182. package/src/analyze/security/index.ts +1 -1
  183. package/src/analyze/security/member-access.ts +5 -5
  184. package/src/codegen/generate-typescript-definitions.test.ts +2 -2
  185. package/src/compile/compile.test.ts +2 -2
  186. package/src/compile/compile.ts +2 -2
  187. package/src/compile/index.ts +2 -2
  188. package/src/evaluate/evaluate.test.ts +4 -4
  189. package/src/evaluate/evaluate.ts +1 -1
  190. package/src/evaluate/index.ts +2 -2
  191. package/src/index.ts +7 -7
  192. package/src/parse/index.ts +2 -2
  193. package/src/parse/parse.test.ts +2 -2
  194. package/src/parse/parse.ts +1 -1
  195. package/src/render.test.ts +4 -4
  196. package/src/render.ts +5 -5
  197. package/src/traverse.test.ts +2 -2
  198. package/src/traverse.ts +1 -1
  199. 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,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CA6BhB"}
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,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAuDhB"}
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,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAwFhB"}
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,OAAO,CAAC;AAEnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAkChB"}
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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"}
@@ -0,0 +1,2 @@
1
+ export { analyzeSecurity } from "./analyze/index.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyze/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
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,OAAO,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,cAAc,CAuBhB"}
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"}