@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
|
@@ -5,7 +5,7 @@ import fs from 'fs-extra';
|
|
|
5
5
|
import json5 from 'json5';
|
|
6
6
|
import path from 'node:path';
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { getPackageJsonWorkspaces, getRepositoryBranches, getRepositoryUrl } from './internals.js';
|
|
8
|
+
import { compareProjectPath, getPackageJsonWorkspaces, getRepositoryBranches, getRepositoryUrl } from './internals.js';
|
|
9
9
|
import { Project } from './Project.js';
|
|
10
10
|
import { saveWorkspaceConfig } from './saveWorkspaceConfig.js';
|
|
11
11
|
import { workspaceConfigSchema } from './WorkspaceConfig.js';
|
|
@@ -15,7 +15,7 @@ import { CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME } from '../constants
|
|
|
15
15
|
import { applyTemplateRenders } from '../template/applyTemplateRenders.js';
|
|
16
16
|
import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
17
17
|
/**
|
|
18
|
-
* Workspace represent a directory, usually a git repository, that contains {@
|
|
18
|
+
* Workspace represent a directory, usually a git repository, that contains {@link Project} instances.
|
|
19
19
|
*
|
|
20
20
|
* @typeParam M If true, the workspace is multi-project workspace (so-called "monorepo").
|
|
21
21
|
*/ export class Workspace {
|
|
@@ -41,14 +41,13 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
41
41
|
} else {
|
|
42
42
|
this.projectGlobs = [];
|
|
43
43
|
}
|
|
44
|
+
this.projects = [];
|
|
44
45
|
let { projects } = options;
|
|
45
46
|
if (projects) {
|
|
46
|
-
this.projects
|
|
47
|
+
this.addProjects(projects.map((project)=>new Project({
|
|
47
48
|
...project,
|
|
48
49
|
workspace: this
|
|
49
|
-
}));
|
|
50
|
-
} else {
|
|
51
|
-
this.projects = [];
|
|
50
|
+
})));
|
|
52
51
|
}
|
|
53
52
|
let packageJsonOption = options.packageJson;
|
|
54
53
|
if (packageJsonOption) {
|
|
@@ -61,17 +60,13 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
61
60
|
this.isMultiProject = false;
|
|
62
61
|
this.projectGlobs = null;
|
|
63
62
|
this.packageJson = null;
|
|
63
|
+
this.projects = [];
|
|
64
64
|
let { projects } = options;
|
|
65
65
|
if (projects) {
|
|
66
|
-
this.projects
|
|
66
|
+
this.addProjects(projects.map((project)=>new Project({
|
|
67
67
|
...project,
|
|
68
68
|
workspace: this
|
|
69
|
-
}));
|
|
70
|
-
if (this.projects[0].path !== this.path) {
|
|
71
|
-
throw new WorkspaceError('PATH_MISMATCH');
|
|
72
|
-
}
|
|
73
|
-
} else {
|
|
74
|
-
this.projects = [];
|
|
69
|
+
})));
|
|
75
70
|
}
|
|
76
71
|
}
|
|
77
72
|
let configOption = options.config;
|
|
@@ -96,13 +91,14 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
96
91
|
];
|
|
97
92
|
}
|
|
98
93
|
}
|
|
94
|
+
this.sortProjects();
|
|
99
95
|
this.updateDependencies();
|
|
100
96
|
}
|
|
101
97
|
/**
|
|
102
98
|
* Creates new workspace within the file system.
|
|
103
99
|
*
|
|
104
100
|
* @param options Options.
|
|
105
|
-
* @returns The new workspace
|
|
101
|
+
* @returns The new workspace.
|
|
106
102
|
*/ static async create({ args, path: workspacePath, templateId }) {
|
|
107
103
|
// 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()
|
|
108
104
|
let workspace = new this({
|
|
@@ -111,7 +107,18 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
111
107
|
template: templateId
|
|
112
108
|
}
|
|
113
109
|
});
|
|
114
|
-
|
|
110
|
+
try {
|
|
111
|
+
await ensureEmptyDirectory(workspace.path);
|
|
112
|
+
} catch {
|
|
113
|
+
throw new WorkspaceError('WORKSPACE_PATH_NOT_EMPTY', {
|
|
114
|
+
messageParameters: [
|
|
115
|
+
workspace.path
|
|
116
|
+
],
|
|
117
|
+
data: {
|
|
118
|
+
path: workspace.path
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
115
122
|
await saveWorkspaceConfig({
|
|
116
123
|
workspacePath: workspace.path,
|
|
117
124
|
workspaceConfig: {
|
|
@@ -218,10 +225,20 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
218
225
|
}
|
|
219
226
|
/**
|
|
220
227
|
* Traverses file system up from the search path and tries to find and read a workspace.
|
|
221
|
-
*/ static async findAndRead(searchPath) {
|
|
228
|
+
*/ static async findAndRead(searchPath, options) {
|
|
229
|
+
var _options;
|
|
222
230
|
let workspacePath = await Workspace.find(searchPath);
|
|
223
231
|
if (workspacePath) {
|
|
224
232
|
return Workspace.read(workspacePath);
|
|
233
|
+
} else if ((_options = options) === null || _options === void 0 ? void 0 : _options.throwIfNotFound) {
|
|
234
|
+
throw new WorkspaceError('NO_WORKSPACE_FOUND', {
|
|
235
|
+
messageParameters: [
|
|
236
|
+
searchPath
|
|
237
|
+
],
|
|
238
|
+
data: {
|
|
239
|
+
path: searchPath
|
|
240
|
+
}
|
|
241
|
+
});
|
|
225
242
|
}
|
|
226
243
|
return undefined;
|
|
227
244
|
}
|
|
@@ -300,6 +317,10 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
300
317
|
url: repositoryUrl,
|
|
301
318
|
branches: repositoryBranches ?? []
|
|
302
319
|
};
|
|
320
|
+
} else if (repositoryBranches) {
|
|
321
|
+
this.repository = {
|
|
322
|
+
branches: repositoryBranches
|
|
323
|
+
};
|
|
303
324
|
}
|
|
304
325
|
await this.readProjects();
|
|
305
326
|
return this;
|
|
@@ -312,13 +333,21 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
312
333
|
url: repositoryUrl,
|
|
313
334
|
branches: repositoryBranches ?? []
|
|
314
335
|
};
|
|
336
|
+
} else if (repositoryBranches) {
|
|
337
|
+
this.repository = {
|
|
338
|
+
branches: repositoryBranches
|
|
339
|
+
};
|
|
315
340
|
}
|
|
316
341
|
await this.readProjects();
|
|
317
342
|
return this;
|
|
318
343
|
}
|
|
319
344
|
async update({ args }) {
|
|
320
345
|
if (!this.config.template) {
|
|
321
|
-
throw new
|
|
346
|
+
throw new WorkspaceError('MISSING_CARSON_TEMPLATE_ID', {
|
|
347
|
+
messageParameters: [
|
|
348
|
+
path.join(this.path, CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME)
|
|
349
|
+
]
|
|
350
|
+
});
|
|
322
351
|
}
|
|
323
352
|
let templateRenders = await renderCarsonTemplate({
|
|
324
353
|
templateId: this.config.template,
|
|
@@ -346,14 +375,26 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
346
375
|
return undefined;
|
|
347
376
|
}
|
|
348
377
|
async createProject({ templateId, projectPath, projectName, args }) {
|
|
349
|
-
|
|
350
|
-
|
|
378
|
+
let resolvedProjectPath = path.resolve(projectPath);
|
|
379
|
+
if (this.projects.some((project)=>resolvedProjectPath === project.path)) {
|
|
380
|
+
throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {
|
|
381
|
+
messageParameters: [
|
|
382
|
+
resolvedProjectPath
|
|
383
|
+
]
|
|
384
|
+
});
|
|
351
385
|
}
|
|
352
386
|
if (this.projects.some((project)=>projectName === project.name)) {
|
|
353
|
-
throw new
|
|
387
|
+
throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {
|
|
388
|
+
messageParameters: [
|
|
389
|
+
projectName
|
|
390
|
+
]
|
|
391
|
+
});
|
|
354
392
|
}
|
|
355
393
|
if (!this.isMultiProject && this.projects.length >= 1) {
|
|
356
|
-
throw new
|
|
394
|
+
throw new WorkspaceError('TOO_MANY_PROJECTS');
|
|
395
|
+
}
|
|
396
|
+
if (!this.isMultiProject && projectPath !== this.path) {
|
|
397
|
+
throw new WorkspaceError('PATH_MISMATCH');
|
|
357
398
|
}
|
|
358
399
|
let newProject = await Project.create({
|
|
359
400
|
templateId,
|
|
@@ -367,18 +408,57 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
367
408
|
}
|
|
368
409
|
addProject(newProject) {
|
|
369
410
|
if (this.projects.some((project)=>newProject.path === project.path)) {
|
|
370
|
-
throw new
|
|
411
|
+
throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {
|
|
412
|
+
messageParameters: [
|
|
413
|
+
newProject.path
|
|
414
|
+
]
|
|
415
|
+
});
|
|
371
416
|
}
|
|
372
417
|
if (this.projects.some((project)=>newProject.name === project.name)) {
|
|
373
|
-
throw new
|
|
418
|
+
throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {
|
|
419
|
+
messageParameters: [
|
|
420
|
+
newProject.name
|
|
421
|
+
]
|
|
422
|
+
});
|
|
374
423
|
}
|
|
375
424
|
if (!this.isMultiProject && this.projects.length >= 1) {
|
|
376
|
-
throw new
|
|
425
|
+
throw new WorkspaceError('TOO_MANY_PROJECTS');
|
|
426
|
+
}
|
|
427
|
+
if (!this.isMultiProject && newProject.path !== this.path) {
|
|
428
|
+
throw new WorkspaceError('PATH_MISMATCH');
|
|
377
429
|
}
|
|
378
430
|
this.projects.push(newProject);
|
|
379
431
|
this.sortProjects();
|
|
380
432
|
this.updateDependencies();
|
|
381
|
-
return
|
|
433
|
+
return this;
|
|
434
|
+
}
|
|
435
|
+
addProjects(newProjects) {
|
|
436
|
+
for (let newProject of newProjects){
|
|
437
|
+
if (this.projects.some((project)=>newProject.path === project.path)) {
|
|
438
|
+
throw new WorkspaceError('DUPLICATE_PROJECT_PATH', {
|
|
439
|
+
messageParameters: [
|
|
440
|
+
newProject.path
|
|
441
|
+
]
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
if (this.projects.some((project)=>newProject.name === project.name)) {
|
|
445
|
+
throw new WorkspaceError('DUPLICATE_PROJECT_NAME', {
|
|
446
|
+
messageParameters: [
|
|
447
|
+
newProject.name
|
|
448
|
+
]
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
if (!this.isMultiProject && this.projects.length >= 1) {
|
|
452
|
+
throw new WorkspaceError('TOO_MANY_PROJECTS');
|
|
453
|
+
}
|
|
454
|
+
if (!this.isMultiProject && newProject.path !== this.path) {
|
|
455
|
+
throw new WorkspaceError('PATH_MISMATCH');
|
|
456
|
+
}
|
|
457
|
+
this.projects.push(newProject);
|
|
458
|
+
}
|
|
459
|
+
this.sortProjects();
|
|
460
|
+
this.updateDependencies();
|
|
461
|
+
return this;
|
|
382
462
|
}
|
|
383
463
|
async readProjects() {
|
|
384
464
|
if (this.projectGlobs) {
|
|
@@ -402,14 +482,7 @@ import { renderCarsonTemplate } from '../template/renderCarsonTemplate.js';
|
|
|
402
482
|
return this.projects;
|
|
403
483
|
}
|
|
404
484
|
sortProjects() {
|
|
405
|
-
this.projects.sort(
|
|
406
|
-
if (projectA.path < projectB.path) {
|
|
407
|
-
return -1;
|
|
408
|
-
} else if (projectA.path > projectB.path) {
|
|
409
|
-
return 1;
|
|
410
|
-
}
|
|
411
|
-
return 0;
|
|
412
|
-
});
|
|
485
|
+
this.projects.sort(compareProjectPath);
|
|
413
486
|
}
|
|
414
487
|
updateDependencies() {
|
|
415
488
|
this.dependencies = WorkspaceDependencies.fromWorkspace(this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/Workspace.ts"],"sourcesContent":["import {ensureEmptyDirectory, findExistingDirectory, isRootPath} from '@jakubmazanec/fs-utils';\nimport {readFile, packageJsonSchema, type PackageJson} from '@jakubmazanec/zod-utils';\nimport glob from 'fast-glob';\nimport fs from 'fs-extra';\nimport json5 from 'json5';\nimport path from 'node:path';\nimport {z} from 'zod';\n\nimport {getPackageJsonWorkspaces, getRepositoryBranches, getRepositoryUrl} 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 {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';\nimport {CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME} from '../constants.js';\nimport {applyTemplateRenders} from '../template/applyTemplateRenders.js';\nimport {renderCarsonTemplate} from '../template/renderCarsonTemplate.js';\n\n/**\n * Workspace represent a directory, usually a git repository, that contains {@linkcode 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 (typeof 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 let {projects} = options as WorkspaceOptions<true>;\n\n if (projects) {\n this.projects = projects.map(\n (project) => new Project({...project, workspace: this}),\n ) as WorkspaceProjects<M>;\n } else {\n this.projects = [] as Array<Project<M>> as WorkspaceProjects<M>;\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\n let {projects} = options as WorkspaceOptions<false>;\n\n if (projects) {\n this.projects = projects.map(\n (project) => new Project({...project, workspace: this}),\n ) as WorkspaceProjects<M>;\n\n if ((this.projects[0] as Project<false>).path !== this.path) {\n throw new WorkspaceError('PATH_MISMATCH');\n }\n } else {\n this.projects = [] as Array<Project<M>> as WorkspaceProjects<M>;\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.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 await ensureEmptyDirectory(workspace.path);\n await saveWorkspaceConfig({\n workspacePath: workspace.path,\n workspaceConfig: {template: templateId},\n });\n\n let templateRenders = await renderCarsonTemplate({\n templateId,\n templateData: {\n workspace,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n path: workspace.path,\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\n // add projects\n let projectGlobs = getPackageJsonWorkspaces(rootPackageJson);\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 // assemble workspace options\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 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 let packageJsonPath = path.join(currentPath, 'package.json');\n let doesPackageJsonExist = await fs.pathExists(packageJsonPath);\n\n if (doesPackageJsonExist) {\n let packageJson = await readFile(packageJsonPath, packageJsonSchema, {\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\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(searchPath: string): Promise<Workspace | Workspace<false> | undefined> {\n let workspacePath = await Workspace.find(searchPath);\n\n if (workspacePath) {\n return Workspace.read(workspacePath);\n }\n\n return undefined;\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 let projectGlobs = getPackageJsonWorkspaces(rootPackageJson);\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 }\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 }\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 Error('Templat ID is missing in the workspace config!');\n }\n\n let templateRenders = await renderCarsonTemplate({\n templateId: this.config.template,\n templateData: {\n workspace: 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 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 if (this.projects.some((project) => projectPath === project.path)) {\n throw new Error('Project with same path already exists!');\n }\n\n if (this.projects.some((project) => projectName === project.name)) {\n throw new Error('Project with same name already exists!');\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new Error('Only multi-project Workspace can have more than 1 project!');\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>): Project<M> {\n if (this.projects.some((project) => newProject.path === project.path)) {\n throw new Error('Project with same path already exists!');\n }\n\n if (this.projects.some((project) => newProject.name === project.name)) {\n throw new Error('Project with same name already exists!');\n }\n\n if (!this.isMultiProject && this.projects.length >= 1) {\n throw new Error('Only multi-project Workspace can have more than 1 project!');\n }\n\n this.projects.push(newProject);\n this.sortProjects();\n this.updateDependencies();\n\n return newProject;\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 project = await Project.read(path.join(this.path, packagePath), this);\n\n projects.push(project);\n }\n\n this.projects = projects;\n } else {\n this.projects = [await Project.read(this.path, this)];\n }\n\n this.sortProjects();\n this.updateDependencies();\n\n return this.projects;\n }\n\n private sortProjects(): void {\n this.projects.sort((projectA, projectB) => {\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 }\n\n private 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"],"names":["ensureEmptyDirectory","findExistingDirectory","isRootPath","readFile","packageJsonSchema","glob","fs","json5","path","z","getPackageJsonWorkspaces","getRepositoryBranches","getRepositoryUrl","Project","saveWorkspaceConfig","workspaceConfigSchema","WorkspaceDependencies","WorkspaceError","CARSON_CONFIG_DIRECTORY","WORKSPACE_CONFIG_FILENAME","applyTemplateRenders","renderCarsonTemplate","Workspace","isMultiProject","projectGlobs","projects","config","packageJson","repository","dependencies","devDependencies","allDependencies","dependencyVersions","errors","constructor","options","projectGlobOption","map","project","workspace","packageJsonOption","emptyPackageJson","configOption","emptyWorkspaceConfig","length","packageJsonWorkspaces","updateDependencies","create","args","workspacePath","templateId","template","workspaceConfig","templateRenders","templateData","ignoreStrategies","read","resolvedWorkspacePath","resolve","pathExists","messageParameters","data","rootPackageJsonPath","join","doesRootPackageJsonExist","rootPackageJson","parser","rawString","parse","ZodError","readProjects","find","searchPath","startingPath","currentPath","singlePackageWorkspacePath","multiPackageWorkspacePath","packageJsonPath","doesPackageJsonExist","Error","dirname","undefined","findAndRead","repositoryUrl","repositoryBranches","workspaceConfigPath","doesWorkspaceConfigExist","zodError","workspaceError","zodIssues","issues","push","url","branches","update","getProject","projectName","name","createProject","projectPath","some","newProject","addProject","sortProjects","packagePaths","cwd","onlyDirectories","packagePath","sort","projectA","projectB","fromWorkspace","includeOnlyDevDependencies","includeDevDependencies","includeWorkspaceDependencies","getVersions","useExactVersions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/Workspace.ts"],"sourcesContent":["import {ensureEmptyDirectory, findExistingDirectory, isRootPath} from '@jakubmazanec/fs-utils';\nimport {readFile, packageJsonSchema, type PackageJson} from '@jakubmazanec/zod-utils';\nimport glob from 'fast-glob';\nimport fs from 'fs-extra';\nimport json5 from 'json5';\nimport path from 'node:path';\nimport {z} from 'zod';\n\nimport {\n compareProjectPath,\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';\nimport {CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME} from '../constants.js';\nimport {applyTemplateRenders} from '../template/applyTemplateRenders.js';\nimport {renderCarsonTemplate} from '../template/renderCarsonTemplate.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 (typeof 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);\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 await saveWorkspaceConfig({\n workspacePath: workspace.path,\n workspaceConfig: {template: templateId},\n });\n\n let templateRenders = await renderCarsonTemplate({\n templateId,\n templateData: {\n workspace,\n args,\n },\n });\n\n await applyTemplateRenders({\n templateRenders,\n path: workspace.path,\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\n // add projects\n let projectGlobs = getPackageJsonWorkspaces(rootPackageJson);\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 // assemble workspace options\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 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 let packageJsonPath = path.join(currentPath, 'package.json');\n let doesPackageJsonExist = await fs.pathExists(packageJsonPath);\n\n if (doesPackageJsonExist) {\n let packageJson = await readFile(packageJsonPath, packageJsonSchema, {\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\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\n ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true\n ? 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\n ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true\n ? 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\n ? Workspace | Workspace<false> | undefined\n : NonNullable<O>['throwIfNotFound'] extends true\n ? 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 let projectGlobs = getPackageJsonWorkspaces(rootPackageJson);\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 templateRenders = await renderCarsonTemplate({\n templateId: this.config.template,\n templateData: {\n workspace: 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 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 project = await Project.read(path.join(this.path, packagePath), this);\n\n projects.push(project);\n }\n\n this.projects = projects;\n } else {\n this.projects = [await Project.read(this.path, this)];\n }\n\n this.sortProjects();\n this.updateDependencies();\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"],"names":["ensureEmptyDirectory","findExistingDirectory","isRootPath","readFile","packageJsonSchema","glob","fs","json5","path","z","compareProjectPath","getPackageJsonWorkspaces","getRepositoryBranches","getRepositoryUrl","Project","saveWorkspaceConfig","workspaceConfigSchema","WorkspaceDependencies","WorkspaceError","CARSON_CONFIG_DIRECTORY","WORKSPACE_CONFIG_FILENAME","applyTemplateRenders","renderCarsonTemplate","Workspace","isMultiProject","projectGlobs","projects","config","packageJson","repository","dependencies","devDependencies","allDependencies","dependencyVersions","errors","constructor","options","projectGlobOption","addProjects","map","project","workspace","packageJsonOption","emptyPackageJson","configOption","emptyWorkspaceConfig","length","packageJsonWorkspaces","sortProjects","updateDependencies","create","args","workspacePath","templateId","template","messageParameters","data","workspaceConfig","templateRenders","templateData","ignoreStrategies","read","resolvedWorkspacePath","resolve","pathExists","rootPackageJsonPath","join","doesRootPackageJsonExist","rootPackageJson","parser","rawString","parse","ZodError","readProjects","find","searchPath","startingPath","currentPath","singlePackageWorkspacePath","multiPackageWorkspacePath","packageJsonPath","doesPackageJsonExist","Error","dirname","undefined","findAndRead","throwIfNotFound","repositoryUrl","repositoryBranches","workspaceConfigPath","doesWorkspaceConfigExist","zodError","workspaceError","zodIssues","issues","push","url","branches","update","getProject","projectName","name","createProject","projectPath","resolvedProjectPath","some","newProject","addProject","newProjects","packagePaths","cwd","onlyDirectories","packagePath","sort","fromWorkspace","includeOnlyDevDependencies","includeDevDependencies","includeWorkspaceDependencies","getVersions","useExactVersions"],"mappings":"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"}
|
|
@@ -6,4 +6,7 @@ export declare const workspaceConfigSchema: z.ZodObject<{
|
|
|
6
6
|
}, z.ZodUnknown, "strip">, z.objectInputType<{
|
|
7
7
|
template: z.ZodOptional<z.ZodString>;
|
|
8
8
|
}, z.ZodUnknown, "strip">>;
|
|
9
|
+
/**
|
|
10
|
+
* A workspace configuration.
|
|
11
|
+
*/
|
|
9
12
|
export type WorkspaceConfig = z.infer<typeof workspaceConfigSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/WorkspaceConfig.ts"],"sourcesContent":["import {z} from 'zod';\n\nexport const workspaceConfigSchema = z\n .object({\n template: z.string().optional(),\n })\n .catchall(z.unknown());\n\nexport type WorkspaceConfig = z.infer<typeof workspaceConfigSchema>;\n"],"names":["z","workspaceConfigSchema","object","template","string","optional","catchall","unknown"],"mappings":"AAAA,SAAQA,CAAC,QAAO,MAAM;AAEtB,OAAO,MAAMC,wBAAwBD,EAClCE,MAAM,CAAC;IACNC,UAAUH,EAAEI,MAAM,GAAGC,QAAQ;AAC/B,GACCC,QAAQ,CAACN,EAAEO,OAAO,IAAI"}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/WorkspaceConfig.ts"],"sourcesContent":["import {z} from 'zod';\n\nexport const workspaceConfigSchema = z\n .object({\n template: z.string().optional(),\n })\n .catchall(z.unknown());\n\n/**\n * A workspace configuration.\n */\nexport type WorkspaceConfig = z.infer<typeof workspaceConfigSchema>;\n"],"names":["z","workspaceConfigSchema","object","template","string","optional","catchall","unknown"],"mappings":"AAAA,SAAQA,CAAC,QAAO,MAAM;AAEtB,OAAO,MAAMC,wBAAwBD,EAClCE,MAAM,CAAC;IACNC,UAAUH,EAAEI,MAAM,GAAGC,QAAQ;AAC/B,GACCC,QAAQ,CAACN,EAAEO,OAAO,IAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/WorkspaceCreateOptions.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/WorkspaceCreateOptions.ts"],"sourcesContent":["/**\n * {@link Workspace.create} options parameter.\n */\nexport type WorkspaceCreateOptions = {\n path: string;\n templateId: string;\n args: Record<string, unknown>;\n};\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAIE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/WorkspaceCreateProjectOptions.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/WorkspaceCreateProjectOptions.ts"],"sourcesContent":["/**\n * {@link Workspace.createProject | Workspace.createProject} options parameter.\n */\nexport type WorkspaceCreateProjectOptions = {\n templateId: string;\n projectPath: string;\n projectName: string;\n args: Record<string, unknown>;\n};\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAKE"}
|
|
@@ -1,27 +1,34 @@
|
|
|
1
1
|
import { type Workspace } from './Workspace.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
name: string;
|
|
9
|
-
versions: string[];
|
|
10
|
-
exactVersions: string[];
|
|
11
|
-
projects: WorkspaceDependencyProject[];
|
|
12
|
-
}
|
|
13
|
-
export interface WorkspaceDependenciesGetVersionsOptions {
|
|
14
|
-
useExactVersions?: boolean;
|
|
15
|
-
}
|
|
16
|
-
export interface WorkspaceDependenciesFromWorkspaceOptions {
|
|
17
|
-
includeDevDependencies?: boolean;
|
|
18
|
-
includeOnlyDevDependencies?: boolean;
|
|
19
|
-
includeWorkspaceDependencies?: boolean;
|
|
20
|
-
}
|
|
2
|
+
import { type WorkspaceDependenciesFromWorkspaceOptions } from './WorkspaceDependenciesFromWorkspaceOptions.js';
|
|
3
|
+
import { type WorkspaceDependenciesGetVersionsOptions } from './WorkspaceDependenciesGetVersionsOptions.js';
|
|
4
|
+
import { type WorkspaceDependency } from './WorkspaceDependency.js';
|
|
5
|
+
/**
|
|
6
|
+
* A collection of {@link WorkspaceDependency | workspace dependencies} that are installed in {@link Workspace | a workspace}.
|
|
7
|
+
*/
|
|
21
8
|
export declare class WorkspaceDependencies<M extends boolean = true> extends Array<WorkspaceDependency> {
|
|
9
|
+
/** The workspace the dependencies are installed in. */
|
|
22
10
|
workspace: Workspace<M>;
|
|
23
11
|
constructor(...args: [...WorkspaceDependency[], Workspace<M>]);
|
|
12
|
+
/**
|
|
13
|
+
* Adds one or more new dependencies.
|
|
14
|
+
*
|
|
15
|
+
* @param newWorkspaceDependencies The dependencies to add.
|
|
16
|
+
* @returns The new length of the collection.
|
|
17
|
+
*/
|
|
24
18
|
push(...newWorkspaceDependencies: WorkspaceDependency[]): number;
|
|
19
|
+
/**
|
|
20
|
+
* Creates new {@link WorkspaceDependencies} instance from a {@link Workspace} instance and its dependencies.
|
|
21
|
+
*
|
|
22
|
+
* @param workspace The workspace from which the dependnecies are taken.
|
|
23
|
+
* @param options Options.
|
|
24
|
+
* @returns The new {@link WorkspaceDependencies} instance.
|
|
25
|
+
*/
|
|
25
26
|
static fromWorkspace<M extends boolean = true>(workspace: Workspace<M>, options?: WorkspaceDependenciesFromWorkspaceOptions): WorkspaceDependencies<M>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates map of all dependnecies and their installed version.
|
|
29
|
+
*
|
|
30
|
+
* @param options Options.
|
|
31
|
+
* @returns Object whose keys are dependency names and values are sorted versions.
|
|
32
|
+
*/
|
|
26
33
|
getVersions(options?: WorkspaceDependenciesGetVersionsOptions): Record<string, string[]>;
|
|
27
34
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
// TODO: try to fix
|
|
2
|
+
/* eslint-disable complexity -- TODO */ import _ from 'lodash';
|
|
2
3
|
import semver from 'semver';
|
|
3
|
-
import { compareSemver } from './internals.js';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { compareSemver, compareWorkspaceDependencyProjectName } from './internals.js';
|
|
5
|
+
/**
|
|
6
|
+
* A collection of {@link WorkspaceDependency | workspace dependencies} that are installed in {@link Workspace | a workspace}.
|
|
7
|
+
*/ export class WorkspaceDependencies extends Array {
|
|
8
|
+
/** The workspace the dependencies are installed in. */ workspace;
|
|
6
9
|
constructor(...args){
|
|
7
10
|
super();
|
|
8
11
|
if (args.length === 1) {
|
|
@@ -14,7 +17,12 @@ export class WorkspaceDependencies extends Array {
|
|
|
14
17
|
this.workspace = workspace;
|
|
15
18
|
}
|
|
16
19
|
}
|
|
17
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Adds one or more new dependencies.
|
|
22
|
+
*
|
|
23
|
+
* @param newWorkspaceDependencies The dependencies to add.
|
|
24
|
+
* @returns The new length of the collection.
|
|
25
|
+
*/ push(...newWorkspaceDependencies) {
|
|
18
26
|
for (let newWorkspaceDependency of newWorkspaceDependencies){
|
|
19
27
|
let doesExist = false;
|
|
20
28
|
for (let workspaceDependency of this){
|
|
@@ -25,6 +33,7 @@ export class WorkspaceDependencies extends Array {
|
|
|
25
33
|
workspaceDependency.projects = _.unionWith(workspaceDependency.projects, newWorkspaceDependency.projects, (a, b)=>a.name === b.name);
|
|
26
34
|
workspaceDependency.versions.sort(compareSemver);
|
|
27
35
|
workspaceDependency.exactVersions.sort(compareSemver);
|
|
36
|
+
workspaceDependency.projects.sort(compareWorkspaceDependencyProjectName);
|
|
28
37
|
}
|
|
29
38
|
}
|
|
30
39
|
if (!doesExist) {
|
|
@@ -33,9 +42,13 @@ export class WorkspaceDependencies extends Array {
|
|
|
33
42
|
}
|
|
34
43
|
return this.length;
|
|
35
44
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Creates new {@link WorkspaceDependencies} instance from a {@link Workspace} instance and its dependencies.
|
|
47
|
+
*
|
|
48
|
+
* @param workspace The workspace from which the dependnecies are taken.
|
|
49
|
+
* @param options Options.
|
|
50
|
+
* @returns The new {@link WorkspaceDependencies} instance.
|
|
51
|
+
*/ static fromWorkspace(workspace, options) {
|
|
39
52
|
var _options;
|
|
40
53
|
let workspaceDependencies = [];
|
|
41
54
|
if ((_options = options) === null || _options === void 0 ? void 0 : _options.includeWorkspaceDependencies) {
|
|
@@ -116,7 +129,12 @@ export class WorkspaceDependencies extends Array {
|
|
|
116
129
|
}
|
|
117
130
|
return new this(...workspaceDependencies, workspace);
|
|
118
131
|
}
|
|
119
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Creates map of all dependnecies and their installed version.
|
|
134
|
+
*
|
|
135
|
+
* @param options Options.
|
|
136
|
+
* @returns Object whose keys are dependency names and values are sorted versions.
|
|
137
|
+
*/ getVersions(options) {
|
|
120
138
|
let versions = {};
|
|
121
139
|
for (let dependency of this){
|
|
122
140
|
var _options;
|