@jakubmazanec/carson 3.0.5 → 3.0.6-next.1031336f

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 (161) hide show
  1. package/README.md +2 -2
  2. package/build/commands/create-project/CreateProject.d.ts +1 -1
  3. package/build/commands/create-project/CreateProject.js +0 -1
  4. package/build/commands/create-project/CreateProject.js.map +1 -1
  5. package/build/commands/create-project/CreateProjectInput.js +0 -1
  6. package/build/commands/create-project/CreateProjectInput.js.map +1 -1
  7. package/build/commands/create-project/createProjectCommand.js +0 -1
  8. package/build/commands/create-project/createProjectCommand.js.map +1 -1
  9. package/build/commands/create-project/runCreateProject.js +0 -1
  10. package/build/commands/create-project/runCreateProject.js.map +1 -1
  11. package/build/commands/create-project.js +0 -1
  12. package/build/commands/create-project.js.map +1 -1
  13. package/build/commands/create-workspace/CreateWorkspace.d.ts +1 -1
  14. package/build/commands/create-workspace/CreateWorkspace.js +0 -1
  15. package/build/commands/create-workspace/CreateWorkspace.js.map +1 -1
  16. package/build/commands/create-workspace/CreateWorkspaceInput.js +0 -1
  17. package/build/commands/create-workspace/CreateWorkspaceInput.js.map +1 -1
  18. package/build/commands/create-workspace/createWorkspaceCommand.js +0 -1
  19. package/build/commands/create-workspace/createWorkspaceCommand.js.map +1 -1
  20. package/build/commands/create-workspace/runCreateWorkspace.js +0 -1
  21. package/build/commands/create-workspace/runCreateWorkspace.js.map +1 -1
  22. package/build/commands/create-workspace.js +0 -1
  23. package/build/commands/create-workspace.js.map +1 -1
  24. package/build/commands/internals/CommandStatus.js +0 -1
  25. package/build/commands/internals/packageNameToDirectory.js +0 -1
  26. package/build/commands/internals/packageNameToDirectory.js.map +1 -1
  27. package/build/commands/internals.js +0 -1
  28. package/build/commands/internals.js.map +1 -1
  29. package/build/commands/update-workspace/UpdateWorkspace.d.ts +1 -1
  30. package/build/commands/update-workspace/UpdateWorkspace.js +0 -1
  31. package/build/commands/update-workspace/UpdateWorkspace.js.map +1 -1
  32. package/build/commands/update-workspace/runUpdateWorkspace.js +0 -1
  33. package/build/commands/update-workspace/runUpdateWorkspace.js.map +1 -1
  34. package/build/commands/update-workspace/updateWorkspaceCommand.js +0 -1
  35. package/build/commands/update-workspace/updateWorkspaceCommand.js.map +1 -1
  36. package/build/commands/update-workspace.js +0 -1
  37. package/build/commands/update-workspace.js.map +1 -1
  38. package/build/commands.js +0 -1
  39. package/build/commands.js.map +1 -1
  40. package/build/constants.js +1 -3
  41. package/build/constants.js.map +2 -2
  42. package/build/main.js +0 -1
  43. package/build/main.js.map +1 -1
  44. package/build/modules.d.js +0 -1
  45. package/build/run.js +0 -1
  46. package/build/run.js.map +1 -1
  47. package/build/template/CarsonTemplate.js +0 -1
  48. package/build/template/CarsonTemplateConfig.js +0 -1
  49. package/build/template/CarsonTemplateConfig.js.map +1 -1
  50. package/build/template/CarsonTemplateError.js +0 -1
  51. package/build/template/CarsonTemplateError.js.map +1 -1
  52. package/build/template/TemplateAttributes.js +0 -1
  53. package/build/template/TemplateAttributes.js.map +1 -1
  54. package/build/template/TemplateData.js +0 -1
  55. package/build/template/TemplateData.js.map +1 -1
  56. package/build/template/TemplateRender.js +0 -1
  57. package/build/template/TemplateRenders.js +0 -1
  58. package/build/template/applyTemplateRenders.js +0 -1
  59. package/build/template/applyTemplateRenders.js.map +1 -1
  60. package/build/template/internals/TemplateRenderSnapshot.js +0 -1
  61. package/build/template/internals/TemplateRenderSnapshot.js.map +1 -1
  62. package/build/template/internals/TemplateRenderSnapshots.js +0 -1
  63. package/build/template/internals/TemplateRenderSnapshots.js.map +1 -1
  64. package/build/template/internals/createUsingTemplateRender.js +0 -1
  65. package/build/template/internals/createUsingTemplateRender.js.map +1 -1
  66. package/build/template/internals/deleteUsingTemplateRenderSnapshot.js +0 -1
  67. package/build/template/internals/deleteUsingTemplateRenderSnapshot.js.map +1 -1
  68. package/build/template/internals/importCarsonTemplate.js +0 -1
  69. package/build/template/internals/importCarsonTemplate.js.map +1 -1
  70. package/build/template/internals/insertUsingTemplateRender.js +0 -1
  71. package/build/template/internals/insertUsingTemplateRender.js.map +1 -1
  72. package/build/template/internals/loadTemplateRenderSnapshots.js +0 -1
  73. package/build/template/internals/loadTemplateRenderSnapshots.js.map +1 -1
  74. package/build/template/internals/merge.js +0 -1
  75. package/build/template/internals/merge.js.map +1 -1
  76. package/build/template/internals/mergeUsingTemplateRender.js +0 -1
  77. package/build/template/internals/mergeUsingTemplateRender.js.map +1 -1
  78. package/build/template/internals/overwriteUsingTemplateRender.js +0 -1
  79. package/build/template/internals/overwriteUsingTemplateRender.js.map +1 -1
  80. package/build/template/internals/parseCarsonTemplateId.js +0 -1
  81. package/build/template/internals/parseCarsonTemplateId.js.map +1 -1
  82. package/build/template/internals/prettify.js +0 -1
  83. package/build/template/internals/prettify.js.map +1 -1
  84. package/build/template/internals/readCarsonTemplate.js +0 -1
  85. package/build/template/internals/readCarsonTemplate.js.map +1 -1
  86. package/build/template/internals/resolveModule.js +0 -1
  87. package/build/template/internals/resolveModule.js.map +1 -1
  88. package/build/template/internals/saveTemplateRenderSnapshots.js +0 -1
  89. package/build/template/internals/saveTemplateRenderSnapshots.js.map +1 -1
  90. package/build/template/internals/simplify.js +0 -1
  91. package/build/template/internals/simplify.js.map +1 -1
  92. package/build/template/internals/uninsertUsingTemplateRenderSnapshot.js +0 -1
  93. package/build/template/internals/uninsertUsingTemplateRenderSnapshot.js.map +1 -1
  94. package/build/template/internals/unmerge.js +0 -1
  95. package/build/template/internals/unmerge.js.map +1 -1
  96. package/build/template/internals/unmergeUsingTemplateRenderSnapshot.js +0 -1
  97. package/build/template/internals/unmergeUsingTemplateRenderSnapshot.js.map +1 -1
  98. package/build/template/internals.js +0 -1
  99. package/build/template/internals.js.map +1 -1
  100. package/build/template/renderCarsonTemplate.js +0 -1
  101. package/build/template/renderCarsonTemplate.js.map +1 -1
  102. package/build/template.js +0 -1
  103. package/build/template.js.map +1 -1
  104. package/build/workspace/Project.js +0 -1
  105. package/build/workspace/Project.js.map +1 -1
  106. package/build/workspace/ProjectConfig.js +0 -1
  107. package/build/workspace/ProjectConfig.js.map +1 -1
  108. package/build/workspace/ProjectCreateOptions.js +0 -1
  109. package/build/workspace/ProjectError.js +0 -1
  110. package/build/workspace/ProjectError.js.map +1 -1
  111. package/build/workspace/ProjectOptions.js +0 -1
  112. package/build/workspace/ProjectUpdateOptions.js +0 -1
  113. package/build/workspace/Workspace.js +0 -1
  114. package/build/workspace/Workspace.js.map +2 -2
  115. package/build/workspace/WorkspaceConfig.js +0 -1
  116. package/build/workspace/WorkspaceConfig.js.map +1 -1
  117. package/build/workspace/WorkspaceCreateOptions.js +0 -1
  118. package/build/workspace/WorkspaceCreateProjectOptions.js +0 -1
  119. package/build/workspace/WorkspaceDependencies.js +0 -1
  120. package/build/workspace/WorkspaceDependencies.js.map +1 -1
  121. package/build/workspace/WorkspaceDependenciesFromWorkspaceOptions.js +0 -1
  122. package/build/workspace/WorkspaceDependenciesGetVersionsOptions.js +0 -1
  123. package/build/workspace/WorkspaceDependency.js +0 -1
  124. package/build/workspace/WorkspaceDependencyProject.js +0 -1
  125. package/build/workspace/WorkspaceError.js +0 -1
  126. package/build/workspace/WorkspaceError.js.map +1 -1
  127. package/build/workspace/WorkspaceFindAndReadOptions.js +0 -1
  128. package/build/workspace/WorkspaceOptions.js +0 -1
  129. package/build/workspace/WorkspaceOptionsProject.js +0 -1
  130. package/build/workspace/WorkspacePackageJson.js +0 -1
  131. package/build/workspace/WorkspaceProjectGlobs.js +0 -1
  132. package/build/workspace/WorkspaceProjects.js +0 -1
  133. package/build/workspace/WorkspaceRepository.js +0 -1
  134. package/build/workspace/WorkspaceUpdateOptions.js +0 -1
  135. package/build/workspace/internals/compareProjectPath.js +0 -1
  136. package/build/workspace/internals/compareProjectPath.js.map +1 -1
  137. package/build/workspace/internals/compareSemver.js +0 -1
  138. package/build/workspace/internals/compareSemver.js.map +1 -1
  139. package/build/workspace/internals/compareWorkspaceDependencyProjectName.js +0 -1
  140. package/build/workspace/internals/compareWorkspaceDependencyProjectName.js.map +1 -1
  141. package/build/workspace/internals/containsProject.js +0 -1
  142. package/build/workspace/internals/containsProject.js.map +1 -1
  143. package/build/workspace/internals/containsWorkspace.js +0 -1
  144. package/build/workspace/internals/containsWorkspace.js.map +1 -1
  145. package/build/workspace/internals/getPackageJsonWorkspaces.js +0 -1
  146. package/build/workspace/internals/getPackageJsonWorkspaces.js.map +1 -1
  147. package/build/workspace/internals/getRepositoryBranches.js +0 -1
  148. package/build/workspace/internals/getRepositoryBranches.js.map +1 -1
  149. package/build/workspace/internals/getRepositoryUrl.js +0 -1
  150. package/build/workspace/internals/getRepositoryUrl.js.map +1 -1
  151. package/build/workspace/internals.js +0 -1
  152. package/build/workspace/internals.js.map +1 -1
  153. package/build/workspace/saveProjectConfig.js +0 -1
  154. package/build/workspace/saveProjectConfig.js.map +1 -1
  155. package/build/workspace/saveWorkspaceConfig.js +0 -1
  156. package/build/workspace/saveWorkspaceConfig.js.map +1 -1
  157. package/build/workspace.js +0 -1
  158. package/build/workspace.js.map +1 -1
  159. package/package.json +30 -30
  160. package/source/constants.ts +1 -2
  161. package/source/workspace/Workspace.ts +7 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../source/workspace/Workspace.ts"],
