@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.
- package/README.md +65 -10
- package/dist/commands/create-project/CreateProject.js.map +1 -1
- package/dist/commands/create-project/CreateProjectInput.js +1 -1
- package/dist/commands/create-project/CreateProjectInput.js.map +1 -1
- package/dist/commands/create-project/createProjectCommand.js +3 -4
- package/dist/commands/create-project/createProjectCommand.js.map +1 -1
- package/dist/commands/create-project/runCreateProject.js +3 -13
- package/dist/commands/create-project/runCreateProject.js.map +1 -1
- package/dist/commands/create-workspace/CreateWorkspace.d.ts +1 -2
- package/dist/commands/create-workspace/CreateWorkspace.js +7 -5
- package/dist/commands/create-workspace/CreateWorkspace.js.map +1 -1
- package/dist/commands/create-workspace/createWorkspaceCommand.js +1 -11
- package/dist/commands/create-workspace/createWorkspaceCommand.js.map +1 -1
- package/dist/commands/create-workspace/runCreateWorkspace.js +3 -12
- package/dist/commands/create-workspace/runCreateWorkspace.js.map +1 -1
- package/dist/commands/internals/CommandStatus.d.ts +1 -0
- package/dist/commands/internals/CommandStatus.js +3 -0
- package/dist/commands/internals/CommandStatus.js.map +1 -0
- package/dist/commands/internals.d.ts +1 -0
- package/dist/commands/internals.js +1 -0
- package/dist/commands/internals.js.map +1 -1
- package/dist/commands/update-workspace/UpdateWorkspace.js +1 -1
- package/dist/commands/update-workspace/UpdateWorkspace.js.map +1 -1
- package/dist/commands/update-workspace/updateWorkspaceCommand.js +3 -4
- package/dist/commands/update-workspace/updateWorkspaceCommand.js.map +1 -1
- package/dist/template/CarsonTemplate.d.ts +1 -1
- package/dist/template/CarsonTemplate.js.map +1 -1
- package/dist/template/CarsonTemplateConfig.d.ts +1 -1
- package/dist/template/CarsonTemplateConfig.js.map +1 -1
- package/dist/template/CarsonTemplateError.d.ts +8 -0
- package/dist/template/CarsonTemplateError.js +13 -0
- package/dist/template/CarsonTemplateError.js.map +1 -0
- package/dist/template/TemplateAttributes.d.ts +3 -3
- package/dist/template/TemplateAttributes.js +2 -1
- package/dist/template/TemplateAttributes.js.map +1 -1
- package/dist/template/TemplateRender.d.ts +6 -2
- package/dist/template/TemplateRender.js.map +1 -1
- package/dist/template/TemplateRenders.d.ts +1 -1
- package/dist/template/TemplateRenders.js.map +1 -1
- package/dist/template/applyTemplateRenders.d.ts +3 -0
- package/dist/template/applyTemplateRenders.js +36 -6
- package/dist/template/applyTemplateRenders.js.map +1 -1
- package/dist/template/internals/TemplateRenderSnapshot.d.ts +18 -5
- package/dist/template/internals/TemplateRenderSnapshot.js +4 -1
- package/dist/template/internals/TemplateRenderSnapshot.js.map +1 -1
- package/dist/template/internals/TemplateRenderSnapshots.d.ts +18 -5
- package/dist/template/internals/deleteUsingTemplateRender.d.ts +4 -1
- package/dist/template/internals/deleteUsingTemplateRender.js +16 -3
- package/dist/template/internals/deleteUsingTemplateRender.js.map +1 -1
- package/dist/template/internals/insertUsingTemplateRender.js +11 -1
- package/dist/template/internals/insertUsingTemplateRender.js.map +1 -1
- package/dist/template/internals/loadTemplateRenderSnapshots.d.ts +4 -1
- package/dist/template/internals/mergeUsingTemplateRender.js +11 -1
- package/dist/template/internals/mergeUsingTemplateRender.js.map +1 -1
- package/dist/template/internals/parseCarsonTemplateId.js +6 -1
- package/dist/template/internals/parseCarsonTemplateId.js.map +1 -1
- package/dist/template/internals/readCarsonTemplate.js +7 -1
- package/dist/template/internals/readCarsonTemplate.js.map +1 -1
- package/dist/template/internals/saveTemplateRenderSnapshots.js +4 -4
- package/dist/template/internals/saveTemplateRenderSnapshots.js.map +1 -1
- package/dist/template/internals/uninsertUsingTemplateRender.js +11 -1
- package/dist/template/internals/uninsertUsingTemplateRender.js.map +1 -1
- package/dist/template/internals/unmerge.d.ts +1 -1
- package/dist/template/internals/unmerge.js +1 -1
- package/dist/template/internals/unmerge.js.map +1 -1
- package/dist/template/internals/unmergeUsingTemplateRender.js +11 -1
- package/dist/template/internals/unmergeUsingTemplateRender.js.map +1 -1
- package/dist/template/renderCarsonTemplate.d.ts +3 -0
- package/dist/template/renderCarsonTemplate.js +15 -4
- package/dist/template/renderCarsonTemplate.js.map +1 -1
- package/dist/template.d.ts +1 -0
- package/dist/template.js +1 -0
- package/dist/template.js.map +1 -1
- package/dist/workspace/Project.d.ts +2 -2
- package/dist/workspace/Project.js +19 -4
- package/dist/workspace/Project.js.map +1 -1
- package/dist/workspace/ProjectConfig.d.ts +3 -0
- package/dist/workspace/ProjectConfig.js.map +1 -1
- package/dist/workspace/ProjectCreateOptions.d.ts +3 -0
- package/dist/workspace/ProjectCreateOptions.js.map +1 -1
- package/dist/workspace/ProjectError.d.ts +5 -2
- package/dist/workspace/ProjectError.js +6 -2
- package/dist/workspace/ProjectError.js.map +1 -1
- package/dist/workspace/ProjectOptions.d.ts +1 -1
- package/dist/workspace/ProjectOptions.js.map +1 -1
- package/dist/workspace/ProjectUpdateOptions.d.ts +3 -0
- package/dist/workspace/ProjectUpdateOptions.js +3 -1
- package/dist/workspace/ProjectUpdateOptions.js.map +1 -1
- package/dist/workspace/Workspace.d.ts +8 -6
- package/dist/workspace/Workspace.js +106 -33
- package/dist/workspace/Workspace.js.map +1 -1
- package/dist/workspace/WorkspaceConfig.d.ts +3 -0
- package/dist/workspace/WorkspaceConfig.js.map +1 -1
- package/dist/workspace/WorkspaceCreateOptions.d.ts +3 -0
- package/dist/workspace/WorkspaceCreateOptions.js +3 -1
- package/dist/workspace/WorkspaceCreateOptions.js.map +1 -1
- package/dist/workspace/WorkspaceCreateProjectOptions.d.ts +3 -0
- package/dist/workspace/WorkspaceCreateProjectOptions.js +3 -1
- package/dist/workspace/WorkspaceCreateProjectOptions.js.map +1 -1
- package/dist/workspace/WorkspaceDependencies.d.ts +26 -19
- package/dist/workspace/WorkspaceDependencies.js +27 -9
- package/dist/workspace/WorkspaceDependencies.js.map +1 -1
- package/dist/workspace/WorkspaceDependenciesFromWorkspaceOptions.d.ts +8 -0
- package/dist/workspace/WorkspaceDependenciesFromWorkspaceOptions.js +5 -0
- package/dist/workspace/WorkspaceDependenciesFromWorkspaceOptions.js.map +1 -0
- package/dist/workspace/WorkspaceDependenciesGetVersionsOptions.d.ts +6 -0
- package/dist/workspace/WorkspaceDependenciesGetVersionsOptions.js +5 -0
- package/dist/workspace/WorkspaceDependenciesGetVersionsOptions.js.map +1 -0
- package/dist/workspace/WorkspaceDependency.d.ts +14 -0
- package/dist/workspace/WorkspaceDependency.js +3 -0
- package/dist/workspace/WorkspaceDependency.js.map +1 -0
- package/dist/workspace/WorkspaceDependencyProject.d.ts +11 -0
- package/dist/workspace/WorkspaceDependencyProject.js +5 -0
- package/dist/workspace/WorkspaceDependencyProject.js.map +1 -0
- package/dist/workspace/WorkspaceError.d.ts +5 -2
- package/dist/workspace/WorkspaceError.js +10 -3
- package/dist/workspace/WorkspaceError.js.map +1 -1
- package/dist/workspace/WorkspaceFindAndReadOptions.d.ts +6 -0
- package/dist/workspace/WorkspaceFindAndReadOptions.js +5 -0
- package/dist/workspace/WorkspaceFindAndReadOptions.js.map +1 -0
- package/dist/workspace/WorkspaceOptions.d.ts +4 -4
- package/dist/workspace/WorkspaceOptions.js.map +1 -1
- package/dist/workspace/{WorkspaceOptionsProjectOptions.d.ts → WorkspaceOptionsProject.d.ts} +4 -1
- package/dist/workspace/WorkspaceOptionsProject.js +3 -0
- package/dist/workspace/WorkspaceOptionsProject.js.map +1 -0
- package/dist/workspace/WorkspacePackageJson.d.ts +3 -0
- package/dist/workspace/WorkspacePackageJson.js.map +1 -1
- package/dist/workspace/WorkspaceProjectGlobs.d.ts +3 -0
- package/dist/workspace/WorkspaceProjectGlobs.js +3 -1
- package/dist/workspace/WorkspaceProjectGlobs.js.map +1 -1
- package/dist/workspace/WorkspaceProjects.d.ts +3 -0
- package/dist/workspace/WorkspaceProjects.js.map +1 -1
- package/dist/workspace/WorkspaceRepository.d.ts +4 -1
- package/dist/workspace/WorkspaceRepository.js +3 -1
- package/dist/workspace/WorkspaceRepository.js.map +1 -1
- package/dist/workspace/WorkspaceUpdateOptions.d.ts +3 -0
- package/dist/workspace/WorkspaceUpdateOptions.js +3 -1
- package/dist/workspace/WorkspaceUpdateOptions.js.map +1 -1
- package/dist/workspace/internals/compareProjectPath.d.ts +2 -0
- package/dist/workspace/internals/compareProjectPath.js +10 -0
- package/dist/workspace/internals/compareProjectPath.js.map +1 -0
- package/dist/workspace/internals/compareWorkspaceDependencyProjectName.d.ts +2 -0
- package/dist/workspace/internals/compareWorkspaceDependencyProjectName.js +10 -0
- package/dist/workspace/internals/compareWorkspaceDependencyProjectName.js.map +1 -0
- package/dist/workspace/internals/getRepositoryBranches.js +6 -0
- package/dist/workspace/internals/getRepositoryBranches.js.map +1 -1
- package/dist/workspace/internals/getRepositoryUrl.js +0 -1
- package/dist/workspace/internals/getRepositoryUrl.js.map +1 -1
- package/dist/workspace/internals.d.ts +2 -0
- package/dist/workspace/internals.js +2 -0
- package/dist/workspace/internals.js.map +1 -1
- package/dist/workspace/saveProjectConfig.d.ts +8 -0
- package/dist/workspace/saveProjectConfig.js +5 -1
- package/dist/workspace/saveProjectConfig.js.map +1 -1
- package/dist/workspace/saveWorkspaceConfig.d.ts +8 -0
- package/dist/workspace/saveWorkspaceConfig.js +5 -1
- package/dist/workspace/saveWorkspaceConfig.js.map +1 -1
- package/dist/workspace.d.ts +12 -0
- package/dist/workspace.js +12 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +10 -10
- package/src/commands/create-project/CreateProject.tsx +2 -2
- package/src/commands/create-project/CreateProjectInput.ts +1 -1
- package/src/commands/create-project/createProjectCommand.tsx +1 -5
- package/src/commands/create-project/runCreateProject.ts +4 -17
- package/src/commands/create-workspace/CreateWorkspace.tsx +8 -6
- package/src/commands/create-workspace/createWorkspaceCommand.tsx +1 -14
- package/src/commands/create-workspace/runCreateWorkspace.ts +4 -16
- package/src/commands/internals/CommandStatus.ts +1 -0
- package/src/commands/internals.ts +1 -0
- package/src/commands/update-workspace/UpdateWorkspace.tsx +1 -1
- package/src/commands/update-workspace/updateWorkspaceCommand.tsx +1 -5
- package/src/template/CarsonTemplate.ts +1 -2
- package/src/template/CarsonTemplateConfig.ts +1 -1
- package/src/template/CarsonTemplateError.ts +19 -0
- package/src/template/TemplateAttributes.ts +2 -1
- package/src/template/TemplateRender.ts +6 -2
- package/src/template/TemplateRenders.ts +1 -1
- package/src/template/applyTemplateRenders.ts +40 -4
- package/src/template/internals/TemplateRenderSnapshot.ts +5 -0
- package/src/template/internals/deleteUsingTemplateRender.ts +21 -2
- package/src/template/internals/insertUsingTemplateRender.ts +11 -1
- package/src/template/internals/mergeUsingTemplateRender.ts +11 -1
- package/src/template/internals/parseCarsonTemplateId.ts +5 -1
- package/src/template/internals/readCarsonTemplate.ts +4 -1
- package/src/template/internals/saveTemplateRenderSnapshots.ts +3 -2
- package/src/template/internals/uninsertUsingTemplateRender.ts +11 -1
- package/src/template/internals/unmerge.ts +1 -1
- package/src/template/internals/unmergeUsingTemplateRender.ts +11 -1
- package/src/template/renderCarsonTemplate.ts +28 -7
- package/src/template.ts +1 -0
- package/src/workspace/Project.ts +16 -4
- package/src/workspace/ProjectConfig.ts +3 -0
- package/src/workspace/ProjectCreateOptions.ts +3 -0
- package/src/workspace/ProjectError.ts +5 -0
- package/src/workspace/ProjectOptions.ts +1 -1
- package/src/workspace/ProjectUpdateOptions.ts +3 -0
- package/src/workspace/Workspace.ts +125 -42
- package/src/workspace/WorkspaceConfig.ts +3 -0
- package/src/workspace/WorkspaceCreateOptions.ts +3 -0
- package/src/workspace/WorkspaceCreateProjectOptions.ts +3 -0
- package/src/workspace/WorkspaceDependencies.ts +30 -27
- package/src/workspace/WorkspaceDependenciesFromWorkspaceOptions.ts +8 -0
- package/src/workspace/WorkspaceDependenciesGetVersionsOptions.ts +6 -0
- package/src/workspace/WorkspaceDependency.ts +18 -0
- package/src/workspace/WorkspaceDependencyProject.ts +13 -0
- package/src/workspace/WorkspaceError.ts +10 -1
- package/src/workspace/WorkspaceFindAndReadOptions.ts +6 -0
- package/src/workspace/WorkspaceOptions.ts +4 -4
- package/src/workspace/{WorkspaceOptionsProjectOptions.ts → WorkspaceOptionsProject.ts} +4 -1
- package/src/workspace/WorkspacePackageJson.ts +3 -0
- package/src/workspace/WorkspaceProjectGlobs.ts +3 -0
- package/src/workspace/WorkspaceProjects.ts +3 -0
- package/src/workspace/WorkspaceRepository.ts +4 -1
- package/src/workspace/WorkspaceUpdateOptions.ts +3 -0
- package/src/workspace/internals/compareProjectPath.ts +14 -0
- package/src/workspace/internals/compareWorkspaceDependencyProjectName.ts +14 -0
- package/src/workspace/internals/getRepositoryBranches.ts +8 -0
- package/src/workspace/internals/getRepositoryUrl.ts +0 -1
- package/src/workspace/internals.ts +2 -0
- package/src/workspace/saveProjectConfig.ts +8 -0
- package/src/workspace/saveWorkspaceConfig.ts +8 -0
- package/src/workspace.ts +12 -0
- package/dist/workspace/WorkspaceOptionsProjectOptions.js +0 -3
- 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
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/template/internals/unmerge.ts"],"sourcesContent":["/**\n * Reverts {@
|
|
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
|
|
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
|
|
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
|
|
3
|
-
|
|
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
|
|
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"}
|
package/dist/template.d.ts
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';
|
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';
|
package/dist/template.js.map
CHANGED
|
@@ -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 {@
|
|
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 {@
|
|
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 {@
|
|
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 {@
|
|
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
|
-
|
|
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
|
|
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":"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"}
|
|
@@ -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 +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,
|
|
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
|
-
|
|
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" | "
|
|
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
|
-
|
|
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;
|
|
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
|
-
*
|
|
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 *
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/ProjectUpdateOptions.ts"],"sourcesContent":["
|
|
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 {@
|
|
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>):
|
|
65
|
+
addProject(newProject: Project<M>): this;
|
|
66
|
+
addProjects(newProjects: Array<Project<M>>): this;
|
|
65
67
|
readProjects(): Promise<Array<Project<M>>>;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
protected sortProjects(): void;
|
|
69
|
+
protected updateDependencies(): void;
|
|
68
70
|
}
|