figma-to-code-agent 0.3.0

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 (166) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE +21 -0
  3. package/QUICKSTART.md +198 -0
  4. package/README.md +149 -0
  5. package/dist/FigmaToCodeAgent.d.ts +55 -0
  6. package/dist/FigmaToCodeAgent.d.ts.map +1 -0
  7. package/dist/FigmaToCodeAgent.js +251 -0
  8. package/dist/FigmaToCodeAgent.js.map +1 -0
  9. package/dist/assets/index.d.ts +6 -0
  10. package/dist/assets/index.d.ts.map +1 -0
  11. package/dist/assets/index.js +7 -0
  12. package/dist/assets/index.js.map +1 -0
  13. package/dist/cli.d.ts +3 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +261 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/extraction/FigmaAPIClient.d.ts +53 -0
  18. package/dist/extraction/FigmaAPIClient.d.ts.map +1 -0
  19. package/dist/extraction/FigmaAPIClient.js +275 -0
  20. package/dist/extraction/FigmaAPIClient.js.map +1 -0
  21. package/dist/extraction/FigmaCache.d.ts +28 -0
  22. package/dist/extraction/FigmaCache.d.ts.map +1 -0
  23. package/dist/extraction/FigmaCache.js +120 -0
  24. package/dist/extraction/FigmaCache.js.map +1 -0
  25. package/dist/extraction/MCPClient.d.ts +75 -0
  26. package/dist/extraction/MCPClient.d.ts.map +1 -0
  27. package/dist/extraction/MCPClient.js +254 -0
  28. package/dist/extraction/MCPClient.js.map +1 -0
  29. package/dist/extraction/index.d.ts +9 -0
  30. package/dist/extraction/index.d.ts.map +1 -0
  31. package/dist/extraction/index.js +27 -0
  32. package/dist/extraction/index.js.map +1 -0
  33. package/dist/extraction/types.d.ts +122 -0
  34. package/dist/extraction/types.d.ts.map +1 -0
  35. package/dist/extraction/types.js +6 -0
  36. package/dist/extraction/types.js.map +1 -0
  37. package/dist/generation/AICodeOptimizer.d.ts +10 -0
  38. package/dist/generation/AICodeOptimizer.d.ts.map +1 -0
  39. package/dist/generation/AICodeOptimizer.js +33 -0
  40. package/dist/generation/AICodeOptimizer.js.map +1 -0
  41. package/dist/generation/ReactGenerator.d.ts +27 -0
  42. package/dist/generation/ReactGenerator.d.ts.map +1 -0
  43. package/dist/generation/ReactGenerator.js +423 -0
  44. package/dist/generation/ReactGenerator.js.map +1 -0
  45. package/dist/generation/VueGenerator.d.ts +23 -0
  46. package/dist/generation/VueGenerator.d.ts.map +1 -0
  47. package/dist/generation/VueGenerator.js +337 -0
  48. package/dist/generation/VueGenerator.js.map +1 -0
  49. package/dist/generation/index.d.ts +6 -0
  50. package/dist/generation/index.d.ts.map +1 -0
  51. package/dist/generation/index.js +7 -0
  52. package/dist/generation/index.js.map +1 -0
  53. package/dist/generation/types.d.ts +24 -0
  54. package/dist/generation/types.d.ts.map +1 -0
  55. package/dist/generation/types.js +3 -0
  56. package/dist/generation/types.js.map +1 -0
  57. package/dist/index.d.ts +10 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +17 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/llm/BedrockProvider.d.ts +8 -0
  62. package/dist/llm/BedrockProvider.d.ts.map +1 -0
  63. package/dist/llm/BedrockProvider.js +34 -0
  64. package/dist/llm/BedrockProvider.js.map +1 -0
  65. package/dist/llm/LLMFactory.d.ts +5 -0
  66. package/dist/llm/LLMFactory.d.ts.map +1 -0
  67. package/dist/llm/LLMFactory.js +21 -0
  68. package/dist/llm/LLMFactory.js.map +1 -0
  69. package/dist/llm/OpenAIProvider.d.ts +7 -0
  70. package/dist/llm/OpenAIProvider.d.ts.map +1 -0
  71. package/dist/llm/OpenAIProvider.js +34 -0
  72. package/dist/llm/OpenAIProvider.js.map +1 -0
  73. package/dist/llm/index.d.ts +5 -0
  74. package/dist/llm/index.d.ts.map +1 -0
  75. package/dist/llm/index.js +21 -0
  76. package/dist/llm/index.js.map +1 -0
  77. package/dist/llm/types.d.ts +23 -0
  78. package/dist/llm/types.d.ts.map +1 -0
  79. package/dist/llm/types.js +3 -0
  80. package/dist/llm/types.js.map +1 -0
  81. package/dist/transformation/ASTFactory.d.ts +92 -0
  82. package/dist/transformation/ASTFactory.d.ts.map +1 -0
  83. package/dist/transformation/ASTFactory.js +240 -0
  84. package/dist/transformation/ASTFactory.js.map +1 -0
  85. package/dist/transformation/ASTParser.d.ts +13 -0
  86. package/dist/transformation/ASTParser.d.ts.map +1 -0
  87. package/dist/transformation/ASTParser.js +177 -0
  88. package/dist/transformation/ASTParser.js.map +1 -0
  89. package/dist/transformation/TransformationPipeline.d.ts +31 -0
  90. package/dist/transformation/TransformationPipeline.d.ts.map +1 -0
  91. package/dist/transformation/TransformationPipeline.js +42 -0
  92. package/dist/transformation/TransformationPipeline.js.map +1 -0
  93. package/dist/transformation/index.d.ts +7 -0
  94. package/dist/transformation/index.d.ts.map +1 -0
  95. package/dist/transformation/index.js +25 -0
  96. package/dist/transformation/index.js.map +1 -0
  97. package/dist/transformation/transformers/AIComponentSplitter.d.ts +14 -0
  98. package/dist/transformation/transformers/AIComponentSplitter.d.ts.map +1 -0
  99. package/dist/transformation/transformers/AIComponentSplitter.js +71 -0
  100. package/dist/transformation/transformers/AIComponentSplitter.js.map +1 -0
  101. package/dist/transformation/transformers/AILayoutAnalyzer.d.ts +18 -0
  102. package/dist/transformation/transformers/AILayoutAnalyzer.d.ts.map +1 -0
  103. package/dist/transformation/transformers/AILayoutAnalyzer.js +125 -0
  104. package/dist/transformation/transformers/AILayoutAnalyzer.js.map +1 -0
  105. package/dist/transformation/transformers/AISemanticNamer.d.ts +12 -0
  106. package/dist/transformation/transformers/AISemanticNamer.d.ts.map +1 -0
  107. package/dist/transformation/transformers/AISemanticNamer.js +50 -0
  108. package/dist/transformation/transformers/AISemanticNamer.js.map +1 -0
  109. package/dist/transformation/transformers/ComponentExtractor.d.ts +16 -0
  110. package/dist/transformation/transformers/ComponentExtractor.d.ts.map +1 -0
  111. package/dist/transformation/transformers/ComponentExtractor.js +91 -0
  112. package/dist/transformation/transformers/ComponentExtractor.js.map +1 -0
  113. package/dist/transformation/transformers/FigmaLayerPreserver.d.ts +14 -0
  114. package/dist/transformation/transformers/FigmaLayerPreserver.d.ts.map +1 -0
  115. package/dist/transformation/transformers/FigmaLayerPreserver.js +48 -0
  116. package/dist/transformation/transformers/FigmaLayerPreserver.js.map +1 -0
  117. package/dist/transformation/transformers/FigmaStructureOptimizer.d.ts +16 -0
  118. package/dist/transformation/transformers/FigmaStructureOptimizer.d.ts.map +1 -0
  119. package/dist/transformation/transformers/FigmaStructureOptimizer.js +65 -0
  120. package/dist/transformation/transformers/FigmaStructureOptimizer.js.map +1 -0
  121. package/dist/transformation/transformers/FlattenTransformer.d.ts +15 -0
  122. package/dist/transformation/transformers/FlattenTransformer.d.ts.map +1 -0
  123. package/dist/transformation/transformers/FlattenTransformer.js +69 -0
  124. package/dist/transformation/transformers/FlattenTransformer.js.map +1 -0
  125. package/dist/transformation/transformers/LayoutOptimizer.d.ts +15 -0
  126. package/dist/transformation/transformers/LayoutOptimizer.d.ts.map +1 -0
  127. package/dist/transformation/transformers/LayoutOptimizer.js +63 -0
  128. package/dist/transformation/transformers/LayoutOptimizer.js.map +1 -0
  129. package/dist/transformation/transformers/SemanticNamer.d.ts +14 -0
  130. package/dist/transformation/transformers/SemanticNamer.d.ts.map +1 -0
  131. package/dist/transformation/transformers/SemanticNamer.js +65 -0
  132. package/dist/transformation/transformers/SemanticNamer.js.map +1 -0
  133. package/dist/transformation/transformers/SimplifyTransformer.d.ts +23 -0
  134. package/dist/transformation/transformers/SimplifyTransformer.d.ts.map +1 -0
  135. package/dist/transformation/transformers/SimplifyTransformer.js +138 -0
  136. package/dist/transformation/transformers/SimplifyTransformer.js.map +1 -0
  137. package/dist/transformation/types.d.ts +129 -0
  138. package/dist/transformation/types.d.ts.map +1 -0
  139. package/dist/transformation/types.js +7 -0
  140. package/dist/transformation/types.js.map +1 -0
  141. package/dist/validation/index.d.ts +6 -0
  142. package/dist/validation/index.d.ts.map +1 -0
  143. package/dist/validation/index.js +7 -0
  144. package/dist/validation/index.js.map +1 -0
  145. package/package.json +81 -0
  146. package/test-app/test-react/index.html +19 -0
  147. package/test-app/test-react/package.json +16 -0
  148. package/test-app/test-react/src/Component.jsx +146 -0
  149. package/test-app/test-react/src/Component.module.css +572 -0
  150. package/test-app/test-react/src/Homepage.jsx +53 -0
  151. package/test-app/test-react/src/Homepage.module.css +218 -0
  152. package/test-app/test-react/src/ProductPage.jsx +74 -0
  153. package/test-app/test-react/src/ProductPage.module.css +357 -0
  154. package/test-app/test-react/src/ShoppingCart.jsx +151 -0
  155. package/test-app/test-react/src/ShoppingCart.module.css +739 -0
  156. package/test-app/test-react/src/main.jsx +9 -0
  157. package/test-app/test-react/vite.config.js +6 -0
  158. package/test-app/test-vue/index.html +19 -0
  159. package/test-app/test-vue/package.json +15 -0
  160. package/test-app/test-vue/src/App.vue +16 -0
  161. package/test-app/test-vue/src/Component.vue +723 -0
  162. package/test-app/test-vue/src/Homepage.vue +271 -0
  163. package/test-app/test-vue/src/ProductPage.vue +431 -0
  164. package/test-app/test-vue/src/ShoppingCart.vue +890 -0
  165. package/test-app/test-vue/src/main.js +4 -0
  166. package/test-app/test-vue/vite.config.js +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FigmaStructureOptimizer.js","sourceRoot":"","sources":["../../../src/transformation/transformers/FigmaStructureOptimizer.ts"],"names":[],"mappings":";;;AAGA;;;;;GAKG;AACH,MAAa,uBAAuB;IAApC;QACE,SAAI,GAAG,2BAA2B,CAAC;IAoDrC,CAAC;IAlDC,SAAS,CAAC,IAAa;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,iCAAiC;QACjC,OAAO,SAAS,IAAI,IAAI,CAAC;IAC3B,CAAC;IAEO,YAAY,CAAC,IAAa;QAChC,yBAAyB;QACzB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gCAAgC;QAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ;aACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aACxC,MAAM,CAAC,CAAC,KAAK,EAAoB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAEvD,oDAAoD;QACpD,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,GAAG,IAAI;YACP,QAAQ,EAAE,iBAAiB;SAC5B,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,IAAa;QAC/B,iCAAiC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/E,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB,CAAC,IAAa,EAAE,QAAmB;QACzD,+BAA+B;QAC/B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtC,oCAAoC;QACpC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAE5E,wCAAwC;QACxC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAEhE,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AArDD,0DAqDC"}