4
- "sourcesContent": ["import {ensureEmptyDirectory, findExistingDirectory, isRootPath} from '@jakubmazanec/fs-utils';\nimport {jsonSchema, type PackageJson, packageJsonSchema, readFile} from '@jakubmazanec/zod-utils';\nimport glob from 'fast-glob';\nimport fs from 'fs-extra';\nimport json5 from 'json5';\nimport _ from 'lodash';\nimport path from 'node:path';\nimport {z} from 'zod';\n\nimport {\n CARSON_CONFIG_DIRECTORY,\n PACKAGE_JSON_FILENAME,\n WORKSPACE_CONFIG_FILENAME,\n WORKSPACE_SNAPSHOT_FILENAME,\n} from '../constants.js';\nimport {applyTemplateRenders} from '../template/applyTemplateRenders.js';\nimport {readCarsonTemplate} from '../template/internals.js';\nimport {renderCarsonTemplate} from '../template/renderCarsonTemplate.js';\nimport {\n compareProjectPath,\n containsProject,\n containsWorkspace,\n getPackageJsonWorkspaces,\n getRepositoryBranches,\n getRepositoryUrl,\n} from './internals.js';\nimport {Project} from './Project.js';\nimport {saveWorkspaceConfig} from './saveWorkspaceConfig.js';\nimport {workspaceConfigSchema} from './WorkspaceConfig.js';\nimport {type WorkspaceConfig} from './WorkspaceConfig.js';\nimport {type WorkspaceCreateOptions} from './WorkspaceCreateOptions.js';\nimport {type WorkspaceCreateProjectOptions} from './WorkspaceCreateProjectOptions.js';\nimport {WorkspaceDependencies} from './WorkspaceDependencies.js';\nimport {WorkspaceError} from './WorkspaceError.js';\nimport {type WorkspaceFindAndReadOptions} from './WorkspaceFindAndReadOptions.js';\nimport {type WorkspaceOptions} from './WorkspaceOptions.js';\nimport {type WorkspacePackageJson} from './WorkspacePackageJson.js';\nimport {type WorkspaceProjectGlobs} from './WorkspaceProjectGlobs.js';\nimport {type WorkspaceProjects} from './WorkspaceProjects.js';\nimport {type WorkspaceRepository} from './WorkspaceRepository.js';\nimport {type WorkspaceUpdateOptions} from './WorkspaceUpdateOptions.js';\n\n/**\n * Workspace represent a directory, usually a git repository, that contains {@link Project} instances.\n *\n * @typeParam M If true, the workspace is multi-project workspace (so-called \"monorepo\").\n */\nexport class Workspace<M extends boolean = true> {\n /** Workspace path. */\n readonly path: string;\n\n /** Does the workspace contain a multiple projects? */\n readonly isMultiProject: M;\n\n /** Globs used to find projects. */\n projectGlobs: WorkspaceProjectGlobs<M>;\n\n /** Workspace projects. */\n projects: WorkspaceProjects<M>;\n\n /** Workspace configuration; if it's not found, the default is an empty object. */\n config: WorkspaceConfig;\n\n /** Parsed workspace `package.json` file (if the workspace contains multiple projects); if it's not found, the default is an empty object. */\n packageJson: WorkspacePackageJson<M>;\n\n /** Workspace git repository. */\n repository?: WorkspaceRepository;\n\n /** Dependencies of all projects. */\n dependencies: WorkspaceDependencies<M> = [] as unknown as WorkspaceDependencies<M>;\n\n /** Development dependencies of all projects. */\n devDependencies: WorkspaceDependencies<M> = [] as unknown as WorkspaceDependencies<M>;\n\n /** All dependencies of all projects and workspace dependencies. */\n allDependencies: WorkspaceDependencies<M> = [] as unknown as WorkspaceDependencies<M>;\n\n /** Versions of each dependency. */\n dependencyVersions: Record<string, string[]> = {};\n\n /** Errors found during reading from the file system. */\n errors: Array<InstanceType<typeof WorkspaceError>> = [];\n\n constructor(options: WorkspaceOptions<M>) {\n this.path = options.path;\n\n if (options.isMultiProject === undefined || options.isMultiProject) {\n this.isMultiProject = true as M;\n\n let projectGlobOption = (options as WorkspaceOptions<true>).projectGlobs;\n\n if (projectGlobOption) {\n this.projectGlobs = projectGlobOption as WorkspaceProjectGlobs<M>;\n } else {\n this.projectGlobs = [] as string[] as WorkspaceProjectGlobs<M>;\n }\n\n this.projects = [] as Array<Project<M>> as WorkspaceProjects<M>;\n\n let {projects} = options as WorkspaceOptions<true>;\n\n if (projects) {\n this.addProjects(projects.map((project) => new Project({...project, workspace: this})));\n }\n\n let packageJsonOption = (options as WorkspaceOptions<true>).packageJson;\n\n if (packageJsonOption) {\n this.packageJson = packageJsonOption as M extends true ? PackageJson : null;\n } else {\n let emptyPackageJson: PackageJson = {};\n\n this.packageJson = emptyPackageJson as M extends true ? PackageJson : null;\n }\n } else {\n this.isMultiProject = false as M;\n this.projectGlobs = null as M extends true ? string[] : null;\n this.packageJson = null as M extends true ? PackageJson : null;\n this.projects = [] as Array<Project<M>> as WorkspaceProjects<M>;\n\n let {projects} = options as WorkspaceOptions<false>;\n\n if (projects) {\n this.addProjects(projects.map((project) => new Project({...project, workspace: this})));\n }\n }\n\n let configOption = options.config;\n\n if (configOption) {\n this.config = configOption;\n } else {\n let emptyWorkspaceConfig: WorkspaceConfig = {};\n\n this.config = emptyWorkspaceConfig;\n }\n\n if (options.repository) {\n this.repository = options.repository;\n }\n\n if (options.errors) {\n this.errors = options.errors;\n }\n\n // add missing project globs\n if (this.isMultiProject && !(this.projectGlobs as string[]).length) {\n let packageJsonWorkspaces = getPackageJsonWorkspaces(this.packageJson as PackageJson);\n\n if (packageJsonWorkspaces) {\n this.projectGlobs = [...packageJsonWorkspaces] as M extends true ? string[] : null;\n }\n }\n\n this.sortProjects();\n this.updateDependencies();\n }\n\n /**\n * Creates new workspace within the file system.\n *\n * @param options Options.\n * @returns The new workspace.\n */\n static async create({args, path: workspacePath, templateId}: WorkspaceCreateOptions) {\n // TODO: test that workspace returned by this method has the same value of isMultiProject when the same workspace is after its creation re-read with .read()\n let workspace = new this({\n path: workspacePath,\n config: {\n template: templateId,\n },\n });\n\n try {\n await ensureEmptyDirectory(workspace.path, {allowGit: true});\n } catch {\n throw new WorkspaceError('WORKSPACE_PATH_NOT_EMPTY', {\n messageParameters: [workspace.path],\n data: {\n path: workspace.path,\n },\n });\n }\n\n let template = await readCarsonTemplate(templateId);\n let templateRenders = await renderCarsonTemplate({\n template,\n templateData: {\n workspace,\n args,\n },\n });\n\n if (!template.config.autoEject) {\n await saveWorkspaceConfig({\n workspacePath: workspace.path,\n workspaceConfig: {template: templateId},\n });\n }\n\n await applyTemplateRenders({\n templateRenders,\n targetPath: workspace.path,\n snapshotPath:\n template.config.autoEject ?\n undefined\n : path.join(workspace.path, CARSON_CONFIG_DIRECTORY, WORKSPACE_SNAPSHOT_FILENAME),\n ignoreStrategies: ['check'],\n });\n\n return Workspace.read(workspace.path);\n }\n\n static async read(workspacePath: string): Promise<Workspace | Workspace<false>> {\n let resolvedWorkspacePath = path.resolve(workspacePath);\n\n if (!(await fs.pathExists(resolvedWorkspacePath))) {\n throw new WorkspaceError('NO_SUCH_WORKSPACE_PATH', {\n messageParameters: [resolvedWorkspacePath],\n data: {\n path: resolvedWorkspacePath,\n },\n });\n }\n\n // load root package.json\n let rootPackageJsonPath = path.join(resolvedWorkspacePath, 'package.json');\n let doesRootPackageJsonExist = await fs.pathExists(rootPackageJsonPath);\n let rootPackageJson: PackageJson | z.ZodError;\n\n if (doesRootPackageJsonExist) {\n rootPackageJson = await readFile(rootPackageJsonPath, packageJsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n rootPackageJson = {};\n }\n\n if (rootPackageJson instanceof z.ZodError) {\n rootPackageJson = {};\n\n // even if the package.json file has errors, maybe there's still a correct workspace field\n try {\n let rootJson = await readFile(rootPackageJsonPath, jsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n throwOnZodError: true,\n });\n let projectGlobs = getPackageJsonWorkspaces(rootJson);\n\n // add back to the empty package.json object\n if (projectGlobs) {\n rootPackageJson.workspaces = projectGlobs;\n }\n } catch {\n // no-op\n }\n }\n\n // load workspace config\n let workspaceConfigPath = path.join(\n resolvedWorkspacePath,\n CARSON_CONFIG_DIRECTORY,\n WORKSPACE_CONFIG_FILENAME,\n );\n let doesWorkspaceConfigExist = await fs.pathExists(workspaceConfigPath);\n let workspaceConfig: WorkspaceConfig | z.ZodError;\n\n if (doesWorkspaceConfigExist) {\n workspaceConfig = await readFile(workspaceConfigPath, workspaceConfigSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n workspaceConfig = {};\n }\n\n if (workspaceConfig instanceof z.ZodError) {\n workspaceConfig = {};\n }\n\n // how to find projects\n let packageJsonProjectGlobs = getPackageJsonWorkspaces(rootPackageJson);\n let workspaceConfigProjectGlobs = workspaceConfig.projects;\n\n if (\n packageJsonProjectGlobs?.length &&\n workspaceConfigProjectGlobs?.length &&\n !_.isEqual(packageJsonProjectGlobs, workspaceConfigProjectGlobs)\n ) {\n throw new WorkspaceError('PROJECT_GLOBS_MISMATCH', {\n data: {\n path: resolvedWorkspacePath,\n },\n });\n }\n\n let projectGlobs = packageJsonProjectGlobs ?? workspaceConfigProjectGlobs;\n\n // we're dealing with single-project workspace\n if (!projectGlobs) {\n let workspace = new this({\n path: resolvedWorkspacePath,\n isMultiProject: false,\n });\n\n await workspace.read();\n await workspace.readProjects();\n\n return workspace;\n }\n\n // we're dealing with multi-project workspace\n let workspace = new this({\n path: resolvedWorkspacePath,\n isMultiProject: true,\n projectGlobs,\n packageJson: rootPackageJson,\n });\n\n await workspace.read();\n await workspace.readProjects();\n\n return workspace;\n }\n\n /**\n * Traverses file system up from the search path and tries to find a directory that is a root of a workspace.\n *\n * @param searchPath Search path.\n * @returns Workspace path, if found.\n */\n static async find(searchPath: string): Promise<string | undefined> {\n let startingPath = await findExistingDirectory(path.resolve(searchPath));\n let currentPath = startingPath;\n let singlePackageWorkspacePath: string | undefined;\n let multiPackageWorkspacePath: string | undefined;\n\n while (\n !(isRootPath(currentPath) || (singlePackageWorkspacePath && multiPackageWorkspacePath))\n ) {\n if (await containsWorkspace(currentPath)) {\n let packageJsonPath = path.join(currentPath, PACKAGE_JSON_FILENAME);\n let workspaceConfigPath = path.join(\n currentPath,\n CARSON_CONFIG_DIRECTORY,\n WORKSPACE_CONFIG_FILENAME,\n );\n\n if (await fs.pathExists(packageJsonPath)) {\n let packageJson = await readFile(packageJsonPath, jsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n\n if (!(packageJson instanceof Error)) {\n let projectGlobs = getPackageJsonWorkspaces(packageJson);\n\n if (projectGlobs?.length) {\n multiPackageWorkspacePath ??= currentPath;\n } else {\n singlePackageWorkspacePath ??= currentPath;\n }\n }\n }\n if (await fs.pathExists(workspaceConfigPath)) {\n let workspaceConfig = await readFile(workspaceConfigPath, workspaceConfigSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n\n if (!(workspaceConfig instanceof z.ZodError)) {\n let projectGlobs = workspaceConfig.projects;\n\n if (projectGlobs?.length) {\n multiPackageWorkspacePath ??= currentPath;\n } else {\n singlePackageWorkspacePath ??= currentPath;\n }\n }\n } else {\n singlePackageWorkspacePath ??= currentPath;\n }\n }\n\n currentPath = path.dirname(currentPath);\n }\n\n if (multiPackageWorkspacePath) {\n return multiPackageWorkspacePath;\n } else if (singlePackageWorkspacePath) {\n return singlePackageWorkspacePath;\n }\n\n return undefined;\n }\n\n /**\n * Traverses file system up from the search path and tries to find and read a workspace.\n */\n static async findAndRead<O extends WorkspaceFindAndReadOptions | undefined = undefined>(\n searchPath: string,\n options?: O,\n ): Promise<\n O extends undefined ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true ? Workspace | Workspace<false>\n : Workspace | Workspace<false> | undefined\n > {\n let workspacePath = await Workspace.find(searchPath);\n\n if (workspacePath) {\n return Workspace.read(workspacePath) as Promise<\n O extends undefined ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true ? Workspace | Workspace<false>\n : Workspace | Workspace<false> | undefined\n >;\n } else if (options?.throwIfNotFound) {\n throw new WorkspaceError('NO_WORKSPACE_FOUND', {\n messageParameters: [searchPath],\n data: {\n path: searchPath,\n },\n });\n }\n\n return undefined as unknown as Promise<\n O extends undefined ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true ? Workspace | Workspace<false>\n : Workspace | Workspace<false> | undefined\n >;\n }\n\n async read(): Promise<this> {\n if (!(await fs.pathExists(this.path))) {\n throw new WorkspaceError('NO_SUCH_WORKSPACE_PATH', {\n messageParameters: [this.path],\n data: {\n path: this.path,\n },\n });\n }\n\n let errors: Array<InstanceType<typeof WorkspaceError>> = [];\n let repositoryUrl = await getRepositoryUrl(this.path);\n let repositoryBranches = await getRepositoryBranches(this.path);\n\n // load workspace config\n let workspaceConfigPath = path.join(\n this.path,\n CARSON_CONFIG_DIRECTORY,\n WORKSPACE_CONFIG_FILENAME,\n );\n let doesWorkspaceConfigExist = await fs.pathExists(workspaceConfigPath);\n let workspaceConfig: WorkspaceConfig | z.ZodError;\n\n if (doesWorkspaceConfigExist) {\n workspaceConfig = await readFile(workspaceConfigPath, workspaceConfigSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n workspaceConfig = {};\n }\n\n if (workspaceConfig instanceof z.ZodError) {\n let zodError = workspaceConfig;\n let workspaceError = new WorkspaceError('INVALID_WORKSPACE_CONFIG', {\n messageParameters: [workspaceConfigPath],\n data: {\n path: workspaceConfigPath,\n zodIssues: zodError.issues,\n },\n });\n\n errors.push(workspaceError);\n\n workspaceConfig = {};\n }\n\n if (this.isMultiProject) {\n // load root package.json\n let rootPackageJsonPath = path.join(this.path, 'package.json');\n let doesRootPackageJsonExist = await fs.pathExists(rootPackageJsonPath);\n let rootPackageJson: PackageJson | z.ZodError;\n\n if (doesRootPackageJsonExist) {\n rootPackageJson = await readFile(rootPackageJsonPath, packageJsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n rootPackageJson = {};\n }\n\n if (rootPackageJson instanceof z.ZodError) {\n let zodError = rootPackageJson;\n let workspaceError = new WorkspaceError('INVALID_PACKAGE_JSON', {\n messageParameters: [rootPackageJsonPath],\n data: {\n path: rootPackageJsonPath,\n zodIssues: zodError.issues,\n },\n });\n\n errors.push(workspaceError);\n\n rootPackageJson = {};\n }\n\n // how to find projects\n let packageJsonProjectGlobs = getPackageJsonWorkspaces(rootPackageJson);\n let workspaceConfigProjectGlobs = workspaceConfig.projects;\n\n if (\n packageJsonProjectGlobs &&\n workspaceConfigProjectGlobs &&\n !_.isEqual(packageJsonProjectGlobs, workspaceConfigProjectGlobs)\n ) {\n throw new WorkspaceError('PROJECT_GLOBS_MISMATCH', {\n data: {\n path: this.path,\n },\n });\n }\n\n let projectGlobs = packageJsonProjectGlobs ?? workspaceConfigProjectGlobs;\n\n this.projectGlobs = (projectGlobs ?? []) as WorkspaceProjectGlobs<M>;\n this.packageJson = rootPackageJson as WorkspacePackageJson<M>;\n this.config = workspaceConfig;\n this.errors = errors;\n\n if (repositoryUrl) {\n this.repository = {\n url: repositoryUrl,\n branches: repositoryBranches ?? [],\n };\n } else if (repositoryBranches) {\n this.repository = {\n branches: repositoryBranches,\n };\n }\n\n await this.readProjects();\n\n return this;\n }\n\n // we're dealing with single-project workspace\n this.config = workspaceConfig;\n this.errors = errors;\n\n if (repositoryUrl) {\n this.repository = {\n url: repositoryUrl,\n branches: repositoryBranches ?? [],\n };\n } else if (repositoryBranches) {\n this.repository = {\n branches: repositoryBranches,\n };\n }\n\n await this.readProjects();\n\n return this;\n }\n\n async update({args}: WorkspaceUpdateOptions): Promise<this> {\n if (!this.config.template) {\n throw new WorkspaceError('MISSING_CARSON_TEMPLATE_ID', {\n messageParameters: [\n path.join(this.path, CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME),\n ],\n });\n }\n\n let template = await readCarsonTemplate(this.config.template);\n let templateRenders = await renderCarsonTemplate({\n template,\n templateData: {\n workspace: this,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n targetPath: this.path,\n snapshotPath:\n template.config.autoEject ?\n undefined\n : path.join(this.path, CARSON_CONFIG_DIRECTORY, WORKSPACE_SNAPSHOT_FILENAME),\n ignoreStrategies: ['create'],\n });\n\n await this.read();\n\n return this;\n }\n\n getProject(projectName: Project<M> | string): Project<M> | undefined {\n for (let project of this.projects) {\n if (project.name === projectName || project === projectName) {\n return project;\n }\n }\n\n return undefined;\n }\n\n async createProject({\n templateId,\n projectPath,\n projectName,\n args,\n }: WorkspaceCreateProjectOptions): Promise<Project<M>> {\n let resolvedProjectPath = path.resolve(projectPath);\n\n if (this.projects.some((project) => resolvedProjectPath === project.path)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {\n messageParameters: [resolvedProjectPath],\n });\n }\n\n if (this.projects.some((project) => projectName === project.name)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {messageParameters: [projectName]});\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new WorkspaceError('TOO_MANY_PROJECTS');\n }\n\n if (!this.isMultiProject && projectPath !== this.path) {\n throw new WorkspaceError('PATH_MISMATCH');\n }\n\n let newProject = await Project.create({\n templateId,\n projectPath,\n projectName,\n args,\n workspace: this,\n });\n\n this.addProject(newProject);\n\n return newProject;\n }\n\n addProject(newProject: Project<M>): this {\n if (this.projects.some((project) => newProject.path === project.path)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {\n messageParameters: [newProject.path],\n });\n }\n\n if (this.projects.some((project) => newProject.name === project.name)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {messageParameters: [newProject.name]});\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new WorkspaceError('TOO_MANY_PROJECTS');\n }\n\n if (!this.isMultiProject && newProject.path !== this.path) {\n throw new WorkspaceError('PATH_MISMATCH');\n }\n\n this.projects.push(newProject);\n this.sortProjects();\n this.updateDependencies();\n\n return this;\n }\n\n addProjects(newProjects: Array<Project<M>>): this {\n for (let newProject of newProjects) {\n if (this.projects.some((project) => newProject.path === project.path)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {\n messageParameters: [newProject.path],\n });\n }\n\n if (this.projects.some((project) => newProject.name === project.name)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {messageParameters: [newProject.name]});\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new WorkspaceError('TOO_MANY_PROJECTS');\n }\n\n if (!this.isMultiProject && newProject.path !== this.path) {\n throw new WorkspaceError('PATH_MISMATCH');\n }\n\n this.projects.push(newProject);\n }\n\n this.sortProjects();\n this.updateDependencies();\n\n return this;\n }\n\n async readProjects(): Promise<Array<Project<M>>> {\n if (this.projectGlobs) {\n let projects: Array<Project<M>> = [];\n let packagePaths = await glob(this.projectGlobs, {\n cwd: this.path,\n onlyDirectories: true,\n });\n\n for (let packagePath of packagePaths) {\n let projectPath = path.join(this.path, packagePath);\n\n if (await containsProject(projectPath)) {\n let project = await Project.read(projectPath, this);\n\n projects.push(project);\n }\n }\n\n this.projects = projects;\n\n this.sortProjects();\n this.updateDependencies();\n } else if (await containsProject(this.path)) {\n this.projects = [await Project.read(this.path, this)];\n\n this.sortProjects();\n this.updateDependencies();\n }\n\n return this.projects;\n }\n\n protected sortProjects(): void {\n this.projects.sort(compareProjectPath);\n }\n\n protected updateDependencies(): void {\n this.dependencies = WorkspaceDependencies.fromWorkspace(this);\n this.devDependencies = WorkspaceDependencies.fromWorkspace(this, {\n includeOnlyDevDependencies: true,\n });\n this.allDependencies = WorkspaceDependencies.fromWorkspace(this, {\n includeDevDependencies: true,\n includeWorkspaceDependencies: true,\n });\n this.dependencyVersions = this.allDependencies.getVersions({\n useExactVersions: true,\n });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {ensureEmptyDirectory, findExistingDirectory, isRootPath} from '@jakubmazanec/fs-utils';\nimport {jsonSchema, type PackageJson, packageJsonSchema, readFile} from '@jakubmazanec/zod-utils';\nimport glob from 'fast-glob';\nimport fs from 'fs-extra';\nimport json5 from 'json5';\nimport _ from 'lodash';\nimport path from 'node:path';\nimport {z} from 'zod';\n\nimport {\n CARSON_CONFIG_DIRECTORY,\n PACKAGE_JSON_FILENAME,\n WORKSPACE_CONFIG_FILENAME,\n WORKSPACE_SNAPSHOT_FILENAME,\n} from '../constants.js';\nimport {applyTemplateRenders} from '../template/applyTemplateRenders.js';\nimport {readCarsonTemplate} from '../template/internals.js';\nimport {renderCarsonTemplate} from '../template/renderCarsonTemplate.js';\nimport {\n compareProjectPath,\n containsProject,\n containsWorkspace,\n getPackageJsonWorkspaces,\n getRepositoryBranches,\n getRepositoryUrl,\n} from './internals.js';\nimport {Project} from './Project.js';\nimport {saveWorkspaceConfig} from './saveWorkspaceConfig.js';\nimport {workspaceConfigSchema} from './WorkspaceConfig.js';\nimport {type WorkspaceConfig} from './WorkspaceConfig.js';\nimport {type WorkspaceCreateOptions} from './WorkspaceCreateOptions.js';\nimport {type WorkspaceCreateProjectOptions} from './WorkspaceCreateProjectOptions.js';\nimport {WorkspaceDependencies} from './WorkspaceDependencies.js';\nimport {WorkspaceError} from './WorkspaceError.js';\nimport {type WorkspaceFindAndReadOptions} from './WorkspaceFindAndReadOptions.js';\nimport {type WorkspaceOptions} from './WorkspaceOptions.js';\nimport {type WorkspacePackageJson} from './WorkspacePackageJson.js';\nimport {type WorkspaceProjectGlobs} from './WorkspaceProjectGlobs.js';\nimport {type WorkspaceProjects} from './WorkspaceProjects.js';\nimport {type WorkspaceRepository} from './WorkspaceRepository.js';\nimport {type WorkspaceUpdateOptions} from './WorkspaceUpdateOptions.js';\n\n/**\n * Workspace represent a directory, usually a git repository, that contains {@link Project} instances.\n *\n * @typeParam M If true, the workspace is multi-project workspace (so-called \"monorepo\").\n */\nexport class Workspace<M extends boolean = true> {\n /** Workspace path. */\n readonly path: string;\n\n /** Does the workspace contain a multiple projects? */\n readonly isMultiProject: M;\n\n /** Globs used to find projects. */\n projectGlobs: WorkspaceProjectGlobs<M>;\n\n /** Workspace projects. */\n projects: WorkspaceProjects<M>;\n\n /** Workspace configuration; if it's not found, the default is an empty object. */\n config: WorkspaceConfig;\n\n /** Parsed workspace `package.json` file (if the workspace contains multiple projects); if it's not found, the default is an empty object. */\n packageJson: WorkspacePackageJson<M>;\n\n /** Workspace git repository. */\n repository?: WorkspaceRepository;\n\n /** Dependencies of all projects. */\n dependencies: WorkspaceDependencies<M> = [] as unknown as WorkspaceDependencies<M>;\n\n /** Development dependencies of all projects. */\n devDependencies: WorkspaceDependencies<M> = [] as unknown as WorkspaceDependencies<M>;\n\n /** All dependencies of all projects and workspace dependencies. */\n allDependencies: WorkspaceDependencies<M> = [] as unknown as WorkspaceDependencies<M>;\n\n /** Versions of each dependency. */\n dependencyVersions: Record<string, string[]> = {};\n\n /** Errors found during reading from the file system. */\n errors: Array<InstanceType<typeof WorkspaceError>> = [];\n\n constructor(options: WorkspaceOptions<M>) {\n this.path = options.path;\n\n if (options.isMultiProject === undefined || options.isMultiProject) {\n this.isMultiProject = true as M;\n\n let projectGlobOption = (options as WorkspaceOptions<true>).projectGlobs;\n\n if (projectGlobOption) {\n this.projectGlobs = projectGlobOption as WorkspaceProjectGlobs<M>;\n } else {\n this.projectGlobs = [] as string[] as WorkspaceProjectGlobs<M>;\n }\n\n this.projects = [] as Array<Project<M>>;\n\n let {projects} = options as WorkspaceOptions<true>;\n\n if (projects) {\n this.addProjects(projects.map((project) => new Project({...project, workspace: this})));\n }\n\n let packageJsonOption = (options as WorkspaceOptions<true>).packageJson;\n\n if (packageJsonOption) {\n this.packageJson = packageJsonOption as M extends true ? PackageJson : null;\n } else {\n let emptyPackageJson: PackageJson = {};\n\n this.packageJson = emptyPackageJson as M extends true ? PackageJson : null;\n }\n } else {\n this.isMultiProject = false as M;\n this.projectGlobs = null as M extends true ? string[] : null;\n this.packageJson = null as M extends true ? PackageJson : null;\n this.projects = [] as Array<Project<M>>;\n\n let {projects} = options as WorkspaceOptions<false>;\n\n if (projects) {\n this.addProjects(projects.map((project) => new Project({...project, workspace: this})));\n }\n }\n\n let configOption = options.config;\n\n if (configOption) {\n this.config = configOption;\n } else {\n let emptyWorkspaceConfig: WorkspaceConfig = {};\n\n this.config = emptyWorkspaceConfig;\n }\n\n if (options.repository) {\n this.repository = options.repository;\n }\n\n if (options.errors) {\n this.errors = options.errors;\n }\n\n // add missing project globs\n if (this.isMultiProject && !(this.projectGlobs as string[]).length) {\n let packageJsonWorkspaces = getPackageJsonWorkspaces(this.packageJson);\n\n if (packageJsonWorkspaces) {\n this.projectGlobs = [...packageJsonWorkspaces] as M extends true ? string[] : null;\n }\n }\n\n this.sortProjects();\n this.updateDependencies();\n }\n\n /**\n * Creates new workspace within the file system.\n *\n * @param options Options.\n * @returns The new workspace.\n */\n static async create({args, path: workspacePath, templateId}: WorkspaceCreateOptions) {\n // TODO: test that workspace returned by this method has the same value of isMultiProject when the same workspace is after its creation re-read with .read()\n let workspace = new this({\n path: workspacePath,\n config: {\n template: templateId,\n },\n });\n\n try {\n await ensureEmptyDirectory(workspace.path, {allowGit: true});\n } catch {\n throw new WorkspaceError('WORKSPACE_PATH_NOT_EMPTY', {\n messageParameters: [workspace.path],\n data: {\n path: workspace.path,\n },\n });\n }\n\n let template = await readCarsonTemplate(templateId);\n let templateRenders = await renderCarsonTemplate({\n template,\n templateData: {\n workspace,\n args,\n },\n });\n\n if (!template.config.autoEject) {\n await saveWorkspaceConfig({\n workspacePath: workspace.path,\n workspaceConfig: {template: templateId},\n });\n }\n\n await applyTemplateRenders({\n templateRenders,\n targetPath: workspace.path,\n snapshotPath:\n template.config.autoEject ?\n undefined\n : path.join(workspace.path, CARSON_CONFIG_DIRECTORY, WORKSPACE_SNAPSHOT_FILENAME),\n ignoreStrategies: ['check'],\n });\n\n return Workspace.read(workspace.path);\n }\n\n static async read(workspacePath: string): Promise<Workspace | Workspace<false>> {\n let resolvedWorkspacePath = path.resolve(workspacePath);\n\n if (!(await fs.pathExists(resolvedWorkspacePath))) {\n throw new WorkspaceError('NO_SUCH_WORKSPACE_PATH', {\n messageParameters: [resolvedWorkspacePath],\n data: {\n path: resolvedWorkspacePath,\n },\n });\n }\n\n // load root package.json\n let rootPackageJsonPath = path.join(resolvedWorkspacePath, 'package.json');\n let doesRootPackageJsonExist = await fs.pathExists(rootPackageJsonPath);\n let rootPackageJson: PackageJson | z.ZodError;\n\n if (doesRootPackageJsonExist) {\n rootPackageJson = await readFile(rootPackageJsonPath, packageJsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n rootPackageJson = {};\n }\n\n if (rootPackageJson instanceof z.ZodError) {\n rootPackageJson = {};\n\n // even if the package.json file has errors, maybe there's still a correct workspace field\n try {\n let rootJson = await readFile(rootPackageJsonPath, jsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n throwOnZodError: true,\n });\n let projectGlobs = getPackageJsonWorkspaces(rootJson);\n\n // add back to the empty package.json object\n if (projectGlobs) {\n rootPackageJson.workspaces = projectGlobs;\n }\n } catch {\n // no-op\n }\n }\n\n // load workspace config\n let workspaceConfigPath = path.join(\n resolvedWorkspacePath,\n CARSON_CONFIG_DIRECTORY,\n WORKSPACE_CONFIG_FILENAME,\n );\n let doesWorkspaceConfigExist = await fs.pathExists(workspaceConfigPath);\n let workspaceConfig: WorkspaceConfig | z.ZodError;\n\n if (doesWorkspaceConfigExist) {\n workspaceConfig = await readFile(workspaceConfigPath, workspaceConfigSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n workspaceConfig = {};\n }\n\n if (workspaceConfig instanceof z.ZodError) {\n workspaceConfig = {};\n }\n\n // how to find projects\n let packageJsonProjectGlobs = getPackageJsonWorkspaces(rootPackageJson);\n let workspaceConfigProjectGlobs = workspaceConfig.projects;\n\n if (\n packageJsonProjectGlobs?.length &&\n workspaceConfigProjectGlobs?.length &&\n !_.isEqual(packageJsonProjectGlobs, workspaceConfigProjectGlobs)\n ) {\n throw new WorkspaceError('PROJECT_GLOBS_MISMATCH', {\n data: {\n path: resolvedWorkspacePath,\n },\n });\n }\n\n let projectGlobs = packageJsonProjectGlobs ?? workspaceConfigProjectGlobs;\n\n // we're dealing with single-project workspace\n if (!projectGlobs) {\n let workspace = new this({\n path: resolvedWorkspacePath,\n isMultiProject: false,\n });\n\n await workspace.read();\n await workspace.readProjects();\n\n return workspace;\n }\n\n // we're dealing with multi-project workspace\n let workspace = new this({\n path: resolvedWorkspacePath,\n isMultiProject: true,\n projectGlobs,\n packageJson: rootPackageJson,\n });\n\n await workspace.read();\n await workspace.readProjects();\n\n return workspace;\n }\n\n /**\n * Traverses file system up from the search path and tries to find a directory that is a root of a workspace.\n *\n * @param searchPath Search path.\n * @returns Workspace path, if found.\n */\n static async find(searchPath: string): Promise<string | undefined> {\n let startingPath = await findExistingDirectory(path.resolve(searchPath));\n let currentPath = startingPath;\n let singlePackageWorkspacePath: string | undefined;\n let multiPackageWorkspacePath: string | undefined;\n\n while (!(\n isRootPath(currentPath) ||\n (singlePackageWorkspacePath && multiPackageWorkspacePath)\n )) {\n if (await containsWorkspace(currentPath)) {\n let packageJsonPath = path.join(currentPath, PACKAGE_JSON_FILENAME);\n let workspaceConfigPath = path.join(\n currentPath,\n CARSON_CONFIG_DIRECTORY,\n WORKSPACE_CONFIG_FILENAME,\n );\n\n if (await fs.pathExists(packageJsonPath)) {\n let packageJson = await readFile(packageJsonPath, jsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n\n if (!(packageJson instanceof Error)) {\n let projectGlobs = getPackageJsonWorkspaces(packageJson);\n\n if (projectGlobs?.length) {\n multiPackageWorkspacePath ??= currentPath;\n } else {\n singlePackageWorkspacePath ??= currentPath;\n }\n }\n }\n if (await fs.pathExists(workspaceConfigPath)) {\n let workspaceConfig = await readFile(workspaceConfigPath, workspaceConfigSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n\n if (!(workspaceConfig instanceof z.ZodError)) {\n let projectGlobs = workspaceConfig.projects;\n\n if (projectGlobs?.length) {\n multiPackageWorkspacePath ??= currentPath;\n } else {\n singlePackageWorkspacePath ??= currentPath;\n }\n }\n } else {\n singlePackageWorkspacePath ??= currentPath;\n }\n }\n\n currentPath = path.dirname(currentPath);\n }\n\n if (multiPackageWorkspacePath) {\n return multiPackageWorkspacePath;\n } else if (singlePackageWorkspacePath) {\n return singlePackageWorkspacePath;\n }\n\n return undefined;\n }\n\n /**\n * Traverses file system up from the search path and tries to find and read a workspace.\n */\n static async findAndRead<O extends WorkspaceFindAndReadOptions | undefined = undefined>(\n searchPath: string,\n options?: O,\n ): Promise<\n O extends undefined ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true ? Workspace | Workspace<false>\n : Workspace | Workspace<false> | undefined\n > {\n let workspacePath = await Workspace.find(searchPath);\n\n if (workspacePath) {\n return Workspace.read(workspacePath) as Promise<\n O extends undefined ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true ? Workspace | Workspace<false>\n : Workspace | Workspace<false> | undefined\n >;\n } else if (options?.throwIfNotFound) {\n throw new WorkspaceError('NO_WORKSPACE_FOUND', {\n messageParameters: [searchPath],\n data: {\n path: searchPath,\n },\n });\n }\n\n return undefined as unknown as Promise<\n O extends undefined ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true ? Workspace | Workspace<false>\n : Workspace | Workspace<false> | undefined\n >;\n }\n\n async read(): Promise<this> {\n if (!(await fs.pathExists(this.path))) {\n throw new WorkspaceError('NO_SUCH_WORKSPACE_PATH', {\n messageParameters: [this.path],\n data: {\n path: this.path,\n },\n });\n }\n\n let errors: Array<InstanceType<typeof WorkspaceError>> = [];\n let repositoryUrl = await getRepositoryUrl(this.path);\n let repositoryBranches = await getRepositoryBranches(this.path);\n\n // load workspace config\n let workspaceConfigPath = path.join(\n this.path,\n CARSON_CONFIG_DIRECTORY,\n WORKSPACE_CONFIG_FILENAME,\n );\n let doesWorkspaceConfigExist = await fs.pathExists(workspaceConfigPath);\n let workspaceConfig: WorkspaceConfig | z.ZodError;\n\n if (doesWorkspaceConfigExist) {\n workspaceConfig = await readFile(workspaceConfigPath, workspaceConfigSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n workspaceConfig = {};\n }\n\n if (workspaceConfig instanceof z.ZodError) {\n let zodError = workspaceConfig;\n let workspaceError = new WorkspaceError('INVALID_WORKSPACE_CONFIG', {\n messageParameters: [workspaceConfigPath],\n data: {\n path: workspaceConfigPath,\n zodIssues: zodError.issues,\n },\n });\n\n errors.push(workspaceError);\n\n workspaceConfig = {};\n }\n\n if (this.isMultiProject) {\n // load root package.json\n let rootPackageJsonPath = path.join(this.path, 'package.json');\n let doesRootPackageJsonExist = await fs.pathExists(rootPackageJsonPath);\n let rootPackageJson: PackageJson | z.ZodError;\n\n if (doesRootPackageJsonExist) {\n rootPackageJson = await readFile(rootPackageJsonPath, packageJsonSchema, {\n parser: (rawString: string) => json5.parse<unknown>(rawString),\n });\n } else {\n rootPackageJson = {};\n }\n\n if (rootPackageJson instanceof z.ZodError) {\n let zodError = rootPackageJson;\n let workspaceError = new WorkspaceError('INVALID_PACKAGE_JSON', {\n messageParameters: [rootPackageJsonPath],\n data: {\n path: rootPackageJsonPath,\n zodIssues: zodError.issues,\n },\n });\n\n errors.push(workspaceError);\n\n rootPackageJson = {};\n }\n\n // how to find projects\n let packageJsonProjectGlobs = getPackageJsonWorkspaces(rootPackageJson);\n let workspaceConfigProjectGlobs = workspaceConfig.projects;\n\n if (\n packageJsonProjectGlobs &&\n workspaceConfigProjectGlobs &&\n !_.isEqual(packageJsonProjectGlobs, workspaceConfigProjectGlobs)\n ) {\n throw new WorkspaceError('PROJECT_GLOBS_MISMATCH', {\n data: {\n path: this.path,\n },\n });\n }\n\n let projectGlobs = packageJsonProjectGlobs ?? workspaceConfigProjectGlobs;\n\n this.projectGlobs = (projectGlobs ?? []) as WorkspaceProjectGlobs<M>;\n this.packageJson = rootPackageJson as WorkspacePackageJson<M>;\n this.config = workspaceConfig;\n this.errors = errors;\n\n if (repositoryUrl) {\n this.repository = {\n url: repositoryUrl,\n branches: repositoryBranches ?? [],\n };\n } else if (repositoryBranches) {\n this.repository = {\n branches: repositoryBranches,\n };\n }\n\n await this.readProjects();\n\n return this;\n }\n\n // we're dealing with single-project workspace\n this.config = workspaceConfig;\n this.errors = errors;\n\n if (repositoryUrl) {\n this.repository = {\n url: repositoryUrl,\n branches: repositoryBranches ?? [],\n };\n } else if (repositoryBranches) {\n this.repository = {\n branches: repositoryBranches,\n };\n }\n\n await this.readProjects();\n\n return this;\n }\n\n async update({args}: WorkspaceUpdateOptions): Promise<this> {\n if (!this.config.template) {\n throw new WorkspaceError('MISSING_CARSON_TEMPLATE_ID', {\n messageParameters: [\n path.join(this.path, CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME),\n ],\n });\n }\n\n let template = await readCarsonTemplate(this.config.template);\n let templateRenders = await renderCarsonTemplate({\n template,\n templateData: {\n workspace: this,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n targetPath: this.path,\n snapshotPath:\n template.config.autoEject ?\n undefined\n : path.join(this.path, CARSON_CONFIG_DIRECTORY, WORKSPACE_SNAPSHOT_FILENAME),\n ignoreStrategies: ['create'],\n });\n\n await this.read();\n\n return this;\n }\n\n getProject(projectName: Project<M> | string): Project<M> | undefined {\n for (let project of this.projects) {\n if (project.name === projectName || project === projectName) {\n return project;\n }\n }\n\n return undefined;\n }\n\n async createProject({\n templateId,\n projectPath,\n projectName,\n args,\n }: WorkspaceCreateProjectOptions): Promise<Project<M>> {\n let resolvedProjectPath = path.resolve(projectPath);\n\n if (this.projects.some((project) => resolvedProjectPath === project.path)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {\n messageParameters: [resolvedProjectPath],\n });\n }\n\n if (this.projects.some((project) => projectName === project.name)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {messageParameters: [projectName]});\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new WorkspaceError('TOO_MANY_PROJECTS');\n }\n\n if (!this.isMultiProject && projectPath !== this.path) {\n throw new WorkspaceError('PATH_MISMATCH');\n }\n\n let newProject = await Project.create({\n templateId,\n projectPath,\n projectName,\n args,\n workspace: this,\n });\n\n this.addProject(newProject);\n\n return newProject;\n }\n\n addProject(newProject: Project<M>): this {\n if (this.projects.some((project) => newProject.path === project.path)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {\n messageParameters: [newProject.path],\n });\n }\n\n if (this.projects.some((project) => newProject.name === project.name)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {messageParameters: [newProject.name]});\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new WorkspaceError('TOO_MANY_PROJECTS');\n }\n\n if (!this.isMultiProject && newProject.path !== this.path) {\n throw new WorkspaceError('PATH_MISMATCH');\n }\n\n this.projects.push(newProject);\n this.sortProjects();\n this.updateDependencies();\n\n return this;\n }\n\n addProjects(newProjects: Array<Project<M>>): this {\n for (let newProject of newProjects) {\n if (this.projects.some((project) => newProject.path === project.path)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {\n messageParameters: [newProject.path],\n });\n }\n\n if (this.projects.some((project) => newProject.name === project.name)) {\n throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {messageParameters: [newProject.name]});\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new WorkspaceError('TOO_MANY_PROJECTS');\n }\n\n if (!this.isMultiProject && newProject.path !== this.path) {\n throw new WorkspaceError('PATH_MISMATCH');\n }\n\n this.projects.push(newProject);\n }\n\n this.sortProjects();\n this.updateDependencies();\n\n return this;\n }\n\n async readProjects(): Promise<Array<Project<M>>> {\n if (this.projectGlobs) {\n let projects: Array<Project<M>> = [];\n let packagePaths = await glob(this.projectGlobs, {\n cwd: this.path,\n onlyDirectories: true,\n });\n\n for (let packagePath of packagePaths) {\n let projectPath = path.join(this.path, packagePath);\n\n if (await containsProject(projectPath)) {\n let project = await Project.read(projectPath, this);\n\n projects.push(project);\n }\n }\n\n this.projects = projects;\n\n this.sortProjects();\n this.updateDependencies();\n } else if (await containsProject(this.path)) {\n this.projects = [await Project.read(this.path, this)];\n\n this.sortProjects();\n this.updateDependencies();\n }\n\n return this.projects;\n }\n\n protected sortProjects(): void {\n this.projects.sort(compareProjectPath);\n }\n\n protected updateDependencies(): void {\n this.dependencies = WorkspaceDependencies.fromWorkspace(this);\n this.devDependencies = WorkspaceDependencies.fromWorkspace(this, {\n includeOnlyDevDependencies: true,\n });\n this.allDependencies = WorkspaceDependencies.fromWorkspace(this, {\n includeDevDependencies: true,\n includeWorkspaceDependencies: true,\n });\n this.dependencyVersions = this.allDependencies.getVersions({\n useExactVersions: true,\n });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["projectGlobs", "workspace"]
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import { z } from "zod";
3
2
  export const workspaceConfigSchema = z.object({
4
3
  template: z.string().optional(),
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../source/workspace/WorkspaceConfig.ts"],
4
4
  "sourcesContent": ["import {z} from 'zod';\n\nexport const workspaceConfigSchema = z\n .object({\n template: z.string().optional(),\n projects: z.string().array().optional(),\n })\n .catchall(z.unknown());\n\n/**\n * A workspace configuration.\n */\nexport type WorkspaceConfig = z.infer<typeof workspaceConfigSchema>;\n"],
5
- "mappings": ";AAAA,SAAQ,SAAQ;AAET,aAAM,wBAAwB,EAClC,OAAO;AAAA,EACN,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS;AACxC,CAAC,EACA,SAAS,EAAE,QAAQ,CAAC;",
5
+ "mappings": "AAAA,SAAQ,SAAQ;AAET,aAAM,wBAAwB,EAClC,OAAO;AAAA,EACN,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS;AACxC,CAAC,EACA,SAAS,EAAE,QAAQ,CAAC;",
6
6
  "names": []
7
7
  }
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceCreateOptions.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceCreateProjectOptions.js.map
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import _ from "lodash";
3
2
  import semver from "semver";
4
3
  import { compareSemver, compareWorkspaceDependencyProjectName } from "./internals.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../source/workspace/WorkspaceDependencies.ts"],
4
4
  "sourcesContent": ["import _ from 'lodash';\nimport semver from 'semver';\n\nimport {compareSemver, compareWorkspaceDependencyProjectName} from './internals.js';\nimport {type Workspace} from './Workspace.js';\nimport {type WorkspaceDependenciesFromWorkspaceOptions} from './WorkspaceDependenciesFromWorkspaceOptions.js';\nimport {type WorkspaceDependenciesGetVersionsOptions} from './WorkspaceDependenciesGetVersionsOptions.js';\nimport {type WorkspaceDependency} from './WorkspaceDependency.js';\n\n/**\n * A collection of {@link WorkspaceDependency | workspace dependencies} that are installed in {@link Workspace | a workspace}.\n */\nexport class WorkspaceDependencies<M extends boolean = true> extends Array<WorkspaceDependency> {\n /** The workspace the dependencies are installed in. */\n workspace: Workspace<M>;\n\n constructor(...args: [...WorkspaceDependency[], Workspace<M>]) {\n super();\n\n if (args.length === 1) {\n [this.workspace] = args as [Workspace<M>];\n } else {\n let values = args.slice(0, -1) as WorkspaceDependency[];\n let workspace = args.at(-1) as Workspace<M>;\n\n this.push(...values);\n\n this.workspace = workspace;\n }\n }\n\n /**\n * Adds one or more new dependencies.\n *\n * @param newWorkspaceDependencies The dependencies to add.\n * @returns The new length of the collection.\n */\n override push(...newWorkspaceDependencies: WorkspaceDependency[]): number {\n for (let newWorkspaceDependency of newWorkspaceDependencies) {\n let doesExist = false;\n\n for (let workspaceDependency of this) {\n if (workspaceDependency.name === newWorkspaceDependency.name) {\n doesExist = true;\n\n workspaceDependency.versions = _.union(\n workspaceDependency.versions,\n newWorkspaceDependency.versions,\n );\n workspaceDependency.exactVersions = _.union(\n workspaceDependency.exactVersions,\n newWorkspaceDependency.exactVersions,\n );\n workspaceDependency.projects = _.unionWith(\n workspaceDependency.projects,\n newWorkspaceDependency.projects,\n (a, b) => a.name === b.name,\n );\n\n workspaceDependency.versions.sort(compareSemver);\n workspaceDependency.exactVersions.sort(compareSemver);\n workspaceDependency.projects.sort(compareWorkspaceDependencyProjectName);\n }\n }\n\n if (!doesExist) {\n super.push(newWorkspaceDependency);\n }\n }\n\n return this.length;\n }\n\n /**\n * Creates new {@link WorkspaceDependencies} instance from a {@link Workspace} instance and its dependencies.\n *\n * @param workspace The workspace from which the dependnecies are taken.\n * @param options Options.\n * @returns The new {@link WorkspaceDependencies} instance.\n */\n static fromWorkspace<M extends boolean = true>(\n workspace: Workspace<M>,\n options?: WorkspaceDependenciesFromWorkspaceOptions,\n ) {\n let workspaceDependencies: WorkspaceDependency[] = [];\n\n if (options?.includeWorkspaceDependencies) {\n for (let [dependencyName, dependencyVersion] of Object.entries({\n ...workspace.packageJson?.dependencies,\n ...workspace.packageJson?.devDependencies,\n ...(workspace.packageJson?.engines as Record<string, string>),\n })) {\n let exactDependencyVersion =\n semver.validRange(dependencyVersion) ?\n (semver.minVersion(dependencyVersion)?.format() ??\n semver.coerce(dependencyVersion)?.format() ??\n dependencyVersion.trim())\n : dependencyVersion.trim();\n\n let workspaceDependency: WorkspaceDependency = {\n name: dependencyName,\n versions: [dependencyVersion],\n exactVersions: [exactDependencyVersion],\n projects: [],\n };\n\n workspaceDependencies.push(workspaceDependency);\n }\n }\n\n for (let project of workspace.projects) {\n if (!options?.includeOnlyDevDependencies) {\n for (let [dependencyName, dependencyVersion] of Object.entries({\n ...project.packageJson.dependencies,\n ...(workspace.packageJson?.engines as Record<string, string>),\n })) {\n let exactDependencyVersion =\n semver.validRange(dependencyVersion) ?\n (semver.minVersion(dependencyVersion)?.format() ??\n semver.coerce(dependencyVersion)?.format() ??\n dependencyVersion.trim())\n : dependencyVersion.trim();\n\n let workspaceDependency: WorkspaceDependency = {\n name: dependencyName,\n versions: [dependencyVersion],\n exactVersions: [exactDependencyVersion],\n projects: [],\n };\n\n if (project.name) {\n workspaceDependency.projects = [\n {\n name: project.name,\n version: dependencyVersion,\n exactVersion: exactDependencyVersion,\n },\n ];\n }\n\n workspaceDependencies.push(workspaceDependency);\n }\n }\n\n if (options?.includeDevDependencies || options?.includeOnlyDevDependencies) {\n for (let [dependencyName, dependencyVersion] of Object.entries({\n ...project.packageJson.devDependencies,\n })) {\n let exactDependencyVersion =\n semver.validRange(dependencyVersion) ?\n (semver.minVersion(dependencyVersion)?.format() ??\n semver.coerce(dependencyVersion)?.format() ??\n dependencyVersion.trim())\n : dependencyVersion.trim();\n\n let workspaceDependency: WorkspaceDependency = {\n name: dependencyName,\n versions: [dependencyVersion],\n exactVersions: [exactDependencyVersion],\n projects: [],\n };\n\n if (project.name) {\n workspaceDependency.projects = [\n {\n name: project.name,\n version: dependencyVersion,\n exactVersion: exactDependencyVersion,\n },\n ];\n }\n\n workspaceDependencies.push(workspaceDependency);\n }\n }\n }\n\n return new this(...workspaceDependencies, workspace);\n }\n\n /**\n * Creates map of all dependnecies and their installed version.\n *\n * @param options Options.\n * @returns Object whose keys are dependency names and values are sorted versions.\n */\n getVersions(options?: WorkspaceDependenciesGetVersionsOptions) {\n let versions: Record<string, string[]> = {};\n\n for (let dependency of this) {\n versions[dependency.name] =\n options?.useExactVersions ? dependency.exactVersions : dependency.versions;\n }\n\n return versions;\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceDependenciesFromWorkspaceOptions.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceDependenciesGetVersionsOptions.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceDependency.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceDependencyProject.js.map
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import { createCustomErrorWithData } from "@jakubmazanec/error";
3
2
  export const WorkspaceError = createCustomErrorWithData(
4
3
  "WorkspaceError",
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../source/workspace/WorkspaceError.ts"],
4
4
  "sourcesContent": ["import {createCustomErrorWithData} from '@jakubmazanec/error';\nimport {type ZodIssue} from 'zod';\n\n/**\n * A subclass of `Error` that indicates a workspace failure.\n */\nexport const WorkspaceError = createCustomErrorWithData(\n 'WorkspaceError',\n {\n INVALID_PACKAGE_JSON: 'Invalid package.json file \"{0}\".',\n INVALID_WORKSPACE_CONFIG: 'Invalid workspace config file \"{0}\".',\n NO_SUCH_WORKSPACE_PATH: 'Workspace path \"{0}\" doesn\\'t exist.',\n NO_WORKSPACE_FOUND: 'No workspace was found at path \"{0}\".',\n PATH_MISMATCH:\n 'In a single-project workspace, the workspace path must be the same as the project path.',\n WORKSPACE_PATH_NOT_EMPTY: 'Workspace path \"{0}\" must be an empty directory.',\n MISSING_CARSON_TEMPLATE_ID: 'Workspace config \"{0}\" is missing the Carson template ID.',\n\n DUPLICATE_PROJECT_NAME: 'Workspace already contains project with name \"{0}\"',\n DUPLICATE_PROJECT_PATH: 'Workspace already contains project with path \"{0}\"',\n TOO_MANY_PROJECTS: \"Workspace can't contain more projects.\",\n PROJECT_GLOBS_MISMATCH:\n 'Workspace has mismatched project globs in package.json and workspace.json.',\n },\n class WorkspaceErrorData {\n path?: string;\n zodIssues?: ZodIssue[];\n },\n);\n"],
5
- "mappings": ";AAAA,SAAQ,iCAAgC;AAMjC,aAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,IAC1B,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,eACE;AAAA,IACF,0BAA0B;AAAA,IAC1B,4BAA4B;AAAA,IAE5B,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,wBACE;AAAA,EACJ;AAAA,EACA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACF;",
5
+ "mappings": "AAAA,SAAQ,iCAAgC;AAMjC,aAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,IAC1B,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,eACE;AAAA,IACF,0BAA0B;AAAA,IAC1B,4BAA4B;AAAA,IAE5B,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,wBACE;AAAA,EACJ;AAAA,EACA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceFindAndReadOptions.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceOptions.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceOptionsProject.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspacePackageJson.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceProjectGlobs.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceProjects.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceRepository.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
1
  //# sourceMappingURL=WorkspaceUpdateOptions.js.map
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  export function compareProjectPath(projectA, projectB) {
3
2
  if (projectA.path < projectB.path) {
4
3
  return -1;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/compareProjectPath.ts"],
4
4
  "sourcesContent": ["import {type Project} from '../Project.js';\n\nexport function compareProjectPath<M extends boolean = true>(\n projectA: Project<M>,\n projectB: Project<M>,\n) {\n if (projectA.path < projectB.path) {\n return -1;\n } else if (projectA.path > projectB.path) {\n return 1;\n }\n\n return 0;\n}\n"],
5
- "mappings": ";AAEO,gBAAS,mBACd,UACA,UACA;AACA,MAAI,SAAS,OAAO,SAAS,MAAM;AACjC,WAAO;AAAA,EACT,WAAW,SAAS,OAAO,SAAS,MAAM;AACxC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
5
+ "mappings": "AAEO,gBAAS,mBACd,UACA,UACA;AACA,MAAI,SAAS,OAAO,SAAS,MAAM;AACjC,WAAO;AAAA,EACT,WAAW,SAAS,OAAO,SAAS,MAAM;AACxC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import semver from "semver";
3
2
  export function compareSemver(a, b) {
4
3
  let firstSemver = semver.validRange(a) ? semver.minVersion(a)?.format() ?? semver.coerce(a)?.format() ?? "0.0.0" : "0.0.0";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/compareSemver.ts"],
4
4
  "sourcesContent": ["import semver from 'semver';\n\n/**\n * Defines sort order between two SemVer strings.\n *\n * @param a The first SemVer string.\n * @param b The second SemvEr string.\n * @returns Number whose positivity indicates the relative order of the two elements.\n */\nexport function compareSemver(a: string, b: string) {\n let firstSemver =\n semver.validRange(a) ?\n (semver.minVersion(a)?.format() ?? semver.coerce(a)?.format() ?? '0.0.0')\n : '0.0.0';\n let secondSemver =\n semver.validRange(b) ?\n (semver.minVersion(b)?.format() ?? semver.coerce(b)?.format() ?? '0.0.0')\n : '0.0.0';\n\n let comparison = semver.compare(firstSemver, secondSemver);\n\n if (comparison === 0 && (a !== firstSemver || b !== secondSemver)) {\n if (a !== firstSemver && b !== secondSemver) {\n return b.localeCompare(a);\n }\n\n if (a !== firstSemver) {\n return 1;\n }\n\n if (b !== secondSemver) {\n return -1;\n }\n }\n\n return comparison;\n}\n"],
5
- "mappings": ";AAAA,OAAO,YAAY;AASZ,gBAAS,cAAc,GAAW,GAAW;AAClD,MAAI,cACF,OAAO,WAAW,CAAC,IAChB,OAAO,WAAW,CAAC,GAAG,OAAO,KAAK,OAAO,OAAO,CAAC,GAAG,OAAO,KAAK,UACjE;AACJ,MAAI,eACF,OAAO,WAAW,CAAC,IAChB,OAAO,WAAW,CAAC,GAAG,OAAO,KAAK,OAAO,OAAO,CAAC,GAAG,OAAO,KAAK,UACjE;AAEJ,MAAI,aAAa,OAAO,QAAQ,aAAa,YAAY;AAEzD,MAAI,eAAe,MAAM,MAAM,eAAe,MAAM,eAAe;AACjE,QAAI,MAAM,eAAe,MAAM,cAAc;AAC3C,aAAO,EAAE,cAAc,CAAC;AAAA,IAC1B;AAEA,QAAI,MAAM,aAAa;AACrB,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,cAAc;AACtB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;",
5
+ "mappings": "AAAA,OAAO,YAAY;AASZ,gBAAS,cAAc,GAAW,GAAW;AAClD,MAAI,cACF,OAAO,WAAW,CAAC,IAChB,OAAO,WAAW,CAAC,GAAG,OAAO,KAAK,OAAO,OAAO,CAAC,GAAG,OAAO,KAAK,UACjE;AACJ,MAAI,eACF,OAAO,WAAW,CAAC,IAChB,OAAO,WAAW,CAAC,GAAG,OAAO,KAAK,OAAO,OAAO,CAAC,GAAG,OAAO,KAAK,UACjE;AAEJ,MAAI,aAAa,OAAO,QAAQ,aAAa,YAAY;AAEzD,MAAI,eAAe,MAAM,MAAM,eAAe,MAAM,eAAe;AACjE,QAAI,MAAM,eAAe,MAAM,cAAc;AAC3C,aAAO,EAAE,cAAc,CAAC;AAAA,IAC1B;AAEA,QAAI,MAAM,aAAa;AACrB,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,cAAc;AACtB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  export function compareWorkspaceDependencyProjectName(projectA, projectB) {
3
2
  if (projectA.name < projectB.name) {
4
3
  return -1;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/compareWorkspaceDependencyProjectName.ts"],
4
4
  "sourcesContent": ["import {type WorkspaceDependencyProject} from '../WorkspaceDependencyProject.js';\n\nexport function compareWorkspaceDependencyProjectName(\n projectA: WorkspaceDependencyProject,\n projectB: WorkspaceDependencyProject,\n) {\n if (projectA.name < projectB.name) {\n return -1;\n } else if (projectA.name > projectB.name) {\n return 1;\n }\n\n return 0;\n}\n"],
5
- "mappings": ";AAEO,gBAAS,sCACd,UACA,UACA;AACA,MAAI,SAAS,OAAO,SAAS,MAAM;AACjC,WAAO;AAAA,EACT,WAAW,SAAS,OAAO,SAAS,MAAM;AACxC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
5
+ "mappings": "AAEO,gBAAS,sCACd,UACA,UACA;AACA,MAAI,SAAS,OAAO,SAAS,MAAM;AACjC,WAAO;AAAA,EACT,WAAW,SAAS,OAAO,SAAS,MAAM;AACxC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import fs from "fs-extra";
3
2
  import path from "node:path";
4
3
  import {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/containsProject.ts"],
4
4
  "sourcesContent": ["import {type PackageJson} from '@jakubmazanec/zod-utils';\nimport fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {\n CARSON_CONFIG_DIRECTORY,\n PACKAGE_JSON_FILENAME,\n PROJECT_CONFIG_FILENAME,\n} from '../../constants.js';\n\nexport async function containsProject(directoryPath: string): Promise<boolean> {\n let packageJsonPath = path.join(directoryPath, PACKAGE_JSON_FILENAME);\n\n if (await fs.pathExists(packageJsonPath)) {\n let packageJson = (await fs.readJson(packageJsonPath)) as PackageJson | undefined;\n\n if (packageJson?.name) {\n return true;\n }\n\n return false;\n }\n\n if (\n await fs.pathExists(path.join(directoryPath, CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME))\n ) {\n return true;\n }\n\n return false;\n}\n"],
5
- "mappings": ";AACA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,sBAAsB,gBAAgB,eAAyC;AAC7E,MAAI,kBAAkB,KAAK,KAAK,eAAe,qBAAqB;AAEpE,MAAI,MAAM,GAAG,WAAW,eAAe,GAAG;AACxC,QAAI,cAAe,MAAM,GAAG,SAAS,eAAe;AAEpD,QAAI,aAAa,MAAM;AACrB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,MACE,MAAM,GAAG,WAAW,KAAK,KAAK,eAAe,yBAAyB,uBAAuB,CAAC,GAC9F;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
5
+ "mappings": "AACA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,sBAAsB,gBAAgB,eAAyC;AAC7E,MAAI,kBAAkB,KAAK,KAAK,eAAe,qBAAqB;AAEpE,MAAI,MAAM,GAAG,WAAW,eAAe,GAAG;AACxC,QAAI,cAAe,MAAM,GAAG,SAAS,eAAe;AAEpD,QAAI,aAAa,MAAM;AACrB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,MACE,MAAM,GAAG,WAAW,KAAK,KAAK,eAAe,yBAAyB,uBAAuB,CAAC,GAC9F;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import fs from "fs-extra";
3
2
  import path from "node:path";
4
3
  import {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/containsWorkspace.ts"],
4
4
  "sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {\n CARSON_CONFIG_DIRECTORY,\n PACKAGE_JSON_FILENAME,\n WORKSPACE_CONFIG_FILENAME,\n} from '../../constants.js';\n\nexport async function containsWorkspace(directoryPath: string): Promise<boolean> {\n if (await fs.pathExists(path.join(directoryPath, PACKAGE_JSON_FILENAME))) {\n return true;\n }\n\n if (\n await fs.pathExists(\n path.join(directoryPath, CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME),\n )\n ) {\n return true;\n }\n\n return false;\n}\n"],
5
- "mappings": ";AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,sBAAsB,kBAAkB,eAAyC;AAC/E,MAAI,MAAM,GAAG,WAAW,KAAK,KAAK,eAAe,qBAAqB,CAAC,GAAG;AACxE,WAAO;AAAA,EACT;AAEA,MACE,MAAM,GAAG;AAAA,IACP,KAAK,KAAK,eAAe,yBAAyB,yBAAyB;AAAA,EAC7E,GACA;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
5
+ "mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,sBAAsB,kBAAkB,eAAyC;AAC/E,MAAI,MAAM,GAAG,WAAW,KAAK,KAAK,eAAe,qBAAqB,CAAC,GAAG;AACxE,WAAO;AAAA,EACT;AAEA,MACE,MAAM,GAAG;AAAA,IACP,KAAK,KAAK,eAAe,yBAAyB,yBAAyB;AAAA,EAC7E,GACA;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import { isPackageJson } from "@jakubmazanec/zod-utils";
3
2
  function isStringList(value) {
4
3
  if (Array.isArray(value) && value.some((item) => typeof item === "string")) {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/getPackageJsonWorkspaces.ts"],
4
4
  "sourcesContent": ["import {isPackageJson, type Json, type PackageJson} from '@jakubmazanec/zod-utils';\n\nfunction isStringList(value: unknown): value is string[] {\n if (Array.isArray(value) && value.some((item) => typeof item === 'string')) {\n return true;\n }\n\n return false;\n}\n\nfunction isNonPrimitive(value: unknown): value is object {\n if (typeof value === 'object' && value !== null) {\n return true;\n }\n\n return false;\n}\n\nexport function getPackageJsonWorkspaces(packageJson: Json | PackageJson): string[] | undefined {\n if (isPackageJson(packageJson)) {\n if (Array.isArray(packageJson.workspaces)) {\n return packageJson.workspaces;\n } else if (packageJson.workspaces?.packages) {\n return packageJson.workspaces.packages;\n }\n } else if (isNonPrimitive(packageJson) && !Array.isArray(packageJson)) {\n if (isStringList(packageJson.workspaces)) {\n return packageJson.workspaces;\n } else if (\n isNonPrimitive(packageJson.workspaces) &&\n !Array.isArray(packageJson.workspaces) &&\n isStringList(packageJson.workspaces.packages)\n ) {\n return packageJson.workspaces.packages;\n }\n }\n\n return undefined;\n}\n"],
5
- "mappings": ";AAAA,SAAQ,qBAAiD;AAEzD,SAAS,aAAa,OAAmC;AACvD,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAC1E,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,OAAiC;AACvD,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,gBAAS,yBAAyB,aAAuD;AAC9F,MAAI,cAAc,WAAW,GAAG;AAC9B,QAAI,MAAM,QAAQ,YAAY,UAAU,GAAG;AACzC,aAAO,YAAY;AAAA,IACrB,WAAW,YAAY,YAAY,UAAU;AAC3C,aAAO,YAAY,WAAW;AAAA,IAChC;AAAA,EACF,WAAW,eAAe,WAAW,KAAK,CAAC,MAAM,QAAQ,WAAW,GAAG;AACrE,QAAI,aAAa,YAAY,UAAU,GAAG;AACxC,aAAO,YAAY;AAAA,IACrB,WACE,eAAe,YAAY,UAAU,KACrC,CAAC,MAAM,QAAQ,YAAY,UAAU,KACrC,aAAa,YAAY,WAAW,QAAQ,GAC5C;AACA,aAAO,YAAY,WAAW;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AACT;",
5
+ "mappings": "AAAA,SAAQ,qBAAiD;AAEzD,SAAS,aAAa,OAAmC;AACvD,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAC1E,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,OAAiC;AACvD,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,gBAAS,yBAAyB,aAAuD;AAC9F,MAAI,cAAc,WAAW,GAAG;AAC9B,QAAI,MAAM,QAAQ,YAAY,UAAU,GAAG;AACzC,aAAO,YAAY;AAAA,IACrB,WAAW,YAAY,YAAY,UAAU;AAC3C,aAAO,YAAY,WAAW;AAAA,IAChC;AAAA,EACF,WAAW,eAAe,WAAW,KAAK,CAAC,MAAM,QAAQ,WAAW,GAAG;AACrE,QAAI,aAAa,YAAY,UAAU,GAAG;AACxC,aAAO,YAAY;AAAA,IACrB,WACE,eAAe,YAAY,UAAU,KACrC,CAAC,MAAM,QAAQ,YAAY,UAAU,KACrC,aAAa,YAAY,WAAW,QAAQ,GAC5C;AACA,aAAO,YAAY,WAAW;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import { simpleGit } from "simple-git";
3
2
  const REMOTE_NAME_PREFIX_REGEXP = /^[^/]*\//iu;
4
3
  export async function getRepositoryBranches(repositoryPath) {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/getRepositoryBranches.ts"],
4
4
  "sourcesContent": ["import {simpleGit} from 'simple-git';\n\nconst REMOTE_NAME_PREFIX_REGEXP = /^[^/]*\\//iu;\n\nexport async function getRepositoryBranches(repositoryPath: string): Promise<string[] | undefined> {\n let repositoryBranches: string[] | undefined;\n\n try {\n let git = simpleGit({\n baseDir: repositoryPath,\n binary: 'git',\n maxConcurrentProcesses: 1,\n });\n\n let branchSummary = await git.branch(['-r']);\n\n repositoryBranches = branchSummary.all.map((branch) =>\n branch.replace(REMOTE_NAME_PREFIX_REGEXP, ''),\n );\n\n if (!repositoryBranches.length) {\n branchSummary = await git.branch(['-a']);\n\n repositoryBranches = branchSummary.all.map((branch) =>\n branch.replace(REMOTE_NAME_PREFIX_REGEXP, ''),\n );\n }\n } catch {\n // no-op\n }\n\n return repositoryBranches;\n}\n"],
5
- "mappings": ";AAAA,SAAQ,iBAAgB;AAExB,MAAM,4BAA4B;AAElC,sBAAsB,sBAAsB,gBAAuD;AACjG,MAAI;AAEJ,MAAI;AACF,QAAI,MAAM,UAAU;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,wBAAwB;AAAA,IAC1B,CAAC;AAED,QAAI,gBAAgB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;AAE3C,yBAAqB,cAAc,IAAI;AAAA,MAAI,CAAC,WAC1C,OAAO,QAAQ,2BAA2B,EAAE;AAAA,IAC9C;AAEA,QAAI,CAAC,mBAAmB,QAAQ;AAC9B,sBAAgB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;AAEvC,2BAAqB,cAAc,IAAI;AAAA,QAAI,CAAC,WAC1C,OAAO,QAAQ,2BAA2B,EAAE;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;",
5
+ "mappings": "AAAA,SAAQ,iBAAgB;AAExB,MAAM,4BAA4B;AAElC,sBAAsB,sBAAsB,gBAAuD;AACjG,MAAI;AAEJ,MAAI;AACF,QAAI,MAAM,UAAU;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,wBAAwB;AAAA,IAC1B,CAAC;AAED,QAAI,gBAAgB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;AAE3C,yBAAqB,cAAc,IAAI;AAAA,MAAI,CAAC,WAC1C,OAAO,QAAQ,2BAA2B,EAAE;AAAA,IAC9C;AAEA,QAAI,CAAC,mBAAmB,QAAQ;AAC9B,sBAAgB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;AAEvC,2BAAqB,cAAc,IAAI;AAAA,QAAI,CAAC,WAC1C,OAAO,QAAQ,2BAA2B,EAAE;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import { simpleGit } from "simple-git";
3
2
  export async function getRepositoryUrl(repositoryPath) {
4
3
  let repositoryUrl;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../source/workspace/internals/getRepositoryUrl.ts"],
4
4
  "sourcesContent": ["import {simpleGit} from 'simple-git';\n\nexport async function getRepositoryUrl(repositoryPath: string): Promise<string | undefined> {\n let repositoryUrl: string | undefined;\n\n try {\n let git = simpleGit({\n baseDir: repositoryPath,\n binary: 'git',\n maxConcurrentProcesses: 1,\n });\n let {value} = await git.getConfig('remote.origin.url');\n\n if (value) {\n repositoryUrl = value;\n }\n } catch {\n // no-op\n }\n\n return repositoryUrl;\n}\n"],
5
- "mappings": ";AAAA,SAAQ,iBAAgB;AAExB,sBAAsB,iBAAiB,gBAAqD;AAC1F,MAAI;AAEJ,MAAI;AACF,QAAI,MAAM,UAAU;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,wBAAwB;AAAA,IAC1B,CAAC;AACD,QAAI,EAAC,MAAK,IAAI,MAAM,IAAI,UAAU,mBAAmB;AAErD,QAAI,OAAO;AACT,sBAAgB;AAAA,IAClB;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;",
5
+ "mappings": "AAAA,SAAQ,iBAAgB;AAExB,sBAAsB,iBAAiB,gBAAqD;AAC1F,MAAI;AAEJ,MAAI;AACF,QAAI,MAAM,UAAU;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,wBAAwB;AAAA,IAC1B,CAAC;AACD,QAAI,EAAC,MAAK,IAAI,MAAM,IAAI,UAAU,mBAAmB;AAErD,QAAI,OAAO;AACT,sBAAgB;AAAA,IAClB;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  export * from "./internals/compareProjectPath.js";
3
2
  export * from "./internals/compareSemver.js";
4
3
  export * from "./internals/compareWorkspaceDependencyProjectName.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../source/workspace/internals.ts"],
4
4
  "sourcesContent": ["export * from './internals/compareProjectPath.js';\nexport * from './internals/compareSemver.js';\nexport * from './internals/compareWorkspaceDependencyProjectName.js';\nexport * from './internals/containsProject.js';\nexport * from './internals/containsWorkspace.js';\nexport * from './internals/getPackageJsonWorkspaces.js';\nexport * from './internals/getRepositoryBranches.js';\nexport * from './internals/getRepositoryUrl.js';\n"],
5
- "mappings": ";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import fs from "fs-extra";
3
2
  import path from "node:path";
4
3
  import { CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME } from "../constants.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../source/workspace/saveProjectConfig.ts"],
4
4
  "sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME} from '../constants.js';\nimport {prettify} from '../template/internals.js';\nimport {type ProjectConfig} from './ProjectConfig.js';\n\n/**\n * {@link saveProjectConfig} options parameter.\n */\nexport type SaveProjectConfigOptions = {\n projectPath: string;\n projectConfig: ProjectConfig;\n};\n\n/**\n * Saves project configuration to the config file.\n *\n * @param options Options.\n */\nexport async function saveProjectConfig({projectPath, projectConfig}: SaveProjectConfigOptions) {\n await fs.ensureDir(path.join(projectPath, CARSON_CONFIG_DIRECTORY));\n\n let projectConfigPath = path.join(projectPath, CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME);\n\n await fs.writeFile(\n projectConfigPath,\n await prettify(JSON.stringify(projectConfig), projectConfigPath),\n {encoding: 'utf8'},\n );\n}\n"],
5
- "mappings": ";AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,SAAQ,yBAAyB,+BAA8B;AAC/D,SAAQ,gBAAe;AAgBvB,sBAAsB,kBAAkB,EAAC,aAAa,cAAa,GAA6B;AAC9F,QAAM,GAAG,UAAU,KAAK,KAAK,aAAa,uBAAuB,CAAC;AAElE,MAAI,oBAAoB,KAAK,KAAK,aAAa,yBAAyB,uBAAuB;AAE/F,QAAM,GAAG;AAAA,IACP;AAAA,IACA,MAAM,SAAS,KAAK,UAAU,aAAa,GAAG,iBAAiB;AAAA,IAC/D,EAAC,UAAU,OAAM;AAAA,EACnB;AACF;",
5
+ "mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,SAAQ,yBAAyB,+BAA8B;AAC/D,SAAQ,gBAAe;AAgBvB,sBAAsB,kBAAkB,EAAC,aAAa,cAAa,GAA6B;AAC9F,QAAM,GAAG,UAAU,KAAK,KAAK,aAAa,uBAAuB,CAAC;AAElE,MAAI,oBAAoB,KAAK,KAAK,aAAa,yBAAyB,uBAAuB;AAE/F,QAAM,GAAG;AAAA,IACP;AAAA,IACA,MAAM,SAAS,KAAK,UAAU,aAAa,GAAG,iBAAiB;AAAA,IAC/D,EAAC,UAAU,OAAM;AAAA,EACnB;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import fs from "fs-extra";
3
2
  import path from "node:path";
4
3
  import { CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME } from "../constants.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../source/workspace/saveWorkspaceConfig.ts"],
4
4
  "sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\n\nimport {CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME} from '../constants.js';\nimport {prettify} from '../template/internals.js';\nimport {type WorkspaceConfig} from './WorkspaceConfig.js';\n\n/**\n * {@link saveWorkspaceConfig} options parameter.\n */\nexport type SaveWorkspaceConfigOptions = {\n workspacePath: string;\n workspaceConfig: WorkspaceConfig;\n};\n\n/**\n * Saves workspace configuration to the config file.\n *\n * @param options Options.\n */\nexport async function saveWorkspaceConfig({\n workspacePath,\n workspaceConfig,\n}: SaveWorkspaceConfigOptions) {\n await fs.ensureDir(path.join(workspacePath, CARSON_CONFIG_DIRECTORY));\n\n let workspaceConfigPath = path.join(\n workspacePath,\n CARSON_CONFIG_DIRECTORY,\n WORKSPACE_CONFIG_FILENAME,\n );\n\n await fs.writeFile(\n workspaceConfigPath,\n await prettify(JSON.stringify(workspaceConfig), workspaceConfigPath),\n {encoding: 'utf8'},\n );\n}\n"],
5
- "mappings": ";AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,SAAQ,yBAAyB,iCAAgC;AACjE,SAAQ,gBAAe;AAgBvB,sBAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,GAAG,UAAU,KAAK,KAAK,eAAe,uBAAuB,CAAC;AAEpE,MAAI,sBAAsB,KAAK;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,GAAG;AAAA,IACP;AAAA,IACA,MAAM,SAAS,KAAK,UAAU,eAAe,GAAG,mBAAmB;AAAA,IACnE,EAAC,UAAU,OAAM;AAAA,EACnB;AACF;",
5
+ "mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,SAAQ,yBAAyB,iCAAgC;AACjE,SAAQ,gBAAe;AAgBvB,sBAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,GAAG,UAAU,KAAK,KAAK,eAAe,uBAAuB,CAAC;AAEpE,MAAI,sBAAsB,KAAK;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,GAAG;AAAA,IACP;AAAA,IACA,MAAM,SAAS,KAAK,UAAU,eAAe,GAAG,mBAAmB;AAAA,IACnE,EAAC,UAAU,OAAM;AAAA,EACnB;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  export * from "./workspace/Project.js";
3
2
  export * from "./workspace/ProjectConfig.js";
4
3
  export * from "./workspace/ProjectError.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../source/workspace.ts"],
4
4
  "sourcesContent": ["export * from './workspace/Project.js';\nexport * from './workspace/ProjectConfig.js';\nexport type * from './workspace/ProjectCreateOptions.js';\nexport * from './workspace/ProjectError.js';\nexport type * from './workspace/ProjectOptions.js';\nexport type * from './workspace/ProjectUpdateOptions.js';\nexport * from './workspace/saveProjectConfig.js';\nexport * from './workspace/saveWorkspaceConfig.js';\nexport * from './workspace/Workspace.js';\nexport * from './workspace/WorkspaceConfig.js';\nexport type * from './workspace/WorkspaceCreateOptions.js';\nexport type * from './workspace/WorkspaceCreateProjectOptions.js';\nexport * from './workspace/WorkspaceDependencies.js';\nexport * from './workspace/WorkspaceError.js';\nexport type * from './workspace/WorkspaceFindAndReadOptions.js';\nexport type * from './workspace/WorkspaceOptions.js';\nexport type * from './workspace/WorkspaceOptionsProject.js';\nexport type * from './workspace/WorkspacePackageJson.js';\nexport type * from './workspace/WorkspaceProjectGlobs.js';\nexport type * from './workspace/WorkspaceProjects.js';\nexport type * from './workspace/WorkspaceRepository.js';\nexport type * from './workspace/WorkspaceUpdateOptions.js';\n"],
5
- "mappings": ";AAAA,cAAc;AACd,cAAc;AAEd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;",
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AAEd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }