@jakubmazanec/carson 0.1.0-11dd4a3

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 (307) hide show
  1. package/LICENSE.md +661 -0
  2. package/README.md +237 -0
  3. package/bin/carson.js +3 -0
  4. package/dist/commands/create-project/CreateProject.d.ts +8 -0
  5. package/dist/commands/create-project/CreateProject.js +138 -0
  6. package/dist/commands/create-project/CreateProject.js.map +1 -0
  7. package/dist/commands/create-project/CreateProjectInput.d.ts +20 -0
  8. package/dist/commands/create-project/CreateProjectInput.js +31 -0
  9. package/dist/commands/create-project/CreateProjectInput.js.map +1 -0
  10. package/dist/commands/create-project/createProjectCommand.d.ts +12 -0
  11. package/dist/commands/create-project/createProjectCommand.js +31 -0
  12. package/dist/commands/create-project/createProjectCommand.js.map +1 -0
  13. package/dist/commands/create-project/runCreateProject.d.ts +13 -0
  14. package/dist/commands/create-project/runCreateProject.js +34 -0
  15. package/dist/commands/create-project/runCreateProject.js.map +1 -0
  16. package/dist/commands/create-project.d.ts +4 -0
  17. package/dist/commands/create-project.js +6 -0
  18. package/dist/commands/create-project.js.map +1 -0
  19. package/dist/commands/create-workspace/CreateWorkspace.d.ts +7 -0
  20. package/dist/commands/create-workspace/CreateWorkspace.js +102 -0
  21. package/dist/commands/create-workspace/CreateWorkspace.js.map +1 -0
  22. package/dist/commands/create-workspace/CreateWorkspaceInput.d.ts +11 -0
  23. package/dist/commands/create-workspace/CreateWorkspaceInput.js +17 -0
  24. package/dist/commands/create-workspace/CreateWorkspaceInput.js.map +1 -0
  25. package/dist/commands/create-workspace/createWorkspaceCommand.d.ts +9 -0
  26. package/dist/commands/create-workspace/createWorkspaceCommand.js +30 -0
  27. package/dist/commands/create-workspace/createWorkspaceCommand.js.map +1 -0
  28. package/dist/commands/create-workspace/runCreateWorkspace.d.ts +10 -0
  29. package/dist/commands/create-workspace/runCreateWorkspace.js +33 -0
  30. package/dist/commands/create-workspace/runCreateWorkspace.js.map +1 -0
  31. package/dist/commands/create-workspace.d.ts +4 -0
  32. package/dist/commands/create-workspace.js +6 -0
  33. package/dist/commands/create-workspace.js.map +1 -0
  34. package/dist/commands/internals/packageNameToDirectory.d.ts +1 -0
  35. package/dist/commands/internals/packageNameToDirectory.js +12 -0
  36. package/dist/commands/internals/packageNameToDirectory.js.map +1 -0
  37. package/dist/commands/internals.d.ts +1 -0
  38. package/dist/commands/internals.js +3 -0
  39. package/dist/commands/internals.js.map +1 -0
  40. package/dist/commands/update-workspace/UpdateWorkspace.d.ts +8 -0
  41. package/dist/commands/update-workspace/UpdateWorkspace.js +71 -0
  42. package/dist/commands/update-workspace/UpdateWorkspace.js.map +1 -0
  43. package/dist/commands/update-workspace/runUpdateWorkspace.d.ts +10 -0
  44. package/dist/commands/update-workspace/runUpdateWorkspace.js +25 -0
  45. package/dist/commands/update-workspace/runUpdateWorkspace.js.map +1 -0
  46. package/dist/commands/update-workspace/updateWorkspaceCommand.d.ts +6 -0
  47. package/dist/commands/update-workspace/updateWorkspaceCommand.js +25 -0
  48. package/dist/commands/update-workspace/updateWorkspaceCommand.js.map +1 -0
  49. package/dist/commands/update-workspace.d.ts +3 -0
  50. package/dist/commands/update-workspace.js +5 -0
  51. package/dist/commands/update-workspace.js.map +1 -0
  52. package/dist/commands.d.ts +3 -0
  53. package/dist/commands.js +5 -0
  54. package/dist/commands.js.map +1 -0
  55. package/dist/constants.d.ts +7 -0
  56. package/dist/constants.js +16 -0
  57. package/dist/constants.js.map +1 -0
  58. package/dist/main.d.ts +3 -0
  59. package/dist/main.js +5 -0
  60. package/dist/main.js.map +1 -0
  61. package/dist/modules.d.js +2 -0
  62. package/dist/modules.d.js.map +1 -0
  63. package/dist/run.d.ts +1 -0
  64. package/dist/run.js +18 -0
  65. package/dist/run.js.map +1 -0
  66. package/dist/template/CarsonTemplate.d.ts +9 -0
  67. package/dist/template/CarsonTemplate.js +3 -0
  68. package/dist/template/CarsonTemplate.js.map +1 -0
  69. package/dist/template/CarsonTemplateConfig.d.ts +12 -0
  70. package/dist/template/CarsonTemplateConfig.js +7 -0
  71. package/dist/template/CarsonTemplateConfig.js.map +1 -0
  72. package/dist/template/TemplateAttributes.d.ts +9 -0
  73. package/dist/template/TemplateAttributes.js +16 -0
  74. package/dist/template/TemplateAttributes.js.map +1 -0
  75. package/dist/template/TemplateData.d.ts +35 -0
  76. package/dist/template/TemplateData.js +13 -0
  77. package/dist/template/TemplateData.js.map +1 -0
  78. package/dist/template/TemplateRender.d.ts +4 -0
  79. package/dist/template/TemplateRender.js +3 -0
  80. package/dist/template/TemplateRender.js.map +1 -0
  81. package/dist/template/TemplateRenderSnapshot.d.ts +27 -0
  82. package/dist/template/TemplateRenderSnapshot.js +11 -0
  83. package/dist/template/TemplateRenderSnapshot.js.map +1 -0
  84. package/dist/template/TemplateRenderSnapshots.d.ts +27 -0
  85. package/dist/template/TemplateRenderSnapshots.js +4 -0
  86. package/dist/template/TemplateRenderSnapshots.js.map +1 -0
  87. package/dist/template/TemplateRenders.d.ts +2 -0
  88. package/dist/template/TemplateRenders.js +3 -0
  89. package/dist/template/TemplateRenders.js.map +1 -0
  90. package/dist/template/applyTemplateRenders.d.ts +8 -0
  91. package/dist/template/applyTemplateRenders.js +60 -0
  92. package/dist/template/applyTemplateRenders.js.map +1 -0
  93. package/dist/template/createFileUsingTemplateRender.d.ts +2 -0
  94. package/dist/template/createFileUsingTemplateRender.js +12 -0
  95. package/dist/template/createFileUsingTemplateRender.js.map +1 -0
  96. package/dist/template/deleteFileUsingTemplateRender.d.ts +2 -0
  97. package/dist/template/deleteFileUsingTemplateRender.js +10 -0
  98. package/dist/template/deleteFileUsingTemplateRender.js.map +1 -0
  99. package/dist/template/importCarsonTemplate.d.ts +3 -0
  100. package/dist/template/importCarsonTemplate.js +8 -0
  101. package/dist/template/importCarsonTemplate.js.map +1 -0
  102. package/dist/template/insertUsingTemplateRender.d.ts +2 -0
  103. package/dist/template/insertUsingTemplateRender.js +29 -0
  104. package/dist/template/insertUsingTemplateRender.js.map +1 -0
  105. package/dist/template/internals/merge.d.ts +4 -0
  106. package/dist/template/internals/merge.js +30 -0
  107. package/dist/template/internals/merge.js.map +1 -0
  108. package/dist/template/internals/prettify.d.ts +1 -0
  109. package/dist/template/internals/prettify.js +25 -0
  110. package/dist/template/internals/prettify.js.map +1 -0
  111. package/dist/template/internals/unmerge.d.ts +4 -0
  112. package/dist/template/internals/unmerge.js +31 -0
  113. package/dist/template/internals/unmerge.js.map +1 -0
  114. package/dist/template/internals.d.ts +3 -0
  115. package/dist/template/internals.js +5 -0
  116. package/dist/template/internals.js.map +1 -0
  117. package/dist/template/loadTemplateRenderSnapshots.d.ts +7 -0
  118. package/dist/template/loadTemplateRenderSnapshots.js +14 -0
  119. package/dist/template/loadTemplateRenderSnapshots.js.map +1 -0
  120. package/dist/template/mergeFileUsingTemplateRender.d.ts +2 -0
  121. package/dist/template/mergeFileUsingTemplateRender.js +39 -0
  122. package/dist/template/mergeFileUsingTemplateRender.js.map +1 -0
  123. package/dist/template/overwriteFileUsingTemplateRender.d.ts +2 -0
  124. package/dist/template/overwriteFileUsingTemplateRender.js +12 -0
  125. package/dist/template/overwriteFileUsingTemplateRender.js.map +1 -0
  126. package/dist/template/parseTemplateId.d.ts +1 -0
  127. package/dist/template/parseTemplateId.js +12 -0
  128. package/dist/template/parseTemplateId.js.map +1 -0
  129. package/dist/template/readCarsonTemplate.d.ts +2 -0
  130. package/dist/template/readCarsonTemplate.js +39 -0
  131. package/dist/template/readCarsonTemplate.js.map +1 -0
  132. package/dist/template/renderTemplate.d.ts +7 -0
  133. package/dist/template/renderTemplate.js +19 -0
  134. package/dist/template/renderTemplate.js.map +1 -0
  135. package/dist/template/resolveTemplateModule.d.ts +1 -0
  136. package/dist/template/resolveTemplateModule.js +9 -0
  137. package/dist/template/resolveTemplateModule.js.map +1 -0
  138. package/dist/template/saveTemplateRenderSnapshots.d.ts +2 -0
  139. package/dist/template/saveTemplateRenderSnapshots.js +23 -0
  140. package/dist/template/saveTemplateRenderSnapshots.js.map +1 -0
  141. package/dist/template/uninsertUsingTemplateRender.d.ts +2 -0
  142. package/dist/template/uninsertUsingTemplateRender.js +29 -0
  143. package/dist/template/uninsertUsingTemplateRender.js.map +1 -0
  144. package/dist/template/unmergeFileUsingTemplateRender.d.ts +2 -0
  145. package/dist/template/unmergeFileUsingTemplateRender.js +39 -0
  146. package/dist/template/unmergeFileUsingTemplateRender.js.map +1 -0
  147. package/dist/template.d.ts +20 -0
  148. package/dist/template.js +22 -0
  149. package/dist/template.js.map +1 -0
  150. package/dist/workspace/Project.d.ts +33 -0
  151. package/dist/workspace/Project.js +184 -0
  152. package/dist/workspace/Project.js.map +1 -0
  153. package/dist/workspace/ProjectConfig.d.ts +9 -0
  154. package/dist/workspace/ProjectConfig.js +6 -0
  155. package/dist/workspace/ProjectConfig.js.map +1 -0
  156. package/dist/workspace/ProjectCreateOptions.d.ts +8 -0
  157. package/dist/workspace/ProjectCreateOptions.js +3 -0
  158. package/dist/workspace/ProjectCreateOptions.js.map +1 -0
  159. package/dist/workspace/ProjectError.d.ts +8 -0
  160. package/dist/workspace/ProjectError.js +11 -0
  161. package/dist/workspace/ProjectError.js.map +1 -0
  162. package/dist/workspace/ProjectOptions.d.ts +15 -0
  163. package/dist/workspace/ProjectOptions.js +3 -0
  164. package/dist/workspace/ProjectOptions.js.map +1 -0
  165. package/dist/workspace/ProjectUpdateOptions.d.ts +3 -0
  166. package/dist/workspace/ProjectUpdateOptions.js +3 -0
  167. package/dist/workspace/ProjectUpdateOptions.js.map +1 -0
  168. package/dist/workspace/Workspace.d.ts +68 -0
  169. package/dist/workspace/Workspace.js +426 -0
  170. package/dist/workspace/Workspace.js.map +1 -0
  171. package/dist/workspace/WorkspaceConfig.d.ts +9 -0
  172. package/dist/workspace/WorkspaceConfig.js +6 -0
  173. package/dist/workspace/WorkspaceConfig.js.map +1 -0
  174. package/dist/workspace/WorkspaceCreateOptions.d.ts +5 -0
  175. package/dist/workspace/WorkspaceCreateOptions.js +3 -0
  176. package/dist/workspace/WorkspaceCreateOptions.js.map +1 -0
  177. package/dist/workspace/WorkspaceCreateProjectOptions.d.ts +6 -0
  178. package/dist/workspace/WorkspaceCreateProjectOptions.js +3 -0
  179. package/dist/workspace/WorkspaceCreateProjectOptions.js.map +1 -0
  180. package/dist/workspace/WorkspaceDependencies.d.ts +30 -0
  181. package/dist/workspace/WorkspaceDependencies.js +126 -0
  182. package/dist/workspace/WorkspaceDependencies.js.map +1 -0
  183. package/dist/workspace/WorkspaceError.d.ts +8 -0
  184. package/dist/workspace/WorkspaceError.js +13 -0
  185. package/dist/workspace/WorkspaceError.js.map +1 -0
  186. package/dist/workspace/WorkspaceOptions.d.ts +25 -0
  187. package/dist/workspace/WorkspaceOptions.js +3 -0
  188. package/dist/workspace/WorkspaceOptions.js.map +1 -0
  189. package/dist/workspace/WorkspaceOptionsProjectOptions.d.ts +7 -0
  190. package/dist/workspace/WorkspaceOptionsProjectOptions.js +3 -0
  191. package/dist/workspace/WorkspaceOptionsProjectOptions.js.map +1 -0
  192. package/dist/workspace/WorkspacePackageJson.d.ts +2 -0
  193. package/dist/workspace/WorkspacePackageJson.js +3 -0
  194. package/dist/workspace/WorkspacePackageJson.js.map +1 -0
  195. package/dist/workspace/WorkspaceProjectGlobs.d.ts +1 -0
  196. package/dist/workspace/WorkspaceProjectGlobs.js +3 -0
  197. package/dist/workspace/WorkspaceProjectGlobs.js.map +1 -0
  198. package/dist/workspace/WorkspaceProjects.d.ts +2 -0
  199. package/dist/workspace/WorkspaceProjects.js +3 -0
  200. package/dist/workspace/WorkspaceProjects.js.map +1 -0
  201. package/dist/workspace/WorkspaceRepository.d.ts +4 -0
  202. package/dist/workspace/WorkspaceRepository.js +3 -0
  203. package/dist/workspace/WorkspaceRepository.js.map +1 -0
  204. package/dist/workspace/WorkspaceUpdateOptions.d.ts +3 -0
  205. package/dist/workspace/WorkspaceUpdateOptions.js +3 -0
  206. package/dist/workspace/WorkspaceUpdateOptions.js.map +1 -0
  207. package/dist/workspace/internals/compareSemver.d.ts +8 -0
  208. package/dist/workspace/internals/compareSemver.js +27 -0
  209. package/dist/workspace/internals/compareSemver.js.map +1 -0
  210. package/dist/workspace/internals/getPackageJsonWorkspaces.d.ts +2 -0
  211. package/dist/workspace/internals/getPackageJsonWorkspaces.js +11 -0
  212. package/dist/workspace/internals/getPackageJsonWorkspaces.js.map +1 -0
  213. package/dist/workspace/internals/getRepositoryBranches.d.ts +1 -0
  214. package/dist/workspace/internals/getRepositoryBranches.js +21 -0
  215. package/dist/workspace/internals/getRepositoryBranches.js.map +1 -0
  216. package/dist/workspace/internals/getRepositoryUrl.d.ts +1 -0
  217. package/dist/workspace/internals/getRepositoryUrl.js +21 -0
  218. package/dist/workspace/internals/getRepositoryUrl.js.map +1 -0
  219. package/dist/workspace/internals.d.ts +4 -0
  220. package/dist/workspace/internals.js +6 -0
  221. package/dist/workspace/internals.js.map +1 -0
  222. package/dist/workspace/saveProjectConfig.d.ts +6 -0
  223. package/dist/workspace/saveProjectConfig.js +13 -0
  224. package/dist/workspace/saveProjectConfig.js.map +1 -0
  225. package/dist/workspace/saveWorkspaceConfig.d.ts +6 -0
  226. package/dist/workspace/saveWorkspaceConfig.js +13 -0
  227. package/dist/workspace/saveWorkspaceConfig.js.map +1 -0
  228. package/dist/workspace.d.ts +10 -0
  229. package/dist/workspace.js +12 -0
  230. package/dist/workspace.js.map +1 -0
  231. package/package.json +84 -0
  232. package/src/commands/create-project/CreateProject.tsx +130 -0
  233. package/src/commands/create-project/CreateProjectInput.ts +37 -0
  234. package/src/commands/create-project/createProjectCommand.tsx +33 -0
  235. package/src/commands/create-project/runCreateProject.ts +59 -0
  236. package/src/commands/create-project.ts +4 -0
  237. package/src/commands/create-workspace/CreateWorkspace.tsx +90 -0
  238. package/src/commands/create-workspace/CreateWorkspaceInput.ts +21 -0
  239. package/src/commands/create-workspace/createWorkspaceCommand.tsx +34 -0
  240. package/src/commands/create-workspace/runCreateWorkspace.ts +49 -0
  241. package/src/commands/create-workspace.ts +4 -0
  242. package/src/commands/internals/packageNameToDirectory.ts +13 -0
  243. package/src/commands/internals.ts +1 -0
  244. package/src/commands/update-workspace/UpdateWorkspace.tsx +59 -0
  245. package/src/commands/update-workspace/runUpdateWorkspace.ts +36 -0
  246. package/src/commands/update-workspace/updateWorkspaceCommand.tsx +27 -0
  247. package/src/commands/update-workspace.ts +3 -0
  248. package/src/commands.ts +3 -0
  249. package/src/constants.ts +21 -0
  250. package/src/main.ts +3 -0
  251. package/src/modules.d.ts +1 -0
  252. package/src/run.ts +21 -0
  253. package/src/template/CarsonTemplate.ts +11 -0
  254. package/src/template/CarsonTemplateConfig.ts +12 -0
  255. package/src/template/TemplateAttributes.ts +16 -0
  256. package/src/template/TemplateData.ts +17 -0
  257. package/src/template/TemplateRender.ts +9 -0
  258. package/src/template/TemplateRenderSnapshot.ts +13 -0
  259. package/src/template/TemplateRenderSnapshots.ts +7 -0
  260. package/src/template/TemplateRenders.ts +3 -0
  261. package/src/template/applyTemplateRenders.ts +89 -0
  262. package/src/template/createFileUsingTemplateRender.ts +12 -0
  263. package/src/template/deleteFileUsingTemplateRender.ts +15 -0
  264. package/src/template/importCarsonTemplate.ts +13 -0
  265. package/src/template/insertUsingTemplateRender.ts +33 -0
  266. package/src/template/internals/merge.ts +44 -0
  267. package/src/template/internals/prettify.ts +24 -0
  268. package/src/template/internals/unmerge.ts +48 -0
  269. package/src/template/internals.ts +3 -0
  270. package/src/template/loadTemplateRenderSnapshots.ts +18 -0
  271. package/src/template/mergeFileUsingTemplateRender.ts +39 -0
  272. package/src/template/overwriteFileUsingTemplateRender.ts +12 -0
  273. package/src/template/parseTemplateId.ts +9 -0
  274. package/src/template/readCarsonTemplate.ts +46 -0
  275. package/src/template/renderTemplate.ts +30 -0
  276. package/src/template/resolveTemplateModule.ts +9 -0
  277. package/src/template/saveTemplateRenderSnapshots.ts +34 -0
  278. package/src/template/uninsertUsingTemplateRender.ts +36 -0
  279. package/src/template/unmergeFileUsingTemplateRender.ts +42 -0
  280. package/src/template.ts +20 -0
  281. package/src/workspace/Project.ts +246 -0
  282. package/src/workspace/ProjectConfig.ts +9 -0
  283. package/src/workspace/ProjectCreateOptions.ts +9 -0
  284. package/src/workspace/ProjectError.ts +15 -0
  285. package/src/workspace/ProjectOptions.ts +17 -0
  286. package/src/workspace/ProjectUpdateOptions.ts +3 -0
  287. package/src/workspace/Workspace.ts +553 -0
  288. package/src/workspace/WorkspaceConfig.ts +9 -0
  289. package/src/workspace/WorkspaceCreateOptions.ts +5 -0
  290. package/src/workspace/WorkspaceCreateProjectOptions.ts +6 -0
  291. package/src/workspace/WorkspaceDependencies.ts +196 -0
  292. package/src/workspace/WorkspaceError.ts +18 -0
  293. package/src/workspace/WorkspaceOptions.ts +29 -0
  294. package/src/workspace/WorkspaceOptionsProjectOptions.ts +9 -0
  295. package/src/workspace/WorkspacePackageJson.ts +3 -0
  296. package/src/workspace/WorkspaceProjectGlobs.ts +1 -0
  297. package/src/workspace/WorkspaceProjects.ts +3 -0
  298. package/src/workspace/WorkspaceRepository.ts +4 -0
  299. package/src/workspace/WorkspaceUpdateOptions.ts +3 -0
  300. package/src/workspace/internals/compareSemver.ts +35 -0
  301. package/src/workspace/internals/getPackageJsonWorkspaces.ts +11 -0
  302. package/src/workspace/internals/getRepositoryBranches.ts +25 -0
  303. package/src/workspace/internals/getRepositoryUrl.ts +23 -0
  304. package/src/workspace/internals.ts +4 -0
  305. package/src/workspace/saveProjectConfig.ts +23 -0
  306. package/src/workspace/saveWorkspaceConfig.ts +30 -0
  307. package/src/workspace.ts +10 -0