@@ -0,0 +1,15 @@
1
+ import type { ASTNode } from '../types';
2
+ import type { Transformer } from '../TransformationPipeline';
3
+ /**
4
+ * Flatten unnecessary nesting in the AST
5
+ * Removes single-child containers that don't add semantic value
6
+ */
7
+ export declare class FlattenTransformer implements Transformer {
8
+ name: string;
9
+ transform(node: ASTNode): ASTNode;
10
+ private flattenNode;
11
+ private canFlatten;
12
+ private hasMeaningfulStyles;
13
+ private hasMeaningfulLayout;
14
+ }
15
+ //# sourceMappingURL=FlattenTransformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlattenTransformer.d.ts","sourceRoot":"","sources":["../../../src/transformation/transformers/FlattenTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,IAAI,SAAa;IAEjB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAIjC,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;CAS5B"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlattenTransformer = void 0;
4
+ /**
5
+ * Flatten unnecessary nesting in the AST
6
+ * Removes single-child containers that don't add semantic value
7
+ */
8
+ class FlattenTransformer {
9
+ constructor() {
10
+ this.name = 'flatten';
11
+ }
12
+ transform(node) {
13
+ return this.flattenNode(node);
14
+ }
15
+ flattenNode(node) {
16
+ // First, recursively flatten children
17
+ const flattenedChildren = node.children.map((child) => this.flattenNode(child));
18
+ // Check if this node can be flattened
19
+ if (this.canFlatten(node, flattenedChildren)) {
20
+ // Return the single child, but preserve parent reference
21
+ const child = flattenedChildren[0];
22
+ return {
23
+ ...child,
24
+ parent: node.parent,
25
+ };
26
+ }
27
+ // Return node with flattened children
28
+ return {
29
+ ...node,
30
+ children: flattenedChildren,
31
+ };
32
+ }
33
+ canFlatten(node, children) {
34
+ // Don't flatten if not a container
35
+ if (node.type !== 'Container') {
36
+ return false;
37
+ }
38
+ // Don't flatten if has multiple children
39
+ if (children.length !== 1) {
40
+ return false;
41
+ }
42
+ // Don't flatten if has meaningful styles
43
+ if (this.hasMeaningfulStyles(node)) {
44
+ return false;
45
+ }
46
+ // Don't flatten if has meaningful layout properties
47
+ if (this.hasMeaningfulLayout(node)) {
48
+ return false;
49
+ }
50
+ return true;
51
+ }
52
+ hasMeaningfulStyles(node) {
53
+ const { styles } = node;
54
+ return !!(styles.backgroundColor ||
55
+ styles.border ||
56
+ styles.borderRadius ||
57
+ (styles.boxShadow && styles.boxShadow.length > 0) ||
58
+ (styles.opacity !== undefined && styles.opacity < 1));
59
+ }
60
+ hasMeaningfulLayout(node) {
61
+ const { layout } = node;
62
+ return !!(layout.padding ||
63
+ layout.margin ||
64
+ (layout.display === 'flex' &&
65
+ (layout.flexDirection || layout.justifyContent || layout.alignItems || layout.gap)));
66
+ }
67
+ }
68
+ exports.FlattenTransformer = FlattenTransformer;
69
+ //# sourceMappingURL=FlattenTransformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlattenTransformer.js","sourceRoot":"","sources":["../../../src/transformation/transformers/FlattenTransformer.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,kBAAkB;IAA/B;QACE,SAAI,GAAG,SAAS,CAAC;IAuEnB,CAAC;IArEC,SAAS,CAAC,IAAa;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEO,WAAW,CAAC,IAAa;QAC/B,sCAAsC;QACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAEhF,sCAAsC;QACtC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAC7C,yDAAyD;YACzD,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,OAAO;YACL,GAAG,IAAI;YACP,QAAQ,EAAE,iBAAiB;SAC5B,CAAC;IACJ,CAAC;IAEO,UAAU,CAAC,IAAa,EAAE,QAAmB;QACnD,mCAAmC;QACnC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yCAAyC;QACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oDAAoD;QACpD,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB,CAAC,IAAa;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,OAAO,CAAC,CAAC,CACP,MAAM,CAAC,eAAe;YACtB,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,YAAY;YACnB,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,IAAa;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,OAAO,CAAC,CAAC,CACP,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,MAAM;YACb,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM;gBACxB,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CACtF,CAAC;IACJ,CAAC;CACF;AAxED,gDAwEC"}
@@ -0,0 +1,15 @@
1
+ import type { ASTNode } from '../types';
2
+ import type { Transformer } from '../TransformationPipeline';
3
+ /**
4
+ * Optimize layout properties for better CSS generation
5
+ */
6
+ export declare class LayoutOptimizer implements Transformer {
7
+ name: string;
8
+ transform(node: ASTNode): ASTNode;
9
+ private optimizeNode;
10
+ private canConvertToFlex;
11
+ private isAlignedHorizontally;
12
+ private isAlignedVertically;
13
+ private inferFlexDirection;
14
+ }
15
+ //# sourceMappingURL=LayoutOptimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutOptimizer.d.ts","sourceRoot":"","sources":["../../../src/transformation/transformers/LayoutOptimizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,IAAI,SAAsB;IAE1B,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAIjC,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,kBAAkB;CAI3B"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LayoutOptimizer = void 0;
4
+ /**
5
+ * Optimize layout properties for better CSS generation
6
+ */
7
+ class LayoutOptimizer {
8
+ constructor() {
9
+ this.name = 'layout-optimizer';
10
+ }
11
+ transform(node) {
12
+ return this.optimizeNode(node);
13
+ }
14
+ optimizeNode(node) {
15
+ const optimizedLayout = { ...node.layout };
16
+ // Convert absolute positioning to flex when appropriate
17
+ if (optimizedLayout.display === 'absolute' && this.canConvertToFlex(node)) {
18
+ optimizedLayout.display = 'flex';
19
+ optimizedLayout.flexDirection = this.inferFlexDirection(node);
20
+ }
21
+ // Simplify uniform padding
22
+ if (optimizedLayout.padding) {
23
+ const { top, right, bottom, left } = optimizedLayout.padding;
24
+ if (top === right && right === bottom && bottom === left) {
25
+ optimizedLayout.padding = { top, right, bottom, left };
26
+ }
27
+ }
28
+ return {
29
+ ...node,
30
+ layout: optimizedLayout,
31
+ children: node.children.map((child) => this.optimizeNode(child)),
32
+ };
33
+ }
34
+ canConvertToFlex(node) {
35
+ if (node.children.length < 2)
36
+ return false;
37
+ // Check if children are aligned in a row or column
38
+ const positions = node.children.map((child) => child.layout.position);
39
+ const isRow = this.isAlignedHorizontally(positions);
40
+ const isColumn = this.isAlignedVertically(positions);
41
+ return isRow || isColumn;
42
+ }
43
+ isAlignedHorizontally(positions) {
44
+ if (positions.length < 2)
45
+ return false;
46
+ const yValues = positions.map((p) => p.y);
47
+ const avgY = yValues.reduce((a, b) => a + b, 0) / yValues.length;
48
+ return yValues.every((y) => Math.abs(y - avgY) < 10);
49
+ }
50
+ isAlignedVertically(positions) {
51
+ if (positions.length < 2)
52
+ return false;
53
+ const xValues = positions.map((p) => p.x);
54
+ const avgX = xValues.reduce((a, b) => a + b, 0) / xValues.length;
55
+ return xValues.every((x) => Math.abs(x - avgX) < 10);
56
+ }
57
+ inferFlexDirection(node) {
58
+ const positions = node.children.map((child) => child.layout.position);
59
+ return this.isAlignedHorizontally(positions) ? 'row' : 'column';
60
+ }
61
+ }
62
+ exports.LayoutOptimizer = LayoutOptimizer;
63
+ //# sourceMappingURL=LayoutOptimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutOptimizer.js","sourceRoot":"","sources":["../../../src/transformation/transformers/LayoutOptimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ASTNode } from '../types';
2
+ import type { Transformer } from '../TransformationPipeline';
3
+ /**
4
+ * Generate semantic names for components
5
+ */
6
+ export declare class SemanticNamer implements Transformer {
7
+ name: string;
8
+ transform(node: ASTNode): ASTNode;
9
+ private renameNode;
10
+ private generateSemanticName;
11
+ private isMeaningfulName;
12
+ private toCamelCase;
13
+ }
14
+ //# sourceMappingURL=SemanticNamer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticNamer.d.ts","sourceRoot":"","sources":["../../../src/transformation/transformers/SemanticNamer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;GAEG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,IAAI,SAAoB;IAExB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAIjC,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,WAAW;CAGpB"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SemanticNamer = void 0;
4
+ /**
5
+ * Generate semantic names for components
6
+ */
7
+ class SemanticNamer {
8
+ constructor() {
9
+ this.name = 'semantic-namer';
10
+ }
11
+ transform(node) {
12
+ return this.renameNode(node);
13
+ }
14
+ renameNode(node) {
15
+ const semanticName = this.generateSemanticName(node);
16
+ return {
17
+ ...node,
18
+ name: semanticName,
19
+ children: node.children.map((child) => this.renameNode(child)),
20
+ };
21
+ }
22
+ generateSemanticName(node) {
23
+ // Text nodes: use a short descriptive name, not the full text content
24
+ if (node.type === 'Text') {
25
+ // Take first few words of the text content or node name for a short label
26
+ const text = node.metadata.textContent || node.name || 'text';
27
+ const words = text
28
+ .replace(/[^a-zA-Z0-9\s]/g, '')
29
+ .trim()
30
+ .split(/\s+/)
31
+ .slice(0, 3)
32
+ .join(' ');
33
+ return words ? this.toCamelCase(words) : 'text';
34
+ }
35
+ if (node.type === 'Image') {
36
+ // Shorten image names
37
+ const name = node.name || 'image';
38
+ const short = name
39
+ .split(/[\s_-]+/)
40
+ .slice(0, 3)
41
+ .join(' ');
42
+ return this.toCamelCase(short) || 'image';
43
+ }
44
+ // Keep existing meaningful names
45
+ if (this.isMeaningfulName(node.name)) {
46
+ return this.toCamelCase(node.name);
47
+ }
48
+ if (node.type === 'Component' && node.metadata.componentName) {
49
+ return this.toCamelCase(node.metadata.componentName);
50
+ }
51
+ if (node.layout.display === 'flex') {
52
+ return node.layout.flexDirection === 'row' ? 'row' : 'column';
53
+ }
54
+ return 'container';
55
+ }
56
+ isMeaningfulName(name) {
57
+ const genericNames = ['frame', 'group', 'container', 'rectangle', 'ellipse', 'vector'];
58
+ return !genericNames.includes(name.toLowerCase());
59
+ }
60
+ toCamelCase(str) {
61
+ return str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase());
62
+ }
63
+ }
64
+ exports.SemanticNamer = SemanticNamer;
65
+ //# sourceMappingURL=SemanticNamer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticNamer.js","sourceRoot":"","sources":["../../../src/transformation/transformers/SemanticNamer.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,aAAa;IAA1B;QACE,SAAI,GAAG,gBAAgB,CAAC;IAgE1B,CAAC;IA9DC,SAAS,CAAC,IAAa;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEO,UAAU,CAAC,IAAa;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAErD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC/D,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,IAAa;QACxC,sEAAsE;QACtE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,0EAA0E;YAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;YAC9D,MAAM,KAAK,GAAG,IAAI;iBACf,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;iBAC9B,IAAI,EAAE;iBACN,KAAK,CAAC,KAAK,CAAC;iBACZ,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,sBAAsB;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI;iBACf,KAAK,CAAC,SAAS,CAAC;iBAChB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;QAC5C,CAAC;QAED,iCAAiC;QACjC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChE,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,gBAAgB,CAAC,IAAY;QACnC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvF,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACvF,CAAC;CACF;AAjED,sCAiEC"}
@@ -0,0 +1,23 @@
1
+ import type { ASTNode } from '../types';
2
+ import type { Transformer } from '../TransformationPipeline';
3
+ /**
4
+ * Aggressively simplify the AST by:
5
+ * 1. Removing empty/invisible nodes
6
+ * 2. Merging single-child containers
7
+ * 3. Converting decorative shapes to CSS
8
+ * 4. Flattening unnecessary nesting
9
+ */
10
+ export declare class SimplifyTransformer implements Transformer {
11
+ name: string;
12
+ transform(node: ASTNode): ASTNode;
13
+ private simplifyNode;
14
+ private isInvisible;
15
+ private isEmptyContainer;
16
+ private shouldMergeWithChild;
17
+ private hasImportantStyles;
18
+ private hasImportantLayout;
19
+ private flattenSameTypeChildren;
20
+ private mergeStyles;
21
+ private mergeLayout;
22
+ }
23
+ //# sourceMappingURL=SimplifyTransformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimplifyTransformer.d.ts","sourceRoot":"","sources":["../../../src/transformation/transformers/SimplifyTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;;;;;GAMG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,IAAI,SAAc;IAElB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAIjC,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimplifyTransformer = void 0;
4
+ /**
5
+ * Aggressively simplify the AST by:
6
+ * 1. Removing empty/invisible nodes
7
+ * 2. Merging single-child containers
8
+ * 3. Converting decorative shapes to CSS
9
+ * 4. Flattening unnecessary nesting
10
+ */
11
+ class SimplifyTransformer {
12
+ constructor() {
13
+ this.name = 'simplify';
14
+ }
15
+ transform(node) {
16
+ return this.simplifyNode(node);
17
+ }
18
+ simplifyNode(node) {
19
+ // Remove invisible nodes
20
+ if (this.isInvisible(node)) {
21
+ return null;
22
+ }
23
+ // Recursively simplify children and filter out nulls
24
+ let children = node.children
25
+ .map((child) => this.simplifyNode(child))
26
+ .filter((child) => child !== null);
27
+ // Remove empty containers
28
+ if (this.isEmptyContainer(node, children)) {
29
+ return null;
30
+ }
31
+ // Merge single-child containers without meaningful properties
32
+ if (this.shouldMergeWithChild(node, children)) {
33
+ const child = children[0];
34
+ // Merge styles and layout from parent to child
35
+ return {
36
+ ...child,
37
+ styles: this.mergeStyles(node.styles, child.styles),
38
+ layout: this.mergeLayout(node.layout, child.layout),
39
+ parent: node.parent,
40
+ };
41
+ }
42
+ // Flatten children with same type
43
+ children = this.flattenSameTypeChildren(node, children);
44
+ return {
45
+ ...node,
46
+ children,
47
+ };
48
+ }
49
+ isInvisible(node) {
50
+ // Check if node is invisible
51
+ if (node.styles.opacity === 0)
52
+ return true;
53
+ // Check if node has zero size
54
+ if (node.layout.size.width === 0 || node.layout.size.height === 0) {
55
+ return true;
56
+ }
57
+ return false;
58
+ }
59
+ isEmptyContainer(node, children) {
60
+ if (node.type !== 'Container')
61
+ return false;
62
+ if (children.length > 0)
63
+ return false;
64
+ // Keep if has background or border
65
+ if (node.styles.backgroundColor || node.styles.border)
66
+ return false;
67
+ return true;
68
+ }
69
+ shouldMergeWithChild(node, children) {
70
+ // Only merge containers with single child
71
+ if (node.type !== 'Container' || children.length !== 1) {
72
+ return false;
73
+ }
74
+ const child = children[0];
75
+ // Don't merge if parent has important visual styles
76
+ if (this.hasImportantStyles(node)) {
77
+ return false;
78
+ }
79
+ // Don't merge if parent has important layout
80
+ if (this.hasImportantLayout(node)) {
81
+ return false;
82
+ }
83
+ // Don't merge different semantic types
84
+ if (node.metadata.componentName || child.metadata.componentName) {
85
+ return false;
86
+ }
87
+ return true;
88
+ }
89
+ hasImportantStyles(node) {
90
+ const { styles } = node;
91
+ return !!(styles.backgroundColor ||
92
+ styles.border ||
93
+ styles.borderRadius ||
94
+ (styles.boxShadow && styles.boxShadow.length > 0));
95
+ }
96
+ hasImportantLayout(node) {
97
+ const { layout } = node;
98
+ return !!(layout.padding || layout.margin || layout.gap || layout.display === 'grid');
99
+ }
100
+ flattenSameTypeChildren(node, children) {
101
+ // If node is a flex container, flatten child flex containers with same direction
102
+ if (node.layout.display === 'flex') {
103
+ const flattened = [];
104
+ for (const child of children) {
105
+ if (child.type === 'Container' &&
106
+ child.layout.display === 'flex' &&
107
+ child.layout.flexDirection === node.layout.flexDirection &&
108
+ !this.hasImportantStyles(child) &&
109
+ !child.layout.padding &&
110
+ !child.layout.margin) {
111
+ // Flatten this child's children into parent
112
+ flattened.push(...child.children);
113
+ }
114
+ else {
115
+ flattened.push(child);
116
+ }
117
+ }
118
+ return flattened;
119
+ }
120
+ return children;
121
+ }
122
+ mergeStyles(parent, child) {
123
+ return {
124
+ ...parent,
125
+ ...child,
126
+ // Child styles take precedence
127
+ };
128
+ }
129
+ mergeLayout(parent, child) {
130
+ return {
131
+ ...parent,
132
+ ...child,
133
+ // Child layout takes precedence
134
+ };
135
+ }
136
+ }
137
+ exports.SimplifyTransformer = SimplifyTransformer;
138
+ //# sourceMappingURL=SimplifyTransformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimplifyTransformer.js","sourceRoot":"","sources":["../../../src/transformation/transformers/SimplifyTransformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Core data structures for AST representation
3
+ * These types define the fundamental building blocks for the Abstract Syntax Tree
4
+ */
5
+ /**
6
+ * 2D position coordinates
7
+ */
8
+ export interface Position {
9
+ x: number;
10
+ y: number;
11
+ }
12
+ /**
13
+ * Size dimensions
14
+ */
15
+ export interface Size {
16
+ width: number;
17
+ height: number;
18
+ }
19
+ /**
20
+ * Rectangle combining position and size
21
+ */
22
+ export interface Rectangle extends Position, Size {
23
+ }
24
+ /**
25
+ * RGBA color representation
26
+ */
27
+ export interface Color {
28
+ r: number;
29
+ g: number;
30
+ b: number;
31
+ a: number;
32
+ }
33
+ /**
34
+ * Spacing for padding/margin (box model)
35
+ */
36
+ export interface Spacing {
37
+ top: number;
38
+ right: number;
39
+ bottom: number;
40
+ left: number;
41
+ }
42
+ /**
43
+ * Border style definition
44
+ */
45
+ export interface Border {
46
+ width: number;
47
+ style: 'solid' | 'dashed' | 'dotted';
48
+ color: Color;
49
+ }
50
+ /**
51
+ * Shadow effect (drop shadow or inner shadow)
52
+ */
53
+ export interface Shadow {
54
+ type: 'drop-shadow' | 'inner-shadow';
55
+ offsetX: number;
56
+ offsetY: number;
57
+ blur: number;
58
+ spread: number;
59
+ color: Color;
60
+ }
61
+ /**
62
+ * Typography style definition
63
+ */
64
+ export interface Typography {
65
+ fontFamily: string;
66
+ fontSize: number;
67
+ fontWeight: number;
68
+ lineHeight: number;
69
+ letterSpacing?: number;
70
+ textAlign?: 'left' | 'center' | 'right' | 'justify';
71
+ textDecoration?: 'none' | 'underline' | 'line-through';
72
+ textTransform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';
73
+ }
74
+ /**
75
+ * Layout information for AST nodes
76
+ */
77
+ export interface LayoutInfo {
78
+ display: 'flex' | 'grid' | 'block' | 'inline' | 'absolute';
79
+ position: Position;
80
+ size: Size;
81
+ flexDirection?: 'row' | 'column';
82
+ justifyContent?: string;
83
+ alignItems?: string;
84
+ gap?: number;
85
+ padding?: Spacing;
86
+ margin?: Spacing;
87
+ }
88
+ /**
89
+ * Style information for AST nodes
90
+ */
91
+ export interface StyleInfo {
92
+ backgroundColor?: Color;
93
+ borderRadius?: number | number[];
94
+ border?: Border;
95
+ boxShadow?: Shadow[];
96
+ opacity?: number;
97
+ typography?: Typography;
98
+ }
99
+ /**
100
+ * Metadata about the original Figma node
101
+ */
102
+ export interface NodeMetadata {
103
+ figmaId: string;
104
+ figmaType: string;
105
+ isComponent: boolean;
106
+ componentName?: string;
107
+ exportable: boolean;
108
+ textContent?: string;
109
+ imageRef?: string;
110
+ }
111
+ /**
112
+ * AST node types
113
+ */
114
+ export type ASTNodeType = 'Root' | 'Page' | 'Container' | 'Component' | 'Text' | 'Image' | 'Shape';
115
+ /**
116
+ * Core AST node structure
117
+ * Represents a single node in the abstract syntax tree
118
+ */
119
+ export interface ASTNode {
120
+ id: string;
121
+ type: ASTNodeType;
122
+ name: string;
123
+ children: ASTNode[];
124
+ parent?: ASTNode;
125
+ layout: LayoutInfo;
126
+ styles: StyleInfo;
127
+ metadata: NodeMetadata;
128
+ }
129
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transformation/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Core data structures for AST representation
4
+ * These types define the fundamental building blocks for the Abstract Syntax Tree
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/transformation/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Validation Layer
3
+ * Ensures generated code matches original design
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Validation Layer
4
+ * Ensures generated code matches original design
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":";AAAA;;;GAGG"}