jsxpression 0.1.5 → 0.1.11

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 (138) hide show
  1. package/lib/analyze/analysis-error.js +5 -1
  2. package/lib/analyze/analysis-error.js.map +1 -1
  3. package/lib/analyze/analysis-report.js +5 -1
  4. package/lib/analyze/analysis-report.js.map +1 -1
  5. package/lib/analyze/analyze.js +9 -6
  6. package/lib/analyze/analyze.js.map +1 -1
  7. package/lib/analyze/analyze.test.d.ts +2 -0
  8. package/lib/analyze/analyze.test.js +314 -312
  9. package/lib/analyze/analyze.test.js.map +1 -1
  10. package/lib/analyze/data/analyze.js +10 -7
  11. package/lib/analyze/data/analyze.js.map +1 -1
  12. package/lib/analyze/data/data-access.js +24 -20
  13. package/lib/analyze/data/data-access.js.map +1 -1
  14. package/lib/analyze/data/index.js +5 -1
  15. package/lib/analyze/data/index.js.map +1 -1
  16. package/lib/analyze/data/method-calls.js +20 -17
  17. package/lib/analyze/data/method-calls.js.map +1 -1
  18. package/lib/analyze/data/utils.js +29 -22
  19. package/lib/analyze/data/utils.js.map +1 -1
  20. package/lib/analyze/index.js +9 -3
  21. package/lib/analyze/index.js.map +1 -1
  22. package/lib/analyze/jsx/analyze.js +11 -8
  23. package/lib/analyze/jsx/analyze.js.map +1 -1
  24. package/lib/analyze/jsx/element-attributes.js +24 -21
  25. package/lib/analyze/jsx/element-attributes.js.map +1 -1
  26. package/lib/analyze/jsx/element-children.js +23 -20
  27. package/lib/analyze/jsx/element-children.js.map +1 -1
  28. package/lib/analyze/jsx/element-tags.js +15 -12
  29. package/lib/analyze/jsx/element-tags.js.map +1 -1
  30. package/lib/analyze/jsx/index.js +5 -1
  31. package/lib/analyze/jsx/index.js.map +1 -1
  32. package/lib/analyze/security/analyze.js +13 -10
  33. package/lib/analyze/security/analyze.js.map +1 -1
  34. package/lib/analyze/security/call-expressions.js +11 -8
  35. package/lib/analyze/security/call-expressions.js.map +1 -1
  36. package/lib/analyze/security/declarations.js +15 -12
  37. package/lib/analyze/security/declarations.js.map +1 -1
  38. package/lib/analyze/security/expressions.js +17 -14
  39. package/lib/analyze/security/expressions.js.map +1 -1
  40. package/lib/analyze/security/identifiers.js +13 -10
  41. package/lib/analyze/security/identifiers.js.map +1 -1
  42. package/lib/analyze/security/index.js +5 -1
  43. package/lib/analyze/security/index.js.map +1 -1
  44. package/lib/analyze/security/member-access.js +10 -7
  45. package/lib/analyze/security/member-access.js.map +1 -1
  46. package/lib/analyze/utils.d.ts +20 -0
  47. package/lib/analyze/utils.js +10 -4
  48. package/lib/analyze/utils.js.map +1 -1
  49. package/lib/analyze/validation-context.d.ts +13 -0
  50. package/lib/analyze/validation-context.js +5 -1
  51. package/lib/analyze/validation-context.js.map +1 -1
  52. package/lib/builtins.js +20 -9
  53. package/lib/builtins.js.map +1 -1
  54. package/lib/codegen/builtins/builtin-types.js +6 -3
  55. package/lib/codegen/builtins/builtin-types.js.map +1 -1
  56. package/lib/codegen/builtins/index.js +5 -1
  57. package/lib/codegen/builtins/index.js.map +1 -1
  58. package/lib/codegen/generate-typescript-definitions.js +7 -4
  59. package/lib/codegen/generate-typescript-definitions.js.map +1 -1
  60. package/lib/codegen/generate-typescript-definitions.test.js +192 -190
  61. package/lib/codegen/generate-typescript-definitions.test.js.map +1 -1
  62. package/lib/codegen/index.js +5 -1
  63. package/lib/codegen/index.js.map +1 -1
  64. package/lib/codegen/schema/component-types.js +6 -3
  65. package/lib/codegen/schema/component-types.js.map +1 -1
  66. package/lib/codegen/schema/data-types.js +6 -3
  67. package/lib/codegen/schema/data-types.js.map +1 -1
  68. package/lib/codegen/schema/index.js +7 -2
  69. package/lib/codegen/schema/index.js.map +1 -1
  70. package/lib/codegen/schema/utils.js +8 -3
  71. package/lib/codegen/schema/utils.js.map +1 -1
  72. package/lib/compile/compilation-error.d.ts +17 -0
  73. package/lib/compile/compilation-error.js +5 -1
  74. package/lib/compile/compilation-error.js.map +1 -1
  75. package/lib/compile/compile.js +21 -18
  76. package/lib/compile/compile.js.map +1 -1
  77. package/lib/compile/compile.test.d.ts +2 -0
  78. package/lib/compile/compile.test.js +112 -110
  79. package/lib/compile/compile.test.js.map +1 -1
  80. package/lib/compile/index.js +7 -2
  81. package/lib/compile/index.js.map +1 -1
  82. package/lib/evaluate/evaluate.d.ts +2 -1
  83. package/lib/evaluate/evaluate.d.ts.map +1 -1
  84. package/lib/evaluate/evaluate.js +17 -12
  85. package/lib/evaluate/evaluate.js.map +1 -1
  86. package/lib/evaluate/evaluate.test.d.ts +2 -0
  87. package/lib/evaluate/evaluate.test.js +86 -74
  88. package/lib/evaluate/evaluate.test.js.map +1 -1
  89. package/lib/evaluate/evaluation-error.js +5 -1
  90. package/lib/evaluate/evaluation-error.js.map +1 -1
  91. package/lib/evaluate/index.js +7 -2
  92. package/lib/evaluate/index.js.map +1 -1
  93. package/lib/index.js +15 -6
  94. package/lib/index.js.map +1 -1
  95. package/lib/jsx.js +22 -10
  96. package/lib/jsx.js.map +1 -1
  97. package/lib/parse/index.js +7 -2
  98. package/lib/parse/index.js.map +1 -1
  99. package/lib/parse/parse-error.d.ts +10 -0
  100. package/lib/parse/parse-error.js +5 -1
  101. package/lib/parse/parse-error.js.map +1 -1
  102. package/lib/parse/parse.js +13 -7
  103. package/lib/parse/parse.js.map +1 -1
  104. package/lib/parse/parse.test.d.ts +2 -0
  105. package/lib/parse/parse.test.js +58 -56
  106. package/lib/parse/parse.test.js.map +1 -1
  107. package/lib/render.js +12 -9
  108. package/lib/render.js.map +1 -1
  109. package/lib/render.test.d.ts +2 -0
  110. package/lib/render.test.js +64 -62
  111. package/lib/render.test.js.map +1 -1
  112. package/lib/schema.js +38 -18
  113. package/lib/schema.js.map +1 -1
  114. package/lib/traverse.js +11 -8
  115. package/lib/traverse.js.map +1 -1
  116. package/lib/traverse.test.d.ts +2 -0
  117. package/lib/traverse.test.js +36 -34
  118. package/lib/traverse.test.js.map +1 -1
  119. package/lib/types.d.ts +12 -0
  120. package/lib/types.js +2 -1
  121. package/lib/validate.js +10 -7
  122. package/lib/validate.js.map +1 -1
  123. package/package.json +7 -7
  124. package/src/evaluate/evaluate.test.ts +39 -25
  125. package/src/evaluate/evaluate.ts +11 -8
  126. package/src/render.ts +1 -1
  127. package/lib/codegen/builtin-types.d.ts +0 -11
  128. package/lib/codegen/builtin-types.d.ts.map +0 -1
  129. package/lib/codegen/builtin-types.js +0 -151
  130. package/lib/codegen/builtin-types.js.map +0 -1
  131. package/lib/codegen/declare-types.d.ts +0 -20
  132. package/lib/codegen/declare-types.d.ts.map +0 -1
  133. package/lib/codegen/declare-types.js +0 -299
  134. package/lib/codegen/declare-types.js.map +0 -1
  135. package/lib/codegen/schema-to-types.d.ts +0 -14
  136. package/lib/codegen/schema-to-types.d.ts.map +0 -1
  137. package/lib/codegen/schema-to-types.js +0 -203
  138. package/lib/codegen/schema-to-types.js.map +0 -1
