@jakubmazanec/carson 0.1.0-c5ebb6f → 0.1.0-next.336fe21

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 (225) hide show
  1. package/README.md +65 -10
  2. package/dist/commands/create-project/CreateProject.js.map +1 -1
  3. package/dist/commands/create-project/CreateProjectInput.js +1 -1
  4. package/dist/commands/create-project/CreateProjectInput.js.map +1 -1
  5. package/dist/commands/create-project/createProjectCommand.js +3 -4
  6. package/dist/commands/create-project/createProjectCommand.js.map +1 -1
  7. package/dist/commands/create-project/runCreateProject.js +3 -13
  8. package/dist/commands/create-project/runCreateProject.js.map +1 -1
  9. package/dist/commands/create-workspace/CreateWorkspace.d.ts +1 -2
  10. package/dist/commands/create-workspace/CreateWorkspace.js +7 -5
  11. package/dist/commands/create-workspace/CreateWorkspace.js.map +1 -1
  12. package/dist/commands/create-workspace/createWorkspaceCommand.js +1 -11
  13. package/dist/commands/create-workspace/createWorkspaceCommand.js.map +1 -1
  14. package/dist/commands/create-workspace/runCreateWorkspace.js +3 -12
  15. package/dist/commands/create-workspace/runCreateWorkspace.js.map +1 -1
  16. package/dist/commands/internals/CommandStatus.d.ts +1 -0
  17. package/dist/commands/internals/CommandStatus.js +3 -0
  18. package/dist/commands/internals/CommandStatus.js.map +1 -0
  19. package/dist/commands/internals.d.ts +1 -0
  20. package/dist/commands/internals.js +1 -0
  21. package/dist/commands/internals.js.map +1 -1
  22. package/dist/commands/update-workspace/UpdateWorkspace.js +1 -1
  23. package/dist/commands/update-workspace/UpdateWorkspace.js.map +1 -1
  24. package/dist/commands/update-workspace/updateWorkspaceCommand.js +3 -4
  25. package/dist/commands/update-workspace/updateWorkspaceCommand.js.map +1 -1
  26. package/dist/template/CarsonTemplate.d.ts +1 -1
  27. package/dist/template/CarsonTemplate.js.map +1 -1
  28. package/dist/template/CarsonTemplateConfig.d.ts +1 -1
  29. package/dist/template/CarsonTemplateConfig.js.map +1 -1
  30. package/dist/template/CarsonTemplateError.d.ts +8 -0
  31. package/dist/template/CarsonTemplateError.js +13 -0
  32. package/dist/template/CarsonTemplateError.js.map +1 -0
  33. package/dist/template/TemplateAttributes.d.ts +3 -3
  34. package/dist/template/TemplateAttributes.js +2 -1
  35. package/dist/template/TemplateAttributes.js.map +1 -1
  36. package/dist/template/TemplateRender.d.ts +6 -2
  37. package/dist/template/TemplateRender.js.map +1 -1
  38. package/dist/template/TemplateRenders.d.ts +1 -1
  39. package/dist/template/TemplateRenders.js.map +1 -1
  40. package/dist/template/applyTemplateRenders.d.ts +3 -0
  41. package/dist/template/applyTemplateRenders.js +36 -6
  42. package/dist/template/applyTemplateRenders.js.map +1 -1
  43. package/dist/template/internals/TemplateRenderSnapshot.d.ts +18 -5
  44. package/dist/template/internals/TemplateRenderSnapshot.js +4 -1
  45. package/dist/template/internals/TemplateRenderSnapshot.js.map +1 -1
  46. package/dist/template/internals/TemplateRenderSnapshots.d.ts +18 -5
  47. package/dist/template/internals/deleteUsingTemplateRender.d.ts +4 -1
  48. package/dist/template/internals/deleteUsingTemplateRender.js +16 -3
  49. package/dist/template/internals/deleteUsingTemplateRender.js.map +1 -1
  50. package/dist/template/internals/insertUsingTemplateRender.js +11 -1
  51. package/dist/template/internals/insertUsingTemplateRender.js.map +1 -1
  52. package/dist/template/internals/loadTemplateRenderSnapshots.d.ts +4 -1
  53. package/dist/template/internals/mergeUsingTemplateRender.js +11 -1
  54. package/dist/template/internals/mergeUsingTemplateRender.js.map +1 -1
  55. package/dist/template/internals/parseCarsonTemplateId.js +6 -1
  56. package/dist/template/internals/parseCarsonTemplateId.js.map +1 -1
  57. package/dist/template/internals/readCarsonTemplate.js +7 -1
  58. package/dist/template/internals/readCarsonTemplate.js.map +1 -1
  59. package/dist/template/internals/saveTemplateRenderSnapshots.js +4 -4
  60. package/dist/template/internals/saveTemplateRenderSnapshots.js.map +1 -1
  61. package/dist/template/internals/uninsertUsingTemplateRender.js +11 -1
  62. package/dist/template/internals/uninsertUsingTemplateRender.js.map +1 -1
  63. package/dist/template/internals/unmerge.d.ts +1 -1
  64. package/dist/template/internals/unmerge.js +1 -1
  65. package/dist/template/internals/unmerge.js.map +1 -1
  66. package/dist/template/internals/unmergeUsingTemplateRender.js +11 -1
  67. package/dist/template/internals/unmergeUsingTemplateRender.js.map +1 -1
  68. package/dist/template/renderCarsonTemplate.d.ts +3 -0
  69. package/dist/template/renderCarsonTemplate.js +15 -4
  70. package/dist/template/renderCarsonTemplate.js.map +1 -1
  71. package/dist/template.d.ts +1 -0
  72. package/dist/template.js +1 -0
  73. package/dist/template.js.map +1 -1
  74. package/dist/workspace/Project.d.ts +2 -2
  75. package/dist/workspace/Project.js +19 -4
  76. package/dist/workspace/Project.js.map +1 -1
  77. package/dist/workspace/ProjectConfig.d.ts +3 -0
  78. package/dist/workspace/ProjectConfig.js.map +1 -1
  79. package/dist/workspace/ProjectCreateOptions.d.ts +3 -0
  80. package/dist/workspace/ProjectCreateOptions.js.map +1 -1
  81. package/dist/workspace/ProjectError.d.ts +5 -2
  82. package/dist/workspace/ProjectError.js +6 -2
  83. package/dist/workspace/ProjectError.js.map +1 -1
  84. package/dist/workspace/ProjectOptions.d.ts +1 -1
  85. package/dist/workspace/ProjectOptions.js.map +1 -1
  86. package/dist/workspace/ProjectUpdateOptions.d.ts +3 -0
  87. package/dist/workspace/ProjectUpdateOptions.js +3 -1
  88. package/dist/workspace/ProjectUpdateOptions.js.map +1 -1
  89. package/dist/workspace/Workspace.d.ts +8 -6
  90. package/dist/workspace/Workspace.js +106 -33
  91. package/dist/workspace/Workspace.js.map +1 -1
  92. package/dist/workspace/WorkspaceConfig.d.ts +3 -0
  93. package/dist/workspace/WorkspaceConfig.js.map +1 -1
  94. package/dist/workspace/WorkspaceCreateOptions.d.ts +3 -0
  95. package/dist/workspace/WorkspaceCreateOptions.js +3 -1
  96. package/dist/workspace/WorkspaceCreateOptions.js.map +1 -1
  97. package/dist/workspace/WorkspaceCreateProjectOptions.d.ts +3 -0
  98. package/dist/workspace/WorkspaceCreateProjectOptions.js +3 -1
  99. package/dist/workspace/WorkspaceCreateProjectOptions.js.map +1 -1
  100. package/dist/workspace/WorkspaceDependencies.d.ts +26 -19
  101. package/dist/workspace/WorkspaceDependencies.js +27 -9
  102. package/dist/workspace/WorkspaceDependencies.js.map +1 -1
  103. package/dist/workspace/WorkspaceDependenciesFromWorkspaceOptions.d.ts +8 -0
  104. package/dist/workspace/WorkspaceDependenciesFromWorkspaceOptions.js +5 -0
  105. package/dist/workspace/WorkspaceDependenciesFromWorkspaceOptions.js.map +1 -0
  106. package/dist/workspace/WorkspaceDependenciesGetVersionsOptions.d.ts +6 -0
  107. package/dist/workspace/WorkspaceDependenciesGetVersionsOptions.js +5 -0
  108. package/dist/workspace/WorkspaceDependenciesGetVersionsOptions.js.map +1 -0
  109. package/dist/workspace/WorkspaceDependency.d.ts +14 -0
  110. package/dist/workspace/WorkspaceDependency.js +3 -0
  111. package/dist/workspace/WorkspaceDependency.js.map +1 -0
  112. package/dist/workspace/WorkspaceDependencyProject.d.ts +11 -0
  113. package/dist/workspace/WorkspaceDependencyProject.js +5 -0
  114. package/dist/workspace/WorkspaceDependencyProject.js.map +1 -0
  115. package/dist/workspace/WorkspaceError.d.ts +5 -2
  116. package/dist/workspace/WorkspaceError.js +10 -3
  117. package/dist/workspace/WorkspaceError.js.map +1 -1
  118. package/dist/workspace/WorkspaceFindAndReadOptions.d.ts +6 -0
  119. package/dist/workspace/WorkspaceFindAndReadOptions.js +5 -0
  120. package/dist/workspace/WorkspaceFindAndReadOptions.js.map +1 -0
  121. package/dist/workspace/WorkspaceOptions.d.ts +4 -4
  122. package/dist/workspace/WorkspaceOptions.js.map +1 -1
  123. package/dist/workspace/{WorkspaceOptionsProjectOptions.d.ts → WorkspaceOptionsProject.d.ts} +4 -1
  124. package/dist/workspace/WorkspaceOptionsProject.js +3 -0
  125. package/dist/workspace/WorkspaceOptionsProject.js.map +1 -0
  126. package/dist/workspace/WorkspacePackageJson.d.ts +3 -0
  127. package/dist/workspace/WorkspacePackageJson.js.map +1 -1
  128. package/dist/workspace/WorkspaceProjectGlobs.d.ts +3 -0
  129. package/dist/workspace/WorkspaceProjectGlobs.js +3 -1
  130. package/dist/workspace/WorkspaceProjectGlobs.js.map +1 -1
  131. package/dist/workspace/WorkspaceProjects.d.ts +3 -0
  132. package/dist/workspace/WorkspaceProjects.js.map +1 -1
  133. package/dist/workspace/WorkspaceRepository.d.ts +4 -1
  134. package/dist/workspace/WorkspaceRepository.js +3 -1
  135. package/dist/workspace/WorkspaceRepository.js.map +1 -1
  136. package/dist/workspace/WorkspaceUpdateOptions.d.ts +3 -0
  137. package/dist/workspace/WorkspaceUpdateOptions.js +3 -1
  138. package/dist/workspace/WorkspaceUpdateOptions.js.map +1 -1
  139. package/dist/workspace/internals/compareProjectPath.d.ts +2 -0
  140. package/dist/workspace/internals/compareProjectPath.js +10 -0
  141. package/dist/workspace/internals/compareProjectPath.js.map +1 -0
  142. package/dist/workspace/internals/compareWorkspaceDependencyProjectName.d.ts +2 -0
  143. package/dist/workspace/internals/compareWorkspaceDependencyProjectName.js +10 -0
  144. package/dist/workspace/internals/compareWorkspaceDependencyProjectName.js.map +1 -0
  145. package/dist/workspace/internals/getRepositoryBranches.js +6 -0
  146. package/dist/workspace/internals/getRepositoryBranches.js.map +1 -1
  147. package/dist/workspace/internals/getRepositoryUrl.js +0 -1
  148. package/dist/workspace/internals/getRepositoryUrl.js.map +1 -1
  149. package/dist/workspace/internals.d.ts +2 -0
  150. package/dist/workspace/internals.js +2 -0
  151. package/dist/workspace/internals.js.map +1 -1
  152. package/dist/workspace/saveProjectConfig.d.ts +8 -0
  153. package/dist/workspace/saveProjectConfig.js +5 -1
  154. package/dist/workspace/saveProjectConfig.js.map +1 -1
  155. package/dist/workspace/saveWorkspaceConfig.d.ts +8 -0
  156. package/dist/workspace/saveWorkspaceConfig.js +5 -1
  157. package/dist/workspace/saveWorkspaceConfig.js.map +1 -1
  158. package/dist/workspace.d.ts +12 -0
  159. package/dist/workspace.js +12 -0
  160. package/dist/workspace.js.map +1 -1
  161. package/package.json +10 -10
  162. package/src/commands/create-project/CreateProject.tsx +2 -2
  163. package/src/commands/create-project/CreateProjectInput.ts +1 -1
  164. package/src/commands/create-project/createProjectCommand.tsx +1 -5
  165. package/src/commands/create-project/runCreateProject.ts +4 -17
  166. package/src/commands/create-workspace/CreateWorkspace.tsx +8 -6
  167. package/src/commands/create-workspace/createWorkspaceCommand.tsx +1 -14
  168. package/src/commands/create-workspace/runCreateWorkspace.ts +4 -16
  169. package/src/commands/internals/CommandStatus.ts +1 -0
  170. package/src/commands/internals.ts +1 -0
  171. package/src/commands/update-workspace/UpdateWorkspace.tsx +1 -1
  172. package/src/commands/update-workspace/updateWorkspaceCommand.tsx +1 -5
  173. package/src/template/CarsonTemplate.ts +1 -2
  174. package/src/template/CarsonTemplateConfig.ts +1 -1
  175. package/src/template/CarsonTemplateError.ts +19 -0
  176. package/src/template/TemplateAttributes.ts +2 -1
  177. package/src/template/TemplateRender.ts +6 -2
  178. package/src/template/TemplateRenders.ts +1 -1
  179. package/src/template/applyTemplateRenders.ts +40 -4
  180. package/src/template/internals/TemplateRenderSnapshot.ts +5 -0
  181. package/src/template/internals/deleteUsingTemplateRender.ts +21 -2
  182. package/src/template/internals/insertUsingTemplateRender.ts +11 -1
  183. package/src/template/internals/mergeUsingTemplateRender.ts +11 -1
  184. package/src/template/internals/parseCarsonTemplateId.ts +5 -1
  185. package/src/template/internals/readCarsonTemplate.ts +4 -1
  186. package/src/template/internals/saveTemplateRenderSnapshots.ts +3 -2
  187. package/src/template/internals/uninsertUsingTemplateRender.ts +11 -1
  188. package/src/template/internals/unmerge.ts +1 -1
  189. package/src/template/internals/unmergeUsingTemplateRender.ts +11 -1
  190. package/src/template/renderCarsonTemplate.ts +28 -7
  191. package/src/template.ts +1 -0
  192. package/src/workspace/Project.ts +16 -4
  193. package/src/workspace/ProjectConfig.ts +3 -0
  194. package/src/workspace/ProjectCreateOptions.ts +3 -0
  195. package/src/workspace/ProjectError.ts +5 -0
  196. package/src/workspace/ProjectOptions.ts +1 -1
  197. package/src/workspace/ProjectUpdateOptions.ts +3 -0
  198. package/src/workspace/Workspace.ts +125 -42
  199. package/src/workspace/WorkspaceConfig.ts +3 -0
  200. package/src/workspace/WorkspaceCreateOptions.ts +3 -0
  201. package/src/workspace/WorkspaceCreateProjectOptions.ts +3 -0
  202. package/src/workspace/WorkspaceDependencies.ts +30 -27
  203. package/src/workspace/WorkspaceDependenciesFromWorkspaceOptions.ts +8 -0
  204. package/src/workspace/WorkspaceDependenciesGetVersionsOptions.ts +6 -0
  205. package/src/workspace/WorkspaceDependency.ts +18 -0
  206. package/src/workspace/WorkspaceDependencyProject.ts +13 -0
  207. package/src/workspace/WorkspaceError.ts +10 -1
  208. package/src/workspace/WorkspaceFindAndReadOptions.ts +6 -0
  209. package/src/workspace/WorkspaceOptions.ts +4 -4
  210. package/src/workspace/{WorkspaceOptionsProjectOptions.ts → WorkspaceOptionsProject.ts} +4 -1
  211. package/src/workspace/WorkspacePackageJson.ts +3 -0
  212. package/src/workspace/WorkspaceProjectGlobs.ts +3 -0
  213. package/src/workspace/WorkspaceProjects.ts +3 -0
  214. package/src/workspace/WorkspaceRepository.ts +4 -1
  215. package/src/workspace/WorkspaceUpdateOptions.ts +3 -0
  216. package/src/workspace/internals/compareProjectPath.ts +14 -0
  217. package/src/workspace/internals/compareWorkspaceDependencyProjectName.ts +14 -0
  218. package/src/workspace/internals/getRepositoryBranches.ts +8 -0
  219. package/src/workspace/internals/getRepositoryUrl.ts +0 -1
  220. package/src/workspace/internals.ts +2 -0
  221. package/src/workspace/saveProjectConfig.ts +8 -0
  222. package/src/workspace/saveWorkspaceConfig.ts +8 -0
  223. package/src/workspace.ts +12 -0
  224. package/dist/workspace/WorkspaceOptionsProjectOptions.js +0 -3
  225. package/dist/workspace/WorkspaceOptionsProjectOptions.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  export declare const templateAttributesSchema: z.ZodObject<{
3
- strategy: z.ZodUnion<[z.ZodLiteral<"create">, z.ZodLiteral<"overwrite">, z.ZodLiteral<"merge">, z.ZodLiteral<"check">, z.ZodTuple<[z.ZodLiteral<"insert">, z.ZodString], null>]>;
3
+ strategy: z.ZodUnion<[z.ZodLiteral<"create">, z.ZodLiteral<"ensure">, z.ZodLiteral<"overwrite">, z.ZodLiteral<"merge">, z.ZodLiteral<"check">, z.ZodTuple<[z.ZodLiteral<"insert">, z.ZodString], null>]>;
4
4
  }, "strict", z.ZodTypeAny, {
5
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
5
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
6
6
  }, {
7
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
7
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
8
8
  }>;