@@ -0,0 +1,39 @@
1
+ import fs from 'fs-extra';
2
+ import json from 'json5';
3
+ import path from 'node:path';
4
+ import yaml from 'yaml';
5
+ import { merge, prettify } from './internals.js';
6
+ export async function mergeFileUsingTemplateRender(render, basePath) {
7
+ let to = path.join(basePath, render.attributes.to);
8
+ let extension = path.extname(to);
9
+ switch(extension){
10
+ case '.json':
11
+ {
12
+ let targetFile = await fs.readJson(to);
13
+ let fileToMerge = json.parse(render.content);
14
+ let newFile = JSON.stringify(merge(targetFile, fileToMerge));
15
+ await fs.writeFile(to, await prettify(newFile, to), {
16
+ encoding: 'utf8'
17
+ });
18
+ break;
19
+ }
20
+ case '.yaml':
21
+ {
22
+ let targetFile = yaml.parse(await fs.readFile(to, {
23
+ encoding: 'utf8'
24
+ }));
25
+ let fileToMerge = yaml.parse(render.content);
26
+ let newFile = yaml.stringify(merge(targetFile, fileToMerge));
27
+ await fs.writeFile(to, await prettify(newFile, to), {
28
+ encoding: 'utf8'
29
+ });
30
+ break;
31
+ }
32
+ default:
33
+ {
34
+ throw new Error(`File extension "${extension}" is not supported!`);
35
+ }
36
+ }
37
+ }
38
+
39
+ //# sourceMappingURL=mergeFileUsingTemplateRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/mergeFileUsingTemplateRender.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, prettify} from './internals.js';\nimport {type TemplateRender} from './TemplateRender.js';\n\nexport async function mergeFileUsingTemplateRender(render: TemplateRender, basePath: string) {\n let to = path.join(basePath, render.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>(render.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(render.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","mergeFileUsingTemplateRender","render","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,EAAEC,QAAQ,QAAO,iBAAiB;AAG/C,OAAO,eAAeC,6BAA6BC,MAAsB,EAAEC,QAAgB;IACzF,IAAIC,KAAKP,KAAKQ,KAAKF,UAAUD,OAAOI,WAAWF;IAC/C,IAAIG,YAAYV,KAAKW,QAAQJ;IAE7B,OAAQG;QACN,KAAK;YAAS;gBACZ,IAAIE,aAAc,MAAMd,GAAGe,SAASN;gBACpC,IAAIO,cAAcf,KAAKgB,MAAYV,OAAOW;gBAC1C,IAAIC,UAAUC,KAAKC,UAAUjB,MAAMU,YAAYE;gBAE/C,MAAMhB,GAAGsB,UAAUb,IAAI,MAAMJ,SAASc,SAASV,KAAK;oBAACc,UAAU;gBAAM;gBAErE;YACF;QAEA,KAAK;YAAS;gBACZ,IAAIT,aAAaX,KAAKc,MAAM,MAAMjB,GAAGwB,SAASf,IAAI;oBAACc,UAAU;gBAAM;gBACnE,IAAIP,cAAcb,KAAKc,MAAMV,OAAOW;gBACpC,IAAIC,UAAUhB,KAAKkB,UAAUjB,MAAMU,YAAYE;gBAE/C,MAAMhB,GAAGsB,UAAUb,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"}
@@ -0,0 +1,2 @@
1
+ import { type TemplateRender } from './TemplateRender.js';
2
+ export declare function overwriteFileUsingTemplateRender(render: TemplateRender, basePath: string): Promise<void>;
@@ -0,0 +1,12 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import { prettify } from './internals.js';
4
+ export async function overwriteFileUsingTemplateRender(render, basePath) {
5
+ let to = path.join(basePath, render.attributes.to);
6
+ await fs.ensureDir(path.dirname(to));
7
+ await fs.writeFile(to, await prettify(render.content, to), {
8
+ encoding: 'utf8'
9
+ });
10
+ }
11
+
12
+ //# sourceMappingURL=overwriteFileUsingTemplateRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/overwriteFileUsingTemplateRender.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {prettify} from './internals.js';\nimport {type TemplateRender} from './TemplateRender.js';\n\nexport async function overwriteFileUsingTemplateRender(render: TemplateRender, basePath: string) {\n let to = path.join(basePath, render.attributes.to);\n\n await fs.ensureDir(path.dirname(to));\n await fs.writeFile(to, await prettify(render.content, to), {encoding: 'utf8'});\n}\n"],"names":["fs","path","prettify","overwriteFileUsingTemplateRender","render","basePath","to","join","attributes","ensureDir","dirname","writeFile","content","encoding"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,UAAU,YAAY;AAE7B,SAAQC,QAAQ,QAAO,iBAAiB;AAGxC,OAAO,eAAeC,iCAAiCC,MAAsB,EAAEC,QAAgB;IAC7F,IAAIC,KAAKL,KAAKM,KAAKF,UAAUD,OAAOI,WAAWF;IAE/C,MAAMN,GAAGS,UAAUR,KAAKS,QAAQJ;IAChC,MAAMN,GAAGW,UAAUL,IAAI,MAAMJ,SAASE,OAAOQ,SAASN,KAAK;QAACO,UAAU;IAAM;AAC9E"}
@@ -0,0 +1 @@
1
+ export declare function parseTemplateId(value: string): [moduleId: string, templateName: string];
@@ -0,0 +1,12 @@
1
+ export function parseTemplateId(value) {
2
+ let parts = value.split(':');
3
+ if (!parts[0] || !parts[1]) {
4
+ throw new Error('Template id is invalid!');
5
+ }
6
+ return [
7
+ parts[0],
8
+ parts[1]
9
+ ];
10
+ }
11
+
12
+ //# sourceMappingURL=parseTemplateId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/parseTemplateId.ts"],"sourcesContent":["export function parseTemplateId(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":["parseTemplateId","value","parts","split","Error"],"mappings":"AAAA,OAAO,SAASA,gBAAgBC,KAAa;IAC3C,IAAIC,QAAQD,MAAME,MAAM;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"}
@@ -0,0 +1,2 @@
1
+ import { type CarsonTemplate } from './CarsonTemplate.js';
2
+ export declare function readCarsonTemplate(templateId: string): Promise<CarsonTemplate>;
@@ -0,0 +1,39 @@
1
+ import { Template } from '@jakubmazanec/template';
2
+ import { readFile } from '@jakubmazanec/zod-utils';
3
+ import glob from 'fast-glob';
4
+ import fs from 'fs-extra';
5
+ import path from 'node:path';
6
+ import { carsonTemplateConfigSchema } from './CarsonTemplateConfig.js';
7
+ import { parseTemplateId } from './parseTemplateId.js';
8
+ import { resolveTemplateModule } from './resolveTemplateModule.js';
9
+ import { templateAttributesSchema } from './TemplateAttributes.js';
10
+ import { TEMPLATES_PATH, TEMPLATE_CONFIG_FILENAME } from '../constants.js';
11
+ export async function readCarsonTemplate(templateId) {
12
+ let [moduleId, templateName] = parseTemplateId(templateId);
13
+ let modulePath = await resolveTemplateModule(moduleId);
14
+ let carsonTemplatePath = path.join(modulePath, TEMPLATES_PATH, templateName);
15
+ if (await fs.pathExists(carsonTemplatePath)) {
16
+ let templateConfigPath = path.join(carsonTemplatePath, TEMPLATE_CONFIG_FILENAME);
17
+ let templateConfig = await readFile(templateConfigPath, carsonTemplateConfigSchema, {
18
+ throwOnZodError: true
19
+ });
20
+ let templateFilePaths = await glob('**/*.ejs', {
21
+ cwd: carsonTemplatePath,
22
+ dot: true
23
+ });
24
+ let carsonTemplate = {
25
+ name: templateName,
26
+ config: templateConfig,
27
+ files: []
28
+ };
29
+ for (let templateFilePath of templateFilePaths){
30
+ carsonTemplate.files.push(await Template.read(path.join(carsonTemplatePath, templateFilePath), {
31
+ attributesSchema: templateAttributesSchema
32
+ }));
33
+ }
34
+ return carsonTemplate;
35
+ }
36
+ throw new Error(`Template ${templateId} was not found in module ${moduleId}!`);
37
+ }
38
+
39
+ //# sourceMappingURL=readCarsonTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/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 {type CarsonTemplate} from './CarsonTemplate.js';\nimport {carsonTemplateConfigSchema} from './CarsonTemplateConfig.js';\nimport {parseTemplateId} from './parseTemplateId.js';\nimport {resolveTemplateModule} from './resolveTemplateModule.js';\nimport {templateAttributesSchema} from './TemplateAttributes.js';\nimport {TEMPLATES_PATH, TEMPLATE_CONFIG_FILENAME} from '../constants.js';\n\nexport async function readCarsonTemplate(templateId: string): Promise<CarsonTemplate> {\n let [moduleId, templateName] = parseTemplateId(templateId);\n let modulePath = await resolveTemplateModule(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","carsonTemplateConfigSchema","parseTemplateId","resolveTemplateModule","templateAttributesSchema","TEMPLATES_PATH","TEMPLATE_CONFIG_FILENAME","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;AAG7B,SAAQC,0BAA0B,QAAO,4BAA4B;AACrE,SAAQC,eAAe,QAAO,uBAAuB;AACrD,SAAQC,qBAAqB,QAAO,6BAA6B;AACjE,SAAQC,wBAAwB,QAAO,0BAA0B;AACjE,SAAQC,cAAc,EAAEC,wBAAwB,QAAO,kBAAkB;AAEzE,OAAO,eAAeC,mBAAmBC,UAAkB;IACzD,IAAI,CAACC,UAAUC,aAAa,GAAGR,gBAAgBM;IAC/C,IAAIG,aAAa,MAAMR,sBAAsBM;IAC7C,IAAIG,qBAAqBZ,KAAKa,KAAKF,YAAYN,gBAAgBK;IAE/D,IAAI,MAAMX,GAAGe,WAAWF,qBAAqB;QAC3C,IAAIG,qBAAqBf,KAAKa,KAAKD,oBAAoBN;QACvD,IAAIU,iBAAiB,MAAMnB,SAASkB,oBAAoBd,4BAA4B;YAClFgB,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,MAAME,KACnB,MAAM9B,SAAS+B,KAAK3B,KAAKa,KAAKD,oBAAoBa,mBAAmB;gBACnEG,kBAAkBxB;YACpB;QAEJ;QAEA,OAAOiB;IACT;IAEA,MAAM,IAAIQ,MAAM,CAAC,SAAS,EAAErB,WAAW,yBAAyB,EAAEC,SAAS,CAAC,CAAC;AAC/E"}
@@ -0,0 +1,7 @@
1
+ import { type TemplateData } from './TemplateData.js';
2
+ import { type TemplateRenders } from './TemplateRenders.js';
3
+ export type RenderTemplateOptions = {
4
+ templateId: string;
5
+ templateData: TemplateData;
6
+ };
7
+ export declare function renderTemplate(options: RenderTemplateOptions): Promise<TemplateRenders>;
@@ -0,0 +1,19 @@
1
+ import { importCarsonTemplate } from './importCarsonTemplate.js';
2
+ import { readCarsonTemplate } from './readCarsonTemplate.js';
3
+ export async function renderTemplate(options) {
4
+ let template = await readCarsonTemplate(options.templateId);
5
+ let templateModule = await importCarsonTemplate(options.templateId);
6
+ let templateRenders = [];
7
+ for (let file of template.files){
8
+ templateRenders.push(...await file.render({
9
+ ...templateModule,
10
+ ...options.templateData,
11
+ templateConfig: template.config
12
+ }, {
13
+ disablePrettier: true
14
+ }));
15
+ }
16
+ return templateRenders;
17
+ }
18
+
19
+ //# sourceMappingURL=renderTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/renderTemplate.ts"],"sourcesContent":["import {importCarsonTemplate} from './importCarsonTemplate.js';\nimport {readCarsonTemplate} from './readCarsonTemplate.js';\nimport {type TemplateData} from './TemplateData.js';\nimport {type TemplateRenders} from './TemplateRenders.js';\n\nexport type RenderTemplateOptions = {\n templateId: string;\n templateData: TemplateData;\n};\n\nexport async function renderTemplate(options: RenderTemplateOptions) {\n let template = await readCarsonTemplate(options.templateId);\n let templateModule = await importCarsonTemplate(options.templateId);\n let templateRenders: TemplateRenders = [];\n\n for (let file of template.files) {\n templateRenders.push(\n ...(await file.render(\n {\n ...templateModule,\n ...options.templateData,\n templateConfig: template.config,\n },\n {disablePrettier: true},\n )),\n );\n }\n\n return templateRenders;\n}\n"],"names":["importCarsonTemplate","readCarsonTemplate","renderTemplate","options","template","templateId","templateModule","templateRenders","file","files","push","render","templateData","templateConfig","config","disablePrettier"],"mappings":"AAAA,SAAQA,oBAAoB,QAAO,4BAA4B;AAC/D,SAAQC,kBAAkB,QAAO,0BAA0B;AAS3D,OAAO,eAAeC,eAAeC,OAA8B;IACjE,IAAIC,WAAW,MAAMH,mBAAmBE,QAAQE;IAChD,IAAIC,iBAAiB,MAAMN,qBAAqBG,QAAQE;IACxD,IAAIE,kBAAmC,EAAE;IAEzC,KAAK,IAAIC,QAAQJ,SAASK,MAAO;QAC/BF,gBAAgBG,QACV,MAAMF,KAAKG,OACb;YACE,GAAGL,cAAc;YACjB,GAAGH,QAAQS,YAAY;YACvBC,gBAAgBT,SAASU;QAC3B,GACA;YAACC,iBAAiB;QAAI;IAG5B;IAEA,OAAOR;AACT"}
@@ -0,0 +1 @@
1
+ export declare function resolveTemplateModule(moduleId: string): Promise<string>;
@@ -0,0 +1,9 @@
1
+ import { createRequire } from 'node:module';
2
+ import path from 'node:path';
3
+ export async function resolveTemplateModule(moduleId) {
4
+ let require = createRequire(import.meta.url);
5
+ let modulePath = path.dirname(require.resolve(`${moduleId}/package.json`));
6
+ return modulePath;
7
+ }
8
+
9
+ //# sourceMappingURL=resolveTemplateModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/resolveTemplateModule.ts"],"sourcesContent":["import {createRequire} from 'node:module';\nimport path from 'node:path';\n\nexport async function resolveTemplateModule(moduleId: string) {\n let require = createRequire(import.meta.url);\n let modulePath = path.dirname(require.resolve(`${moduleId}/package.json`));\n\n return modulePath;\n}\n"],"names":["createRequire","path","resolveTemplateModule","moduleId","require","url","modulePath","dirname","resolve"],"mappings":"AAAA,SAAQA,aAAa,QAAO,cAAc;AAC1C,OAAOC,UAAU,YAAY;AAE7B,OAAO,eAAeC,sBAAsBC,QAAgB;IAC1D,IAAIC,UAAUJ,cAAc,YAAYK;IACxC,IAAIC,aAAaL,KAAKM,QAAQH,QAAQI,QAAQ,CAAC,EAAEL,SAAS,aAAa,CAAC;IAExE,OAAOG;AACT"}
@@ -0,0 +1,2 @@
1
+ import { type TemplateRenders } from './TemplateRenders.js';
2
+ export declare function saveTemplateRenderSnapshots(templateRenders: TemplateRenders, templateRenderSnapshotsPath: string): Promise<void>;
@@ -0,0 +1,23 @@
1
+ import { deflateSync, strToU8 } from 'fflate';
2
+ import fs from 'fs-extra';
3
+ export async function saveTemplateRenderSnapshots(templateRenders, templateRenderSnapshotsPath) {
4
+ let templateRendersSnapshots = [];
5
+ for (let templateRender of templateRenders){
6
+ if (templateRender.attributes.strategy === 'overwrite' || templateRender.attributes.strategy === 'merge' || templateRender.attributes.strategy[0] === 'insert') {
7
+ templateRendersSnapshots.push({
8
+ attributes: {
9
+ to: templateRender.attributes.to,
10
+ strategy: templateRender.attributes.strategy
11
+ },
12
+ content: templateRender.content
13
+ });
14
+ }
15
+ }
16
+ let uncompressedSnapshots = JSON.stringify(templateRendersSnapshots);
17
+ await fs.writeFile(templateRenderSnapshotsPath, deflateSync(strToU8(uncompressedSnapshots), {
18
+ level: 1,
19
+ mem: 0
20
+ }));
21
+ }
22
+
23
+ //# sourceMappingURL=saveTemplateRenderSnapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/saveTemplateRenderSnapshots.ts"],"sourcesContent":["import {deflateSync, strToU8} from 'fflate';\nimport fs from 'fs-extra';\n\nimport {type TemplateRenders} from './TemplateRenders.js';\nimport {type TemplateRenderSnapshots} from './TemplateRenderSnapshots.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,WAAWC,aAAa,eACvCF,eAAeC,WAAWC,aAAa,WACvCF,eAAeC,WAAWC,QAAQ,CAAC,EAAE,KAAK,UAC1C;YACAH,yBAAyBI,KAAK;gBAC5BF,YAAY;oBACVG,IAAIJ,eAAeC,WAAWG;oBAC9BF,UAAUF,eAAeC,WAAWC;gBACtC;gBACAG,SAASL,eAAeK;YAC1B;QACF;IACF;IACA,IAAIC,wBAAwBC,KAAKC,UAAUT;IAE3C,MAAMJ,GAAGc,UACPX,6BACAL,YAAYC,QAAQY,wBAAwB;QAACI,OAAO;QAAGC,KAAK;IAAC;AAEjE"}
@@ -0,0 +1,2 @@
1
+ import { type TemplateRenderSnapshot } from './TemplateRenderSnapshot.js';
2
+ export declare function uninsertUsingTemplateRender(render: TemplateRenderSnapshot, basePath: string): Promise<void>;
@@ -0,0 +1,29 @@
1
+ import fs from 'fs-extra';
2
+ import _ from 'lodash';
3
+ import path from 'node:path';
4
+ import { prettify } from './internals.js';
5
+ export async function uninsertUsingTemplateRender(render, basePath) {
6
+ let to = path.join(basePath, render.attributes.to);
7
+ let extension = path.extname(to);
8
+ switch(extension){
9
+ case '.md':
10
+ {
11
+ let targetFile = await fs.readFile(to, {
12
+ encoding: 'utf8'
13
+ });
14
+ let newContent = `<!-- ${render.attributes.strategy[1]} --><!-- ${render.attributes.strategy[1]} -->`;
15
+ let oldContentRegexp = new RegExp(`<!--\\s*${_.escapeRegExp(render.attributes.strategy[1])}\\s-->[\\s\\S]*<!--\\s*${_.escapeRegExp(render.attributes.strategy[1])}\\s-->`, 'u');
16
+ let newFile = targetFile.replace(oldContentRegexp, newContent);
17
+ await fs.writeFile(to, await prettify(newFile, to), {
18
+ encoding: 'utf8'
19
+ });
20
+ break;
21
+ }
22
+ default:
23
+ {
24
+ throw new Error(`File extension "${extension}" is not supported!`);
25
+ }
26
+ }
27
+ }
28
+
29
+ //# sourceMappingURL=uninsertUsingTemplateRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/uninsertUsingTemplateRender.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport _ from 'lodash';\nimport path from 'node:path';\n\nimport {prettify} from './internals.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\n\nexport async function uninsertUsingTemplateRender(\n render: TemplateRenderSnapshot,\n basePath: string,\n) {\n let to = path.join(basePath, render.attributes.to);\n let extension = path.extname(to);\n\n switch (extension) {\n case '.md': {\n let targetFile = await fs.readFile(to, {encoding: 'utf8'});\n let newContent = `<!-- ${render.attributes.strategy[1]} --><!-- ${render.attributes.strategy[1]} -->`;\n let oldContentRegexp = new RegExp(\n `<!--\\\\s*${_.escapeRegExp(\n render.attributes.strategy[1],\n )}\\\\s-->[\\\\s\\\\S]*<!--\\\\s*${_.escapeRegExp(render.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 break;\n }\n\n default: {\n throw new Error(`File extension \"${extension}\" is not supported!`);\n }\n }\n}\n"],"names":["fs","_","path","prettify","uninsertUsingTemplateRender","render","basePath","to","join","attributes","extension","extname","targetFile","readFile","encoding","newContent","strategy","oldContentRegexp","RegExp","escapeRegExp","newFile","replace","writeFile","Error"],"mappings":"AAAA,OAAOA,QAAQ,WAAW;AAC1B,OAAOC,OAAO,SAAS;AACvB,OAAOC,UAAU,YAAY;AAE7B,SAAQC,QAAQ,QAAO,iBAAiB;AAGxC,OAAO,eAAeC,4BACpBC,MAA8B,EAC9BC,QAAgB;IAEhB,IAAIC,KAAKL,KAAKM,KAAKF,UAAUD,OAAOI,WAAWF;IAC/C,IAAIG,YAAYR,KAAKS,QAAQJ;IAE7B,OAAQG;QACN,KAAK;YAAO;gBACV,IAAIE,aAAa,MAAMZ,GAAGa,SAASN,IAAI;oBAACO,UAAU;gBAAM;gBACxD,IAAIC,aAAa,CAAC,KAAK,EAAEV,OAAOI,WAAWO,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAEX,OAAOI,WAAWO,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;gBACrG,IAAIC,mBAAmB,IAAIC,OACzB,CAAC,QAAQ,EAAEjB,EAAEkB,aACXd,OAAOI,WAAWO,QAAQ,CAAC,EAAE,EAC7B,uBAAuB,EAAEf,EAAEkB,aAAad,OAAOI,WAAWO,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAChF;gBAEF,IAAII,UAAUR,WAAWS,QAAQJ,kBAAkBF;gBAEnD,MAAMf,GAAGsB,UAAUf,IAAI,MAAMJ,SAASiB,SAASb,KAAK;oBAACO,UAAU;gBAAM;gBAErE;YACF;QAEA;YAAS;gBACP,MAAM,IAAIS,MAAM,CAAC,gBAAgB,EAAEb,UAAU,mBAAmB,CAAC;YACnE;IACF;AACF"}
@@ -0,0 +1,2 @@
1
+ import { type TemplateRenderSnapshot } from './TemplateRenderSnapshot.js';
2
+ export declare function unmergeFileUsingTemplateRender(render: TemplateRenderSnapshot, outputPath: string): Promise<void>;
@@ -0,0 +1,39 @@
1
+ import fs from 'fs-extra';
2
+ import json from 'json5';
3
+ import path from 'node:path';
4
+ import yaml from 'yaml';
5
+ import { unmerge, prettify } from './internals.js';
6
+ export async function unmergeFileUsingTemplateRender(render, outputPath) {
7
+ let to = path.join(outputPath, render.attributes.to);
8
+ let extension = path.extname(to);
9
+ switch(extension){
10
+ case '.json':
11
+ {
12
+ let targetFile = await fs.readJson(to);
13
+ let fileToMerge = json.parse(render.content);
14
+ let newFile = JSON.stringify(unmerge(targetFile, fileToMerge));
15
+ await fs.writeFile(to, await prettify(newFile, to), {
16
+ encoding: 'utf8'
17
+ });
18
+ break;
19
+ }
20
+ case '.yaml':
21
+ {
22
+ let targetFile = yaml.parse(await fs.readFile(to, {
23
+ encoding: 'utf8'
24
+ }));
25
+ let fileToMerge = yaml.parse(render.content);
26
+ let newFile = yaml.stringify(unmerge(targetFile, fileToMerge));
27
+ await fs.writeFile(to, await prettify(newFile, to), {
28
+ encoding: 'utf8'
29
+ });
30
+ break;
31
+ }
32
+ default:
33
+ {
34
+ throw new Error(`File extension "${extension}" is not supported!`);
35
+ }
36
+ }
37
+ }
38
+
39
+ //# sourceMappingURL=unmergeFileUsingTemplateRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/template/unmergeFileUsingTemplateRender.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 {unmerge, prettify} from './internals.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\n\nexport async function unmergeFileUsingTemplateRender(\n render: TemplateRenderSnapshot,\n outputPath: string,\n) {\n let to = path.join(outputPath, render.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>(render.content);\n let newFile = JSON.stringify(unmerge(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(render.content) as unknown;\n let newFile = yaml.stringify(unmerge(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","unmerge","prettify","unmergeFileUsingTemplateRender","render","outputPath","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,OAAO,EAAEC,QAAQ,QAAO,iBAAiB;AAGjD,OAAO,eAAeC,+BACpBC,MAA8B,EAC9BC,UAAkB;IAElB,IAAIC,KAAKP,KAAKQ,KAAKF,YAAYD,OAAOI,WAAWF;IACjD,IAAIG,YAAYV,KAAKW,QAAQJ;IAE7B,OAAQG;QACN,KAAK;YAAS;gBACZ,IAAIE,aAAc,MAAMd,GAAGe,SAASN;gBACpC,IAAIO,cAAcf,KAAKgB,MAAYV,OAAOW;gBAC1C,IAAIC,UAAUC,KAAKC,UAAUjB,QAAQU,YAAYE;gBAEjD,MAAMhB,GAAGsB,UAAUb,IAAI,MAAMJ,SAASc,SAASV,KAAK;oBAACc,UAAU;gBAAM;gBAErE;YACF;QAEA,KAAK;YAAS;gBACZ,IAAIT,aAAaX,KAAKc,MAAM,MAAMjB,GAAGwB,SAASf,IAAI;oBAACc,UAAU;gBAAM;gBACnE,IAAIP,cAAcb,KAAKc,MAAMV,OAAOW;gBACpC,IAAIC,UAAUhB,KAAKkB,UAAUjB,QAAQU,YAAYE;gBAEjD,MAAMhB,GAAGsB,UAAUb,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"}
@@ -0,0 +1,20 @@
1
+ export * from './template/applyTemplateRenders.js';
2
+ export * from './template/CarsonTemplate.js';
3
+ export * from './template/CarsonTemplateConfig.js';
4
+ export * from './template/createFileUsingTemplateRender.js';
5
+ export * from './template/deleteFileUsingTemplateRender.js';
6
+ export * from './template/loadTemplateRenderSnapshots.js';
7
+ export * from './template/mergeFileUsingTemplateRender.js';
8
+ export * from './template/overwriteFileUsingTemplateRender.js';
9
+ export * from './template/parseTemplateId.js';
10
+ export * from './template/readCarsonTemplate.js';
11
+ export * from './template/renderTemplate.js';
12
+ export * from './template/resolveTemplateModule.js';
13
+ export * from './template/saveTemplateRenderSnapshots.js';
14
+ export * from './template/TemplateAttributes.js';
15
+ export * from './template/TemplateData.js';
16
+ export * from './template/TemplateRender.js';
17
+ export * from './template/TemplateRenders.js';
18
+ export * from './template/TemplateRenderSnapshot.js';
19
+ export * from './template/TemplateRenderSnapshots.js';
20
+ export * from './template/unmergeFileUsingTemplateRender.js';
@@ -0,0 +1,22 @@
1
+ export * from './template/applyTemplateRenders.js';
2
+ export * from './template/CarsonTemplate.js';
3
+ export * from './template/CarsonTemplateConfig.js';
4
+ export * from './template/createFileUsingTemplateRender.js';
5
+ export * from './template/deleteFileUsingTemplateRender.js';
6
+ export * from './template/loadTemplateRenderSnapshots.js';
7
+ export * from './template/mergeFileUsingTemplateRender.js';
8
+ export * from './template/overwriteFileUsingTemplateRender.js';
9
+ export * from './template/parseTemplateId.js';
10
+ export * from './template/readCarsonTemplate.js';
11
+ export * from './template/renderTemplate.js';
12
+ export * from './template/resolveTemplateModule.js';
13
+ export * from './template/saveTemplateRenderSnapshots.js';
14
+ export * from './template/TemplateAttributes.js';
15
+ export * from './template/TemplateData.js';
16
+ export * from './template/TemplateRender.js';
17
+ export * from './template/TemplateRenders.js';
18
+ export * from './template/TemplateRenderSnapshot.js';
19
+ export * from './template/TemplateRenderSnapshots.js';
20
+ export * from './template/unmergeFileUsingTemplateRender.js';
21
+
22
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/template.ts"],"sourcesContent":["export * from './template/applyTemplateRenders.js';\nexport * from './template/CarsonTemplate.js';\nexport * from './template/CarsonTemplateConfig.js';\nexport * from './template/createFileUsingTemplateRender.js';\nexport * from './template/deleteFileUsingTemplateRender.js';\nexport * from './template/loadTemplateRenderSnapshots.js';\nexport * from './template/mergeFileUsingTemplateRender.js';\nexport * from './template/overwriteFileUsingTemplateRender.js';\nexport * from './template/parseTemplateId.js';\nexport * from './template/readCarsonTemplate.js';\nexport * from './template/renderTemplate.js';\nexport * from './template/resolveTemplateModule.js';\nexport * from './template/saveTemplateRenderSnapshots.js';\nexport * from './template/TemplateAttributes.js';\nexport * from './template/TemplateData.js';\nexport * from './template/TemplateRender.js';\nexport * from './template/TemplateRenders.js';\nexport * from './template/TemplateRenderSnapshot.js';\nexport * from './template/TemplateRenderSnapshots.js';\nexport * from './template/unmergeFileUsingTemplateRender.js';\n"],"names":[],"mappings":"AAAA,cAAc,qCAAqC;AACnD,cAAc,+BAA+B;AAC7C,cAAc,qCAAqC;AACnD,cAAc,8CAA8C;AAC5D,cAAc,8CAA8C;AAC5D,cAAc,4CAA4C;AAC1D,cAAc,6CAA6C;AAC3D,cAAc,iDAAiD;AAC/D,cAAc,gCAAgC;AAC9C,cAAc,mCAAmC;AACjD,cAAc,+BAA+B;AAC7C,cAAc,sCAAsC;AACpD,cAAc,4CAA4C;AAC1D,cAAc,mCAAmC;AACjD,cAAc,6BAA6B;AAC3C,cAAc,+BAA+B;AAC7C,cAAc,gCAAgC;AAC9C,cAAc,uCAAuC;AACrD,cAAc,wCAAwC;AACtD,cAAc,+CAA+C"}
@@ -0,0 +1,33 @@
1
+ import { type PackageJson } from '@jakubmazanec/zod-utils';
2
+ import { type ProjectConfig } from './ProjectConfig.js';
3
+ import { type ProjectCreateOptions } from './ProjectCreateOptions.js';
4
+ import { ProjectError } from './ProjectError.js';
5
+ import { type ProjectOptions } from './ProjectOptions.js';
6
+ import { type ProjectUpdateOptions } from './ProjectUpdateOptions.js';
7
+ import { type Workspace } from './Workspace.js';
8
+ /**
9
+ * Project represent a self-contained piece of software (e.g. a package, or an app) that is part of a {@linkcode Workspace}. Currently only Node.js projects are supported.
10
+ *
11
+ * @typeParam M If true, the project belongs to a multi-project workspace.
12
+ */
13
+ export declare class Project<M extends boolean = true> {
14
+ /** Project name. */
15
+ name?: string;
16
+ /** Project path. */
17
+ path: string;
18
+ /** Project path relative to workspace path. */
19
+ relativePath: string;
20
+ /** Project configuration; if it's not found, the default is an empty object. */
21
+ config: ProjectConfig;
22
+ /** Parsed project `package.json` file; if it's not found, the default is an empty object. */
23
+ packageJson: PackageJson;
24
+ /** Parent {@linkcode Workspace} instance. */
25
+ workspace: Workspace<M>;
26
+ /** Errors found during reading from the file system. */
27
+ errors: Array<InstanceType<typeof ProjectError>>;
28
+ constructor({ path: projectPath, name, config, packageJson, workspace, errors, }: ProjectOptions<M>);
29
+ static create<M extends boolean>({ templateId, workspace, projectPath, projectName, args, }: ProjectCreateOptions<M>): Promise<Project<M>>;
30
+ static read<M extends boolean>(projectPath: string, workspace: Workspace<M>): Promise<Project<M>>;
31
+ read(): Promise<this>;
32
+ update({ args }: ProjectUpdateOptions): Promise<this>;
33
+ }
@@ -0,0 +1,184 @@
1
+ import { ensureEmptyDirectory, pathToPosixPath } from '@jakubmazanec/fs-utils';
2
+ import { readFile, packageJsonSchema } from '@jakubmazanec/zod-utils';
3
+ import fs from 'fs-extra';
4
+ import json5 from 'json5';
5
+ import path from 'node:path';
6
+ import { z } from 'zod';
7
+ import { projectConfigSchema } from './ProjectConfig.js';
8
+ import { ProjectError } from './ProjectError.js';
9
+ import { saveProjectConfig } from './saveProjectConfig.js';
10
+ import { CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME } from '../constants.js';
11
+ import { applyTemplateRenders } from '../template/applyTemplateRenders.js';
12
+ import { renderTemplate } from '../template/renderTemplate.js';
13
+ /**
14
+ * Project represent a self-contained piece of software (e.g. a package, or an app) that is part of a {@linkcode Workspace}. Currently only Node.js projects are supported.
15
+ *
16
+ * @typeParam M If true, the project belongs to a multi-project workspace.
17
+ */ export class Project {
18
+ /** Project name. */ name;
19
+ /** Project path. */ path;
20
+ /** Project path relative to workspace path. */ relativePath;
21
+ /** Project configuration; if it's not found, the default is an empty object. */ config;
22
+ /** Parsed project `package.json` file; if it's not found, the default is an empty object. */ packageJson;
23
+ /** Parent {@linkcode Workspace} instance. */ workspace;
24
+ /** Errors found during reading from the file system. */ errors = [];
25
+ constructor({ path: projectPath , name , config , packageJson , workspace , errors }){
26
+ var _this_packageJson_name;
27
+ // TODO: check that this path and workspace path are correct, i.e. project path must always be inside of workspace path
28
+ this.path = projectPath;
29
+ if (name) {
30
+ this.name = name;
31
+ }
32
+ if (config) {
33
+ this.config = config;
34
+ } else {
35
+ this.config = {};
36
+ }
37
+ if (packageJson) {
38
+ this.packageJson = packageJson;
39
+ } else {
40
+ this.packageJson = {};
41
+ }
42
+ this.workspace = workspace;
43
+ if (errors) {
44
+ this.errors = errors;
45
+ }
46
+ if ((_this_packageJson_name = this.packageJson.name) === null || _this_packageJson_name === void 0 ? void 0 : _this_packageJson_name.length) {
47
+ this.name = this.packageJson.name;
48
+ }
49
+ this.relativePath = pathToPosixPath(path.relative(this.workspace.path, this.path));
50
+ }
51
+ static async create({ templateId , workspace , projectPath , projectName , args }) {
52
+ let project = new this({
53
+ path: projectPath,
54
+ name: projectName,
55
+ config: {
56
+ template: templateId
57
+ },
58
+ workspace
59
+ });
60
+ await ensureEmptyDirectory(project.path);
61
+ await saveProjectConfig({
62
+ projectPath: project.path,
63
+ projectConfig: {
64
+ template: templateId
65
+ }
66
+ });
67
+ let templateRenders = await renderTemplate({
68
+ templateId,
69
+ templateData: {
70
+ workspace,
71
+ project,
72
+ args
73
+ }
74
+ });
75
+ await applyTemplateRenders({
76
+ templateRenders,
77
+ path: project.path,
78
+ ignoreCreateStrategies: false,
79
+ ignoreCheckStrategies: true
80
+ });
81
+ await project.read();
82
+ return project;
83
+ }
84
+ static async read(projectPath, workspace) {
85
+ let project = new this({
86
+ path: projectPath,
87
+ workspace
88
+ });
89
+ await project.read();
90
+ return project;
91
+ }
92
+ async read() {
93
+ var _packageJson_name;
94
+ if (!await fs.pathExists(this.path)) {
95
+ throw new ProjectError('NO_SUCH_PROJECT_PATH', {
96
+ messageParameters: [
97
+ this.path
98
+ ],
99
+ data: {
100
+ path: this.path
101
+ }
102
+ });
103
+ }
104
+ let errors = [];
105
+ // load project config
106
+ let projectConfigPath = path.join(this.path, CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME);
107
+ let doesProjectConfigExist = await fs.pathExists(projectConfigPath);
108
+ let projectConfig;
109
+ if (doesProjectConfigExist) {
110
+ projectConfig = await readFile(projectConfigPath, projectConfigSchema, {
111
+ parser: (rawString)=>json5.parse(rawString)
112
+ });
113
+ } else {
114
+ projectConfig = {};
115
+ }
116
+ if (projectConfig instanceof z.ZodError) {
117
+ let zodError = projectConfig;
118
+ errors.push(new ProjectError('INVALID_PROJECT_CONFIG', {
119
+ messageParameters: [
120
+ projectConfigPath
121
+ ],
122
+ data: {
123
+ path: projectConfigPath,
124
+ zodIssues: zodError.issues
125
+ }
126
+ }));
127
+ projectConfig = {};
128
+ }
129
+ // load package.json
130
+ let packageJsonPath = path.join(this.path, 'package.json');
131
+ let doesPackageJsonExist = await fs.pathExists(packageJsonPath);
132
+ let packageJson;
133
+ if (doesPackageJsonExist) {
134
+ packageJson = await readFile(packageJsonPath, packageJsonSchema, {
135
+ parser: (rawString)=>json5.parse(rawString)
136
+ });
137
+ } else {
138
+ packageJson = {};
139
+ }
140
+ if (packageJson instanceof z.ZodError) {
141
+ let zodError = packageJson;
142
+ errors.push(new ProjectError('INVALID_PACKAGE_JSON', {
143
+ messageParameters: [
144
+ packageJsonPath
145
+ ],
146
+ data: {
147
+ path: packageJsonPath,
148
+ zodIssues: zodError.issues
149
+ }
150
+ }));
151
+ packageJson = {};
152
+ }
153
+ if ((_packageJson_name = packageJson.name) === null || _packageJson_name === void 0 ? void 0 : _packageJson_name.length) {
154
+ this.name = packageJson.name;
155
+ }
156
+ this.config = projectConfig;
157
+ this.packageJson = packageJson;
158
+ this.errors = errors;
159
+ return this;
160
+ }
161
+ async update({ args }) {
162
+ if (!this.config.template) {
163
+ throw new Error('Template ID is missing in the project config!');
164
+ }
165
+ let templateRenders = await renderTemplate({
166
+ templateId: this.config.template,
167
+ templateData: {
168
+ workspace: this.workspace,
169
+ project: this,
170
+ args
171
+ }
172
+ });
173
+ await applyTemplateRenders({
174
+ templateRenders,
175
+ path: this.path,
176
+ ignoreCreateStrategies: true,
177
+ ignoreCheckStrategies: false
178
+ });
179
+ await this.read();
180
+ return this;
181
+ }
182
+ }
183
+
184
+ //# sourceMappingURL=Project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/workspace/Project.ts"],"sourcesContent":["import {ensureEmptyDirectory, pathToPosixPath} from '@jakubmazanec/fs-utils';\nimport {readFile, packageJsonSchema, type PackageJson} from '@jakubmazanec/zod-utils';\nimport fs from 'fs-extra';\nimport json5 from 'json5';\nimport path from 'node:path';\nimport {z} from 'zod';\n\nimport {type ProjectConfig, projectConfigSchema} from './ProjectConfig.js';\nimport {type ProjectCreateOptions} from './ProjectCreateOptions.js';\nimport {ProjectError} from './ProjectError.js';\nimport {type ProjectOptions} from './ProjectOptions.js';\nimport {type ProjectUpdateOptions} from './ProjectUpdateOptions.js';\nimport {saveProjectConfig} from './saveProjectConfig.js';\nimport {type Workspace} from './Workspace.js';\nimport {CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME} from '../constants.js';\nimport {applyTemplateRenders} from '../template/applyTemplateRenders.js';\nimport {renderTemplate} from '../template/renderTemplate.js';\n\n/**\n * Project represent a self-contained piece of software (e.g. a package, or an app) that is part of a {@linkcode Workspace}. Currently only Node.js projects are supported.\n *\n * @typeParam M If true, the project belongs to a multi-project workspace.\n */\nexport class Project<M extends boolean = true> {\n /** Project name. */\n name?: string;\n\n /** Project path. */\n path: string;\n\n /** Project path relative to workspace path. */\n relativePath: string;\n\n /** Project configuration; if it's not found, the default is an empty object. */\n config: ProjectConfig;\n\n /** Parsed project `package.json` file; if it's not found, the default is an empty object. */\n packageJson: PackageJson;\n\n /** Parent {@linkcode Workspace} instance. */\n workspace: Workspace<M>;\n\n /** Errors found during reading from the file system. */\n errors: Array<InstanceType<typeof ProjectError>> = [];\n\n constructor({\n path: projectPath,\n name,\n config,\n packageJson,\n workspace,\n errors,\n }: ProjectOptions<M>) {\n // TODO: check that this path and workspace path are correct, i.e. project path must always be inside of workspace path\n this.path = projectPath;\n\n if (name) {\n this.name = name;\n }\n\n if (config) {\n this.config = config;\n } else {\n this.config = {};\n }\n\n if (packageJson) {\n this.packageJson = packageJson;\n } else {\n this.packageJson = {};\n }\n\n this.workspace = workspace;\n\n if (errors) {\n this.errors = errors;\n }\n\n if (this.packageJson.name?.length) {\n this.name = this.packageJson.name;\n }\n\n this.relativePath = pathToPosixPath(path.relative(this.workspace.path, this.path));\n }\n\n static async create<M extends boolean>({\n templateId,\n workspace,\n projectPath,\n projectName,\n args,\n }: ProjectCreateOptions<M>): Promise<Project<M>> {\n let project = new this({\n path: projectPath,\n name: projectName,\n config: {\n template: templateId,\n },\n workspace,\n });\n\n await ensureEmptyDirectory(project.path);\n await saveProjectConfig({projectPath: project.path, projectConfig: {template: templateId}});\n\n let templateRenders = await renderTemplate({\n templateId,\n templateData: {\n workspace,\n project,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n path: project.path,\n ignoreCreateStrategies: false,\n ignoreCheckStrategies: true,\n });\n\n await project.read();\n\n return project;\n }\n\n static async read<M extends boolean>(\n projectPath: string,\n workspace: Workspace<M>,\n ): Promise<Project<M>> {\n let project = new this({\n path: projectPath,\n workspace,\n });\n\n await project.read();\n\n return project;\n }\n\n async read() {\n if (!(await fs.pathExists(this.path))) {\n throw new ProjectError('NO_SUCH_PROJECT_PATH', {\n messageParameters: [this.path],\n data: {\n path: this.path,\n },\n });\n }\n\n let errors: Array<InstanceType<typeof ProjectError>> = [];\n\n // load project config\n let projectConfigPath = path.join(this.path, CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME);\n let doesProjectConfigExist = await fs.pathExists(projectConfigPath);\n let projectConfig: ProjectConfig | z.ZodError;\n\n if (doesProjectConfigExist) {\n projectConfig = await readFile(projectConfigPath, projectConfigSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n projectConfig = {};\n }\n\n if (projectConfig instanceof z.ZodError) {\n let zodError = projectConfig;\n\n errors.push(\n new ProjectError('INVALID_PROJECT_CONFIG', {\n messageParameters: [projectConfigPath],\n data: {\n path: projectConfigPath,\n zodIssues: zodError.issues,\n },\n }),\n );\n\n projectConfig = {};\n }\n\n // load package.json\n let packageJsonPath = path.join(this.path, 'package.json');\n let doesPackageJsonExist = await fs.pathExists(packageJsonPath);\n let packageJson: PackageJson | z.ZodError;\n\n if (doesPackageJsonExist) {\n packageJson = await readFile(packageJsonPath, packageJsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n packageJson = {};\n }\n\n if (packageJson instanceof z.ZodError) {\n let zodError = packageJson;\n\n errors.push(\n new ProjectError('INVALID_PACKAGE_JSON', {\n messageParameters: [packageJsonPath],\n data: {\n path: packageJsonPath,\n zodIssues: zodError.issues,\n },\n }),\n );\n\n packageJson = {};\n }\n\n if (packageJson.name?.length) {\n this.name = packageJson.name;\n }\n\n this.config = projectConfig;\n this.packageJson = packageJson;\n this.errors = errors;\n\n return this;\n }\n\n async update({args}: ProjectUpdateOptions): Promise<this> {\n if (!this.config.template) {\n throw new Error('Template ID is missing in the project config!');\n }\n\n let templateRenders = await renderTemplate({\n templateId: this.config.template,\n templateData: {\n workspace: this.workspace,\n project: this,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n path: this.path,\n ignoreCreateStrategies: true,\n ignoreCheckStrategies: false,\n });\n\n await this.read();\n\n return this;\n }\n}\n"],"names":["ensureEmptyDirectory","pathToPosixPath","readFile","packageJsonSchema","fs","json5","path","z","projectConfigSchema","ProjectError","saveProjectConfig","CARSON_CONFIG_DIRECTORY","PROJECT_CONFIG_FILENAME","applyTemplateRenders","renderTemplate","Project","name","relativePath","config","packageJson","workspace","errors","constructor","projectPath","length","relative","create","templateId","projectName","args","project","template","projectConfig","templateRenders","templateData","ignoreCreateStrategies","ignoreCheckStrategies","read","pathExists","messageParameters","data","projectConfigPath","join","doesProjectConfigExist","parser","rawString","parse","ZodError","zodError","push","zodIssues","issues","packageJsonPath","doesPackageJsonExist","update","Error"],"mappings":"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"}