package/lib/schema.js CHANGED
@@ -1,45 +1,65 @@
1
- export function isElementAllowed(schema, tagName) {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isElementAllowed = isElementAllowed;
4
+ exports.getElementSchema = getElementSchema;
5
+ exports.getAllowedAttributes = getAllowedAttributes;
6
+ exports.isAttributeAllowed = isAttributeAllowed;
7
+ exports.getAllowedChildren = getAllowedChildren;
8
+ exports.canHaveChildren = canHaveChildren;
9
+ exports.isSelfClosing = isSelfClosing;
10
+ exports.isChildAllowed = isChildAllowed;
11
+ exports.getAllElements = getAllElements;
12
+ exports.getElementConfig = getElementConfig;
13
+ exports.getAttributeSchema = getAttributeSchema;
14
+ exports.getRequiredAttributes = getRequiredAttributes;
15
+ exports.getOptionalAttributes = getOptionalAttributes;
16
+ exports.isAttributeRequired = isAttributeRequired;
17
+ exports.getDataSchema = getDataSchema;
18
+ exports.getPropertyAtPath = getPropertyAtPath;
19
+ exports.getAvailablePropertiesAtPath = getAvailablePropertiesAtPath;
20
+ exports.getEnumValues = getEnumValues;
21
+ function isElementAllowed(schema, tagName) {
2
22
  return !!schema.elements?.[tagName];
3
23
  }
4
- export function getElementSchema(schema, tagName) {
24
+ function getElementSchema(schema, tagName) {
5
25
  return schema.elements?.[tagName];
6
26
  }
7
- export function getAllowedAttributes(schema, tagName) {
27
+ function getAllowedAttributes(schema, tagName) {
8
28
  const elementConfig = getElementSchema(schema, tagName);
9
29
  return elementConfig?.props ? Object.keys(elementConfig.props) : [];
10
30
  }
11
- export function isAttributeAllowed(schema, tagName, attributeName) {
31
+ function isAttributeAllowed(schema, tagName, attributeName) {
12
32
  const allowedAttributes = getAllowedAttributes(schema, tagName);
13
33
  return allowedAttributes.includes(attributeName);
14
34
  }
15
- export function getAllowedChildren(schema, tagName) {
35
+ function getAllowedChildren(schema, tagName) {
16
36
  const elementConfig = getElementSchema(schema, tagName);
17
37
  return elementConfig?.allowedChildren;
18
38
  }
19
- export function canHaveChildren(schema, tagName) {
39
+ function canHaveChildren(schema, tagName) {
20
40
  const allowedChildren = getAllowedChildren(schema, tagName);
21
41
  return allowedChildren === undefined || allowedChildren.length > 0;
22
42
  }
23
- export function isSelfClosing(schema, tagName) {
43
+ function isSelfClosing(schema, tagName) {
24
44
  const allowedChildren = getAllowedChildren(schema, tagName);
25
45
  return allowedChildren !== undefined && allowedChildren.length === 0;
26
46
  }
27
- export function isChildAllowed(schema, parentTag, childTag) {
47
+ function isChildAllowed(schema, parentTag, childTag) {
28
48
  const allowedChildren = getAllowedChildren(schema, parentTag);
29
49
  return allowedChildren === undefined || allowedChildren.includes(childTag);
30
50
  }
31
51
  // New schema utilities for enhanced validation
32
- export function getAllElements(schema) {
52
+ function getAllElements(schema) {
33
53
  return schema.elements ? Object.keys(schema.elements) : [];
34
54
  }
35
- export function getElementConfig(schema, tagName) {
55
+ function getElementConfig(schema, tagName) {
36
56
  return getElementSchema(schema, tagName);
37
57
  }
38
- export function getAttributeSchema(schema, tagName, attributeName) {
58
+ function getAttributeSchema(schema, tagName, attributeName) {
39
59
  const elementSchema = getElementSchema(schema, tagName);
40
60
  return elementSchema?.props?.[attributeName];
41
61
  }
42
- export function getRequiredAttributes(schema, tagName) {
62
+ function getRequiredAttributes(schema, tagName) {
43
63
  const elementSchema = getElementSchema(schema, tagName);
44
64
  if (!elementSchema?.props) {
45
65
  return [];
@@ -52,19 +72,19 @@ export function getRequiredAttributes(schema, tagName) {
52
72
  }
53
73
  return required;
54
74
  }
55
- export function getOptionalAttributes(schema, tagName) {
75
+ function getOptionalAttributes(schema, tagName) {
56
76
  const allAttributes = getAllowedAttributes(schema, tagName);
57
77
  const requiredAttributes = getRequiredAttributes(schema, tagName);
58
78
  return allAttributes.filter((attr) => !requiredAttributes.includes(attr));
59
79
  }
60
- export function isAttributeRequired(schema, tagName, attributeName) {
80
+ function isAttributeRequired(schema, tagName, attributeName) {
61
81
  const requiredAttributes = getRequiredAttributes(schema, tagName);
62
82
  return requiredAttributes.includes(attributeName);
63
83
  }
64
- export function getDataSchema(schema) {
84
+ function getDataSchema(schema) {
65
85
  return schema.data;
66
86
  }
67
- export function getPropertyAtPath(schema, path) {
87
+ function getPropertyAtPath(schema, path) {
68
88
  if (!schema.data || path.length === 0) {
69
89
  return undefined;
70
90
  }
@@ -79,7 +99,7 @@ export function getPropertyAtPath(schema, path) {
79
99
  }
80
100
  return current;
81
101
  }
82
- export function getAvailablePropertiesAtPath(schema, path) {
102
+ function getAvailablePropertiesAtPath(schema, path) {
83
103
  if (!schema.data) {
84
104
  return [];
85
105
  }
@@ -92,7 +112,7 @@ export function getAvailablePropertiesAtPath(schema, path) {
92
112
  }
93
113
  return [];
94
114
  }
95
- export function getEnumValues(property) {
115
+ function getEnumValues(property) {
96
116
  switch (property.type) {
97
117
  case "string":
98
118
  return property.enum;
package/lib/schema.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/lib/traverse.js CHANGED
@@ -1,8 +1,11 @@
1
- import { simple, base } from "acorn-walk";
2
- import { isJsxText, isJsxEmptyExpression, } from "./jsx.js";
3
- export function traverse(ast, visitors) {
4
- simple(ast, visitors, {
5
- ...base,
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.traverse = traverse;
4
+ const acorn_walk_1 = require("acorn-walk");
5
+ const jsx_js_1 = require("./jsx.js");
6
+ function traverse(ast, visitors) {
7
+ (0, acorn_walk_1.simple)(ast, visitors, {
8
+ ...acorn_walk_1.base,
6
9
  JSXAttribute(node, state, visit) {
7
10
  if (node.value) {
8
11
  visit(node.value, state);
@@ -16,19 +19,19 @@ export function traverse(ast, visitors) {
16
19
  }
17
20
  }
18
21
  for (const child of node.children) {
19
- if (!isJsxText(child)) {
22
+ if (!(0, jsx_js_1.isJsxText)(child)) {
20
23
  visit(child, state);
21
24
  }
22
25
  }
23
26
  },
24
27
  JSXExpressionContainer(node, state, visit) {
25
- if (!isJsxEmptyExpression(node.expression)) {
28
+ if (!(0, jsx_js_1.isJsxEmptyExpression)(node.expression)) {
26
29
  visit(node.expression, state);
27
30
  }
28
31
  },
29
32
  JSXFragment(node, state, visit) {
30
33
  for (const child of node.children) {
31
- if (!isJsxText(child)) {
34
+ if (!(0, jsx_js_1.isJsxText)(child)) {
32
35
  visit(child, state);
33
36
  }
34
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.js","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAqC,MAAM,YAAY,CAAC;AAC7E,OAAO,EAOL,SAAS,EACT,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAwBlB,MAAM,UAAU,QAAQ,CAAC,GAAY,EAAE,QAAyC;IAC9E,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE;QACpB,GAAG,IAAI;QACP,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAC3B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAChC,IAAI,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/D,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;oBAClD,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YACvC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAClC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;KAC2B,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"traverse.js","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":";;AAmCA,4BA0CC;AA5ED,2CAA6E;AAC7E,qCASkB;AAwBlB,SAAgB,QAAQ,CAAC,GAAY,EAAE,QAAyC;IAC9E,IAAA,mBAAM,EAAC,GAAG,EAAE,QAAQ,EAAE;QACpB,GAAG,iBAAI;QACP,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAC3B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAChC,IAAI,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/D,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;oBAClD,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAA,kBAAS,EAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YACvC,IAAI,CAAC,IAAA,6BAAoB,EAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAA,kBAAS,EAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YAClC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK;YACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;KAC2B,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=traverse.test.d.ts.map
@@ -1,71 +1,73 @@
1
- import { describe, it, expect } from "vitest";
2
- import { traverse } from "./traverse.js";
3
- import { parse } from "./parse/index.js";
4
- describe("traverse", () => {
5
- it("should call JSXElement visitor", () => {
6
- const ast = parse("<Text>Hello</Text>");
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const traverse_js_1 = require("./traverse.js");
5
+ const index_js_1 = require("./parse/index.js");
6
+ (0, vitest_1.describe)("traverse", () => {
7
+ (0, vitest_1.it)("should call JSXElement visitor", () => {
8
+ const ast = (0, index_js_1.parse)("<Text>Hello</Text>");
7
9
  const visits = [];
8
- traverse(ast, {
10
+ (0, traverse_js_1.traverse)(ast, {
9
11
  JSXElement() {
10
12
  visits.push("JSXElement");
11
13
  },
12
14
  });
13
- expect(visits).toContain("JSXElement");
15
+ (0, vitest_1.expect)(visits).toContain("JSXElement");
14
16
  });
15
- it("should call JSXFragment visitor", () => {
16
- const ast = parse("<>Fragment</>");
17
+ (0, vitest_1.it)("should call JSXFragment visitor", () => {
18
+ const ast = (0, index_js_1.parse)("<>Fragment</>");
17
19
  const visits = [];
18
- traverse(ast, {
20
+ (0, traverse_js_1.traverse)(ast, {
19
21
  JSXFragment() {
20
22
  visits.push("JSXFragment");
21
23
  },
22
24
  });
23
- expect(visits).toContain("JSXFragment");
25
+ (0, vitest_1.expect)(visits).toContain("JSXFragment");
24
26
  });
25
- it("should call Identifier visitor for expressions", () => {
26
- const ast = parse("<Text>{props.value}</Text>");
27
+ (0, vitest_1.it)("should call Identifier visitor for expressions", () => {
28
+ const ast = (0, index_js_1.parse)("<Text>{props.value}</Text>");
27
29
  const identifiers = [];
28
- traverse(ast, {
30
+ (0, traverse_js_1.traverse)(ast, {
29
31
  Identifier(node) {
30
32
  identifiers.push(node.name);
31
33
  },
32
34
  });
33
- expect(identifiers).toContain("props");
35
+ (0, vitest_1.expect)(identifiers).toContain("props");
34
36
  });
35
- it("should call JSXAttribute visitor", () => {
36
- const ast = parse("<Text x={10} y={20}>Hello</Text>");
37
+ (0, vitest_1.it)("should call JSXAttribute visitor", () => {
38
+ const ast = (0, index_js_1.parse)("<Text x={10} y={20}>Hello</Text>");
37
39
  let attributeCount = 0;
38
- traverse(ast, {
40
+ (0, traverse_js_1.traverse)(ast, {
39
41
  JSXAttribute() {
40
42
  attributeCount++;
41
43
  },
42
44
  });
43
- expect(attributeCount).toBe(2);
45
+ (0, vitest_1.expect)(attributeCount).toBe(2);
44
46
  });
45
- it("should call JSXExpressionContainer visitor", () => {
46
- const ast = parse("<Text>{props.value}</Text>");
47
+ (0, vitest_1.it)("should call JSXExpressionContainer visitor", () => {
48
+ const ast = (0, index_js_1.parse)("<Text>{props.value}</Text>");
47
49
  const visits = [];
48
- traverse(ast, {
50
+ (0, traverse_js_1.traverse)(ast, {
49
51
  JSXExpressionContainer() {
50
52
  visits.push("JSXExpressionContainer");
51
53
  },
52
54
  });
53
- expect(visits).toContain("JSXExpressionContainer");
55
+ (0, vitest_1.expect)(visits).toContain("JSXExpressionContainer");
54
56
  });
55
- it("should traverse nested JSX elements", () => {
56
- const ast = parse("<Outer><Inner>Text</Inner></Outer>");
57
+ (0, vitest_1.it)("should traverse nested JSX elements", () => {
58
+ const ast = (0, index_js_1.parse)("<Outer><Inner>Text</Inner></Outer>");
57
59
  let jsxCount = 0;
58
- traverse(ast, {
60
+ (0, traverse_js_1.traverse)(ast, {
59
61
  JSXElement() {
60
62
  jsxCount++;
61
63
  },
62
64
  });
63
- expect(jsxCount).toBe(2);
65
+ (0, vitest_1.expect)(jsxCount).toBe(2);
64
66
  });
65
- it("should handle multiple visitor types simultaneously", () => {
66
- const ast = parse("<Text x={props.value}>Hello</Text>");
67
+ (0, vitest_1.it)("should handle multiple visitor types simultaneously", () => {
68
+ const ast = (0, index_js_1.parse)("<Text x={props.value}>Hello</Text>");
67
69
  const visits = [];
68
- traverse(ast, {
70
+ (0, traverse_js_1.traverse)(ast, {
69
71
  JSXElement() {
70
72
  visits.push("JSXElement");
71
73
  },
@@ -76,9 +78,9 @@ describe("traverse", () => {
76
78
  visits.push("Identifier:" + node.name);
77
79
  },
78
80
  });
79
- expect(visits).toContain("JSXElement");
80
- expect(visits).toContain("JSXAttribute");
81
- expect(visits).toContain("Identifier:props");
81
+ (0, vitest_1.expect)(visits).toContain("JSXElement");
82
+ (0, vitest_1.expect)(visits).toContain("JSXAttribute");
83
+ (0, vitest_1.expect)(visits).toContain("Identifier:props");
82
84
  });
83
85
  });
84
86
  //# sourceMappingURL=traverse.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.test.js","sourceRoot":"","sources":["../src/traverse.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traverse.test.js","sourceRoot":"","sources":["../src/traverse.test.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export type PropsDict = Record<string, unknown>;
2
+ export type DataDict = Record<string, unknown>;
3
+ export type ComponentDict = Record<string, Component>;
4
+ export type CreateElement<T = any> = (type: Component, props?: PropsDict, ...children: any[]) => T;
5
+ export type Node = {
6
+ type: string;
7
+ props: PropsDict;
8
+ children: Node[];
9
+ };
10
+ export type H = (type: string, props?: PropsDict, ...children: Node[]) => Node;
11
+ export type Component = (...args: any[]) => any;
12
+ //# sourceMappingURL=types.d.ts.map
package/lib/types.js CHANGED
@@ -1,2 +1,3 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
2
3
  //# sourceMappingURL=types.js.map
package/lib/validate.js CHANGED
@@ -1,5 +1,8 @@
1
- import { analyze, AnalysisError } from "./analyze/index.js";
2
- import { parse, ParseError } from "./parse/index.js";
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validate = validate;
4
+ const index_js_1 = require("./analyze/index.js");
5
+ const index_js_2 = require("./parse/index.js");
3
6
  /**
4
7
  * Validates JSX expression syntax and schema compliance without execution.
5
8
  *
@@ -24,17 +27,17 @@ import { parse, ParseError } from "./parse/index.js";
24
27
  * }
25
28
  * ```
26
29
  */
27
- export function validate(source, schema, { minSeverity = 3 } = {}) {
30
+ function validate(source, schema, { minSeverity = 3 } = {}) {
28
31
  try {
29
- const ast = parse(source);
30
- const report = analyze(ast, schema);
32
+ const ast = (0, index_js_2.parse)(source);
33
+ const report = (0, index_js_1.analyze)(ast, schema);
31
34
  if (report.hasIssues(minSeverity)) {
32
- return { ok: false, error: AnalysisError.fromReport(report) };
35
+ return { ok: false, error: index_js_1.AnalysisError.fromReport(report) };
33
36
  }
34
37
  return { ok: true };
35
38
  }
36
39
  catch (error) {
37
- if (error instanceof ParseError) {
40
+ if (error instanceof index_js_2.ParseError) {
38
41
  return { ok: false, error };
39
42
  }
40
43
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWrD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAc,EACd,MAAc,EAEd,EAAE,WAAW,GAAG,CAAC,KAAsB,EAAE;IAEzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEpC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":";;AAoCA,4BAsBC;AA1DD,iDAA4D;AAC5D,+CAAqD;AAWrD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,QAAQ,CACtB,MAAc,EACd,MAAc,EAEd,EAAE,WAAW,GAAG,CAAC,KAAsB,EAAE;IAEzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,gBAAK,EAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,kBAAO,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEpC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,qBAAU,EAAE,CAAC;YAChC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,16 +1,19 @@
1
1
  {
2
2
  "name": "jsxpression",
3
- "version": "0.1.5",
3
+ "version": "0.1.11",
4
4
  "description": "Validate and safely render JSX expressions",
5
5
  "author": "Divid AB <info@divid.se>",
6
6
  "repository": "https://github.com/dividab/abstract-visuals/tree/master/packages/jsxpression",
7
7
  "license": "MIT",
8
8
  "main": "lib/index.js",
9
+ "sideEffects": false,
9
10
  "types": "lib/index",
10
- "type": "module",
11
11
  "exports": {
12
12
  ".": "./lib/index.js"
13
13
  },
14
+ "scripts": {
15
+ "test": "vitest run src/**/*.test.ts"
16
+ },
14
17
  "files": [
15
18
  "/lib",
16
19
  "/src",
@@ -22,8 +25,5 @@
22
25
  "acorn-jsx": "5.3.2",
23
26
  "acorn-walk": "8.3.4"
24
27
  },
25
- "gitHead": "dbd51d4be547cc60281c10623b9ab00ec632d55d",
26
- "scripts": {
27
- "test": "vitest run src/**/*.test.ts"
28
- }
29
- }
28
+ "gitHead": "07369c92f3faed8f1adfc92b37ff7f8a040cf5e9"
29
+ }
@@ -2,6 +2,7 @@ import { describe, it, expect, vi } from "vitest";
2
2
  import { evaluate, type EvaluateOptions } from "./evaluate.js";
3
3
  import { compile } from "../compile/index.js";
4
4
  import { parse } from "../parse/index.js";
5
+ import { Schema } from "../schema.js";
5
6
 
6
7
  import { EvaluationError } from "./evaluation-error.js";
7
8
 
@@ -11,16 +12,24 @@ type Node = {
11
12
  children: Node[];
12
13
  };
13
14
 
15
+ function createPermissiveSchema(componentNames: string[]): Schema {
16
+ return {
17
+ elements: Object.fromEntries(componentNames.map((name) => [name, {}])),
18
+ };
19
+ }
20
+
14
21
  describe("evaluate", () => {
15
22
  const compileAndEvaluate = (source: string, options: EvaluateOptions = {}): Node => {
16
- return evaluate(compile(parse(source)), options);
23
+ const componentNames = Object.keys(options.components || {});
24
+ const schema = createPermissiveSchema(componentNames);
25
+ return evaluate(compile(parse(source)), schema, options);
17
26
  };
18
27
 
19
28
  it("should evaluate JSX with props", () => {
20
- const TestComponent = (props: any, ...children: any[]): Node => ({
29
+ const TestComponent = (props: any): Node => ({
21
30
  type: "TestComponent",
22
- props,
23
- children,
31
+ props: { x: props.x, y: props.y },
32
+ children: props.children,
24
33
  });
25
34
 
26
35
  const result = compileAndEvaluate("<Test x={data.x} y={data.y}>Hello</Test>", {
@@ -56,9 +65,12 @@ describe("evaluate", () => {
56
65
 
57
66
  it("should throw EvaluationError for unknown component", () => {
58
67
  const compiled = compile(parse("<UnknownComponent>Hello</UnknownComponent>"));
68
+ const emptySchema = createPermissiveSchema([]);
59
69
 
60
- expect(() => evaluate(compiled, { components: {} })).toThrow(EvaluationError);
61
- expect(() => evaluate(compiled, { components: {} })).toThrow('component "UnknownComponent" is not allowed');
70
+ expect(() => evaluate(compiled, emptySchema, { components: {} })).toThrow(EvaluationError);
71
+ expect(() => evaluate(compiled, emptySchema, { components: {} })).toThrow(
72
+ 'component "UnknownComponent" is not allowed'
73
+ );
62
74
  });
63
75
 
64
76
  it("should deep-freeze props to prevent mutations", () => {
@@ -70,8 +82,9 @@ describe("evaluate", () => {
70
82
  };
71
83
 
72
84
  const compiled = compile(parse("<Test>Hello</Test>"));
85
+ const schema = createPermissiveSchema(["Test"]);
73
86
 
74
- evaluate(compiled, {
87
+ evaluate(compiled, schema, {
75
88
  data: { nested: { value: 42 } },
76
89
  components: {
77
90
  Test: TestComponent,
@@ -80,16 +93,16 @@ describe("evaluate", () => {
80
93
  });
81
94
 
82
95
  it("should evaluate nested elements", () => {
83
- const OuterComponent = (props: any, ...children: any[]): Node => ({
96
+ const OuterComponent = (props: any): Node => ({
84
97
  type: "Outer",
85
- props,
86
- children,
98
+ props: { x: props.x },
99
+ children: props.children,
87
100
  });
88
101
 
89
- const InnerComponent = (props: any, ...children: any[]): Node => ({
102
+ const InnerComponent = (props: any): Node => ({
90
103
  type: "Inner",
91
- props,
92
- children,
104
+ props: { y: props.y },
105
+ children: props.children,
93
106
  });
94
107
 
95
108
  const result = compileAndEvaluate("<Outer x={data.x}><Inner y={data.y}>Text</Inner></Outer>", {
@@ -100,11 +113,11 @@ describe("evaluate", () => {
100
113
  },
101
114
  });
102
115
 
103
- expect(result.type).toBe("OuterComponent");
116
+ expect(result.type).toBe("Outer");
104
117
  expect(result.props).toEqual({ x: 10 });
105
118
  expect(result.children).toHaveLength(1);
106
119
  const innerNode = result.children[0] as Node;
107
- expect(innerNode.type).toBe("InnerComponent");
120
+ expect(innerNode.type).toBe("Inner");
108
121
  expect(innerNode.props).toEqual({ y: 20 });
109
122
  expect(innerNode.children).toEqual(["Text"]);
110
123
  });
@@ -169,9 +182,10 @@ describe("evaluate", () => {
169
182
  it("should handle runtime errors gracefully", () => {
170
183
  const compiled = compile(parse("<Test value={data.missing.nested}>Text</Test>"));
171
184
  const TestComponent = (): Node => ({ type: "Test", props: {}, children: [] });
185
+ const schema = createPermissiveSchema(["Test"]);
172
186
 
173
187
  expect(() =>
174
- evaluate(compiled, {
188
+ evaluate(compiled, schema, {
175
189
  data: {},
176
190
  components: {
177
191
  Test: TestComponent,
@@ -198,10 +212,10 @@ describe("evaluate", () => {
198
212
  });
199
213
 
200
214
  it("should flatten and filter children correctly", () => {
201
- const TestComponent = (props: any, ...children: any[]): Node => ({
215
+ const TestComponent = (props: any): Node => ({
202
216
  type: "Test",
203
- props,
204
- children,
217
+ props: {},
218
+ children: props.children,
205
219
  });
206
220
 
207
221
  const result = compileAndEvaluate("<Test>{data.show && 'Visible'}{false}{'Always'}</Test>", {
@@ -226,10 +240,10 @@ describe("evaluate", () => {
226
240
  });
227
241
 
228
242
  it("should handle empty JSX expressions", () => {
229
- const TestComponent = (props: any, ...children: any[]): Node => ({
243
+ const TestComponent = (props: any): Node => ({
230
244
  type: "Test",
231
- props,
232
- children,
245
+ props: {},
246
+ children: props.children,
233
247
  });
234
248
 
235
249
  const result = compileAndEvaluate("<Test>{}{data.value}{}</Test>", {
@@ -300,10 +314,10 @@ describe("evaluate", () => {
300
314
  });
301
315
 
302
316
  it("should handle data access in children", () => {
303
- const TestComponent = (props: any, ...children: any[]): Node => ({
317
+ const TestComponent = (props: any): Node => ({
304
318
  type: "Test",
305
- props,
306
- children,
319
+ props: {},
320
+ children: props.children,
307
321
  });
308
322
 
309
323
  const result = compileAndEvaluate("<Test>Hello {data.name}!</Test>", {
@@ -1,4 +1,5 @@
1
1
  import { EvaluationError } from "./evaluation-error.js";
2
+ import { Schema, isElementAllowed, canHaveChildren } from "../schema.js";
2
3
 
3
4
  export type ComponentDict = Record<string, Component>;
4
5
 
@@ -32,10 +33,10 @@ export interface EvaluateOptions<T = any> {
32
33
  createElement?: CreateElement<T>;
33
34
  }
34
35
 
35
- export function evaluate<T = any>(source: string, options: EvaluateOptions<T>): T {
36
+ export function evaluate<T = any>(source: string, schema: Schema, options: EvaluateOptions<T>): T {
36
37
  const { data = {}, components = {}, createElement } = options;
37
38
 
38
- const h = createH(components, createElement || defaultCreateElement);
39
+ const h = createH(components, createElement || defaultCreateElement, schema);
39
40
 
40
41
  try {
41
42
  // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
@@ -50,11 +51,17 @@ export function evaluate<T = any>(source: string, options: EvaluateOptions<T>):
50
51
  }
51
52
  }
52
53
 
53
- function createH(components: ComponentDict, createElement: CreateElement): H {
54
+ function createH(components: ComponentDict, createElement: CreateElement, schema: Schema): H {
54
55
  return function h(type, props, ...children) {
55
56
  const Component = components[type];
56
57
 
57
58
  if (!Component) {
59
+ if (isElementAllowed(schema, type)) {
60
+ const defaultComponent = (props: PropsDict): any => (canHaveChildren(schema, type) ? props.children : null);
61
+ return createElement(defaultComponent, props, ...children.flat().filter(Boolean));
62
+ }
63
+
64
+ // Component not in schema - throw error
58
65
  throw new EvaluationError(`component "${type}" is not allowed`);
59
66
  }
60
67
 
@@ -73,9 +80,5 @@ function isDataDict(value: any): value is DataDict {
73
80
  }
74
81
 
75
82
  function defaultCreateElement(Component: Component, props: PropsDict = {}, ...children: any[]): Node {
76
- return {
77
- type: Component.name,
78
- props,
79
- children,
80
- };
83
+ return Component({ ...props, children });
81
84
  }
package/src/render.ts CHANGED
@@ -71,5 +71,5 @@ export function render<T = any>(
71
71
  throw AnalysisError.fromReport(report);
72
72
  }
73
73
 
74
- return evaluate(compile(ast), options) as T;
74
+ return evaluate(compile(ast), schema, options) as T;
75
75
  }
@@ -1,11 +0,0 @@
1
- /**
2
- * Generate TypeScript .d.ts declarations for builtin types
3
- * Pure type generation without Monaco dependencies
4
- */
5
- /**
6
- * Generate essential builtin type declarations (Math, String, Array)
7
- * Uses direct declarations (not inside declare global) for better Monaco support
8
- * Dynamically generated from builtins schema
9
- */
10
- export declare function declareBuiltinTypes(): string;
11
- //# sourceMappingURL=builtin-types.d.ts.map