9
9
  export type TemplateAttributes = z.infer<typeof templateAttributesSchema>;
@@ -1,6 +1,8 @@
1
1
  import { z } from 'zod';
2
+ // TODO: add strategy 'none' so when you using template A that extends template B, you can overwrite template files to no-op
2
3
  let strategyTemplateAttributeSchema = z.union([
3
4
  z.literal('create'),
5
+ z.literal('ensure'),
4
6
  z.literal('overwrite'),
5
7
  z.literal('merge'),
6
8
  z.literal('check'),
@@ -10,7 +12,6 @@ let strategyTemplateAttributeSchema = z.union([
10
12
  ])
11
13
  ]);
12
14
  export const templateAttributesSchema = z.object({
13
- // TODO: add strategy 'none' so when you using template A that extends template B, you can overwrite template files to no-op
14
15
  strategy: strategyTemplateAttributeSchema
15
16
  }).strict();
16
17
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/template/TemplateAttributes.ts"],"sourcesContent":["import {z} from 'zod';\n\nlet strategyTemplateAttributeSchema = z.union([\n z.literal('create'),\n z.literal('overwrite'),\n z.literal('merge'),\n z.literal('check'),\n z.tuple([z.literal('insert'), z.string()]),\n]);\n\nexport const templateAttributesSchema = z\n .object({\n // TODO: add strategy 'none' so when you using template A that extends template B, you can overwrite template files to no-op\n strategy: strategyTemplateAttributeSchema,\n })\n .strict();\n\nexport type TemplateAttributes = z.infer<typeof templateAttributesSchema>;\n"],"names":["z","strategyTemplateAttributeSchema","union","literal","tuple","string","templateAttributesSchema","object","strategy","strict"],"mappings":"AAAA,SAAQA,CAAC,QAAO,MAAM;AAEtB,IAAIC,kCAAkCD,EAAEE,KAAK,CAAC;IAC5CF,EAAEG,OAAO,CAAC;IACVH,EAAEG,OAAO,CAAC;IACVH,EAAEG,OAAO,CAAC;IACVH,EAAEG,OAAO,CAAC;IACVH,EAAEI,KAAK,CAAC;QAACJ,EAAEG,OAAO,CAAC;QAAWH,EAAEK,MAAM;KAAG;CAC1C;AAED,OAAO,MAAMC,2BAA2BN,EACrCO,MAAM,CAAC;IACN,4HAA4H;IAC5HC,UAAUP;AACZ,GACCQ,MAAM,GAAG"}
1
+ {"version":3,"sources":["../../src/template/TemplateAttributes.ts"],"sourcesContent":["import {z} from 'zod';\n\n// TODO: add strategy 'none' so when you using template A that extends template B, you can overwrite template files to no-op\nlet strategyTemplateAttributeSchema = z.union([\n z.literal('create'),\n z.literal('ensure'),\n z.literal('overwrite'),\n z.literal('merge'),\n z.literal('check'),\n z.tuple([z.literal('insert'), z.string()]),\n]);\n\nexport const templateAttributesSchema = z\n .object({\n strategy: strategyTemplateAttributeSchema,\n })\n .strict();\n\nexport type TemplateAttributes = z.infer<typeof templateAttributesSchema>;\n"],"names":["z","strategyTemplateAttributeSchema","union","literal","tuple","string","templateAttributesSchema","object","strategy","strict"],"mappings":"AAAA,SAAQA,CAAC,QAAO,MAAM;AAEtB,4HAA4H;AAC5H,IAAIC,kCAAkCD,EAAEE,KAAK,CAAC;IAC5CF,EAAEG,OAAO,CAAC;IACVH,EAAEG,OAAO,CAAC;IACVH,EAAEG,OAAO,CAAC;IACVH,EAAEG,OAAO,CAAC;IACVH,EAAEG,OAAO,CAAC;IACVH,EAAEI,KAAK,CAAC;QAACJ,EAAEG,OAAO,CAAC;QAAWH,EAAEK,MAAM;KAAG;CAC1C;AAED,OAAO,MAAMC,2BAA2BN,EACrCO,MAAM,CAAC;IACNC,UAAUP;AACZ,GACCQ,MAAM,GAAG"}
@@ -2,6 +2,10 @@ import { type TemplateRender as BaseTemplateRender } from '@jakubmazanec/templat
2
2
  import { type templateAttributesSchema } from './TemplateAttributes.js';
3
3
  import { type templateDataSchema } from './TemplateData.js';
4
4
  /**
5
- * A template render result.
5
+ * A result of rendering a Carson template file.
6
6
  */
7
- export type TemplateRender = BaseTemplateRender<typeof templateAttributesSchema, typeof templateDataSchema>;
7
+ export type TemplateRender = BaseTemplateRender<typeof templateAttributesSchema, typeof templateDataSchema> & {
8
+ template: {
9
+ path: string;
10
+ };
11
+ };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/template/TemplateRender.ts"],"sourcesContent":["import {type TemplateRender as BaseTemplateRender} from '@jakubmazanec/template';\n\nimport {type templateAttributesSchema} from './TemplateAttributes.js';\nimport {type templateDataSchema} from './TemplateData.js';\n\n/**\n * A template render result.\n */\nexport type TemplateRender = BaseTemplateRender<\n typeof templateAttributesSchema,\n typeof templateDataSchema\n>;\n"],"names":[],"mappings":"AAAA,WAWE"}
1
+ {"version":3,"sources":["../../src/template/TemplateRender.ts"],"sourcesContent":["import {type TemplateRender as BaseTemplateRender} from '@jakubmazanec/template';\n\nimport {type templateAttributesSchema} from './TemplateAttributes.js';\nimport {type templateDataSchema} from './TemplateData.js';\n\n/**\n * A result of rendering a Carson template file.\n */\nexport type TemplateRender = BaseTemplateRender<\n typeof templateAttributesSchema,\n typeof templateDataSchema\n> & {\n template: {\n path: string;\n };\n};\n"],"names":[],"mappings":"AAAA,WAeE"}
@@ -1,5 +1,5 @@
1
1
  import { type TemplateRender } from './TemplateRender.js';
2
2
  /**
3
- * A collection of template render results.
3
+ * A {@link TemplateRender} collection.
4
4
  */
5
5
  export type TemplateRenders = TemplateRender[];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/template/TemplateRenders.ts"],"sourcesContent":["import {type TemplateRender} from './TemplateRender.js';\n\n/**\n * A collection of template render results.\n */\nexport type TemplateRenders = TemplateRender[];\n"],"names":[],"mappings":"AAAA,WAK+C"}
1
+ {"version":3,"sources":["../../src/template/TemplateRenders.ts"],"sourcesContent":["import {type TemplateRender} from './TemplateRender.js';\n\n/**\n * A {@link TemplateRender} collection.\n */\nexport type TemplateRenders = TemplateRender[];\n"],"names":[],"mappings":"AAAA,WAK+C"}
@@ -4,4 +4,7 @@ export type ApplyTemplateRendersOptions = {
4
4
  path: string;
5
5
  ignoreStrategies: string[];
6
6
  };
7
+ /**
8
+ * Applies rendered Carson template to a specified path, i.e. creates and updates files based on the result of rendering each Carson template file.
9
+ */
7
10
  export declare function applyTemplateRenders({ templateRenders, path: targetPath, ignoreStrategies, }: ApplyTemplateRendersOptions): Promise<void>;
@@ -1,11 +1,16 @@
1
- import fs from 'fs-extra';
1
+ // TODO: can this be fixed?
2
+ /* eslint-disable complexity -- TODO */ import fs from 'fs-extra';
2
3
  import path from 'node:path';
3
4
  import prettier from 'prettier';
5
+ import { CarsonTemplateError } from './CarsonTemplateError.js';
4
6
  import { createUsingTemplateRender, deleteUsingTemplateRender, insertUsingTemplateRender, loadTemplateRenderSnapshots, mergeUsingTemplateRender, overwriteUsingTemplateRender, saveTemplateRenderSnapshots, uninsertUsingTemplateRender, unmergeUsingTemplateRender } from './internals.js';
5
7
  import { CARSON_CONFIG_DIRECTORY, SNAPSHOTS_FILENAME } from '../constants.js';
6
- export async function applyTemplateRenders({ templateRenders, path: targetPath, ignoreStrategies }) {
8
+ /**
9
+ * Applies rendered Carson template to a specified path, i.e. creates and updates files based on the result of rendering each Carson template file.
10
+ */ export async function applyTemplateRenders({ templateRenders, path: targetPath, ignoreStrategies }) {
7
11
  // we need to clear Prettier cache, because we are changing file system
8
12
  prettier.clearConfigCache();
13
+ // first, we read the existing snapshots and use them to undo previous changes
9
14
  let templateRenderSnapshotsPath = path.join(targetPath, CARSON_CONFIG_DIRECTORY, SNAPSHOTS_FILENAME);
10
15
  if (await fs.pathExists(templateRenderSnapshotsPath)) {
11
16
  let templateRenderSnapshots = await loadTemplateRenderSnapshots(templateRenderSnapshotsPath);
@@ -14,6 +19,11 @@ export async function applyTemplateRenders({ templateRenders, path: targetPath,
14
19
  if (ignoreStrategies.includes(strategy)) {
15
20
  continue;
16
21
  }
22
+ if (templateRenderSnapshot.attributes.strategy === 'ensure') {
23
+ await deleteUsingTemplateRender(templateRenderSnapshot, targetPath, {
24
+ onlyDeleteWhenContentsMatch: true
25
+ });
26
+ }
17
27
  if (templateRenderSnapshot.attributes.strategy === 'overwrite') {
18
28
  await deleteUsingTemplateRender(templateRenderSnapshot, targetPath);
19
29
  }
@@ -25,13 +35,24 @@ export async function applyTemplateRenders({ templateRenders, path: targetPath,
25
35
  }
26
36
  }
27
37
  }
28
- if (!ignoreStrategies.includes('create')) {
29
- for (let templateRender of templateRenders){
30
- if (templateRender.attributes.strategy === 'create') {
38
+ // second, we apply strategies that create files
39
+ for (let templateRender of templateRenders){
40
+ let strategy = typeof templateRender.attributes.strategy === 'string' ? templateRender.attributes.strategy : templateRender.attributes.strategy[0];
41
+ if (ignoreStrategies.includes(strategy)) {
42
+ continue;
43
+ }
44
+ if (templateRender.attributes.strategy === 'create') {
45
+ await createUsingTemplateRender(templateRender, targetPath);
46
+ }
47
+ if (templateRender.attributes.strategy === 'ensure') {
48
+ let to = path.join(targetPath, templateRender.attributes.to);
49
+ let doesToExist = await fs.pathExists(to);
50
+ if (!doesToExist) {
31
51
  await createUsingTemplateRender(templateRender, targetPath);
32
52
  }
33
53
  }
34
54
  }
55
+ // third, we apply strategies that change files
35
56
  for (let templateRender of templateRenders){
36
57
  let strategy = typeof templateRender.attributes.strategy === 'string' ? templateRender.attributes.strategy : templateRender.attributes.strategy[0];
37
58
  if (ignoreStrategies.includes(strategy)) {
@@ -50,7 +71,16 @@ export async function applyTemplateRenders({ templateRenders, path: targetPath,
50
71
  let to = path.join(targetPath, templateRender.attributes.to);
51
72
  let doesToExist = await fs.pathExists(to);
52
73
  if (!doesToExist) {
53
- throw new Error(`File "${to}" doesn't exist!`);
74
+ throw new CarsonTemplateError('STRATEGY_MISSING_FILE', {
75
+ messageParameters: [
76
+ templateRender.attributes.strategy,
77
+ templateRender.template.path,
78
+ to
79
+ ],
80
+ data: {
81
+ path: to
82
+ }
83
+ });
54
84
  }
55
85
  }
56
86
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/template/applyTemplateRenders.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\nimport prettier from 'prettier';\n\nimport {\n createUsingTemplateRender,\n deleteUsingTemplateRender,\n insertUsingTemplateRender,\n loadTemplateRenderSnapshots,\n mergeUsingTemplateRender,\n overwriteUsingTemplateRender,\n saveTemplateRenderSnapshots,\n uninsertUsingTemplateRender,\n unmergeUsingTemplateRender,\n} from './internals.js';\nimport {type TemplateRenders} from './TemplateRenders.js';\nimport {CARSON_CONFIG_DIRECTORY, SNAPSHOTS_FILENAME} from '../constants.js';\n\nexport type ApplyTemplateRendersOptions = {\n templateRenders: TemplateRenders;\n path: string;\n ignoreStrategies: string[];\n};\n\nexport async function applyTemplateRenders({\n templateRenders,\n path: targetPath,\n ignoreStrategies,\n}: ApplyTemplateRendersOptions) {\n // we need to clear Prettier cache, because we are changing file system\n prettier.clearConfigCache();\n\n let templateRenderSnapshotsPath = path.join(\n targetPath,\n CARSON_CONFIG_DIRECTORY,\n SNAPSHOTS_FILENAME,\n );\n\n if (await fs.pathExists(templateRenderSnapshotsPath)) {\n let templateRenderSnapshots = await loadTemplateRenderSnapshots(templateRenderSnapshotsPath);\n\n for (let templateRenderSnapshot of templateRenderSnapshots) {\n let strategy =\n typeof templateRenderSnapshot.attributes.strategy === 'string'\n ? templateRenderSnapshot.attributes.strategy\n : templateRenderSnapshot.attributes.strategy[0];\n\n if (ignoreStrategies.includes(strategy)) {\n continue;\n }\n\n if (templateRenderSnapshot.attributes.strategy === 'overwrite') {\n await deleteUsingTemplateRender(templateRenderSnapshot, targetPath);\n }\n\n if (templateRenderSnapshot.attributes.strategy === 'merge') {\n await unmergeUsingTemplateRender(templateRenderSnapshot, targetPath);\n }\n\n if (templateRenderSnapshot.attributes.strategy[0] === 'insert') {\n await uninsertUsingTemplateRender(templateRenderSnapshot, targetPath);\n }\n }\n }\n\n if (!ignoreStrategies.includes('create')) {\n for (let templateRender of templateRenders) {\n if (templateRender.attributes.strategy === 'create') {\n await createUsingTemplateRender(templateRender, targetPath);\n }\n }\n }\n\n for (let templateRender of templateRenders) {\n let strategy =\n typeof templateRender.attributes.strategy === 'string'\n ? templateRender.attributes.strategy\n : templateRender.attributes.strategy[0];\n\n if (ignoreStrategies.includes(strategy)) {\n continue;\n }\n\n if (templateRender.attributes.strategy === 'overwrite') {\n await overwriteUsingTemplateRender(templateRender, targetPath);\n }\n\n if (templateRender.attributes.strategy === 'merge') {\n await mergeUsingTemplateRender(templateRender, targetPath);\n }\n\n if (templateRender.attributes.strategy[0] === 'insert') {\n await insertUsingTemplateRender(templateRender, targetPath);\n }\n\n if (templateRender.attributes.strategy === 'check') {\n let to = path.join(targetPath, templateRender.attributes.to);\n let doesToExist = await fs.pathExists(to);\n\n if (!doesToExist) {\n throw new Error(`File \"${to}\" doesn't exist!`);\n }\n }\n }\n\n await saveTemplateRenderSnapshots(templateRenders, templateRenderSnapshotsPath);\n}\n"],"names":["fs","path","prettier","createUsingTemplateRender","deleteUsingTemplateRender","insertUsingTemplateRender","loadTemplateRenderSnapshots","mergeUsingTemplateRender","overwriteUsingTemplateRender","saveTemplateRenderSnapshots","uninsertUsingTemplateRender","unmergeUsingTemplateRender","CARSON_CONFIG_DIRECTORY","SNAPSHOTS_FILENAME","applyTemplateRenders","templateRenders","targetPath","ignoreStrategies","clearConfigCache","templateRenderSnapshotsPath","join","pathExists","templateRenderSnapshots","templateRenderSnapshot","strategy","attributes","includes","templateRender","to","doesToExist","Error"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAC7B,OAAOC,cAAc,WAAW;AAEhC,SACEC,yBAAyB,EACzBC,yBAAyB,EACzBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,wBAAwB,EACxBC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,0BAA0B,QACrB,iBAAiB;AAExB,SAAQC,uBAAuB,EAAEC,kBAAkB,QAAO,kBAAkB;AAQ5E,OAAO,eAAeC,qBAAqB,EACzCC,eAAe,EACfd,MAAMe,UAAU,EAChBC,gBAAgB,EACY;IAC5B,uEAAuE;IACvEf,SAASgB,gBAAgB;IAEzB,IAAIC,8BAA8BlB,KAAKmB,IAAI,CACzCJ,YACAJ,yBACAC;IAGF,IAAI,MAAMb,GAAGqB,UAAU,CAACF,8BAA8B;QACpD,IAAIG,0BAA0B,MAAMhB,4BAA4Ba;QAEhE,KAAK,IAAII,0BAA0BD,wBAAyB;YAC1D,IAAIE,WACF,OAAOD,uBAAuBE,UAAU,CAACD,QAAQ,KAAK,WAClDD,uBAAuBE,UAAU,CAACD,QAAQ,GAC1CD,uBAAuBE,UAAU,CAACD,QAAQ,CAAC,EAAE;YAEnD,IAAIP,iBAAiBS,QAAQ,CAACF,WAAW;gBACvC;YACF;YAEA,IAAID,uBAAuBE,UAAU,CAACD,QAAQ,KAAK,aAAa;gBAC9D,MAAMpB,0BAA0BmB,wBAAwBP;YAC1D;YAEA,IAAIO,uBAAuBE,UAAU,CAACD,QAAQ,KAAK,SAAS;gBAC1D,MAAMb,2BAA2BY,wBAAwBP;YAC3D;YAEA,IAAIO,uBAAuBE,UAAU,CAACD,QAAQ,CAAC,EAAE,KAAK,UAAU;gBAC9D,MAAMd,4BAA4Ba,wBAAwBP;YAC5D;QACF;IACF;IAEA,IAAI,CAACC,iBAAiBS,QAAQ,CAAC,WAAW;QACxC,KAAK,IAAIC,kBAAkBZ,gBAAiB;YAC1C,IAAIY,eAAeF,UAAU,CAACD,QAAQ,KAAK,UAAU;gBACnD,MAAMrB,0BAA0BwB,gBAAgBX;YAClD;QACF;IACF;IAEA,KAAK,IAAIW,kBAAkBZ,gBAAiB;QAC1C,IAAIS,WACF,OAAOG,eAAeF,UAAU,CAACD,QAAQ,KAAK,WAC1CG,eAAeF,UAAU,CAACD,QAAQ,GAClCG,eAAeF,UAAU,CAACD,QAAQ,CAAC,EAAE;QAE3C,IAAIP,iBAAiBS,QAAQ,CAACF,WAAW;YACvC;QACF;QAEA,IAAIG,eAAeF,UAAU,CAACD,QAAQ,KAAK,aAAa;YACtD,MAAMhB,6BAA6BmB,gBAAgBX;QACrD;QAEA,IAAIW,eAAeF,UAAU,CAACD,QAAQ,KAAK,SAAS;YAClD,MAAMjB,yBAAyBoB,gBAAgBX;QACjD;QAEA,IAAIW,eAAeF,UAAU,CAACD,QAAQ,CAAC,EAAE,KAAK,UAAU;YACtD,MAAMnB,0BAA0BsB,gBAAgBX;QAClD;QAEA,IAAIW,eAAeF,UAAU,CAACD,QAAQ,KAAK,SAAS;YAClD,IAAII,KAAK3B,KAAKmB,IAAI,CAACJ,YAAYW,eAAeF,UAAU,CAACG,EAAE;YAC3D,IAAIC,cAAc,MAAM7B,GAAGqB,UAAU,CAACO;YAEtC,IAAI,CAACC,aAAa;gBAChB,MAAM,IAAIC,MAAM,CAAC,MAAM,EAAEF,GAAG,gBAAgB,CAAC;YAC/C;QACF;IACF;IAEA,MAAMnB,4BAA4BM,iBAAiBI;AACrD"}
1
+ {"version":3,"sources":["../../src/template/applyTemplateRenders.ts"],"sourcesContent":["// TODO: can this be fixed?\n/* eslint-disable complexity -- TODO */\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport prettier from 'prettier';\n\nimport {CarsonTemplateError} from './CarsonTemplateError.js';\nimport {\n createUsingTemplateRender,\n deleteUsingTemplateRender,\n insertUsingTemplateRender,\n loadTemplateRenderSnapshots,\n mergeUsingTemplateRender,\n overwriteUsingTemplateRender,\n saveTemplateRenderSnapshots,\n uninsertUsingTemplateRender,\n unmergeUsingTemplateRender,\n} from './internals.js';\nimport {type TemplateRenders} from './TemplateRenders.js';\nimport {CARSON_CONFIG_DIRECTORY, SNAPSHOTS_FILENAME} from '../constants.js';\n\nexport type ApplyTemplateRendersOptions = {\n templateRenders: TemplateRenders;\n path: string;\n ignoreStrategies: string[];\n};\n\n/**\n * Applies rendered Carson template to a specified path, i.e. creates and updates files based on the result of rendering each Carson template file.\n */\nexport async function applyTemplateRenders({\n templateRenders,\n path: targetPath,\n ignoreStrategies,\n}: ApplyTemplateRendersOptions) {\n // we need to clear Prettier cache, because we are changing file system\n prettier.clearConfigCache();\n\n // first, we read the existing snapshots and use them to undo previous changes\n let templateRenderSnapshotsPath = path.join(\n targetPath,\n CARSON_CONFIG_DIRECTORY,\n SNAPSHOTS_FILENAME,\n );\n\n if (await fs.pathExists(templateRenderSnapshotsPath)) {\n let templateRenderSnapshots = await loadTemplateRenderSnapshots(templateRenderSnapshotsPath);\n\n for (let templateRenderSnapshot of templateRenderSnapshots) {\n let strategy =\n typeof templateRenderSnapshot.attributes.strategy === 'string'\n ? templateRenderSnapshot.attributes.strategy\n : templateRenderSnapshot.attributes.strategy[0];\n\n if (ignoreStrategies.includes(strategy)) {\n continue;\n }\n\n if (templateRenderSnapshot.attributes.strategy === 'ensure') {\n await deleteUsingTemplateRender(templateRenderSnapshot, targetPath, {\n onlyDeleteWhenContentsMatch: true,\n });\n }\n\n if (templateRenderSnapshot.attributes.strategy === 'overwrite') {\n await deleteUsingTemplateRender(templateRenderSnapshot, targetPath);\n }\n\n if (templateRenderSnapshot.attributes.strategy === 'merge') {\n await unmergeUsingTemplateRender(templateRenderSnapshot, targetPath);\n }\n\n if (templateRenderSnapshot.attributes.strategy[0] === 'insert') {\n await uninsertUsingTemplateRender(templateRenderSnapshot, targetPath);\n }\n }\n }\n\n // second, we apply strategies that create files\n for (let templateRender of templateRenders) {\n let strategy =\n typeof templateRender.attributes.strategy === 'string'\n ? templateRender.attributes.strategy\n : templateRender.attributes.strategy[0];\n\n if (ignoreStrategies.includes(strategy)) {\n continue;\n }\n\n if (templateRender.attributes.strategy === 'create') {\n await createUsingTemplateRender(templateRender, targetPath);\n }\n\n if (templateRender.attributes.strategy === 'ensure') {\n let to = path.join(targetPath, templateRender.attributes.to);\n let doesToExist = await fs.pathExists(to);\n\n if (!doesToExist) {\n await createUsingTemplateRender(templateRender, targetPath);\n }\n }\n }\n\n // third, we apply strategies that change files\n for (let templateRender of templateRenders) {\n let strategy =\n typeof templateRender.attributes.strategy === 'string'\n ? templateRender.attributes.strategy\n : templateRender.attributes.strategy[0];\n\n if (ignoreStrategies.includes(strategy)) {\n continue;\n }\n\n if (templateRender.attributes.strategy === 'overwrite') {\n await overwriteUsingTemplateRender(templateRender, targetPath);\n }\n\n if (templateRender.attributes.strategy === 'merge') {\n await mergeUsingTemplateRender(templateRender, targetPath);\n }\n\n if (templateRender.attributes.strategy[0] === 'insert') {\n await insertUsingTemplateRender(templateRender, targetPath);\n }\n\n if (templateRender.attributes.strategy === 'check') {\n let to = path.join(targetPath, templateRender.attributes.to);\n let doesToExist = await fs.pathExists(to);\n\n if (!doesToExist) {\n throw new CarsonTemplateError('STRATEGY_MISSING_FILE', {\n messageParameters: [templateRender.attributes.strategy, templateRender.template.path, to],\n data: {\n path: to,\n },\n });\n }\n }\n }\n\n await saveTemplateRenderSnapshots(templateRenders, templateRenderSnapshotsPath);\n}\n"],"names":["fs","path","prettier","CarsonTemplateError","createUsingTemplateRender","deleteUsingTemplateRender","insertUsingTemplateRender","loadTemplateRenderSnapshots","mergeUsingTemplateRender","overwriteUsingTemplateRender","saveTemplateRenderSnapshots","uninsertUsingTemplateRender","unmergeUsingTemplateRender","CARSON_CONFIG_DIRECTORY","SNAPSHOTS_FILENAME","applyTemplateRenders","templateRenders","targetPath","ignoreStrategies","clearConfigCache","templateRenderSnapshotsPath","join","pathExists","templateRenderSnapshots","templateRenderSnapshot","strategy","attributes","includes","onlyDeleteWhenContentsMatch","templateRender","to","doesToExist","messageParameters","template","data"],"mappings":"AAAA,2BAA2B;AAC3B,qCAAqC,GACrC,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAC7B,OAAOC,cAAc,WAAW;AAEhC,SAAQC,mBAAmB,QAAO,2BAA2B;AAC7D,SACEC,yBAAyB,EACzBC,yBAAyB,EACzBC,yBAAyB,EACzBC,2BAA2B,EAC3BC,wBAAwB,EACxBC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,0BAA0B,QACrB,iBAAiB;AAExB,SAAQC,uBAAuB,EAAEC,kBAAkB,QAAO,kBAAkB;AAQ5E;;CAEC,GACD,OAAO,eAAeC,qBAAqB,EACzCC,eAAe,EACff,MAAMgB,UAAU,EAChBC,gBAAgB,EACY;IAC5B,uEAAuE;IACvEhB,SAASiB,gBAAgB;IAEzB,8EAA8E;IAC9E,IAAIC,8BAA8BnB,KAAKoB,IAAI,CACzCJ,YACAJ,yBACAC;IAGF,IAAI,MAAMd,GAAGsB,UAAU,CAACF,8BAA8B;QACpD,IAAIG,0BAA0B,MAAMhB,4BAA4Ba;QAEhE,KAAK,IAAII,0BAA0BD,wBAAyB;YAC1D,IAAIE,WACF,OAAOD,uBAAuBE,UAAU,CAACD,QAAQ,KAAK,WAClDD,uBAAuBE,UAAU,CAACD,QAAQ,GAC1CD,uBAAuBE,UAAU,CAACD,QAAQ,CAAC,EAAE;YAEnD,IAAIP,iBAAiBS,QAAQ,CAACF,WAAW;gBACvC;YACF;YAEA,IAAID,uBAAuBE,UAAU,CAACD,QAAQ,KAAK,UAAU;gBAC3D,MAAMpB,0BAA0BmB,wBAAwBP,YAAY;oBAClEW,6BAA6B;gBAC/B;YACF;YAEA,IAAIJ,uBAAuBE,UAAU,CAACD,QAAQ,KAAK,aAAa;gBAC9D,MAAMpB,0BAA0BmB,wBAAwBP;YAC1D;YAEA,IAAIO,uBAAuBE,UAAU,CAACD,QAAQ,KAAK,SAAS;gBAC1D,MAAMb,2BAA2BY,wBAAwBP;YAC3D;YAEA,IAAIO,uBAAuBE,UAAU,CAACD,QAAQ,CAAC,EAAE,KAAK,UAAU;gBAC9D,MAAMd,4BAA4Ba,wBAAwBP;YAC5D;QACF;IACF;IAEA,gDAAgD;IAChD,KAAK,IAAIY,kBAAkBb,gBAAiB;QAC1C,IAAIS,WACF,OAAOI,eAAeH,UAAU,CAACD,QAAQ,KAAK,WAC1CI,eAAeH,UAAU,CAACD,QAAQ,GAClCI,eAAeH,UAAU,CAACD,QAAQ,CAAC,EAAE;QAE3C,IAAIP,iBAAiBS,QAAQ,CAACF,WAAW;YACvC;QACF;QAEA,IAAII,eAAeH,UAAU,CAACD,QAAQ,KAAK,UAAU;YACnD,MAAMrB,0BAA0ByB,gBAAgBZ;QAClD;QAEA,IAAIY,eAAeH,UAAU,CAACD,QAAQ,KAAK,UAAU;YACnD,IAAIK,KAAK7B,KAAKoB,IAAI,CAACJ,YAAYY,eAAeH,UAAU,CAACI,EAAE;YAC3D,IAAIC,cAAc,MAAM/B,GAAGsB,UAAU,CAACQ;YAEtC,IAAI,CAACC,aAAa;gBAChB,MAAM3B,0BAA0ByB,gBAAgBZ;YAClD;QACF;IACF;IAEA,+CAA+C;IAC/C,KAAK,IAAIY,kBAAkBb,gBAAiB;QAC1C,IAAIS,WACF,OAAOI,eAAeH,UAAU,CAACD,QAAQ,KAAK,WAC1CI,eAAeH,UAAU,CAACD,QAAQ,GAClCI,eAAeH,UAAU,CAACD,QAAQ,CAAC,EAAE;QAE3C,IAAIP,iBAAiBS,QAAQ,CAACF,WAAW;YACvC;QACF;QAEA,IAAII,eAAeH,UAAU,CAACD,QAAQ,KAAK,aAAa;YACtD,MAAMhB,6BAA6BoB,gBAAgBZ;QACrD;QAEA,IAAIY,eAAeH,UAAU,CAACD,QAAQ,KAAK,SAAS;YAClD,MAAMjB,yBAAyBqB,gBAAgBZ;QACjD;QAEA,IAAIY,eAAeH,UAAU,CAACD,QAAQ,CAAC,EAAE,KAAK,UAAU;YACtD,MAAMnB,0BAA0BuB,gBAAgBZ;QAClD;QAEA,IAAIY,eAAeH,UAAU,CAACD,QAAQ,KAAK,SAAS;YAClD,IAAIK,KAAK7B,KAAKoB,IAAI,CAACJ,YAAYY,eAAeH,UAAU,CAACI,EAAE;YAC3D,IAAIC,cAAc,MAAM/B,GAAGsB,UAAU,CAACQ;YAEtC,IAAI,CAACC,aAAa;gBAChB,MAAM,IAAI5B,oBAAoB,yBAAyB;oBACrD6B,mBAAmB;wBAACH,eAAeH,UAAU,CAACD,QAAQ;wBAAEI,eAAeI,QAAQ,CAAChC,IAAI;wBAAE6B;qBAAG;oBACzFI,MAAM;wBACJjC,MAAM6B;oBACR;gBACF;YACF;QACF;IACF;IAEA,MAAMpB,4BAA4BM,iBAAiBI;AACrD"}
@@ -2,24 +2,37 @@ import { z } from 'zod';
2
2
  export declare const templateRenderSnapshotSchema: z.ZodObject<{
3
3
  attributes: z.ZodObject<{
4
4
  to: z.ZodString;
5
- strategy: z.ZodUnion<[z.ZodLiteral<"create">, z.ZodLiteral<"overwrite">, z.ZodLiteral<"merge">, z.ZodLiteral<"check">, z.ZodTuple<[z.ZodLiteral<"insert">, z.ZodString], null>]>;
5
+ strategy: z.ZodUnion<[z.ZodLiteral<"create">, z.ZodLiteral<"ensure">, z.ZodLiteral<"overwrite">, z.ZodLiteral<"merge">, z.ZodLiteral<"check">, z.ZodTuple<[z.ZodLiteral<"insert">, z.ZodString], null>]>;
6
6
  }, "strict", z.ZodTypeAny, {
7
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
7
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
8
8
  to: string;
9
9
  }, {
10
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
10
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
11
11
  to: string;
12
12
  }>;
13
13
  content: z.ZodString;
14
+ template: z.ZodObject<{
15
+ path: z.ZodString;
16
+ }, "strict", z.ZodTypeAny, {
17
+ path: string;
18
+ }, {
19
+ path: string;
20
+ }>;
14
21
  }, "strict", z.ZodTypeAny, {
22
+ template: {
23
+ path: string;
24
+ };
15
25
  attributes: {
16
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
26
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
17
27
  to: string;
18
28
  };
19
29
  content: string;
20
30
  }, {
31
+ template: {
32
+ path: string;
33
+ };
21
34
  attributes: {
22
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
35
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
23
36
  to: string;
24
37
  };
25
38
  content: string;
@@ -5,7 +5,10 @@ export const templateRenderSnapshotSchema = z.object({
5
5
  attributes: baseTemplateAttributesSchema.pick({
6
6
  to: true
7
7
  }).merge(templateAttributesSchema),
8
- content: z.string()
8
+ content: z.string(),
9
+ template: z.object({
10
+ path: z.string()
11
+ }).strict()
9
12
  }).strict();
10
13
 
11
14
  //# sourceMappingURL=TemplateRenderSnapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/TemplateRenderSnapshot.ts"],"sourcesContent":["import {templateAttributesSchema as baseTemplateAttributesSchema} from '@jakubmazanec/template';\nimport {z} from 'zod';\n\nimport {templateAttributesSchema} from '../TemplateAttributes.js';\n\nexport const templateRenderSnapshotSchema = z\n .object({\n attributes: baseTemplateAttributesSchema.pick({to: true}).merge(templateAttributesSchema),\n content: z.string(),\n })\n .strict();\n\nexport type TemplateRenderSnapshot = z.infer<typeof templateRenderSnapshotSchema>;\n"],"names":["templateAttributesSchema","baseTemplateAttributesSchema","z","templateRenderSnapshotSchema","object","attributes","pick","to","merge","content","string","strict"],"mappings":"AAAA,SAAQA,4BAA4BC,4BAA4B,QAAO,yBAAyB;AAChG,SAAQC,CAAC,QAAO,MAAM;AAEtB,SAAQF,wBAAwB,QAAO,2BAA2B;AAElE,OAAO,MAAMG,+BAA+BD,EACzCE,MAAM,CAAC;IACNC,YAAYJ,6BAA6BK,IAAI,CAAC;QAACC,IAAI;IAAI,GAAGC,KAAK,CAACR;IAChES,SAASP,EAAEQ,MAAM;AACnB,GACCC,MAAM,GAAG"}
1
+ {"version":3,"sources":["../../../src/template/internals/TemplateRenderSnapshot.ts"],"sourcesContent":["import {templateAttributesSchema as baseTemplateAttributesSchema} from '@jakubmazanec/template';\nimport {z} from 'zod';\n\nimport {templateAttributesSchema} from '../TemplateAttributes.js';\n\nexport const templateRenderSnapshotSchema = z\n .object({\n attributes: baseTemplateAttributesSchema.pick({to: true}).merge(templateAttributesSchema),\n content: z.string(),\n template: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type TemplateRenderSnapshot = z.infer<typeof templateRenderSnapshotSchema>;\n"],"names":["templateAttributesSchema","baseTemplateAttributesSchema","z","templateRenderSnapshotSchema","object","attributes","pick","to","merge","content","string","template","path","strict"],"mappings":"AAAA,SAAQA,4BAA4BC,4BAA4B,QAAO,yBAAyB;AAChG,SAAQC,CAAC,QAAO,MAAM;AAEtB,SAAQF,wBAAwB,QAAO,2BAA2B;AAElE,OAAO,MAAMG,+BAA+BD,EACzCE,MAAM,CAAC;IACNC,YAAYJ,6BAA6BK,IAAI,CAAC;QAACC,IAAI;IAAI,GAAGC,KAAK,CAACR;IAChES,SAASP,EAAEQ,MAAM;IACjBC,UAAUT,EACPE,MAAM,CAAC;QACNQ,MAAMV,EAAEQ,MAAM;IAChB,GACCG,MAAM;AACX,GACCA,MAAM,GAAG"}
@@ -2,24 +2,37 @@ import { type z } from 'zod';
2
2
  export declare const templateRenderSnapshotsSchema: z.ZodArray<z.ZodObject<{
3
3
  attributes: z.ZodObject<{
4
4
  to: z.ZodString;
5
- strategy: z.ZodUnion<[z.ZodLiteral<"create">, z.ZodLiteral<"overwrite">, z.ZodLiteral<"merge">, z.ZodLiteral<"check">, z.ZodTuple<[z.ZodLiteral<"insert">, z.ZodString], null>]>;
5
+ strategy: z.ZodUnion<[z.ZodLiteral<"create">, z.ZodLiteral<"ensure">, z.ZodLiteral<"overwrite">, z.ZodLiteral<"merge">, z.ZodLiteral<"check">, z.ZodTuple<[z.ZodLiteral<"insert">, z.ZodString], null>]>;
6
6
  }, "strict", z.ZodTypeAny, {
7
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
7
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
8
8
  to: string;
9
9
  }, {
10
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
10
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
11
11
  to: string;
12
12
  }>;
13
13
  content: z.ZodString;
14
+ template: z.ZodObject<{
15
+ path: z.ZodString;
16
+ }, "strict", z.ZodTypeAny, {
17
+ path: string;
18
+ }, {
19
+ path: string;
20
+ }>;
14
21
  }, "strict", z.ZodTypeAny, {
22
+ template: {
23
+ path: string;
24
+ };
15
25
  attributes: {
16
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
26
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
17
27
  to: string;
18
28
  };
19
29
  content: string;
20
30
  }, {
31
+ template: {
32
+ path: string;
33
+ };
21
34
  attributes: {
22
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
35
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
23
36
  to: string;
24
37
  };
25
38
  content: string;
@@ -1,3 +1,6 @@
1
1
  import { type TemplateRenderSnapshot } from './TemplateRenderSnapshot.js';
2
2
  import { type TemplateRender } from '../TemplateRender.js';
3
- export declare function deleteUsingTemplateRender(templateRender: TemplateRender | TemplateRenderSnapshot, basePath: string): Promise<void>;
3
+ export type DeleteUsingTemplateRenderOptions = {
4
+ onlyDeleteWhenContentsMatch?: boolean;
5
+ };
6
+ export declare function deleteUsingTemplateRender(templateRender: TemplateRender | TemplateRenderSnapshot, basePath: string, options?: DeleteUsingTemplateRenderOptions): Promise<void>;
@@ -1,10 +1,23 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'node:path';
3
- export async function deleteUsingTemplateRender(templateRender, basePath) {
3
+ import { prettify } from './prettify.js';
4
+ export async function deleteUsingTemplateRender(templateRender, basePath, options) {
5
+ var _options;
4
6
  let to = path.join(basePath, templateRender.attributes.to);
5
- if (await fs.pathExists(to)) {
6
- await fs.rm(to);
7
+ if (!await fs.pathExists(to)) {
8
+ return;
7
9
  }
10
+ if ((_options = options) === null || _options === void 0 ? void 0 : _options.onlyDeleteWhenContentsMatch) {
11
+ let existingContent = await fs.readFile(to, {
12
+ encoding: 'utf8'
13
+ });
14
+ let newContent = await prettify(templateRender.content, to);
15
+ if (existingContent.trim() === newContent.trim()) {
16
+ await fs.rm(to);
17
+ }
18
+ return;
19
+ }
20
+ await fs.rm(to);
8
21
  }
9
22
 
10
23
  //# sourceMappingURL=deleteUsingTemplateRender.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/deleteUsingTemplateRender.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport async function deleteUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n basePath: string,\n) {\n let to = path.join(basePath, templateRender.attributes.to);\n\n if (await fs.pathExists(to)) {\n await fs.rm(to);\n }\n}\n"],"names":["fs","path","deleteUsingTemplateRender","templateRender","basePath","to","join","attributes","pathExists","rm"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAK7B,OAAO,eAAeC,0BACpBC,cAAuD,EACvDC,QAAgB;IAEhB,IAAIC,KAAKJ,KAAKK,IAAI,CAACF,UAAUD,eAAeI,UAAU,CAACF,EAAE;IAEzD,IAAI,MAAML,GAAGQ,UAAU,CAACH,KAAK;QAC3B,MAAML,GAAGS,EAAE,CAACJ;IACd;AACF"}
1
+ {"version":3,"sources":["../../../src/template/internals/deleteUsingTemplateRender.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {prettify} from './prettify.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport type DeleteUsingTemplateRenderOptions = {\n onlyDeleteWhenContentsMatch?: boolean;\n};\n\nexport async function deleteUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n basePath: string,\n options?: DeleteUsingTemplateRenderOptions,\n) {\n let to = path.join(basePath, templateRender.attributes.to);\n\n if (!(await fs.pathExists(to))) {\n return;\n }\n\n if (options?.onlyDeleteWhenContentsMatch) {\n let existingContent = await fs.readFile(to, {encoding: 'utf8'});\n let newContent = await prettify(templateRender.content, to);\n\n if (existingContent.trim() === newContent.trim()) {\n await fs.rm(to);\n }\n\n return;\n }\n\n await fs.rm(to);\n}\n"],"names":["fs","path","prettify","deleteUsingTemplateRender","templateRender","basePath","options","to","join","attributes","pathExists","onlyDeleteWhenContentsMatch","existingContent","readFile","encoding","newContent","content","trim","rm"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAE7B,SAAQC,QAAQ,QAAO,gBAAgB;AAQvC,OAAO,eAAeC,0BACpBC,cAAuD,EACvDC,QAAgB,EAChBC,OAA0C;QAQtCA;IANJ,IAAIC,KAAKN,KAAKO,IAAI,CAACH,UAAUD,eAAeK,UAAU,CAACF,EAAE;IAEzD,IAAI,CAAE,MAAMP,GAAGU,UAAU,CAACH,KAAM;QAC9B;IACF;IAEA,KAAID,WAAAA,qBAAAA,+BAAAA,SAASK,2BAA2B,EAAE;QACxC,IAAIC,kBAAkB,MAAMZ,GAAGa,QAAQ,CAACN,IAAI;YAACO,UAAU;QAAM;QAC7D,IAAIC,aAAa,MAAMb,SAASE,eAAeY,OAAO,EAAET;QAExD,IAAIK,gBAAgBK,IAAI,OAAOF,WAAWE,IAAI,IAAI;YAChD,MAAMjB,GAAGkB,EAAE,CAACX;QACd;QAEA;IACF;IAEA,MAAMP,GAAGkB,EAAE,CAACX;AACd"}
@@ -2,6 +2,7 @@ import fs from 'fs-extra';
2
2
  import _ from 'lodash';
3
3
  import path from 'node:path';
4
4
  import { prettify } from './prettify.js';
5
+ import { CarsonTemplateError } from '../CarsonTemplateError.js';
5
6
  export async function insertUsingTemplateRender(templateRender, basePath) {
6
7
  let to = path.join(basePath, templateRender.attributes.to);
7
8
  let extension = path.extname(to);
@@ -23,7 +24,16 @@ export async function insertUsingTemplateRender(templateRender, basePath) {
23
24
  }
24
25
  default:
25
26
  {
26
- throw new Error(`File extension "${extension}" is not supported!`);
27
+ throw new CarsonTemplateError('STRATEGY_UNSUPPORTED_EXTENSION', {
28
+ messageParameters: [
29
+ templateRender.attributes.strategy,
30
+ templateRender.template.path,
31
+ extension
32
+ ],
33
+ data: {
34
+ path: templateRender.template.path
35
+ }
36
+ });
27
37
  }
28
38
  }
29
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/insertUsingTemplateRender.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport _ from 'lodash';\nimport path from 'node:path';\n\nimport {prettify} from './prettify.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport async function insertUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n basePath: string,\n) {\n let to = path.join(basePath, templateRender.attributes.to);\n let extension = path.extname(to);\n\n switch (extension) {\n case '.md': {\n if (await fs.pathExists(to)) {\n let targetFile = await fs.readFile(to, {encoding: 'utf8'});\n let newContent = `<!-- ${templateRender.attributes.strategy[1]} -->${templateRender.content}<!-- ${templateRender.attributes.strategy[1]} -->`;\n let oldContentRegexp = new RegExp(\n `<!--\\\\s*${_.escapeRegExp(\n templateRender.attributes.strategy[1],\n )}\\\\s-->[\\\\s\\\\S]*<!--\\\\s*${_.escapeRegExp(templateRender.attributes.strategy[1])}\\\\s-->`,\n 'u',\n );\n let newFile = targetFile.replace(oldContentRegexp, newContent);\n\n await fs.writeFile(to, await prettify(newFile, to), {encoding: 'utf8'});\n }\n\n break;\n }\n\n default: {\n throw new Error(`File extension \"${extension}\" is not supported!`);\n }\n }\n}\n"],"names":["fs","_","path","prettify","insertUsingTemplateRender","templateRender","basePath","to","join","attributes","extension","extname","pathExists","targetFile","readFile","encoding","newContent","strategy","content","oldContentRegexp","RegExp","escapeRegExp","newFile","replace","writeFile","Error"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,OAAO,SAAS;AACvB,OAAOC,UAAU,YAAY;AAE7B,SAAQC,QAAQ,QAAO,gBAAgB;AAIvC,OAAO,eAAeC,0BACpBC,cAAuD,EACvDC,QAAgB;IAEhB,IAAIC,KAAKL,KAAKM,IAAI,CAACF,UAAUD,eAAeI,UAAU,CAACF,EAAE;IACzD,IAAIG,YAAYR,KAAKS,OAAO,CAACJ;IAE7B,OAAQG;QACN,KAAK;YAAO;gBACV,IAAI,MAAMV,GAAGY,UAAU,CAACL,KAAK;oBAC3B,IAAIM,aAAa,MAAMb,GAAGc,QAAQ,CAACP,IAAI;wBAACQ,UAAU;oBAAM;oBACxD,IAAIC,aAAa,CAAC,KAAK,EAAEX,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAEZ,eAAea,OAAO,CAAC,KAAK,EAAEb,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;oBAC9I,IAAIE,mBAAmB,IAAIC,OACzB,CAAC,QAAQ,EAAEnB,EAAEoB,YAAY,CACvBhB,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EACrC,uBAAuB,EAAEhB,EAAEoB,YAAY,CAAChB,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EACxF;oBAEF,IAAIK,UAAUT,WAAWU,OAAO,CAACJ,kBAAkBH;oBAEnD,MAAMhB,GAAGwB,SAAS,CAACjB,IAAI,MAAMJ,SAASmB,SAASf,KAAK;wBAACQ,UAAU;oBAAM;gBACvE;gBAEA;YACF;QAEA;YAAS;gBACP,MAAM,IAAIU,MAAM,CAAC,gBAAgB,EAAEf,UAAU,mBAAmB,CAAC;YACnE;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/template/internals/insertUsingTemplateRender.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport _ from 'lodash';\nimport path from 'node:path';\n\nimport {prettify} from './prettify.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {CarsonTemplateError} from '../CarsonTemplateError.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport async function insertUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n basePath: string,\n) {\n let to = path.join(basePath, templateRender.attributes.to);\n let extension = path.extname(to);\n\n switch (extension) {\n case '.md': {\n if (await fs.pathExists(to)) {\n let targetFile = await fs.readFile(to, {encoding: 'utf8'});\n let newContent = `<!-- ${templateRender.attributes.strategy[1]} -->${templateRender.content}<!-- ${templateRender.attributes.strategy[1]} -->`;\n let oldContentRegexp = new RegExp(\n `<!--\\\\s*${_.escapeRegExp(\n templateRender.attributes.strategy[1],\n )}\\\\s-->[\\\\s\\\\S]*<!--\\\\s*${_.escapeRegExp(templateRender.attributes.strategy[1])}\\\\s-->`,\n 'u',\n );\n let newFile = targetFile.replace(oldContentRegexp, newContent);\n\n await fs.writeFile(to, await prettify(newFile, to), {encoding: 'utf8'});\n }\n\n break;\n }\n\n default: {\n throw new CarsonTemplateError('STRATEGY_UNSUPPORTED_EXTENSION', {\n messageParameters: [\n templateRender.attributes.strategy,\n templateRender.template.path,\n extension,\n ],\n data: {\n path: templateRender.template.path,\n },\n });\n }\n }\n}\n"],"names":["fs","_","path","prettify","CarsonTemplateError","insertUsingTemplateRender","templateRender","basePath","to","join","attributes","extension","extname","pathExists","targetFile","readFile","encoding","newContent","strategy","content","oldContentRegexp","RegExp","escapeRegExp","newFile","replace","writeFile","messageParameters","template","data"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,OAAO,SAAS;AACvB,OAAOC,UAAU,YAAY;AAE7B,SAAQC,QAAQ,QAAO,gBAAgB;AAEvC,SAAQC,mBAAmB,QAAO,4BAA4B;AAG9D,OAAO,eAAeC,0BACpBC,cAAuD,EACvDC,QAAgB;IAEhB,IAAIC,KAAKN,KAAKO,IAAI,CAACF,UAAUD,eAAeI,UAAU,CAACF,EAAE;IACzD,IAAIG,YAAYT,KAAKU,OAAO,CAACJ;IAE7B,OAAQG;QACN,KAAK;YAAO;gBACV,IAAI,MAAMX,GAAGa,UAAU,CAACL,KAAK;oBAC3B,IAAIM,aAAa,MAAMd,GAAGe,QAAQ,CAACP,IAAI;wBAACQ,UAAU;oBAAM;oBACxD,IAAIC,aAAa,CAAC,KAAK,EAAEX,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAEZ,eAAea,OAAO,CAAC,KAAK,EAAEb,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;oBAC9I,IAAIE,mBAAmB,IAAIC,OACzB,CAAC,QAAQ,EAAEpB,EAAEqB,YAAY,CACvBhB,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EACrC,uBAAuB,EAAEjB,EAAEqB,YAAY,CAAChB,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EACxF;oBAEF,IAAIK,UAAUT,WAAWU,OAAO,CAACJ,kBAAkBH;oBAEnD,MAAMjB,GAAGyB,SAAS,CAACjB,IAAI,MAAML,SAASoB,SAASf,KAAK;wBAACQ,UAAU;oBAAM;gBACvE;gBAEA;YACF;QAEA;YAAS;gBACP,MAAM,IAAIZ,oBAAoB,kCAAkC;oBAC9DsB,mBAAmB;wBACjBpB,eAAeI,UAAU,CAACQ,QAAQ;wBAClCZ,eAAeqB,QAAQ,CAACzB,IAAI;wBAC5BS;qBACD;oBACDiB,MAAM;wBACJ1B,MAAMI,eAAeqB,QAAQ,CAACzB,IAAI;oBACpC;gBACF;YACF;IACF;AACF"}
@@ -1,6 +1,9 @@
1
1
  export declare function loadTemplateRenderSnapshots(templateRenderSnapshotsPath: string): Promise<{
2
+ template: {
3
+ path: string;
4
+ };
2
5
  attributes: {
3
- strategy: ("create" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
6
+ strategy: ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string]) & ("create" | "ensure" | "overwrite" | "merge" | "check" | ["insert", string] | undefined);
4
7
  to: string;
5
8
  };
6
9
  content: string;
@@ -4,6 +4,7 @@ import path from 'node:path';
4
4
  import yaml from 'yaml';
5
5
  import { merge } from './merge.js';
6
6
  import { prettify } from './prettify.js';
7
+ import { CarsonTemplateError } from '../CarsonTemplateError.js';
7
8
  export async function mergeUsingTemplateRender(templateRender, basePath) {
8
9
  let to = path.join(basePath, templateRender.attributes.to);
9
10
  let extension = path.extname(to);
@@ -32,7 +33,16 @@ export async function mergeUsingTemplateRender(templateRender, basePath) {
32
33
  }
33
34
  default:
34
35
  {
35
- throw new Error(`File extension "${extension}" is not supported!`);
36
+ throw new CarsonTemplateError('STRATEGY_UNSUPPORTED_EXTENSION', {
37
+ messageParameters: [
38
+ templateRender.attributes.strategy,
39
+ templateRender.template.path,
40
+ extension
41
+ ],
42
+ data: {
43
+ path: templateRender.template.path
44
+ }
45
+ });
36
46
  }
37
47
  }
38
48
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/mergeUsingTemplateRender.ts"],"sourcesContent":["import {type Json} from '@jakubmazanec/zod-utils';\nimport fs from 'fs-extra';\nimport json from 'json5';\nimport path from 'node:path';\nimport yaml from 'yaml';\n\nimport {merge} from './merge.js';\nimport {prettify} from './prettify.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport async function mergeUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n basePath: string,\n) {\n let to = path.join(basePath, templateRender.attributes.to);\n let extension = path.extname(to);\n\n switch (extension) {\n case '.json': {\n let targetFile = (await fs.readJson(to)) as Json;\n let fileToMerge = json.parse<Json>(templateRender.content);\n let newFile = JSON.stringify(merge(targetFile, fileToMerge));\n\n await fs.writeFile(to, await prettify(newFile, to), {encoding: 'utf8'});\n\n break;\n }\n\n case '.yaml': {\n let targetFile = yaml.parse(await fs.readFile(to, {encoding: 'utf8'})) as unknown;\n let fileToMerge = yaml.parse(templateRender.content) as unknown;\n let newFile = yaml.stringify(merge(targetFile, fileToMerge));\n\n await fs.writeFile(to, await prettify(newFile, to), {encoding: 'utf8'});\n\n break;\n }\n\n default: {\n throw new Error(`File extension \"${extension}\" is not supported!`);\n }\n }\n}\n"],"names":["fs","json","path","yaml","merge","prettify","mergeUsingTemplateRender","templateRender","basePath","to","join","attributes","extension","extname","targetFile","readJson","fileToMerge","parse","content","newFile","JSON","stringify","writeFile","encoding","readFile","Error"],"mappings":"AACA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,QAAQ;AACzB,OAAOC,UAAU,YAAY;AAC7B,OAAOC,UAAU,OAAO;AAExB,SAAQC,KAAK,QAAO,aAAa;AACjC,SAAQC,QAAQ,QAAO,gBAAgB;AAIvC,OAAO,eAAeC,yBACpBC,cAAuD,EACvDC,QAAgB;IAEhB,IAAIC,KAAKP,KAAKQ,IAAI,CAACF,UAAUD,eAAeI,UAAU,CAACF,EAAE;IACzD,IAAIG,YAAYV,KAAKW,OAAO,CAACJ;IAE7B,OAAQG;QACN,KAAK;YAAS;gBACZ,IAAIE,aAAc,MAAMd,GAAGe,QAAQ,CAACN;gBACpC,IAAIO,cAAcf,KAAKgB,KAAK,CAAOV,eAAeW,OAAO;gBACzD,IAAIC,UAAUC,KAAKC,SAAS,CAACjB,MAAMU,YAAYE;gBAE/C,MAAMhB,GAAGsB,SAAS,CAACb,IAAI,MAAMJ,SAASc,SAASV,KAAK;oBAACc,UAAU;gBAAM;gBAErE;YACF;QAEA,KAAK;YAAS;gBACZ,IAAIT,aAAaX,KAAKc,KAAK,CAAC,MAAMjB,GAAGwB,QAAQ,CAACf,IAAI;oBAACc,UAAU;gBAAM;gBACnE,IAAIP,cAAcb,KAAKc,KAAK,CAACV,eAAeW,OAAO;gBACnD,IAAIC,UAAUhB,KAAKkB,SAAS,CAACjB,MAAMU,YAAYE;gBAE/C,MAAMhB,GAAGsB,SAAS,CAACb,IAAI,MAAMJ,SAASc,SAASV,KAAK;oBAACc,UAAU;gBAAM;gBAErE;YACF;QAEA;YAAS;gBACP,MAAM,IAAIE,MAAM,CAAC,gBAAgB,EAAEb,UAAU,mBAAmB,CAAC;YACnE;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/template/internals/mergeUsingTemplateRender.ts"],"sourcesContent":["import {type Json} from '@jakubmazanec/zod-utils';\nimport fs from 'fs-extra';\nimport json from 'json5';\nimport path from 'node:path';\nimport yaml from 'yaml';\n\nimport {merge} from './merge.js';\nimport {prettify} from './prettify.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {CarsonTemplateError} from '../CarsonTemplateError.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport async function mergeUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n basePath: string,\n) {\n let to = path.join(basePath, templateRender.attributes.to);\n let extension = path.extname(to);\n\n switch (extension) {\n case '.json': {\n let targetFile = (await fs.readJson(to)) as Json;\n let fileToMerge = json.parse<Json>(templateRender.content);\n let newFile = JSON.stringify(merge(targetFile, fileToMerge));\n\n await fs.writeFile(to, await prettify(newFile, to), {encoding: 'utf8'});\n\n break;\n }\n\n case '.yaml': {\n let targetFile = yaml.parse(await fs.readFile(to, {encoding: 'utf8'})) as unknown;\n let fileToMerge = yaml.parse(templateRender.content) as unknown;\n let newFile = yaml.stringify(merge(targetFile, fileToMerge));\n\n await fs.writeFile(to, await prettify(newFile, to), {encoding: 'utf8'});\n\n break;\n }\n\n default: {\n throw new CarsonTemplateError('STRATEGY_UNSUPPORTED_EXTENSION', {\n messageParameters: [\n templateRender.attributes.strategy,\n templateRender.template.path,\n extension,\n ],\n data: {\n path: templateRender.template.path,\n },\n });\n }\n }\n}\n"],"names":["fs","json","path","yaml","merge","prettify","CarsonTemplateError","mergeUsingTemplateRender","templateRender","basePath","to","join","attributes","extension","extname","targetFile","readJson","fileToMerge","parse","content","newFile","JSON","stringify","writeFile","encoding","readFile","messageParameters","strategy","template","data"],"mappings":"AACA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,QAAQ;AACzB,OAAOC,UAAU,YAAY;AAC7B,OAAOC,UAAU,OAAO;AAExB,SAAQC,KAAK,QAAO,aAAa;AACjC,SAAQC,QAAQ,QAAO,gBAAgB;AAEvC,SAAQC,mBAAmB,QAAO,4BAA4B;AAG9D,OAAO,eAAeC,yBACpBC,cAAuD,EACvDC,QAAgB;IAEhB,IAAIC,KAAKR,KAAKS,IAAI,CAACF,UAAUD,eAAeI,UAAU,CAACF,EAAE;IACzD,IAAIG,YAAYX,KAAKY,OAAO,CAACJ;IAE7B,OAAQG;QACN,KAAK;YAAS;gBACZ,IAAIE,aAAc,MAAMf,GAAGgB,QAAQ,CAACN;gBACpC,IAAIO,cAAchB,KAAKiB,KAAK,CAAOV,eAAeW,OAAO;gBACzD,IAAIC,UAAUC,KAAKC,SAAS,CAAClB,MAAMW,YAAYE;gBAE/C,MAAMjB,GAAGuB,SAAS,CAACb,IAAI,MAAML,SAASe,SAASV,KAAK;oBAACc,UAAU;gBAAM;gBAErE;YACF;QAEA,KAAK;YAAS;gBACZ,IAAIT,aAAaZ,KAAKe,KAAK,CAAC,MAAMlB,GAAGyB,QAAQ,CAACf,IAAI;oBAACc,UAAU;gBAAM;gBACnE,IAAIP,cAAcd,KAAKe,KAAK,CAACV,eAAeW,OAAO;gBACnD,IAAIC,UAAUjB,KAAKmB,SAAS,CAAClB,MAAMW,YAAYE;gBAE/C,MAAMjB,GAAGuB,SAAS,CAACb,IAAI,MAAML,SAASe,SAASV,KAAK;oBAACc,UAAU;gBAAM;gBAErE;YACF;QAEA;YAAS;gBACP,MAAM,IAAIlB,oBAAoB,kCAAkC;oBAC9DoB,mBAAmB;wBACjBlB,eAAeI,UAAU,CAACe,QAAQ;wBAClCnB,eAAeoB,QAAQ,CAAC1B,IAAI;wBAC5BW;qBACD;oBACDgB,MAAM;wBACJ3B,MAAMM,eAAeoB,QAAQ,CAAC1B,IAAI;oBACpC;gBACF;YACF;IACF;AACF"}
@@ -1,7 +1,12 @@
1
+ import { CarsonTemplateError } from '../CarsonTemplateError.js';
1
2
  export function parseCarsonTemplateId(value) {
2
3
  let parts = value.split(':');
3
4
  if (!parts[0] || !parts[1]) {
4
- throw new Error('Template id is invalid!');
5
+ throw new CarsonTemplateError('INVALID_CARSON_TEMPLATE_ID', {
6
+ messageParameters: [
7
+ value
8
+ ]
9
+ });
5
10
  }
6
11
  return [
7
12
  parts[0],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/parseCarsonTemplateId.ts"],"sourcesContent":["export function parseCarsonTemplateId(value: string): [moduleId: string, templateName: string] {\n let parts = value.split(':');\n\n if (!parts[0] || !parts[1]) {\n throw new Error('Template id is invalid!');\n }\n\n return [parts[0], parts[1]];\n}\n"],"names":["parseCarsonTemplateId","value","parts","split","Error"],"mappings":"AAAA,OAAO,SAASA,sBAAsBC,KAAa;IACjD,IAAIC,QAAQD,MAAME,KAAK,CAAC;IAExB,IAAI,CAACD,KAAK,CAAC,EAAE,IAAI,CAACA,KAAK,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAIE,MAAM;IAClB;IAEA,OAAO;QAACF,KAAK,CAAC,EAAE;QAAEA,KAAK,CAAC,EAAE;KAAC;AAC7B"}
1
+ {"version":3,"sources":["../../../src/template/internals/parseCarsonTemplateId.ts"],"sourcesContent":["import {CarsonTemplateError} from '../CarsonTemplateError.js';\n\nexport function parseCarsonTemplateId(value: string): [moduleId: string, templateName: string] {\n let parts = value.split(':');\n\n if (!parts[0] || !parts[1]) {\n throw new CarsonTemplateError('INVALID_CARSON_TEMPLATE_ID', {\n messageParameters: [value],\n });\n }\n\n return [parts[0], parts[1]];\n}\n"],"names":["CarsonTemplateError","parseCarsonTemplateId","value","parts","split","messageParameters"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,4BAA4B;AAE9D,OAAO,SAASC,sBAAsBC,KAAa;IACjD,IAAIC,QAAQD,MAAME,KAAK,CAAC;IAExB,IAAI,CAACD,KAAK,CAAC,EAAE,IAAI,CAACA,KAAK,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAIH,oBAAoB,8BAA8B;YAC1DK,mBAAmB;gBAACH;aAAM;QAC5B;IACF;IAEA,OAAO;QAACC,KAAK,CAAC,EAAE;QAAEA,KAAK,CAAC,EAAE;KAAC;AAC7B"}
@@ -7,6 +7,7 @@ import { parseCarsonTemplateId } from './parseCarsonTemplateId.js';
7
7
  import { resolveModule } from './resolveModule.js';
8
8
  import { TEMPLATES_PATH, TEMPLATE_CONFIG_FILENAME } from '../../constants.js';
9
9
  import { carsonTemplateConfigSchema } from '../CarsonTemplateConfig.js';
10
+ import { CarsonTemplateError } from '../CarsonTemplateError.js';
10
11
  import { templateAttributesSchema } from '../TemplateAttributes.js';
11
12
  export async function readCarsonTemplate(templateId) {
12
13
  let [moduleId, templateName] = parseCarsonTemplateId(templateId);
@@ -33,7 +34,12 @@ export async function readCarsonTemplate(templateId) {
33
34
  }
34
35
  return carsonTemplate;
35
36
  }
36
- throw new Error(`Template ${templateId} was not found in module ${moduleId}!`);
37
+ throw new CarsonTemplateError('CARSON_TEMPLATE_NOT_FOUND', {
38
+ messageParameters: [
39
+ templateId,
40
+ moduleId
41
+ ]
42
+ });
37
43
  }
38
44
 
39
45
  //# sourceMappingURL=readCarsonTemplate.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/readCarsonTemplate.ts"],"sourcesContent":["import {Template} from '@jakubmazanec/template';\nimport {readFile} from '@jakubmazanec/zod-utils';\nimport glob from 'fast-glob';\nimport fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {parseCarsonTemplateId} from './parseCarsonTemplateId.js';\nimport {resolveModule} from './resolveModule.js';\nimport {TEMPLATES_PATH, TEMPLATE_CONFIG_FILENAME} from '../../constants.js';\nimport {type CarsonTemplate} from '../CarsonTemplate.js';\nimport {carsonTemplateConfigSchema} from '../CarsonTemplateConfig.js';\nimport {templateAttributesSchema} from '../TemplateAttributes.js';\n\nexport async function readCarsonTemplate(templateId: string): Promise<CarsonTemplate> {\n let [moduleId, templateName] = parseCarsonTemplateId(templateId);\n let modulePath = await resolveModule(moduleId);\n let carsonTemplatePath = path.join(modulePath, TEMPLATES_PATH, templateName);\n\n if (await fs.pathExists(carsonTemplatePath)) {\n let templateConfigPath = path.join(carsonTemplatePath, TEMPLATE_CONFIG_FILENAME);\n let templateConfig = await readFile(templateConfigPath, carsonTemplateConfigSchema, {\n throwOnZodError: true,\n });\n let templateFilePaths = await glob('**/*.ejs', {\n cwd: carsonTemplatePath,\n dot: true,\n });\n let carsonTemplate: CarsonTemplate = {\n name: templateName,\n config: templateConfig,\n files: [],\n };\n\n for (let templateFilePath of templateFilePaths) {\n carsonTemplate.files.push(\n await Template.read(path.join(carsonTemplatePath, templateFilePath), {\n attributesSchema: templateAttributesSchema,\n }),\n );\n }\n\n return carsonTemplate;\n }\n\n throw new Error(`Template ${templateId} was not found in module ${moduleId}!`);\n}\n"],"names":["Template","readFile","glob","fs","path","parseCarsonTemplateId","resolveModule","TEMPLATES_PATH","TEMPLATE_CONFIG_FILENAME","carsonTemplateConfigSchema","templateAttributesSchema","readCarsonTemplate","templateId","moduleId","templateName","modulePath","carsonTemplatePath","join","pathExists","templateConfigPath","templateConfig","throwOnZodError","templateFilePaths","cwd","dot","carsonTemplate","name","config","files","templateFilePath","push","read","attributesSchema","Error"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,yBAAyB;AAChD,SAAQC,QAAQ,QAAO,0BAA0B;AACjD,OAAOC,UAAU,YAAY;AAC7B,OAAOC,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAE7B,SAAQC,qBAAqB,QAAO,6BAA6B;AACjE,SAAQC,aAAa,QAAO,qBAAqB;AACjD,SAAQC,cAAc,EAAEC,wBAAwB,QAAO,qBAAqB;AAE5E,SAAQC,0BAA0B,QAAO,6BAA6B;AACtE,SAAQC,wBAAwB,QAAO,2BAA2B;AAElE,OAAO,eAAeC,mBAAmBC,UAAkB;IACzD,IAAI,CAACC,UAAUC,aAAa,GAAGT,sBAAsBO;IACrD,IAAIG,aAAa,MAAMT,cAAcO;IACrC,IAAIG,qBAAqBZ,KAAKa,IAAI,CAACF,YAAYR,gBAAgBO;IAE/D,IAAI,MAAMX,GAAGe,UAAU,CAACF,qBAAqB;QAC3C,IAAIG,qBAAqBf,KAAKa,IAAI,CAACD,oBAAoBR;QACvD,IAAIY,iBAAiB,MAAMnB,SAASkB,oBAAoBV,4BAA4B;YAClFY,iBAAiB;QACnB;QACA,IAAIC,oBAAoB,MAAMpB,KAAK,YAAY;YAC7CqB,KAAKP;YACLQ,KAAK;QACP;QACA,IAAIC,iBAAiC;YACnCC,MAAMZ;YACNa,QAAQP;YACRQ,OAAO,EAAE;QACX;QAEA,KAAK,IAAIC,oBAAoBP,kBAAmB;YAC9CG,eAAeG,KAAK,CAACE,IAAI,CACvB,MAAM9B,SAAS+B,IAAI,CAAC3B,KAAKa,IAAI,CAACD,oBAAoBa,mBAAmB;gBACnEG,kBAAkBtB;YACpB;QAEJ;QAEA,OAAOe;IACT;IAEA,MAAM,IAAIQ,MAAM,CAAC,SAAS,EAAErB,WAAW,yBAAyB,EAAEC,SAAS,CAAC,CAAC;AAC/E"}
1
+ {"version":3,"sources":["../../../src/template/internals/readCarsonTemplate.ts"],"sourcesContent":["import {Template} from '@jakubmazanec/template';\nimport {readFile} from '@jakubmazanec/zod-utils';\nimport glob from 'fast-glob';\nimport fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {parseCarsonTemplateId} from './parseCarsonTemplateId.js';\nimport {resolveModule} from './resolveModule.js';\nimport {TEMPLATES_PATH, TEMPLATE_CONFIG_FILENAME} from '../../constants.js';\nimport {type CarsonTemplate} from '../CarsonTemplate.js';\nimport {carsonTemplateConfigSchema} from '../CarsonTemplateConfig.js';\nimport {CarsonTemplateError} from '../CarsonTemplateError.js';\nimport {templateAttributesSchema} from '../TemplateAttributes.js';\n\nexport async function readCarsonTemplate(templateId: string): Promise<CarsonTemplate> {\n let [moduleId, templateName] = parseCarsonTemplateId(templateId);\n let modulePath = await resolveModule(moduleId);\n let carsonTemplatePath = path.join(modulePath, TEMPLATES_PATH, templateName);\n\n if (await fs.pathExists(carsonTemplatePath)) {\n let templateConfigPath = path.join(carsonTemplatePath, TEMPLATE_CONFIG_FILENAME);\n let templateConfig = await readFile(templateConfigPath, carsonTemplateConfigSchema, {\n throwOnZodError: true,\n });\n let templateFilePaths = await glob('**/*.ejs', {\n cwd: carsonTemplatePath,\n dot: true,\n });\n let carsonTemplate: CarsonTemplate = {\n name: templateName,\n config: templateConfig,\n files: [],\n };\n\n for (let templateFilePath of templateFilePaths) {\n carsonTemplate.files.push(\n await Template.read(path.join(carsonTemplatePath, templateFilePath), {\n attributesSchema: templateAttributesSchema,\n }),\n );\n }\n\n return carsonTemplate;\n }\n\n throw new CarsonTemplateError('CARSON_TEMPLATE_NOT_FOUND', {\n messageParameters: [templateId, moduleId],\n });\n}\n"],"names":["Template","readFile","glob","fs","path","parseCarsonTemplateId","resolveModule","TEMPLATES_PATH","TEMPLATE_CONFIG_FILENAME","carsonTemplateConfigSchema","CarsonTemplateError","templateAttributesSchema","readCarsonTemplate","templateId","moduleId","templateName","modulePath","carsonTemplatePath","join","pathExists","templateConfigPath","templateConfig","throwOnZodError","templateFilePaths","cwd","dot","carsonTemplate","name","config","files","templateFilePath","push","read","attributesSchema","messageParameters"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,yBAAyB;AAChD,SAAQC,QAAQ,QAAO,0BAA0B;AACjD,OAAOC,UAAU,YAAY;AAC7B,OAAOC,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAE7B,SAAQC,qBAAqB,QAAO,6BAA6B;AACjE,SAAQC,aAAa,QAAO,qBAAqB;AACjD,SAAQC,cAAc,EAAEC,wBAAwB,QAAO,qBAAqB;AAE5E,SAAQC,0BAA0B,QAAO,6BAA6B;AACtE,SAAQC,mBAAmB,QAAO,4BAA4B;AAC9D,SAAQC,wBAAwB,QAAO,2BAA2B;AAElE,OAAO,eAAeC,mBAAmBC,UAAkB;IACzD,IAAI,CAACC,UAAUC,aAAa,GAAGV,sBAAsBQ;IACrD,IAAIG,aAAa,MAAMV,cAAcQ;IACrC,IAAIG,qBAAqBb,KAAKc,IAAI,CAACF,YAAYT,gBAAgBQ;IAE/D,IAAI,MAAMZ,GAAGgB,UAAU,CAACF,qBAAqB;QAC3C,IAAIG,qBAAqBhB,KAAKc,IAAI,CAACD,oBAAoBT;QACvD,IAAIa,iBAAiB,MAAMpB,SAASmB,oBAAoBX,4BAA4B;YAClFa,iBAAiB;QACnB;QACA,IAAIC,oBAAoB,MAAMrB,KAAK,YAAY;YAC7CsB,KAAKP;YACLQ,KAAK;QACP;QACA,IAAIC,iBAAiC;YACnCC,MAAMZ;YACNa,QAAQP;YACRQ,OAAO,EAAE;QACX;QAEA,KAAK,IAAIC,oBAAoBP,kBAAmB;YAC9CG,eAAeG,KAAK,CAACE,IAAI,CACvB,MAAM/B,SAASgC,IAAI,CAAC5B,KAAKc,IAAI,CAACD,oBAAoBa,mBAAmB;gBACnEG,kBAAkBtB;YACpB;QAEJ;QAEA,OAAOe;IACT;IAEA,MAAM,IAAIhB,oBAAoB,6BAA6B;QACzDwB,mBAAmB;YAACrB;YAAYC;SAAS;IAC3C;AACF"}
@@ -3,18 +3,18 @@ import fs from 'fs-extra';
3
3
  export async function saveTemplateRenderSnapshots(templateRenders, templateRenderSnapshotsPath) {
4
4
  let templateRendersSnapshots = [];
5
5
  for (let templateRender of templateRenders){
6
- if (templateRender.attributes.strategy === 'overwrite' || templateRender.attributes.strategy === 'merge' || templateRender.attributes.strategy[0] === 'insert') {
6
+ if (templateRender.attributes.strategy === 'ensure' || templateRender.attributes.strategy === 'overwrite' || templateRender.attributes.strategy === 'merge' || templateRender.attributes.strategy[0] === 'insert') {
7
7
  templateRendersSnapshots.push({
8
8
  attributes: {
9
9
  to: templateRender.attributes.to,
10
10
  strategy: templateRender.attributes.strategy
11
11
  },
12
- content: templateRender.content
12
+ content: templateRender.content,
13
+ template: templateRender.template
13
14
  });
14
15
  }
15
16
  }
16
- let uncompressedSnapshots = JSON.stringify(templateRendersSnapshots);
17
- await fs.writeFile(templateRenderSnapshotsPath, deflateSync(strToU8(uncompressedSnapshots), {
17
+ await fs.writeFile(templateRenderSnapshotsPath, deflateSync(strToU8(JSON.stringify(templateRendersSnapshots)), {
18
18
  level: 1,
19
19
  mem: 0
20
20
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/saveTemplateRenderSnapshots.ts"],"sourcesContent":["import {deflateSync, strToU8} from 'fflate';\nimport fs from 'fs-extra';\n\nimport {type TemplateRenderSnapshots} from './TemplateRenderSnapshots.js';\nimport {type TemplateRenders} from '../TemplateRenders.js';\n\nexport async function saveTemplateRenderSnapshots(\n templateRenders: TemplateRenders,\n templateRenderSnapshotsPath: string,\n) {\n let templateRendersSnapshots: TemplateRenderSnapshots = [];\n\n for (let templateRender of templateRenders) {\n if (\n templateRender.attributes.strategy === 'overwrite' ||\n templateRender.attributes.strategy === 'merge' ||\n templateRender.attributes.strategy[0] === 'insert'\n ) {\n templateRendersSnapshots.push({\n attributes: {\n to: templateRender.attributes.to,\n strategy: templateRender.attributes.strategy,\n },\n content: templateRender.content,\n });\n }\n }\n let uncompressedSnapshots = JSON.stringify(templateRendersSnapshots);\n\n await fs.writeFile(\n templateRenderSnapshotsPath,\n deflateSync(strToU8(uncompressedSnapshots), {level: 1, mem: 0}),\n );\n}\n"],"names":["deflateSync","strToU8","fs","saveTemplateRenderSnapshots","templateRenders","templateRenderSnapshotsPath","templateRendersSnapshots","templateRender","attributes","strategy","push","to","content","uncompressedSnapshots","JSON","stringify","writeFile","level","mem"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,OAAO,QAAO,SAAS;AAC5C,OAAOC,QAAQ,WAAW;AAK1B,OAAO,eAAeC,4BACpBC,eAAgC,EAChCC,2BAAmC;IAEnC,IAAIC,2BAAoD,EAAE;IAE1D,KAAK,IAAIC,kBAAkBH,gBAAiB;QAC1C,IACEG,eAAeC,UAAU,CAACC,QAAQ,KAAK,eACvCF,eAAeC,UAAU,CAACC,QAAQ,KAAK,WACvCF,eAAeC,UAAU,CAACC,QAAQ,CAAC,EAAE,KAAK,UAC1C;YACAH,yBAAyBI,IAAI,CAAC;gBAC5BF,YAAY;oBACVG,IAAIJ,eAAeC,UAAU,CAACG,EAAE;oBAChCF,UAAUF,eAAeC,UAAU,CAACC,QAAQ;gBAC9C;gBACAG,SAASL,eAAeK,OAAO;YACjC;QACF;IACF;IACA,IAAIC,wBAAwBC,KAAKC,SAAS,CAACT;IAE3C,MAAMJ,GAAGc,SAAS,CAChBX,6BACAL,YAAYC,QAAQY,wBAAwB;QAACI,OAAO;QAAGC,KAAK;IAAC;AAEjE"}
1
+ {"version":3,"sources":["../../../src/template/internals/saveTemplateRenderSnapshots.ts"],"sourcesContent":["import {deflateSync, strToU8} from 'fflate';\nimport fs from 'fs-extra';\n\nimport {type TemplateRenderSnapshots} from './TemplateRenderSnapshots.js';\nimport {type TemplateRenders} from '../TemplateRenders.js';\n\nexport async function saveTemplateRenderSnapshots(\n templateRenders: TemplateRenders,\n templateRenderSnapshotsPath: string,\n) {\n let templateRendersSnapshots: TemplateRenderSnapshots = [];\n\n for (let templateRender of templateRenders) {\n if (\n templateRender.attributes.strategy === 'ensure' ||\n templateRender.attributes.strategy === 'overwrite' ||\n templateRender.attributes.strategy === 'merge' ||\n templateRender.attributes.strategy[0] === 'insert'\n ) {\n templateRendersSnapshots.push({\n attributes: {\n to: templateRender.attributes.to,\n strategy: templateRender.attributes.strategy,\n },\n content: templateRender.content,\n template: templateRender.template,\n });\n }\n }\n\n await fs.writeFile(\n templateRenderSnapshotsPath,\n deflateSync(strToU8(JSON.stringify(templateRendersSnapshots)), {level: 1, mem: 0}),\n );\n}\n"],"names":["deflateSync","strToU8","fs","saveTemplateRenderSnapshots","templateRenders","templateRenderSnapshotsPath","templateRendersSnapshots","templateRender","attributes","strategy","push","to","content","template","writeFile","JSON","stringify","level","mem"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,OAAO,QAAO,SAAS;AAC5C,OAAOC,QAAQ,WAAW;AAK1B,OAAO,eAAeC,4BACpBC,eAAgC,EAChCC,2BAAmC;IAEnC,IAAIC,2BAAoD,EAAE;IAE1D,KAAK,IAAIC,kBAAkBH,gBAAiB;QAC1C,IACEG,eAAeC,UAAU,CAACC,QAAQ,KAAK,YACvCF,eAAeC,UAAU,CAACC,QAAQ,KAAK,eACvCF,eAAeC,UAAU,CAACC,QAAQ,KAAK,WACvCF,eAAeC,UAAU,CAACC,QAAQ,CAAC,EAAE,KAAK,UAC1C;YACAH,yBAAyBI,IAAI,CAAC;gBAC5BF,YAAY;oBACVG,IAAIJ,eAAeC,UAAU,CAACG,EAAE;oBAChCF,UAAUF,eAAeC,UAAU,CAACC,QAAQ;gBAC9C;gBACAG,SAASL,eAAeK,OAAO;gBAC/BC,UAAUN,eAAeM,QAAQ;YACnC;QACF;IACF;IAEA,MAAMX,GAAGY,SAAS,CAChBT,6BACAL,YAAYC,QAAQc,KAAKC,SAAS,CAACV,4BAA4B;QAACW,OAAO;QAAGC,KAAK;IAAC;AAEpF"}
@@ -2,6 +2,7 @@ import fs from 'fs-extra';
2
2
  import _ from 'lodash';
3
3
  import path from 'node:path';
4
4
  import { prettify } from './prettify.js';
5
+ import { CarsonTemplateError } from '../CarsonTemplateError.js';
5
6
  export async function uninsertUsingTemplateRender(templateRender, basePath) {
6
7
  let to = path.join(basePath, templateRender.attributes.to);
7
8
  let extension = path.extname(to);
@@ -23,7 +24,16 @@ export async function uninsertUsingTemplateRender(templateRender, basePath) {
23
24
  }
24
25
  default:
25
26
  {
26
- throw new Error(`File extension "${extension}" is not supported!`);
27
+ throw new CarsonTemplateError('STRATEGY_UNSUPPORTED_EXTENSION', {
28
+ messageParameters: [
29
+ templateRender.attributes.strategy,
30
+ templateRender.template.path,
31
+ extension
32
+ ],
33
+ data: {
34
+ path: templateRender.template.path
35
+ }
36
+ });
27
37
  }
28
38
  }
29
39
  }