@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 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/uninsertUsingTemplateRender.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 uninsertUsingTemplateRender(\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.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","uninsertUsingTemplateRender","templateRender","basePath","to","join","attributes","extension","extname","pathExists","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,gBAAgB;AAIvC,OAAO,eAAeC,4BACpBC,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,SAAS,EAAEZ,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;oBACrH,IAAIC,mBAAmB,IAAIC,OACzB,CAAC,QAAQ,EAAElB,EAAEmB,YAAY,CACvBf,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EACrC,uBAAuB,EAAEhB,EAAEmB,YAAY,CAACf,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EACxF;oBAEF,IAAII,UAAUR,WAAWS,OAAO,CAACJ,kBAAkBF;oBAEnD,MAAMhB,GAAGuB,SAAS,CAAChB,IAAI,MAAMJ,SAASkB,SAASd,KAAK;wBAACQ,UAAU;oBAAM;gBACvE;gBAEA;YACF;QAEA;YAAS;gBACP,MAAM,IAAIS,MAAM,CAAC,gBAAgB,EAAEd,UAAU,mBAAmB,CAAC;YACnE;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/template/internals/uninsertUsingTemplateRender.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 uninsertUsingTemplateRender(\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.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","uninsertUsingTemplateRender","templateRender","basePath","to","join","attributes","extension","extname","pathExists","targetFile","readFile","encoding","newContent","strategy","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,4BACpBC,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,SAAS,EAAEZ,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;oBACrH,IAAIC,mBAAmB,IAAIC,OACzB,CAAC,QAAQ,EAAEnB,EAAEoB,YAAY,CACvBf,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EACrC,uBAAuB,EAAEjB,EAAEoB,YAAY,CAACf,eAAeI,UAAU,CAACQ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EACxF;oBAEF,IAAII,UAAUR,WAAWS,OAAO,CAACJ,kBAAkBF;oBAEnD,MAAMjB,GAAGwB,SAAS,CAAChB,IAAI,MAAML,SAASmB,SAASd,KAAK;wBAACQ,UAAU;oBAAM;gBACvE;gBAEA;YACF;QAEA;YAAS;gBACP,MAAM,IAAIZ,oBAAoB,kCAAkC;oBAC9DqB,mBAAmB;wBACjBnB,eAAeI,UAAU,CAACQ,QAAQ;wBAClCZ,eAAeoB,QAAQ,CAACxB,IAAI;wBAC5BS;qBACD;oBACDgB,MAAM;wBACJzB,MAAMI,eAAeoB,QAAQ,CAACxB,IAAI;oBACpC;gBACF;YACF;IACF;AACF"}
@@ -1,4 +1,4 @@
1
1
  /**
2
- * Reverts {@linkcode merge}.
2
+ * Reverts {@link merge}.
3
3
  */
4
4
  export declare function unmerge(a: unknown, b: unknown): unknown;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Reverts {@linkcode merge}.
2
+ * Reverts {@link merge}.
3
3
  */ export function unmerge(a, b) {
4
4
  if (b === undefined || b == null) {
5
5
  return a;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/template/internals/unmerge.ts"],"sourcesContent":["/**\n * Reverts {@linkcode merge}.\n */\nexport function unmerge(a: unknown, b: unknown) {\n if (b === undefined || b == null) {\n return a;\n }\n\n if (typeof b !== 'object' || Array.isArray(b)) {\n return a;\n }\n\n if (a === undefined || a == null) {\n return a;\n }\n\n if (typeof a !== 'object' || Array.isArray(a)) {\n return a;\n }\n\n const newA: Record<string, unknown> = {};\n\n for (let [key] of Object.entries(a)) {\n if (!Object.hasOwn(b, key)) {\n newA[key] = (a as Record<string, unknown>)[key];\n\n continue;\n } else if (\n (a as Record<string, unknown>)[key] &&\n typeof (a as Record<string, unknown>)[key] === 'object' &&\n !Array.isArray((a as Record<string, unknown>)[key]) &&\n (b as Record<string, unknown>)[key] &&\n typeof (b as Record<string, unknown>)[key] === 'object' &&\n !Array.isArray((b as Record<string, unknown>)[key])\n ) {\n const result = unmerge(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n );\n\n if (Object.keys(result as Record<string, unknown>).length > 0) {\n newA[key] = result;\n }\n }\n }\n\n return newA;\n}\n"],"names":["unmerge","a","b","undefined","Array","isArray","newA","key","Object","entries","hasOwn","result","keys","length"],"mappings":"AAAA;;CAEC,GACD,OAAO,SAASA,QAAQC,CAAU,EAAEC,CAAU;IAC5C,IAAIA,MAAMC,aAAaD,KAAK,MAAM;QAChC,OAAOD;IACT;IAEA,IAAI,OAAOC,MAAM,YAAYE,MAAMC,OAAO,CAACH,IAAI;QAC7C,OAAOD;IACT;IAEA,IAAIA,MAAME,aAAaF,KAAK,MAAM;QAChC,OAAOA;IACT;IAEA,IAAI,OAAOA,MAAM,YAAYG,MAAMC,OAAO,CAACJ,IAAI;QAC7C,OAAOA;IACT;IAEA,MAAMK,OAAgC,CAAC;IAEvC,KAAK,IAAI,CAACC,IAAI,IAAIC,OAAOC,OAAO,CAACR,GAAI;QACnC,IAAI,CAACO,OAAOE,MAAM,CAACR,GAAGK,MAAM;YAC1BD,IAAI,CAACC,IAAI,GAAG,AAACN,CAA6B,CAACM,IAAI;YAE/C;QACF,OAAO,IACL,AAACN,CAA6B,CAACM,IAAI,IACnC,OAAO,AAACN,CAA6B,CAACM,IAAI,KAAK,YAC/C,CAACH,MAAMC,OAAO,CAAC,AAACJ,CAA6B,CAACM,IAAI,KAClD,AAACL,CAA6B,CAACK,IAAI,IACnC,OAAO,AAACL,CAA6B,CAACK,IAAI,KAAK,YAC/C,CAACH,MAAMC,OAAO,CAAC,AAACH,CAA6B,CAACK,IAAI,GAClD;YACA,MAAMI,SAASX,QACb,AAACC,CAA6B,CAACM,IAAI,EACnC,AAACL,CAA6B,CAACK,IAAI;YAGrC,IAAIC,OAAOI,IAAI,CAACD,QAAmCE,MAAM,GAAG,GAAG;gBAC7DP,IAAI,CAACC,IAAI,GAAGI;YACd;QACF;IACF;IAEA,OAAOL;AACT"}
1
+ {"version":3,"sources":["../../../src/template/internals/unmerge.ts"],"sourcesContent":["/**\n * Reverts {@link merge}.\n */\nexport function unmerge(a: unknown, b: unknown) {\n if (b === undefined || b == null) {\n return a;\n }\n\n if (typeof b !== 'object' || Array.isArray(b)) {\n return a;\n }\n\n if (a === undefined || a == null) {\n return a;\n }\n\n if (typeof a !== 'object' || Array.isArray(a)) {\n return a;\n }\n\n const newA: Record<string, unknown> = {};\n\n for (let [key] of Object.entries(a)) {\n if (!Object.hasOwn(b, key)) {\n newA[key] = (a as Record<string, unknown>)[key];\n\n continue;\n } else if (\n (a as Record<string, unknown>)[key] &&\n typeof (a as Record<string, unknown>)[key] === 'object' &&\n !Array.isArray((a as Record<string, unknown>)[key]) &&\n (b as Record<string, unknown>)[key] &&\n typeof (b as Record<string, unknown>)[key] === 'object' &&\n !Array.isArray((b as Record<string, unknown>)[key])\n ) {\n const result = unmerge(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n );\n\n if (Object.keys(result as Record<string, unknown>).length > 0) {\n newA[key] = result;\n }\n }\n }\n\n return newA;\n}\n"],"names":["unmerge","a","b","undefined","Array","isArray","newA","key","Object","entries","hasOwn","result","keys","length"],"mappings":"AAAA;;CAEC,GACD,OAAO,SAASA,QAAQC,CAAU,EAAEC,CAAU;IAC5C,IAAIA,MAAMC,aAAaD,KAAK,MAAM;QAChC,OAAOD;IACT;IAEA,IAAI,OAAOC,MAAM,YAAYE,MAAMC,OAAO,CAACH,IAAI;QAC7C,OAAOD;IACT;IAEA,IAAIA,MAAME,aAAaF,KAAK,MAAM;QAChC,OAAOA;IACT;IAEA,IAAI,OAAOA,MAAM,YAAYG,MAAMC,OAAO,CAACJ,IAAI;QAC7C,OAAOA;IACT;IAEA,MAAMK,OAAgC,CAAC;IAEvC,KAAK,IAAI,CAACC,IAAI,IAAIC,OAAOC,OAAO,CAACR,GAAI;QACnC,IAAI,CAACO,OAAOE,MAAM,CAACR,GAAGK,MAAM;YAC1BD,IAAI,CAACC,IAAI,GAAG,AAACN,CAA6B,CAACM,IAAI;YAE/C;QACF,OAAO,IACL,AAACN,CAA6B,CAACM,IAAI,IACnC,OAAO,AAACN,CAA6B,CAACM,IAAI,KAAK,YAC/C,CAACH,MAAMC,OAAO,CAAC,AAACJ,CAA6B,CAACM,IAAI,KAClD,AAACL,CAA6B,CAACK,IAAI,IACnC,OAAO,AAACL,CAA6B,CAACK,IAAI,KAAK,YAC/C,CAACH,MAAMC,OAAO,CAAC,AAACH,CAA6B,CAACK,IAAI,GAClD;YACA,MAAMI,SAASX,QACb,AAACC,CAA6B,CAACM,IAAI,EACnC,AAACL,CAA6B,CAACK,IAAI;YAGrC,IAAIC,OAAOI,IAAI,CAACD,QAAmCE,MAAM,GAAG,GAAG;gBAC7DP,IAAI,CAACC,IAAI,GAAGI;YACd;QACF;IACF;IAEA,OAAOL;AACT"}
@@ -4,6 +4,7 @@ import path from 'node:path';
4
4
  import yaml from 'yaml';
5
5
  import { prettify } from './prettify.js';
6
6
  import { unmerge } from './unmerge.js';
7
+ import { CarsonTemplateError } from '../CarsonTemplateError.js';
7
8
  export async function unmergeUsingTemplateRender(templateRender, outputPath) {
8
9
  let to = path.join(outputPath, templateRender.attributes.to);
9
10
  let extension = path.extname(to);
@@ -32,7 +33,16 @@ export async function unmergeUsingTemplateRender(templateRender, outputPath) {
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/unmergeUsingTemplateRender.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 {prettify} from './prettify.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {unmerge} from './unmerge.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport async function unmergeUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n outputPath: string,\n) {\n let to = path.join(outputPath, 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(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(templateRender.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","prettify","unmerge","unmergeUsingTemplateRender","templateRender","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,QAAQ,QAAO,gBAAgB;AAEvC,SAAQC,OAAO,QAAO,eAAe;AAGrC,OAAO,eAAeC,2BACpBC,cAAuD,EACvDC,UAAkB;IAElB,IAAIC,KAAKP,KAAKQ,IAAI,CAACF,YAAYD,eAAeI,UAAU,CAACF,EAAE;IAC3D,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,CAAChB,QAAQS,YAAYE;gBAEjD,MAAMhB,GAAGsB,SAAS,CAACb,IAAI,MAAML,SAASe,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,CAAChB,QAAQS,YAAYE;gBAEjD,MAAMhB,GAAGsB,SAAS,CAACb,IAAI,MAAML,SAASe,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/unmergeUsingTemplateRender.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 {prettify} from './prettify.js';\nimport {type TemplateRenderSnapshot} from './TemplateRenderSnapshot.js';\nimport {unmerge} from './unmerge.js';\nimport {CarsonTemplateError} from '../CarsonTemplateError.js';\nimport {type TemplateRender} from '../TemplateRender.js';\n\nexport async function unmergeUsingTemplateRender(\n templateRender: TemplateRender | TemplateRenderSnapshot,\n outputPath: string,\n) {\n let to = path.join(outputPath, 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(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(templateRender.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 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","prettify","unmerge","CarsonTemplateError","unmergeUsingTemplateRender","templateRender","outputPath","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,QAAQ,QAAO,gBAAgB;AAEvC,SAAQC,OAAO,QAAO,eAAe;AACrC,SAAQC,mBAAmB,QAAO,4BAA4B;AAG9D,OAAO,eAAeC,2BACpBC,cAAuD,EACvDC,UAAkB;IAElB,IAAIC,KAAKR,KAAKS,IAAI,CAACF,YAAYD,eAAeI,UAAU,CAACF,EAAE;IAC3D,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,CAACjB,QAAQU,YAAYE;gBAEjD,MAAMjB,GAAGuB,SAAS,CAACb,IAAI,MAAMN,SAASgB,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,CAACjB,QAAQU,YAAYE;gBAEjD,MAAMjB,GAAGuB,SAAS,CAACb,IAAI,MAAMN,SAASgB,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"}
@@ -4,4 +4,7 @@ export type RenderCarsonTemplateOptions = {
4
4
  templateId: string;
5
5
  templateData: TemplateData;
6
6
  };
7
+ /**
8
+ * Renders a Carson template with provided template data.
9
+ */
7
10
  export declare function renderCarsonTemplate(options: RenderCarsonTemplateOptions): Promise<TemplateRenders>;
@@ -1,16 +1,27 @@
1
+ import { pathToPosixPath } from '@jakubmazanec/fs-utils';
1
2
  import _ from 'lodash';
2
- import { importCarsonTemplate, readCarsonTemplate } from './internals.js';
3
- export async function renderCarsonTemplate(options) {
3
+ import path from 'node:path';
4
+ import { importCarsonTemplate, parseCarsonTemplateId, readCarsonTemplate, resolveModule } from './internals.js';
5
+ /**
6
+ * Renders a Carson template with provided template data.
7
+ */ export async function renderCarsonTemplate(options) {
8
+ let [moduleId] = parseCarsonTemplateId(options.templateId);
9
+ let modulePath = await resolveModule(moduleId);
4
10
  let template = await readCarsonTemplate(options.templateId);
5
11
  let templateModule = await importCarsonTemplate(options.templateId);
6
12
  let templateRenders = [];
7
13
  for (let file of template.files){
8
- templateRenders.push(...await file.render({
14
+ templateRenders.push(...(await file.render({
9
15
  ...templateModule,
10
16
  ...options.templateData
11
17
  }, {
12
18
  disablePrettier: true
13
- }));
19
+ })).map((templateRender)=>({
20
+ ...templateRender,
21
+ template: {
22
+ path: pathToPosixPath(`${moduleId}/${path.relative(modulePath, file.path ?? modulePath)}`)
23
+ }
24
+ })));
14
25
  }
15
26
  templateRenders = _.sortBy(templateRenders, [
16
27
  (templateRender)=>templateRender.attributes.to,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/template/renderCarsonTemplate.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport {importCarsonTemplate, readCarsonTemplate} from './internals.js';\nimport {type TemplateData} from './TemplateData.js';\nimport {type TemplateRenders} from './TemplateRenders.js';\n\nexport type RenderCarsonTemplateOptions = {\n templateId: string;\n templateData: TemplateData;\n};\n\nexport async function renderCarsonTemplate(\n options: RenderCarsonTemplateOptions,\n): Promise<TemplateRenders> {\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 },\n {disablePrettier: true},\n )),\n );\n }\n\n templateRenders = _.sortBy(templateRenders, [\n (templateRender) => templateRender.attributes.to,\n (templateRender) => templateRender.attributes.strategy,\n (templateRender) => templateRender.content,\n ]);\n\n return templateRenders;\n}\n"],"names":["_","importCarsonTemplate","readCarsonTemplate","renderCarsonTemplate","options","template","templateId","templateModule","templateRenders","file","files","push","render","templateData","disablePrettier","sortBy","templateRender","attributes","to","strategy","content"],"mappings":"AAAA,OAAOA,OAAO,SAAS;AAEvB,SAAQC,oBAAoB,EAAEC,kBAAkB,QAAO,iBAAiB;AASxE,OAAO,eAAeC,qBACpBC,OAAoC;IAEpC,IAAIC,WAAW,MAAMH,mBAAmBE,QAAQE,UAAU;IAC1D,IAAIC,iBAAiB,MAAMN,qBAAqBG,QAAQE,UAAU;IAClE,IAAIE,kBAAmC,EAAE;IAEzC,KAAK,IAAIC,QAAQJ,SAASK,KAAK,CAAE;QAC/BF,gBAAgBG,IAAI,IACd,MAAMF,KAAKG,MAAM,CACnB;YACE,GAAGL,cAAc;YACjB,GAAGH,QAAQS,YAAY;QACzB,GACA;YAACC,iBAAiB;QAAI;IAG5B;IAEAN,kBAAkBR,EAAEe,MAAM,CAACP,iBAAiB;QAC1C,CAACQ,iBAAmBA,eAAeC,UAAU,CAACC,EAAE;QAChD,CAACF,iBAAmBA,eAAeC,UAAU,CAACE,QAAQ;QACtD,CAACH,iBAAmBA,eAAeI,OAAO;KAC3C;IAED,OAAOZ;AACT"}
1
+ {"version":3,"sources":["../../src/template/renderCarsonTemplate.ts"],"sourcesContent":["import {pathToPosixPath} from '@jakubmazanec/fs-utils';\nimport _ from 'lodash';\nimport path from 'node:path';\n\nimport {\n importCarsonTemplate,\n parseCarsonTemplateId,\n readCarsonTemplate,\n resolveModule,\n} from './internals.js';\nimport {type TemplateData} from './TemplateData.js';\nimport {type TemplateRenders} from './TemplateRenders.js';\n\nexport type RenderCarsonTemplateOptions = {\n templateId: string;\n templateData: TemplateData;\n};\n\n/**\n * Renders a Carson template with provided template data.\n */\nexport async function renderCarsonTemplate(\n options: RenderCarsonTemplateOptions,\n): Promise<TemplateRenders> {\n let [moduleId] = parseCarsonTemplateId(options.templateId);\n let modulePath = await resolveModule(moduleId);\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 ...(\n await file.render(\n {\n ...templateModule,\n ...options.templateData,\n },\n {disablePrettier: true},\n )\n ).map((templateRender) => ({\n ...templateRender,\n template: {\n path: pathToPosixPath(\n `${moduleId}/${path.relative(modulePath, file.path ?? modulePath)}`,\n ),\n },\n })),\n );\n }\n\n templateRenders = _.sortBy(templateRenders, [\n (templateRender) => templateRender.attributes.to,\n (templateRender) => templateRender.attributes.strategy,\n (templateRender) => templateRender.content,\n ]);\n\n return templateRenders;\n}\n"],"names":["pathToPosixPath","_","path","importCarsonTemplate","parseCarsonTemplateId","readCarsonTemplate","resolveModule","renderCarsonTemplate","options","moduleId","templateId","modulePath","template","templateModule","templateRenders","file","files","push","render","templateData","disablePrettier","map","templateRender","relative","sortBy","attributes","to","strategy","content"],"mappings":"AAAA,SAAQA,eAAe,QAAO,yBAAyB;AACvD,OAAOC,OAAO,SAAS;AACvB,OAAOC,UAAU,YAAY;AAE7B,SACEC,oBAAoB,EACpBC,qBAAqB,EACrBC,kBAAkB,EAClBC,aAAa,QACR,iBAAiB;AASxB;;CAEC,GACD,OAAO,eAAeC,qBACpBC,OAAoC;IAEpC,IAAI,CAACC,SAAS,GAAGL,sBAAsBI,QAAQE,UAAU;IACzD,IAAIC,aAAa,MAAML,cAAcG;IACrC,IAAIG,WAAW,MAAMP,mBAAmBG,QAAQE,UAAU;IAC1D,IAAIG,iBAAiB,MAAMV,qBAAqBK,QAAQE,UAAU;IAClE,IAAII,kBAAmC,EAAE;IAEzC,KAAK,IAAIC,QAAQH,SAASI,KAAK,CAAE;QAC/BF,gBAAgBG,IAAI,IACf,AACD,CAAA,MAAMF,KAAKG,MAAM,CACf;YACE,GAAGL,cAAc;YACjB,GAAGL,QAAQW,YAAY;QACzB,GACA;YAACC,iBAAiB;QAAI,EACxB,EACAC,GAAG,CAAC,CAACC,iBAAoB,CAAA;gBACzB,GAAGA,cAAc;gBACjBV,UAAU;oBACRV,MAAMF,gBACJ,CAAC,EAAES,SAAS,CAAC,EAAEP,KAAKqB,QAAQ,CAACZ,YAAYI,KAAKb,IAAI,IAAIS,YAAY,CAAC;gBAEvE;YACF,CAAA;IAEJ;IAEAG,kBAAkBb,EAAEuB,MAAM,CAACV,iBAAiB;QAC1C,CAACQ,iBAAmBA,eAAeG,UAAU,CAACC,EAAE;QAChD,CAACJ,iBAAmBA,eAAeG,UAAU,CAACE,QAAQ;QACtD,CAACL,iBAAmBA,eAAeM,OAAO;KAC3C;IAED,OAAOd;AACT"}
@@ -1,6 +1,7 @@
1
1
  export * from './template/applyTemplateRenders.js';
2
2
  export * from './template/CarsonTemplate.js';
3
3
  export * from './template/CarsonTemplateConfig.js';
4
+ export * from './template/CarsonTemplateError.js';
4
5
  export * from './template/renderCarsonTemplate.js';
5
6
  export * from './template/TemplateAttributes.js';
6
7
  export * from './template/TemplateData.js';
package/dist/template.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './template/applyTemplateRenders.js';
2
2
  export * from './template/CarsonTemplate.js';
3
3
  export * from './template/CarsonTemplateConfig.js';
4
+ export * from './template/CarsonTemplateError.js';
4
5
  export * from './template/renderCarsonTemplate.js';
5
6
  export * from './template/TemplateAttributes.js';
6
7
  export * from './template/TemplateData.js';
@@ -1 +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/renderCarsonTemplate.js';\nexport * from './template/TemplateAttributes.js';\nexport * from './template/TemplateData.js';\nexport * from './template/TemplateRender.js';\nexport * from './template/TemplateRenders.js';\n"],"names":[],"mappings":"AAAA,cAAc,qCAAqC;AACnD,cAAc,+BAA+B;AAC7C,cAAc,qCAAqC;AACnD,cAAc,qCAAqC;AACnD,cAAc,mCAAmC;AACjD,cAAc,6BAA6B;AAC3C,cAAc,+BAA+B;AAC7C,cAAc,gCAAgC"}
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/CarsonTemplateError.js';\nexport * from './template/renderCarsonTemplate.js';\nexport * from './template/TemplateAttributes.js';\nexport * from './template/TemplateData.js';\nexport * from './template/TemplateRender.js';\nexport * from './template/TemplateRenders.js';\n"],"names":[],"mappings":"AAAA,cAAc,qCAAqC;AACnD,cAAc,+BAA+B;AAC7C,cAAc,qCAAqC;AACnD,cAAc,oCAAoC;AAClD,cAAc,qCAAqC;AACnD,cAAc,mCAAmC;AACjD,cAAc,6BAA6B;AAC3C,cAAc,+BAA+B;AAC7C,cAAc,gCAAgC"}
@@ -6,7 +6,7 @@ import { type ProjectOptions } from './ProjectOptions.js';
6
6
  import { type ProjectUpdateOptions } from './ProjectUpdateOptions.js';
7
7
  import { type Workspace } from './Workspace.js';
8
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.
9
+ * Project represent a self-contained piece of software (e.g. a package, or an app) that is part of a {@link Workspace}. Currently only Node.js projects are supported.
10
10
  *
11
11
  * @typeParam M If true, the project belongs to a multi-project workspace.
12
12
  */
@@ -21,7 +21,7 @@ export declare class Project<M extends boolean = true> {
21
21
  config: ProjectConfig;
22
22
  /** Parsed project `package.json` file; if it's not found, the default is an empty object. */
23
23
  packageJson: PackageJson;
24
- /** Parent {@linkcode Workspace} instance. */
24
+ /** Parent {@link Workspace} instance. */
25
25
  workspace: Workspace<M>;
26
26
  /** Errors found during reading from the file system. */
27
27
  errors: Array<InstanceType<typeof ProjectError>>;
@@ -11,7 +11,7 @@ import { CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME } from '../constants.j
11
11
  import { applyTemplateRenders } from '../template/applyTemplateRenders.js';
12
12
  import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
13
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.
14
+ * Project represent a self-contained piece of software (e.g. a package, or an app) that is part of a {@link Workspace}. Currently only Node.js projects are supported.
15
15
  *
16
16
  * @typeParam M If true, the project belongs to a multi-project workspace.
17
17
  */ export class Project {
@@ -20,7 +20,7 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
20
20
  /** Project path relative to workspace path. */ relativePath;
21
21
  /** Project configuration; if it's not found, the default is an empty object. */ config;
22
22
  /** Parsed project `package.json` file; if it's not found, the default is an empty object. */ packageJson;
23
- /** Parent {@linkcode Workspace} instance. */ workspace;
23
+ /** Parent {@link Workspace} instance. */ workspace;
24
24
  /** Errors found during reading from the file system. */ errors = [];
25
25
  constructor({ path: projectPath, name, config, packageJson, workspace, errors }){
26
26
  var _this_packageJson_name;
@@ -57,7 +57,18 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
57
57
  },
58
58
  workspace
59
59
  });
60
- await ensureEmptyDirectory(project.path);
60
+ try {
61
+ await ensureEmptyDirectory(project.path);
62
+ } catch {
63
+ throw new ProjectError('PROJECT_PATH_NOT_EMPTY', {
64
+ messageParameters: [
65
+ project.path
66
+ ],
67
+ data: {
68
+ path: project.path
69
+ }
70
+ });
71
+ }
61
72
  await saveProjectConfig({
62
73
  projectPath: project.path,
63
74
  projectConfig: {
@@ -161,7 +172,11 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
161
172
  }
162
173
  async update({ args }) {
163
174
  if (!this.config.template) {
164
- throw new Error('Template ID is missing in the project config!');
175
+ throw new ProjectError('MISSING_CARSON_TEMPLATE_ID', {
176
+ messageParameters: [
177
+ path.join(this.path, CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME)
178
+ ]
179
+ });
165
180
  }
166
181
  let templateRenders = await renderCarsonTemplate({
167
182
  templateId: this.config.template,
@@ -1 +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 {renderCarsonTemplate} from '../template/renderCarsonTemplate.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 renderCarsonTemplate({\n templateId,\n templateData: {\n workspace,\n project,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n path: project.path,\n ignoreStrategies: ['check'],\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 renderCarsonTemplate({\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 ignoreStrategies: ['create'],\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","renderCarsonTemplate","Project","name","relativePath","config","packageJson","workspace","errors","constructor","projectPath","length","relative","create","templateId","projectName","args","project","template","projectConfig","templateRenders","templateData","ignoreStrategies","read","pathExists","messageParameters","data","projectConfigPath","join","doesProjectConfigExist","parser","rawString","parse","ZodError","zodError","push","zodIssues","issues","packageJsonPath","doesPackageJsonExist","update","Error"],"mappings":"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"}
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 {renderCarsonTemplate} from '../template/renderCarsonTemplate.js';\n\n/**\n * Project represent a self-contained piece of software (e.g. a package, or an app) that is part of a {@link 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 {@link 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 try {\n await ensureEmptyDirectory(project.path);\n } catch {\n throw new ProjectError('PROJECT_PATH_NOT_EMPTY', {\n messageParameters: [project.path],\n data: {\n path: project.path,\n },\n });\n }\n\n await saveProjectConfig({projectPath: project.path, projectConfig: {template: templateId}});\n\n let templateRenders = await renderCarsonTemplate({\n templateId,\n templateData: {\n workspace,\n project,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n path: project.path,\n ignoreStrategies: ['check'],\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 ProjectError('MISSING_CARSON_TEMPLATE_ID', {\n messageParameters: [path.join(this.path, CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME)],\n });\n }\n\n let templateRenders = await renderCarsonTemplate({\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 ignoreStrategies: ['create'],\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","renderCarsonTemplate","Project","name","relativePath","config","packageJson","workspace","errors","constructor","projectPath","length","relative","create","templateId","projectName","args","project","template","messageParameters","data","projectConfig","templateRenders","templateData","ignoreStrategies","read","pathExists","projectConfigPath","join","doesProjectConfigExist","parser","rawString","parse","ZodError","zodError","push","zodIssues","issues","packageJsonPath","doesPackageJsonExist","update"],"mappings":"AAAA,SAAQA,oBAAoB,EAAEC,eAAe,QAAO,yBAAyB;AAC7E,SAAQC,QAAQ,EAAEC,iBAAiB,QAAyB,0BAA0B;AACtF,OAAOC,QAAQ,WAAW;AAC1B,OAAOC,WAAW,QAAQ;AAC1B,OAAOC,UAAU,YAAY;AAC7B,SAAQC,CAAC,QAAO,MAAM;AAEtB,SAA4BC,mBAAmB,QAAO,qBAAqB;AAE3E,SAAQC,YAAY,QAAO,oBAAoB;AAG/C,SAAQC,iBAAiB,QAAO,yBAAyB;AAEzD,SAAQC,uBAAuB,EAAEC,uBAAuB,QAAO,kBAAkB;AACjF,SAAQC,oBAAoB,QAAO,sCAAsC;AACzE,SAAQC,oBAAoB,QAAO,sCAAsC;AAEzE;;;;CAIC,GACD,OAAO,MAAMC;IACX,kBAAkB,GAClBC,KAAc;IAEd,kBAAkB,GAClBV,KAAa;IAEb,6CAA6C,GAC7CW,aAAqB;IAErB,8EAA8E,GAC9EC,OAAsB;IAEtB,2FAA2F,GAC3FC,YAAyB;IAEzB,uCAAuC,GACvCC,UAAwB;IAExB,sDAAsD,GACtDC,SAAmD,EAAE,CAAC;IAEtDC,YAAY,EACVhB,MAAMiB,WAAW,EACjBP,IAAI,EACJE,MAAM,EACNC,WAAW,EACXC,SAAS,EACTC,MAAM,EACY,CAAE;YA0BhB;QAzBJ,uHAAuH;QACvH,IAAI,CAACf,IAAI,GAAGiB;QAEZ,IAAIP,MAAM;YACR,IAAI,CAACA,IAAI,GAAGA;QACd;QAEA,IAAIE,QAAQ;YACV,IAAI,CAACA,MAAM,GAAGA;QAChB,OAAO;YACL,IAAI,CAACA,MAAM,GAAG,CAAC;QACjB;QAEA,IAAIC,aAAa;YACf,IAAI,CAACA,WAAW,GAAGA;QACrB,OAAO;YACL,IAAI,CAACA,WAAW,GAAG,CAAC;QACtB;QAEA,IAAI,CAACC,SAAS,GAAGA;QAEjB,IAAIC,QAAQ;YACV,IAAI,CAACA,MAAM,GAAGA;QAChB;QAEA,KAAI,yBAAA,IAAI,CAACF,WAAW,CAACH,IAAI,cAArB,6CAAA,uBAAuBQ,MAAM,EAAE;YACjC,IAAI,CAACR,IAAI,GAAG,IAAI,CAACG,WAAW,CAACH,IAAI;QACnC;QAEA,IAAI,CAACC,YAAY,GAAGhB,gBAAgBK,KAAKmB,QAAQ,CAAC,IAAI,CAACL,SAAS,CAACd,IAAI,EAAE,IAAI,CAACA,IAAI;IAClF;IAEA,aAAaoB,OAA0B,EACrCC,UAAU,EACVP,SAAS,EACTG,WAAW,EACXK,WAAW,EACXC,IAAI,EACoB,EAAuB;QAC/C,IAAIC,UAAU,IAAI,IAAI,CAAC;YACrBxB,MAAMiB;YACNP,MAAMY;YACNV,QAAQ;gBACNa,UAAUJ;YACZ;YACAP;QACF;QAEA,IAAI;YACF,MAAMpB,qBAAqB8B,QAAQxB,IAAI;QACzC,EAAE,OAAM;YACN,MAAM,IAAIG,aAAa,0BAA0B;gBAC/CuB,mBAAmB;oBAACF,QAAQxB,IAAI;iBAAC;gBACjC2B,MAAM;oBACJ3B,MAAMwB,QAAQxB,IAAI;gBACpB;YACF;QACF;QAEA,MAAMI,kBAAkB;YAACa,aAAaO,QAAQxB,IAAI;YAAE4B,eAAe;gBAACH,UAAUJ;YAAU;QAAC;QAEzF,IAAIQ,kBAAkB,MAAMrB,qBAAqB;YAC/Ca;YACAS,cAAc;gBACZhB;gBACAU;gBACAD;YACF;QACF;QAEA,MAAMhB,qBAAqB;YACzBsB;YACA7B,MAAMwB,QAAQxB,IAAI;YAClB+B,kBAAkB;gBAAC;aAAQ;QAC7B;QAEA,MAAMP,QAAQQ,IAAI;QAElB,OAAOR;IACT;IAEA,aAAaQ,KACXf,WAAmB,EACnBH,SAAuB,EACF;QACrB,IAAIU,UAAU,IAAI,IAAI,CAAC;YACrBxB,MAAMiB;YACNH;QACF;QAEA,MAAMU,QAAQQ,IAAI;QAElB,OAAOR;IACT;IAEA,MAAMQ,OAAO;YAsEPnB;QArEJ,IAAI,CAAE,MAAMf,GAAGmC,UAAU,CAAC,IAAI,CAACjC,IAAI,GAAI;YACrC,MAAM,IAAIG,aAAa,wBAAwB;gBAC7CuB,mBAAmB;oBAAC,IAAI,CAAC1B,IAAI;iBAAC;gBAC9B2B,MAAM;oBACJ3B,MAAM,IAAI,CAACA,IAAI;gBACjB;YACF;QACF;QAEA,IAAIe,SAAmD,EAAE;QAEzD,sBAAsB;QACtB,IAAImB,oBAAoBlC,KAAKmC,IAAI,CAAC,IAAI,CAACnC,IAAI,EAAEK,yBAAyBC;QACtE,IAAI8B,yBAAyB,MAAMtC,GAAGmC,UAAU,CAACC;QACjD,IAAIN;QAEJ,IAAIQ,wBAAwB;YAC1BR,gBAAgB,MAAMhC,SAASsC,mBAAmBhC,qBAAqB;gBACrEmC,QAAQ,CAACC,YAAsBvC,MAAMwC,KAAK,CAAUD;YACtD;QACF,OAAO;YACLV,gBAAgB,CAAC;QACnB;QAEA,IAAIA,yBAAyB3B,EAAEuC,QAAQ,EAAE;YACvC,IAAIC,WAAWb;YAEfb,OAAO2B,IAAI,CACT,IAAIvC,aAAa,0BAA0B;gBACzCuB,mBAAmB;oBAACQ;iBAAkB;gBACtCP,MAAM;oBACJ3B,MAAMkC;oBACNS,WAAWF,SAASG,MAAM;gBAC5B;YACF;YAGFhB,gBAAgB,CAAC;QACnB;QAEA,oBAAoB;QACpB,IAAIiB,kBAAkB7C,KAAKmC,IAAI,CAAC,IAAI,CAACnC,IAAI,EAAE;QAC3C,IAAI8C,uBAAuB,MAAMhD,GAAGmC,UAAU,CAACY;QAC/C,IAAIhC;QAEJ,IAAIiC,sBAAsB;YACxBjC,cAAc,MAAMjB,SAASiD,iBAAiBhD,mBAAmB;gBAC/DwC,QAAQ,CAACC,YAAsBvC,MAAMwC,KAAK,CAAUD;YACtD;QACF,OAAO;YACLzB,cAAc,CAAC;QACjB;QAEA,IAAIA,uBAAuBZ,EAAEuC,QAAQ,EAAE;YACrC,IAAIC,WAAW5B;YAEfE,OAAO2B,IAAI,CACT,IAAIvC,aAAa,wBAAwB;gBACvCuB,mBAAmB;oBAACmB;iBAAgB;gBACpClB,MAAM;oBACJ3B,MAAM6C;oBACNF,WAAWF,SAASG,MAAM;gBAC5B;YACF;YAGF/B,cAAc,CAAC;QACjB;QAEA,KAAIA,oBAAAA,YAAYH,IAAI,cAAhBG,wCAAAA,kBAAkBK,MAAM,EAAE;YAC5B,IAAI,CAACR,IAAI,GAAGG,YAAYH,IAAI;QAC9B;QAEA,IAAI,CAACE,MAAM,GAAGgB;QACd,IAAI,CAACf,WAAW,GAAGA;QACnB,IAAI,CAACE,MAAM,GAAGA;QAEd,OAAO,IAAI;IACb;IAEA,MAAMgC,OAAO,EAACxB,IAAI,EAAuB,EAAiB;QACxD,IAAI,CAAC,IAAI,CAACX,MAAM,CAACa,QAAQ,EAAE;YACzB,MAAM,IAAItB,aAAa,8BAA8B;gBACnDuB,mBAAmB;oBAAC1B,KAAKmC,IAAI,CAAC,IAAI,CAACnC,IAAI,EAAEK,yBAAyBC;iBAAyB;YAC7F;QACF;QAEA,IAAIuB,kBAAkB,MAAMrB,qBAAqB;YAC/Ca,YAAY,IAAI,CAACT,MAAM,CAACa,QAAQ;YAChCK,cAAc;gBACZhB,WAAW,IAAI,CAACA,SAAS;gBACzBU,SAAS,IAAI;gBACbD;YACF;QACF;QAEA,MAAMhB,qBAAqB;YACzBsB;YACA7B,MAAM,IAAI,CAACA,IAAI;YACf+B,kBAAkB;gBAAC;aAAS;QAC9B;QAEA,MAAM,IAAI,CAACC,IAAI;QAEf,OAAO,IAAI;IACb;AACF"}
@@ -6,4 +6,7 @@ export declare const projectConfigSchema: z.ZodObject<{
6
6
  }, z.ZodUnknown, "strip">, z.objectInputType<{
7
7
  template: z.ZodOptional<z.ZodString>;
8
8
  }, z.ZodUnknown, "strip">>;
9
+ /**
10
+ * A project configuration.
11
+ */
9
12
  export type ProjectConfig = z.infer<typeof projectConfigSchema>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workspace/ProjectConfig.ts"],"sourcesContent":["import {z} from 'zod';\n\nexport const projectConfigSchema = z\n .object({\n template: z.string().optional(),\n })\n .catchall(z.unknown());\n\nexport type ProjectConfig = z.infer<typeof projectConfigSchema>;\n"],"names":["z","projectConfigSchema","object","template","string","optional","catchall","unknown"],"mappings":"AAAA,SAAQA,CAAC,QAAO,MAAM;AAEtB,OAAO,MAAMC,sBAAsBD,EAChCE,MAAM,CAAC;IACNC,UAAUH,EAAEI,MAAM,GAAGC,QAAQ;AAC/B,GACCC,QAAQ,CAACN,EAAEO,OAAO,IAAI"}
1
+ {"version":3,"sources":["../../src/workspace/ProjectConfig.ts"],"sourcesContent":["import {z} from 'zod';\n\nexport const projectConfigSchema = z\n .object({\n template: z.string().optional(),\n })\n .catchall(z.unknown());\n\n/**\n * A project configuration.\n */\nexport type ProjectConfig = z.infer<typeof projectConfigSchema>;\n"],"names":["z","projectConfigSchema","object","template","string","optional","catchall","unknown"],"mappings":"AAAA,SAAQA,CAAC,QAAO,MAAM;AAEtB,OAAO,MAAMC,sBAAsBD,EAChCE,MAAM,CAAC;IACNC,UAAUH,EAAEI,MAAM,GAAGC,QAAQ;AAC/B,GACCC,QAAQ,CAACN,EAAEO,OAAO,IAAI"}
@@ -1,4 +1,7 @@
1
1
  import { type Workspace } from './Workspace.js';
2
+ /**
3
+ * {@link Project.create | Project.create} options parameter.
4
+ */
2
5
  export type ProjectCreateOptions<M extends boolean> = {
3
6
  templateId: string;
4
7
  workspace: Workspace<M>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workspace/ProjectCreateOptions.ts"],"sourcesContent":["import {type Workspace} from './Workspace.js';\n\nexport type ProjectCreateOptions<M extends boolean> = {\n templateId: string;\n workspace: Workspace<M>;\n projectPath: string;\n projectName: string;\n args: Record<string, unknown>;\n};\n"],"names":[],"mappings":"AAAA,WAQE"}
1
+ {"version":3,"sources":["../../src/workspace/ProjectCreateOptions.ts"],"sourcesContent":["import {type Workspace} from './Workspace.js';\n\n/**\n * {@link Project.create | Project.create} options parameter.\n */\nexport type ProjectCreateOptions<M extends boolean> = {\n templateId: string;\n workspace: Workspace<M>;\n projectPath: string;\n projectName: string;\n args: Record<string, unknown>;\n};\n"],"names":[],"mappings":"AAAA,WAWE"}
@@ -1,8 +1,11 @@
1
1
  import { type ZodIssue } from 'zod';
2
- export declare const ProjectError: new (code: "INVALID_PACKAGE_JSON" | "INVALID_PROJECT_CONFIG" | "NO_SUCH_PROJECT_PATH", options?: import("@jakubmazanec/error").CustomErrorWithDataOptions<{
2
+ /**
3
+ * A subclass of `Error` that indicates a project failure.
4
+ */
5
+ export declare const ProjectError: new (code: "INVALID_PACKAGE_JSON" | "INVALID_PROJECT_CONFIG" | "NO_SUCH_PROJECT_PATH" | "PROJECT_PATH_NOT_EMPTY" | "MISSING_CARSON_TEMPLATE_ID", options?: import("@jakubmazanec/error").CustomErrorWithDataOptions<{
3
6
  path?: string;
4
7
  zodIssues?: ZodIssue[];
5
- }> | undefined) => import("@jakubmazanec/error").CustomErrorWithData<"INVALID_PACKAGE_JSON" | "INVALID_PROJECT_CONFIG" | "NO_SUCH_PROJECT_PATH" | "UNKNOWN_ERROR", {
8
+ }> | undefined) => import("@jakubmazanec/error").CustomErrorWithData<"UNKNOWN_ERROR" | "INVALID_PACKAGE_JSON" | "INVALID_PROJECT_CONFIG" | "NO_SUCH_PROJECT_PATH" | "PROJECT_PATH_NOT_EMPTY" | "MISSING_CARSON_TEMPLATE_ID", {
6
9
  path?: string;
7
10
  zodIssues?: ZodIssue[];
8
11
  }>;
@@ -1,8 +1,12 @@
1
1
  import { createCustomErrorWithData } from '@jakubmazanec/error';
2
- export const ProjectError = createCustomErrorWithData('ProjectError', {
2
+ /**
3
+ * A subclass of `Error` that indicates a project failure.
4
+ */ export const ProjectError = createCustomErrorWithData('ProjectError', {
3
5
  INVALID_PACKAGE_JSON: 'Invalid package.json file "{0}".',
4
6
  INVALID_PROJECT_CONFIG: 'Invalid project config file "{0}".',
5
- NO_SUCH_PROJECT_PATH: 'Project path "{0}" doesn\'t exist.'
7
+ NO_SUCH_PROJECT_PATH: 'Project path "{0}" doesn\'t exist.',
8
+ PROJECT_PATH_NOT_EMPTY: 'Project path "{0}" must be an empty directory.',
9
+ MISSING_CARSON_TEMPLATE_ID: 'Project config "{0}" is missing the Carson template ID.'
6
10
  }, class ProjectErrorData {
7
11
  path;
8
12
  zodIssues;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workspace/ProjectError.ts"],"sourcesContent":["import {createCustomErrorWithData} from '@jakubmazanec/error';\nimport {type ZodIssue} from 'zod';\n\nexport const ProjectError = createCustomErrorWithData(\n 'ProjectError',\n {\n INVALID_PACKAGE_JSON: 'Invalid package.json file \"{0}\".',\n INVALID_PROJECT_CONFIG: 'Invalid project config file \"{0}\".',\n NO_SUCH_PROJECT_PATH: 'Project path \"{0}\" doesn\\'t exist.',\n },\n class ProjectErrorData {\n path?: string;\n zodIssues?: ZodIssue[];\n },\n);\n"],"names":["createCustomErrorWithData","ProjectError","INVALID_PACKAGE_JSON","INVALID_PROJECT_CONFIG","NO_SUCH_PROJECT_PATH","ProjectErrorData","path","zodIssues"],"mappings":"AAAA,SAAQA,yBAAyB,QAAO,sBAAsB;AAG9D,OAAO,MAAMC,eAAeD,0BAC1B,gBACA;IACEE,sBAAsB;IACtBC,wBAAwB;IACxBC,sBAAsB;AACxB,GACA,MAAMC;IACJC,KAAc;IACdC,UAAuB;AACzB,GACA"}
1
+ {"version":3,"sources":["../../src/workspace/ProjectError.ts"],"sourcesContent":["import {createCustomErrorWithData} from '@jakubmazanec/error';\nimport {type ZodIssue} from 'zod';\n\n/**\n * A subclass of `Error` that indicates a project failure.\n */\nexport const ProjectError = createCustomErrorWithData(\n 'ProjectError',\n {\n INVALID_PACKAGE_JSON: 'Invalid package.json file \"{0}\".',\n INVALID_PROJECT_CONFIG: 'Invalid project config file \"{0}\".',\n NO_SUCH_PROJECT_PATH: 'Project path \"{0}\" doesn\\'t exist.',\n PROJECT_PATH_NOT_EMPTY: 'Project path \"{0}\" must be an empty directory.',\n MISSING_CARSON_TEMPLATE_ID: 'Project config \"{0}\" is missing the Carson template ID.',\n },\n class ProjectErrorData {\n path?: string;\n zodIssues?: ZodIssue[];\n },\n);\n"],"names":["createCustomErrorWithData","ProjectError","INVALID_PACKAGE_JSON","INVALID_PROJECT_CONFIG","NO_SUCH_PROJECT_PATH","PROJECT_PATH_NOT_EMPTY","MISSING_CARSON_TEMPLATE_ID","ProjectErrorData","path","zodIssues"],"mappings":"AAAA,SAAQA,yBAAyB,QAAO,sBAAsB;AAG9D;;CAEC,GACD,OAAO,MAAMC,eAAeD,0BAC1B,gBACA;IACEE,sBAAsB;IACtBC,wBAAwB;IACxBC,sBAAsB;IACtBC,wBAAwB;IACxBC,4BAA4B;AAC9B,GACA,MAAMC;IACJC,KAAc;IACdC,UAAuB;AACzB,GACA"}
@@ -3,7 +3,7 @@ import { type ProjectConfig } from './ProjectConfig.js';
3
3
  import { type ProjectError } from './ProjectError.js';
4
4
  import { type Workspace } from './Workspace.js';
5
5
  /**
6
- * New project options.
6
+ * {@link Project.constructor | Project constructor} options parameter.
7
7
  */
8
8
  export type ProjectOptions<M extends boolean> = {
9
9
  path: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workspace/ProjectOptions.ts"],"sourcesContent":["import {type PackageJson} from '@jakubmazanec/zod-utils';\n\nimport {type ProjectConfig} from './ProjectConfig.js';\nimport {type ProjectError} from './ProjectError.js';\nimport {type Workspace} from './Workspace.js';\n\n/**\n * New project options.\n */\nexport type ProjectOptions<M extends boolean> = {\n path: string;\n name?: string;\n config?: ProjectConfig;\n packageJson?: PackageJson;\n workspace: Workspace<M>;\n errors?: Array<InstanceType<typeof ProjectError>>;\n};\n"],"names":[],"mappings":"AAAA,WAgBE"}
1
+ {"version":3,"sources":["../../src/workspace/ProjectOptions.ts"],"sourcesContent":["import {type PackageJson} from '@jakubmazanec/zod-utils';\n\nimport {type ProjectConfig} from './ProjectConfig.js';\nimport {type ProjectError} from './ProjectError.js';\nimport {type Workspace} from './Workspace.js';\n\n/**\n * {@link Project.constructor | Project constructor} options parameter.\n */\nexport type ProjectOptions<M extends boolean> = {\n path: string;\n name?: string;\n config?: ProjectConfig;\n packageJson?: PackageJson;\n workspace: Workspace<M>;\n errors?: Array<InstanceType<typeof ProjectError>>;\n};\n"],"names":[],"mappings":"AAAA,WAgBE"}
@@ -1,3 +1,6 @@
1
+ /**
2
+ * {@link Project.update | Project.update} options parameter.
3
+ */
1
4
  export type ProjectUpdateOptions = {
2
5
  args: Record<string, unknown>;
3
6
  };
@@ -1,3 +1,5 @@
1
- export { };
1
+ /**
2
+ * {@link Project.update | Project.update} options parameter.
3
+ */ export { };
2
4
 
3
5
  //# sourceMappingURL=ProjectUpdateOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workspace/ProjectUpdateOptions.ts"],"sourcesContent":["export type ProjectUpdateOptions = {\n args: Record<string, unknown>;\n};\n"],"names":[],"mappings":"AAAA,WAEE"}
1
+ {"version":3,"sources":["../../src/workspace/ProjectUpdateOptions.ts"],"sourcesContent":["/**\n * {@link Project.update | Project.update} options parameter.\n */\nexport type ProjectUpdateOptions = {\n args: Record<string, unknown>;\n};\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAEE"}
@@ -4,6 +4,7 @@ import { type WorkspaceCreateOptions } from './WorkspaceCreateOptions.js';
4
4
  import { type WorkspaceCreateProjectOptions } from './WorkspaceCreateProjectOptions.js';
5
5
  import { WorkspaceDependencies } from './WorkspaceDependencies.js';
6
6
  import { WorkspaceError } from './WorkspaceError.js';
7
+ import { type WorkspaceFindAndReadOptions } from './WorkspaceFindAndReadOptions.js';
7
8
  import type { WorkspaceOptions } from './WorkspaceOptions.js';
8
9
  import { type WorkspacePackageJson } from './WorkspacePackageJson.js';
9
10
  import type { WorkspaceProjectGlobs } from './WorkspaceProjectGlobs.js';
@@ -11,7 +12,7 @@ import { type WorkspaceProjects } from './WorkspaceProjects.js';
11
12
  import { type WorkspaceRepository } from './WorkspaceRepository.js';
12
13
  import { type WorkspaceUpdateOptions } from './WorkspaceUpdateOptions.js';
13
14
  /**
14
- * Workspace represent a directory, usually a git repository, that contains {@linkcode Project} instances.
15
+ * Workspace represent a directory, usually a git repository, that contains {@link Project} instances.
15
16
  *
16
17
  * @typeParam M If true, the workspace is multi-project workspace (so-called "monorepo").
17
18
  */
@@ -45,7 +46,7 @@ export declare class Workspace<M extends boolean = true> {
45
46
  * Creates new workspace within the file system.
46
47
  *
47
48
  * @param options Options.
48
- * @returns The new workspace
49
+ * @returns The new workspace.
49
50
  */
50
51
  static create({ args, path: workspacePath, templateId }: WorkspaceCreateOptions): Promise<Workspace<true> | Workspace<false>>;
51
52
  static read(workspacePath: string): Promise<Workspace | Workspace<false>>;
@@ -56,13 +57,14 @@ export declare class Workspace<M extends boolean = true> {
56
57
  /**
57
58
  * Traverses file system up from the search path and tries to find and read a workspace.
58
59
  */
59
- static findAndRead(searchPath: string): Promise<Workspace | Workspace<false> | undefined>;
60
+ static findAndRead<O extends WorkspaceFindAndReadOptions | undefined = undefined>(searchPath: string, options?: O): Promise<O extends undefined ? Workspace | Workspace<false> | undefined : NonNullable<O>['throwIfNotFound'] extends true ? Workspace | Workspace<false> : Workspace | Workspace<false> | undefined>;
60
61
  read(): Promise<this>;
61
62
  update({ args }: WorkspaceUpdateOptions): Promise<this>;
62
63
  getProject(projectName: Project<M> | string): Project<M> | undefined;
63
64
  createProject({ templateId, projectPath, projectName, args, }: WorkspaceCreateProjectOptions): Promise<Project<M>>;
64
- addProject(newProject: Project<M>): Project<M>;
65
+ addProject(newProject: Project<M>): this;
66
+ addProjects(newProjects: Array<Project<M>>): this;
65
67
  readProjects(): Promise<Array<Project<M>>>;
66
- private sortProjects;
67
- private updateDependencies;
68
+ protected sortProjects(): void;
69
+ protected updateDependencies(): void;
68
70
  }