@carlonicora/nextjs-jsonapi 1.2.0 → 1.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 (202) hide show
  1. package/dist/scripts/generate-web-module/generator.d.ts +15 -0
  2. package/dist/scripts/generate-web-module/generator.d.ts.map +1 -0
  3. package/dist/scripts/generate-web-module/generator.js +320 -0
  4. package/dist/scripts/generate-web-module/generator.js.map +1 -0
  5. package/dist/scripts/generate-web-module/index.d.ts +16 -0
  6. package/dist/scripts/generate-web-module/index.d.ts.map +1 -0
  7. package/dist/scripts/generate-web-module/index.js +80 -0
  8. package/dist/scripts/generate-web-module/index.js.map +1 -0
  9. package/dist/scripts/generate-web-module/templates/components/container.template.d.ts +14 -0
  10. package/dist/scripts/generate-web-module/templates/components/container.template.d.ts.map +1 -0
  11. package/dist/scripts/generate-web-module/templates/components/container.template.js +124 -0
  12. package/dist/scripts/generate-web-module/templates/components/container.template.js.map +1 -0
  13. package/dist/scripts/generate-web-module/templates/components/content.template.d.ts +15 -0
  14. package/dist/scripts/generate-web-module/templates/components/content.template.d.ts.map +1 -0
  15. package/dist/scripts/generate-web-module/templates/components/content.template.js +39 -0
  16. package/dist/scripts/generate-web-module/templates/components/content.template.js.map +1 -0
  17. package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts +14 -0
  18. package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts.map +1 -0
  19. package/dist/scripts/generate-web-module/templates/components/deleter.template.js +51 -0
  20. package/dist/scripts/generate-web-module/templates/components/deleter.template.js.map +1 -0
  21. package/dist/scripts/generate-web-module/templates/components/details.template.d.ts +14 -0
  22. package/dist/scripts/generate-web-module/templates/components/details.template.d.ts.map +1 -0
  23. package/dist/scripts/generate-web-module/templates/components/details.template.js +109 -0
  24. package/dist/scripts/generate-web-module/templates/components/details.template.js.map +1 -0
  25. package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts +14 -0
  26. package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts.map +1 -0
  27. package/dist/scripts/generate-web-module/templates/components/editor.template.js +459 -0
  28. package/dist/scripts/generate-web-module/templates/components/editor.template.js.map +1 -0
  29. package/dist/scripts/generate-web-module/templates/components/index.d.ts +15 -0
  30. package/dist/scripts/generate-web-module/templates/components/index.d.ts.map +1 -0
  31. package/dist/scripts/generate-web-module/templates/components/index.js +29 -0
  32. package/dist/scripts/generate-web-module/templates/components/index.js.map +1 -0
  33. package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts +14 -0
  34. package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts.map +1 -0
  35. package/dist/scripts/generate-web-module/templates/components/list-container.template.js +30 -0
  36. package/dist/scripts/generate-web-module/templates/components/list-container.template.js.map +1 -0
  37. package/dist/scripts/generate-web-module/templates/components/list.template.d.ts +14 -0
  38. package/dist/scripts/generate-web-module/templates/components/list.template.d.ts.map +1 -0
  39. package/dist/scripts/generate-web-module/templates/components/list.template.js +84 -0
  40. package/dist/scripts/generate-web-module/templates/components/list.template.js.map +1 -0
  41. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts +14 -0
  42. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts.map +1 -0
  43. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js +184 -0
  44. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js.map +1 -0
  45. package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts +14 -0
  46. package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts.map +1 -0
  47. package/dist/scripts/generate-web-module/templates/components/selector.template.js +199 -0
  48. package/dist/scripts/generate-web-module/templates/components/selector.template.js.map +1 -0
  49. package/dist/scripts/generate-web-module/templates/context.template.d.ts +14 -0
  50. package/dist/scripts/generate-web-module/templates/context.template.d.ts.map +1 -0
  51. package/dist/scripts/generate-web-module/templates/context.template.js +121 -0
  52. package/dist/scripts/generate-web-module/templates/context.template.js.map +1 -0
  53. package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts +14 -0
  54. package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts.map +1 -0
  55. package/dist/scripts/generate-web-module/templates/data/fields.template.js +55 -0
  56. package/dist/scripts/generate-web-module/templates/data/fields.template.js.map +1 -0
  57. package/dist/scripts/generate-web-module/templates/data/index.d.ts +10 -0
  58. package/dist/scripts/generate-web-module/templates/data/index.d.ts.map +1 -0
  59. package/dist/scripts/generate-web-module/templates/data/index.js +26 -0
  60. package/dist/scripts/generate-web-module/templates/data/index.js.map +1 -0
  61. package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts +14 -0
  62. package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts.map +1 -0
  63. package/dist/scripts/generate-web-module/templates/data/interface.template.js +116 -0
  64. package/dist/scripts/generate-web-module/templates/data/interface.template.js.map +1 -0
  65. package/dist/scripts/generate-web-module/templates/data/model.template.d.ts +14 -0
  66. package/dist/scripts/generate-web-module/templates/data/model.template.d.ts.map +1 -0
  67. package/dist/scripts/generate-web-module/templates/data/model.template.js +274 -0
  68. package/dist/scripts/generate-web-module/templates/data/model.template.js.map +1 -0
  69. package/dist/scripts/generate-web-module/templates/data/service.template.d.ts +14 -0
  70. package/dist/scripts/generate-web-module/templates/data/service.template.d.ts.map +1 -0
  71. package/dist/scripts/generate-web-module/templates/data/service.template.js +168 -0
  72. package/dist/scripts/generate-web-module/templates/data/service.template.js.map +1 -0
  73. package/dist/scripts/generate-web-module/templates/index.d.ts +12 -0
  74. package/dist/scripts/generate-web-module/templates/index.d.ts.map +1 -0
  75. package/dist/scripts/generate-web-module/templates/index.js +37 -0
  76. package/dist/scripts/generate-web-module/templates/index.js.map +1 -0
  77. package/dist/scripts/generate-web-module/templates/module.template.d.ts +14 -0
  78. package/dist/scripts/generate-web-module/templates/module.template.d.ts.map +1 -0
  79. package/dist/scripts/generate-web-module/templates/module.template.js +64 -0
  80. package/dist/scripts/generate-web-module/templates/module.template.js.map +1 -0
  81. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts +14 -0
  82. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts.map +1 -0
  83. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js +65 -0
  84. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js.map +1 -0
  85. package/dist/scripts/generate-web-module/templates/pages/index.d.ts +8 -0
  86. package/dist/scripts/generate-web-module/templates/pages/index.d.ts.map +1 -0
  87. package/dist/scripts/generate-web-module/templates/pages/index.js +13 -0
  88. package/dist/scripts/generate-web-module/templates/pages/index.js.map +1 -0
  89. package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts +14 -0
  90. package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts.map +1 -0
  91. package/dist/scripts/generate-web-module/templates/pages/list-page.template.js +37 -0
  92. package/dist/scripts/generate-web-module/templates/pages/list-page.template.js.map +1 -0
  93. package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts +14 -0
  94. package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts.map +1 -0
  95. package/dist/scripts/generate-web-module/templates/table-hook.template.js +174 -0
  96. package/dist/scripts/generate-web-module/templates/table-hook.template.js.map +1 -0
  97. package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts +55 -0
  98. package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts.map +1 -0
  99. package/dist/scripts/generate-web-module/transformers/field-mapper.js +179 -0
  100. package/dist/scripts/generate-web-module/transformers/field-mapper.js.map +1 -0
  101. package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts +78 -0
  102. package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts.map +1 -0
  103. package/dist/scripts/generate-web-module/transformers/i18n-generator.js +182 -0
  104. package/dist/scripts/generate-web-module/transformers/i18n-generator.js.map +1 -0
  105. package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts +106 -0
  106. package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts.map +1 -0
  107. package/dist/scripts/generate-web-module/transformers/import-resolver.js +193 -0
  108. package/dist/scripts/generate-web-module/transformers/import-resolver.js.map +1 -0
  109. package/dist/scripts/generate-web-module/transformers/index.d.ts +12 -0
  110. package/dist/scripts/generate-web-module/transformers/index.d.ts.map +1 -0
  111. package/dist/scripts/generate-web-module/transformers/index.js +28 -0
  112. package/dist/scripts/generate-web-module/transformers/index.js.map +1 -0
  113. package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts +60 -0
  114. package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts.map +1 -0
  115. package/dist/scripts/generate-web-module/transformers/name-transformer.js +115 -0
  116. package/dist/scripts/generate-web-module/transformers/name-transformer.js.map +1 -0
  117. package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts +57 -0
  118. package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts.map +1 -0
  119. package/dist/scripts/generate-web-module/transformers/parent-detector.js +88 -0
  120. package/dist/scripts/generate-web-module/transformers/parent-detector.js.map +1 -0
  121. package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts +68 -0
  122. package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts.map +1 -0
  123. package/dist/scripts/generate-web-module/transformers/relationship-resolver.js +219 -0
  124. package/dist/scripts/generate-web-module/transformers/relationship-resolver.js.map +1 -0
  125. package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts +68 -0
  126. package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts.map +1 -0
  127. package/dist/scripts/generate-web-module/types/field-mapping.types.js +129 -0
  128. package/dist/scripts/generate-web-module/types/field-mapping.types.js.map +1 -0
  129. package/dist/scripts/generate-web-module/types/index.d.ts +9 -0
  130. package/dist/scripts/generate-web-module/types/index.d.ts.map +1 -0
  131. package/dist/scripts/generate-web-module/types/index.js +25 -0
  132. package/dist/scripts/generate-web-module/types/index.js.map +1 -0
  133. package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts +40 -0
  134. package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts.map +1 -0
  135. package/dist/scripts/generate-web-module/types/json-schema.interface.js +10 -0
  136. package/dist/scripts/generate-web-module/types/json-schema.interface.js.map +1 -0
  137. package/dist/scripts/generate-web-module/types/template-data.interface.d.ts +128 -0
  138. package/dist/scripts/generate-web-module/types/template-data.interface.d.ts.map +1 -0
  139. package/dist/scripts/generate-web-module/types/template-data.interface.js +9 -0
  140. package/dist/scripts/generate-web-module/types/template-data.interface.js.map +1 -0
  141. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts +29 -0
  142. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts.map +1 -0
  143. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js +153 -0
  144. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js.map +1 -0
  145. package/dist/scripts/generate-web-module/utils/file-writer.d.ts +38 -0
  146. package/dist/scripts/generate-web-module/utils/file-writer.d.ts.map +1 -0
  147. package/dist/scripts/generate-web-module/utils/file-writer.js +126 -0
  148. package/dist/scripts/generate-web-module/utils/file-writer.js.map +1 -0
  149. package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts +28 -0
  150. package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts.map +1 -0
  151. package/dist/scripts/generate-web-module/utils/i18n-updater.js +122 -0
  152. package/dist/scripts/generate-web-module/utils/i18n-updater.js.map +1 -0
  153. package/dist/scripts/generate-web-module/utils/index.d.ts +9 -0
  154. package/dist/scripts/generate-web-module/utils/index.d.ts.map +1 -0
  155. package/dist/scripts/generate-web-module/utils/index.js +20 -0
  156. package/dist/scripts/generate-web-module/utils/index.js.map +1 -0
  157. package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts +46 -0
  158. package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts.map +1 -0
  159. package/dist/scripts/generate-web-module/validators/json-schema-validator.js +265 -0
  160. package/dist/scripts/generate-web-module/validators/json-schema-validator.js.map +1 -0
  161. package/package.json +27 -21
  162. package/scripts/generate-web-module/generator.ts +363 -0
  163. package/scripts/generate-web-module/index.ts +49 -0
  164. package/scripts/generate-web-module/templates/components/container.template.ts +129 -0
  165. package/scripts/generate-web-module/templates/components/content.template.ts +40 -0
  166. package/scripts/generate-web-module/templates/components/deleter.template.ts +51 -0
  167. package/scripts/generate-web-module/templates/components/details.template.ts +115 -0
  168. package/scripts/generate-web-module/templates/components/editor.template.ts +495 -0
  169. package/scripts/generate-web-module/templates/components/index.ts +18 -0
  170. package/scripts/generate-web-module/templates/components/list-container.template.ts +30 -0
  171. package/scripts/generate-web-module/templates/components/list.template.ts +91 -0
  172. package/scripts/generate-web-module/templates/components/multi-selector.template.ts +184 -0
  173. package/scripts/generate-web-module/templates/components/selector.template.ts +199 -0
  174. package/scripts/generate-web-module/templates/context.template.ts +121 -0
  175. package/scripts/generate-web-module/templates/data/fields.template.ts +64 -0
  176. package/scripts/generate-web-module/templates/data/index.ts +10 -0
  177. package/scripts/generate-web-module/templates/data/interface.template.ts +136 -0
  178. package/scripts/generate-web-module/templates/data/model.template.ts +327 -0
  179. package/scripts/generate-web-module/templates/data/service.template.ts +185 -0
  180. package/scripts/generate-web-module/templates/index.ts +34 -0
  181. package/scripts/generate-web-module/templates/module.template.ts +69 -0
  182. package/scripts/generate-web-module/templates/pages/detail-page.template.ts +65 -0
  183. package/scripts/generate-web-module/templates/pages/index.ts +8 -0
  184. package/scripts/generate-web-module/templates/pages/list-page.template.ts +37 -0
  185. package/scripts/generate-web-module/templates/table-hook.template.ts +182 -0
  186. package/scripts/generate-web-module/transformers/field-mapper.ts +201 -0
  187. package/scripts/generate-web-module/transformers/i18n-generator.ts +199 -0
  188. package/scripts/generate-web-module/transformers/import-resolver.ts +250 -0
  189. package/scripts/generate-web-module/transformers/index.ts +12 -0
  190. package/scripts/generate-web-module/transformers/name-transformer.ts +115 -0
  191. package/scripts/generate-web-module/transformers/parent-detector.ts +87 -0
  192. package/scripts/generate-web-module/transformers/relationship-resolver.ts +221 -0
  193. package/scripts/generate-web-module/tsconfig.json +24 -0
  194. package/scripts/generate-web-module/types/field-mapping.types.ts +141 -0
  195. package/scripts/generate-web-module/types/index.ts +9 -0
  196. package/scripts/generate-web-module/types/json-schema.interface.ts +42 -0
  197. package/scripts/generate-web-module/types/template-data.interface.ts +164 -0
  198. package/scripts/generate-web-module/utils/bootstrapper-updater.ts +145 -0
  199. package/scripts/generate-web-module/utils/file-writer.ts +115 -0
  200. package/scripts/generate-web-module/utils/i18n-updater.ts +108 -0
  201. package/scripts/generate-web-module/utils/index.ts +9 -0
  202. package/scripts/generate-web-module/validators/json-schema-validator.ts +306 -0
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Field Mapping Types
4
+ *
5
+ * Defines the mapping rules between JSON schema field types
6
+ * and their TypeScript, Zod, and form component equivalents.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_MODULE_ICON = exports.ENTITY_ZOD_SCHEMA = exports.AUTHOR_ZOD_SCHEMA = exports.AUTHOR_VARIANT = exports.STANDARD_FIELDS = exports.CONTENT_INDICATOR_FIELDS = exports.TYPE_TO_FORM_COMPONENT = exports.SPECIAL_FIELD_COMPONENTS = exports.JSON_TO_ZOD_BASE = exports.JSON_TO_TS_TYPE = void 0;
10
+ exports.getTsType = getTsType;
11
+ exports.getZodBase = getZodBase;
12
+ exports.getFormComponent = getFormComponent;
13
+ exports.isContentField = isContentField;
14
+ exports.buildZodSchema = buildZodSchema;
15
+ /**
16
+ * Mapping from JSON type to TypeScript type
17
+ */
18
+ exports.JSON_TO_TS_TYPE = {
19
+ string: "string",
20
+ number: "number",
21
+ boolean: "boolean",
22
+ date: "Date",
23
+ any: "any",
24
+ };
25
+ /**
26
+ * Mapping from JSON type to Zod schema (base, without modifiers)
27
+ */
28
+ exports.JSON_TO_ZOD_BASE = {
29
+ string: "z.string()",
30
+ number: "z.number()",
31
+ boolean: "z.boolean()",
32
+ date: "z.date()",
33
+ any: "z.any()",
34
+ };
35
+ /**
36
+ * Special field names that get specific form components
37
+ */
38
+ exports.SPECIAL_FIELD_COMPONENTS = {
39
+ content: "BlockNoteEditor",
40
+ description: "FormTextarea",
41
+ abstract: "FormTextarea",
42
+ body: "FormTextarea",
43
+ };
44
+ /**
45
+ * Default form component by type
46
+ */
47
+ exports.TYPE_TO_FORM_COMPONENT = {
48
+ string: "FormInput",
49
+ number: "FormInputNumber",
50
+ boolean: "Checkbox",
51
+ date: "DatePicker",
52
+ any: "FormInput",
53
+ };
54
+ /**
55
+ * Fields that indicate the module extends Content
56
+ */
57
+ exports.CONTENT_INDICATOR_FIELDS = ["name", "tldr", "abstract"];
58
+ /**
59
+ * Standard fields added to all modules
60
+ */
61
+ exports.STANDARD_FIELDS = ["createdAt", "updatedAt"];
62
+ /**
63
+ * Author variant special handling
64
+ */
65
+ exports.AUTHOR_VARIANT = "Author";
66
+ /**
67
+ * Zod schema for author relationships
68
+ */
69
+ exports.AUTHOR_ZOD_SCHEMA = "userObjectSchema";
70
+ /**
71
+ * Zod schema for entity relationships (non-author)
72
+ */
73
+ exports.ENTITY_ZOD_SCHEMA = "entityObjectSchema";
74
+ /**
75
+ * Default icon for new modules
76
+ */
77
+ exports.DEFAULT_MODULE_ICON = "FileTextIcon";
78
+ /**
79
+ * Get TypeScript type for a field
80
+ */
81
+ function getTsType(jsonType) {
82
+ return exports.JSON_TO_TS_TYPE[jsonType] || "any";
83
+ }
84
+ /**
85
+ * Get base Zod schema for a field type
86
+ */
87
+ function getZodBase(jsonType) {
88
+ return exports.JSON_TO_ZOD_BASE[jsonType] || "z.any()";
89
+ }
90
+ /**
91
+ * Get form component for a field
92
+ */
93
+ function getFormComponent(fieldName, fieldType) {
94
+ // Check for special field names first
95
+ if (exports.SPECIAL_FIELD_COMPONENTS[fieldName]) {
96
+ return exports.SPECIAL_FIELD_COMPONENTS[fieldName];
97
+ }
98
+ // Fall back to type-based component
99
+ return exports.TYPE_TO_FORM_COMPONENT[fieldType] || "FormInput";
100
+ }
101
+ /**
102
+ * Check if a field name indicates BlockNoteEditor should be used
103
+ */
104
+ function isContentField(fieldName) {
105
+ return fieldName === "content";
106
+ }
107
+ /**
108
+ * Build complete Zod schema for a field
109
+ */
110
+ function buildZodSchema(fieldType, nullable, fieldName) {
111
+ const base = getZodBase(fieldType);
112
+ // Content fields use z.any()
113
+ if (isContentField(fieldName)) {
114
+ return "z.any()";
115
+ }
116
+ // String fields with min(1) for required
117
+ if (fieldType === "string") {
118
+ if (nullable) {
119
+ return `${base}.optional()`;
120
+ }
121
+ return `${base}.min(1, { message: t(\`features.\${moduleName}.fields.${fieldName}.error\`) })`;
122
+ }
123
+ // Other fields with optional modifier
124
+ if (nullable) {
125
+ return `${base}.optional()`;
126
+ }
127
+ return base;
128
+ }
129
+ //# sourceMappingURL=field-mapping.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-mapping.types.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/field-mapping.types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAgFH,8BAEC;AAKD,gCAEC;AAKD,4CAOC;AAKD,wCAEC;AAKD,wCAsBC;AAnID;;GAEG;AACU,QAAA,eAAe,GAA2B;IACrD,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;CACX,CAAC;AAEF;;GAEG;AACU,QAAA,gBAAgB,GAA2B;IACtD,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;CACf,CAAC;AAEF;;GAEG;AACU,QAAA,wBAAwB,GAAsC;IACzE,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,cAAc;IAC3B,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,cAAc;CACrB,CAAC;AAEF;;GAEG;AACU,QAAA,sBAAsB,GAAsC;IACvE,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;CACjB,CAAC;AAEF;;GAEG;AACU,QAAA,wBAAwB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAErE;;GAEG;AACU,QAAA,eAAe,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAE1D;;GAEG;AACU,QAAA,cAAc,GAAG,QAAQ,CAAC;AAEvC;;GAEG;AACU,QAAA,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD;;GAEG;AACU,QAAA,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD;;GAEG;AACU,QAAA,mBAAmB,GAAG,cAAc,CAAC;AAElD;;GAEG;AACH,SAAgB,SAAS,CAAC,QAAgB;IACxC,OAAO,uBAAe,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACzC,OAAO,wBAAgB,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;IACnE,sCAAsC;IACtC,IAAI,gCAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,gCAAwB,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IACD,oCAAoC;IACpC,OAAO,8BAAsB,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,SAAiB;IAC9C,OAAO,SAAS,KAAK,SAAS,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,SAAiB,EAAE,QAAiB,EAAE,SAAiB;IACpF,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEnC,6BAA6B;IAC7B,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,aAAa,CAAC;QAC9B,CAAC;QACD,OAAO,GAAG,IAAI,yDAAyD,SAAS,cAAc,CAAC;IACjG,CAAC;IAED,sCAAsC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,aAAa,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Types Index
3
+ *
4
+ * Re-exports all type definitions for the web module generator.
5
+ */
6
+ export * from "./json-schema.interface";
7
+ export * from "./template-data.interface";
8
+ export * from "./field-mapping.types";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * Types Index
4
+ *
5
+ * Re-exports all type definitions for the web module generator.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ __exportStar(require("./json-schema.interface"), exports);
23
+ __exportStar(require("./template-data.interface"), exports);
24
+ __exportStar(require("./field-mapping.types"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,0DAAwC;AACxC,4DAA0C;AAC1C,wDAAsC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * JSON Schema Interfaces
3
+ *
4
+ * Type definitions for the JSON module definition files
5
+ * located in the /structure folder.
6
+ * Copied from backend generator - shared schema format.
7
+ */
8
+ /**
9
+ * Field definition in JSON schema
10
+ */
11
+ export interface JsonFieldDefinition {
12
+ name: string;
13
+ type: string;
14
+ nullable: boolean;
15
+ }
16
+ /**
17
+ * Relationship definition in JSON schema
18
+ */
19
+ export interface JsonRelationshipDefinition {
20
+ name: string;
21
+ variant?: string;
22
+ directory: string;
23
+ single: boolean;
24
+ relationshipName: string;
25
+ toNode: boolean;
26
+ nullable: boolean;
27
+ }
28
+ /**
29
+ * Complete module definition from JSON
30
+ */
31
+ export interface JsonModuleDefinition {
32
+ moduleId: string;
33
+ moduleName: string;
34
+ endpointName: string;
35
+ targetDir: string;
36
+ languages: string[];
37
+ fields: JsonFieldDefinition[];
38
+ relationships: JsonRelationshipDefinition[];
39
+ }
40
+ //# sourceMappingURL=json-schema.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/json-schema.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,aAAa,EAAE,0BAA0B,EAAE,CAAC;CAC7C"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * JSON Schema Interfaces
4
+ *
5
+ * Type definitions for the JSON module definition files
6
+ * located in the /structure folder.
7
+ * Copied from backend generator - shared schema format.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=json-schema.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.interface.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/json-schema.interface.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Frontend Template Data Interfaces
3
+ *
4
+ * Type definitions for the data passed to templates
5
+ * during frontend module generation.
6
+ */
7
+ /**
8
+ * Name transformations for different naming conventions
9
+ */
10
+ export interface NameTransforms {
11
+ pascalCase: string;
12
+ camelCase: string;
13
+ kebabCase: string;
14
+ pluralPascal: string;
15
+ pluralCamel: string;
16
+ pluralKebab: string;
17
+ titleCase: string;
18
+ pluralTitleCase: string;
19
+ }
20
+ /**
21
+ * Frontend field representation
22
+ */
23
+ export interface FrontendField {
24
+ name: string;
25
+ type: string;
26
+ tsType: string;
27
+ zodSchema: string;
28
+ formComponent: FormComponentType;
29
+ nullable: boolean;
30
+ isContentField: boolean;
31
+ }
32
+ /**
33
+ * Form component types
34
+ */
35
+ export type FormComponentType = "FormInput" | "FormTextarea" | "BlockNoteEditor" | "Checkbox" | "DatePicker" | "FormInputNumber";
36
+ /**
37
+ * Frontend relationship representation
38
+ */
39
+ export interface FrontendRelationship {
40
+ name: string;
41
+ variant?: string;
42
+ directory: string;
43
+ single: boolean;
44
+ nullable: boolean;
45
+ formFieldId: string;
46
+ formFieldIdPlural: string;
47
+ payloadFieldId: string;
48
+ selectorComponent: string;
49
+ zodSchema: string;
50
+ importPath: string;
51
+ interfaceImportPath: string;
52
+ serviceImportPath: string;
53
+ interfaceName: string;
54
+ modelKebab: string;
55
+ }
56
+ /**
57
+ * i18n key structure
58
+ */
59
+ export interface I18nKeySet {
60
+ moduleName: string;
61
+ fields: Record<string, {
62
+ label: string;
63
+ placeholder: string;
64
+ error: string;
65
+ }>;
66
+ relationships: Record<string, {
67
+ label: string;
68
+ placeholder: string;
69
+ error: string;
70
+ list: string;
71
+ }>;
72
+ type: {
73
+ singular: string;
74
+ plural: string;
75
+ icuPlural: string;
76
+ };
77
+ }
78
+ /**
79
+ * Import statement groups
80
+ */
81
+ export interface ImportStatements {
82
+ models: string[];
83
+ selectors: string[];
84
+ library: string[];
85
+ }
86
+ /**
87
+ * Complete template data passed to all templates
88
+ */
89
+ export interface FrontendTemplateData {
90
+ names: NameTransforms;
91
+ moduleId: string;
92
+ endpoint: string;
93
+ targetDir: "features" | "foundations";
94
+ extendsContent: boolean;
95
+ fields: FrontendField[];
96
+ relationships: FrontendRelationship[];
97
+ i18nKeys: I18nKeySet;
98
+ imports: ImportStatements;
99
+ tableFieldNames: string[];
100
+ relationshipServiceMethods: RelationshipServiceMethod[];
101
+ }
102
+ /**
103
+ * Service method for relationship queries
104
+ */
105
+ export interface RelationshipServiceMethod {
106
+ methodName: string;
107
+ paramName: string;
108
+ relationshipName: string;
109
+ relationshipEndpoint: string;
110
+ }
111
+ /**
112
+ * Options for the generator
113
+ */
114
+ export interface GenerateWebModuleOptions {
115
+ jsonPath: string;
116
+ dryRun?: boolean;
117
+ force?: boolean;
118
+ noRegister?: boolean;
119
+ }
120
+ /**
121
+ * Generated file info
122
+ */
123
+ export interface GeneratedFile {
124
+ path: string;
125
+ content: string;
126
+ type: "data" | "component" | "context" | "hook" | "module" | "page";
127
+ }
128
+ //# sourceMappingURL=template-data.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-data.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/template-data.interface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Frontend Template Data Interfaces
4
+ *
5
+ * Type definitions for the data passed to templates
6
+ * during frontend module generation.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=template-data.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-data.interface.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/template-data.interface.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Bootstrapper Updater
3
+ *
4
+ * Updates the Bootstrapper.ts file to register new modules.
5
+ */
6
+ import { FrontendTemplateData } from "../types/template-data.interface";
7
+ export interface BootstrapperUpdateResult {
8
+ success: boolean;
9
+ message: string;
10
+ alreadyRegistered?: boolean;
11
+ }
12
+ /**
13
+ * Update Bootstrapper.ts to add a new module
14
+ *
15
+ * @param data - Frontend template data
16
+ * @param webBasePath - Base path to web app
17
+ * @param dryRun - Whether to perform a dry run
18
+ * @returns Update result
19
+ */
20
+ export declare function updateBootstrapper(data: FrontendTemplateData, webBasePath: string, dryRun?: boolean): BootstrapperUpdateResult;
21
+ /**
22
+ * Generate the import statement for a module
23
+ */
24
+ export declare function generateImportStatement(data: FrontendTemplateData): string;
25
+ /**
26
+ * Generate the module registration entry
27
+ */
28
+ export declare function generateModuleEntry(data: FrontendTemplateData): string;
29
+ //# sourceMappingURL=bootstrapper-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrapper-updater.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/bootstrapper-updater.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAIxE,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,OAAe,GACtB,wBAAwB,CAmG1B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAG1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAGtE"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /**
3
+ * Bootstrapper Updater
4
+ *
5
+ * Updates the Bootstrapper.ts file to register new modules.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.updateBootstrapper = updateBootstrapper;
42
+ exports.generateImportStatement = generateImportStatement;
43
+ exports.generateModuleEntry = generateModuleEntry;
44
+ const fs = __importStar(require("fs"));
45
+ const BOOTSTRAPPER_PATH = "apps/web/src/config/Bootstrapper.ts";
46
+ /**
47
+ * Update Bootstrapper.ts to add a new module
48
+ *
49
+ * @param data - Frontend template data
50
+ * @param webBasePath - Base path to web app
51
+ * @param dryRun - Whether to perform a dry run
52
+ * @returns Update result
53
+ */
54
+ function updateBootstrapper(data, webBasePath, dryRun = false) {
55
+ const { names, targetDir } = data;
56
+ const bootstrapperPath = `${webBasePath}/${BOOTSTRAPPER_PATH}`;
57
+ // Check if file exists
58
+ if (!fs.existsSync(bootstrapperPath)) {
59
+ return {
60
+ success: false,
61
+ message: `Bootstrapper.ts not found at ${bootstrapperPath}`,
62
+ };
63
+ }
64
+ let content = fs.readFileSync(bootstrapperPath, "utf-8");
65
+ // Check if module is already registered
66
+ const modulePattern = new RegExp(`${names.pascalCase}Module`, "g");
67
+ if (modulePattern.test(content)) {
68
+ return {
69
+ success: true,
70
+ message: `Module ${names.pascalCase} already registered in Bootstrapper.ts`,
71
+ alreadyRegistered: true,
72
+ };
73
+ }
74
+ // Add import statement
75
+ const importStatement = `import { ${names.pascalCase}Module } from "@/features/${targetDir}/${names.kebabCase}/${names.pascalCase}Module";`;
76
+ // Find the right place to insert import (after "// Feature module imports" or at end of imports)
77
+ const featureImportsMarker = "// Feature module imports";
78
+ const lastImportMatch = content.match(/^import .* from ".*";$/gm);
79
+ if (content.includes(featureImportsMarker)) {
80
+ // Find the last import after the marker
81
+ const markerIndex = content.indexOf(featureImportsMarker);
82
+ const afterMarker = content.substring(markerIndex);
83
+ const nextNewlineIndex = afterMarker.indexOf("\n");
84
+ const insertPosition = markerIndex + nextNewlineIndex;
85
+ // Find next empty line or start of const
86
+ const afterMarkerContent = content.substring(insertPosition);
87
+ const constIndex = afterMarkerContent.indexOf("\nconst ");
88
+ if (constIndex > 0) {
89
+ const insertAt = insertPosition + constIndex;
90
+ content = content.slice(0, insertAt) + `\n${importStatement}` + content.slice(insertAt);
91
+ }
92
+ }
93
+ else if (lastImportMatch) {
94
+ // Insert after last import
95
+ const lastImport = lastImportMatch[lastImportMatch.length - 1];
96
+ const lastImportIndex = content.lastIndexOf(lastImport);
97
+ const insertAt = lastImportIndex + lastImport.length;
98
+ content = content.slice(0, insertAt) + `\n${importStatement}` + content.slice(insertAt);
99
+ }
100
+ // Add module to allModules object
101
+ const allModulesPattern = /const allModules = \{[^}]+\}/s;
102
+ const allModulesMatch = content.match(allModulesPattern);
103
+ if (allModulesMatch) {
104
+ const allModulesBlock = allModulesMatch[0];
105
+ // Find the last line before closing brace
106
+ const lines = allModulesBlock.split("\n");
107
+ const lastEntryIndex = lines.length - 1;
108
+ // Add new module entry before the closing brace
109
+ const newEntry = ` ${names.pascalCase}: ${names.pascalCase}Module(moduleFactory),`;
110
+ // Find if there's a trailing comma on the last entry
111
+ for (let i = lastEntryIndex - 1; i >= 0; i--) {
112
+ const line = lines[i].trim();
113
+ if (line && !line.startsWith("//")) {
114
+ // Add comma if needed
115
+ if (!line.endsWith(",")) {
116
+ lines[i] = lines[i].replace(/(\s*)$/, ",$1");
117
+ }
118
+ break;
119
+ }
120
+ }
121
+ // Insert new entry
122
+ lines.splice(lastEntryIndex, 0, newEntry);
123
+ const updatedBlock = lines.join("\n");
124
+ content = content.replace(allModulesBlock, updatedBlock);
125
+ }
126
+ if (dryRun) {
127
+ return {
128
+ success: true,
129
+ message: `[DRY RUN] Would update Bootstrapper.ts with ${names.pascalCase}Module`,
130
+ };
131
+ }
132
+ // Write updated content
133
+ fs.writeFileSync(bootstrapperPath, content, "utf-8");
134
+ return {
135
+ success: true,
136
+ message: `Updated Bootstrapper.ts with ${names.pascalCase}Module`,
137
+ };
138
+ }
139
+ /**
140
+ * Generate the import statement for a module
141
+ */
142
+ function generateImportStatement(data) {
143
+ const { names, targetDir } = data;
144
+ return `import { ${names.pascalCase}Module } from "@/features/${targetDir}/${names.kebabCase}/${names.pascalCase}Module";`;
145
+ }
146
+ /**
147
+ * Generate the module registration entry
148
+ */
149
+ function generateModuleEntry(data) {
150
+ const { names } = data;
151
+ return ` ${names.pascalCase}: ${names.pascalCase}Module(moduleFactory),`;
152
+ }
153
+ //# sourceMappingURL=bootstrapper-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrapper-updater.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/bootstrapper-updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * File Writer Utility
3
+ *
4
+ * Handles file writing with conflict detection and directory creation.
5
+ */
6
+ import { GeneratedFile } from "../types/template-data.interface";
7
+ export interface WriteOptions {
8
+ dryRun?: boolean;
9
+ force?: boolean;
10
+ }
11
+ export interface WriteResult {
12
+ path: string;
13
+ status: "created" | "updated" | "skipped" | "dry-run";
14
+ existed: boolean;
15
+ }
16
+ /**
17
+ * Write a single file to disk
18
+ *
19
+ * @param file - Generated file data
20
+ * @param options - Write options
21
+ * @returns Write result
22
+ */
23
+ export declare function writeFile(file: GeneratedFile, options?: WriteOptions): WriteResult;
24
+ /**
25
+ * Write multiple files to disk
26
+ *
27
+ * @param files - Array of generated files
28
+ * @param options - Write options
29
+ * @returns Array of write results
30
+ */
31
+ export declare function writeFiles(files: GeneratedFile[], options?: WriteOptions): WriteResult[];
32
+ /**
33
+ * Print write results to console
34
+ *
35
+ * @param results - Array of write results
36
+ */
37
+ export declare function printResults(results: WriteResult[]): void;
38
+ //# sourceMappingURL=file-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/file-writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACtD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAmCtF;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,EAAE,CAE5F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAiCzD"}