@jakubmazanec/carson 0.1.0-a500263
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/LICENSE.md +661 -0
- package/README.md +237 -0
- package/bin/carson.js +3 -0
- package/dist/commands/create-project/CreateProject.d.ts +8 -0
- package/dist/commands/create-project/CreateProject.js +138 -0
- package/dist/commands/create-project/CreateProject.js.map +1 -0
- package/dist/commands/create-project/CreateProjectInput.d.ts +20 -0
- package/dist/commands/create-project/CreateProjectInput.js +31 -0
- package/dist/commands/create-project/CreateProjectInput.js.map +1 -0
- package/dist/commands/create-project/createProjectCommand.d.ts +12 -0
- package/dist/commands/create-project/createProjectCommand.js +31 -0
- package/dist/commands/create-project/createProjectCommand.js.map +1 -0
- package/dist/commands/create-project/runCreateProject.d.ts +13 -0
- package/dist/commands/create-project/runCreateProject.js +34 -0
- package/dist/commands/create-project/runCreateProject.js.map +1 -0
- package/dist/commands/create-project.d.ts +4 -0
- package/dist/commands/create-project.js +6 -0
- package/dist/commands/create-project.js.map +1 -0
- package/dist/commands/create-workspace/CreateWorkspace.d.ts +7 -0
- package/dist/commands/create-workspace/CreateWorkspace.js +102 -0
- package/dist/commands/create-workspace/CreateWorkspace.js.map +1 -0
- package/dist/commands/create-workspace/CreateWorkspaceInput.d.ts +11 -0
- package/dist/commands/create-workspace/CreateWorkspaceInput.js +17 -0
- package/dist/commands/create-workspace/CreateWorkspaceInput.js.map +1 -0
- package/dist/commands/create-workspace/createWorkspaceCommand.d.ts +9 -0
- package/dist/commands/create-workspace/createWorkspaceCommand.js +30 -0
- package/dist/commands/create-workspace/createWorkspaceCommand.js.map +1 -0
- package/dist/commands/create-workspace/runCreateWorkspace.d.ts +10 -0
- package/dist/commands/create-workspace/runCreateWorkspace.js +33 -0
- package/dist/commands/create-workspace/runCreateWorkspace.js.map +1 -0
- package/dist/commands/create-workspace.d.ts +4 -0
- package/dist/commands/create-workspace.js +6 -0
- package/dist/commands/create-workspace.js.map +1 -0
- package/dist/commands/internals/packageNameToDirectory.d.ts +1 -0
- package/dist/commands/internals/packageNameToDirectory.js +12 -0
- package/dist/commands/internals/packageNameToDirectory.js.map +1 -0
- package/dist/commands/internals.d.ts +1 -0
- package/dist/commands/internals.js +3 -0
- package/dist/commands/internals.js.map +1 -0
- package/dist/commands/update-workspace/UpdateWorkspace.d.ts +8 -0
- package/dist/commands/update-workspace/UpdateWorkspace.js +71 -0
- package/dist/commands/update-workspace/UpdateWorkspace.js.map +1 -0
- package/dist/commands/update-workspace/runUpdateWorkspace.d.ts +10 -0
- package/dist/commands/update-workspace/runUpdateWorkspace.js +25 -0
- package/dist/commands/update-workspace/runUpdateWorkspace.js.map +1 -0
- package/dist/commands/update-workspace/updateWorkspaceCommand.d.ts +6 -0
- package/dist/commands/update-workspace/updateWorkspaceCommand.js +25 -0
- package/dist/commands/update-workspace/updateWorkspaceCommand.js.map +1 -0
- package/dist/commands/update-workspace.d.ts +3 -0
- package/dist/commands/update-workspace.js +5 -0
- package/dist/commands/update-workspace.js.map +1 -0
- package/dist/commands.d.ts +3 -0
- package/dist/commands.js +5 -0
- package/dist/commands.js.map +1 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.js +16 -0
- package/dist/constants.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.js +5 -0
- package/dist/main.js.map +1 -0
- package/dist/modules.d.js +2 -0
- package/dist/modules.d.js.map +1 -0
- package/dist/run.d.ts +1 -0
- package/dist/run.js +18 -0
- package/dist/run.js.map +1 -0
- package/dist/template/CarsonTemplate.d.ts +9 -0
- package/dist/template/CarsonTemplate.js +3 -0
- package/dist/template/CarsonTemplate.js.map +1 -0
- package/dist/template/CarsonTemplateConfig.d.ts +12 -0
- package/dist/template/CarsonTemplateConfig.js +7 -0
- package/dist/template/CarsonTemplateConfig.js.map +1 -0
- package/dist/template/TemplateAttributes.d.ts +9 -0
- package/dist/template/TemplateAttributes.js +16 -0
- package/dist/template/TemplateAttributes.js.map +1 -0
- package/dist/template/TemplateData.d.ts +35 -0
- package/dist/template/TemplateData.js +13 -0
- package/dist/template/TemplateData.js.map +1 -0
- package/dist/template/TemplateRender.d.ts +4 -0
- package/dist/template/TemplateRender.js +3 -0
- package/dist/template/TemplateRender.js.map +1 -0
- package/dist/template/TemplateRenderSnapshot.d.ts +27 -0
- package/dist/template/TemplateRenderSnapshot.js +11 -0
- package/dist/template/TemplateRenderSnapshot.js.map +1 -0
- package/dist/template/TemplateRenderSnapshots.d.ts +27 -0
- package/dist/template/TemplateRenderSnapshots.js +4 -0
- package/dist/template/TemplateRenderSnapshots.js.map +1 -0
- package/dist/template/TemplateRenders.d.ts +2 -0
- package/dist/template/TemplateRenders.js +3 -0
- package/dist/template/TemplateRenders.js.map +1 -0
- package/dist/template/applyTemplateRenders.d.ts +8 -0
- package/dist/template/applyTemplateRenders.js +60 -0
- package/dist/template/applyTemplateRenders.js.map +1 -0
- package/dist/template/createFileUsingTemplateRender.d.ts +2 -0
- package/dist/template/createFileUsingTemplateRender.js +12 -0
- package/dist/template/createFileUsingTemplateRender.js.map +1 -0
- package/dist/template/deleteFileUsingTemplateRender.d.ts +2 -0
- package/dist/template/deleteFileUsingTemplateRender.js +10 -0
- package/dist/template/deleteFileUsingTemplateRender.js.map +1 -0
- package/dist/template/importCarsonTemplate.d.ts +3 -0
- package/dist/template/importCarsonTemplate.js +8 -0
- package/dist/template/importCarsonTemplate.js.map +1 -0
- package/dist/template/insertUsingTemplateRender.d.ts +2 -0
- package/dist/template/insertUsingTemplateRender.js +29 -0
- package/dist/template/insertUsingTemplateRender.js.map +1 -0
- package/dist/template/internals/merge.d.ts +4 -0
- package/dist/template/internals/merge.js +30 -0
- package/dist/template/internals/merge.js.map +1 -0
- package/dist/template/internals/prettify.d.ts +1 -0
- package/dist/template/internals/prettify.js +25 -0
- package/dist/template/internals/prettify.js.map +1 -0
- package/dist/template/internals/unmerge.d.ts +4 -0
- package/dist/template/internals/unmerge.js +31 -0
- package/dist/template/internals/unmerge.js.map +1 -0
- package/dist/template/internals.d.ts +3 -0
- package/dist/template/internals.js +5 -0
- package/dist/template/internals.js.map +1 -0
- package/dist/template/loadTemplateRenderSnapshots.d.ts +7 -0
- package/dist/template/loadTemplateRenderSnapshots.js +14 -0
- package/dist/template/loadTemplateRenderSnapshots.js.map +1 -0
- package/dist/template/mergeFileUsingTemplateRender.d.ts +2 -0
- package/dist/template/mergeFileUsingTemplateRender.js +39 -0
- package/dist/template/mergeFileUsingTemplateRender.js.map +1 -0
- package/dist/template/overwriteFileUsingTemplateRender.d.ts +2 -0
- package/dist/template/overwriteFileUsingTemplateRender.js +12 -0
- package/dist/template/overwriteFileUsingTemplateRender.js.map +1 -0
- package/dist/template/parseTemplateId.d.ts +1 -0
- package/dist/template/parseTemplateId.js +12 -0
- package/dist/template/parseTemplateId.js.map +1 -0
- package/dist/template/readCarsonTemplate.d.ts +2 -0
- package/dist/template/readCarsonTemplate.js +39 -0
- package/dist/template/readCarsonTemplate.js.map +1 -0
- package/dist/template/renderTemplate.d.ts +7 -0
- package/dist/template/renderTemplate.js +19 -0
- package/dist/template/renderTemplate.js.map +1 -0
- package/dist/template/resolveTemplateModule.d.ts +1 -0
- package/dist/template/resolveTemplateModule.js +9 -0
- package/dist/template/resolveTemplateModule.js.map +1 -0
- package/dist/template/saveTemplateRenderSnapshots.d.ts +2 -0
- package/dist/template/saveTemplateRenderSnapshots.js +23 -0
- package/dist/template/saveTemplateRenderSnapshots.js.map +1 -0
- package/dist/template/uninsertUsingTemplateRender.d.ts +2 -0
- package/dist/template/uninsertUsingTemplateRender.js +29 -0
- package/dist/template/uninsertUsingTemplateRender.js.map +1 -0
- package/dist/template/unmergeFileUsingTemplateRender.d.ts +2 -0
- package/dist/template/unmergeFileUsingTemplateRender.js +39 -0
- package/dist/template/unmergeFileUsingTemplateRender.js.map +1 -0
- package/dist/template.d.ts +20 -0
- package/dist/template.js +22 -0
- package/dist/template.js.map +1 -0
- package/dist/workspace/Project.d.ts +33 -0
- package/dist/workspace/Project.js +184 -0
- package/dist/workspace/Project.js.map +1 -0
- package/dist/workspace/ProjectConfig.d.ts +9 -0
- package/dist/workspace/ProjectConfig.js +6 -0
- package/dist/workspace/ProjectConfig.js.map +1 -0
- package/dist/workspace/ProjectCreateOptions.d.ts +8 -0
- package/dist/workspace/ProjectCreateOptions.js +3 -0
- package/dist/workspace/ProjectCreateOptions.js.map +1 -0
- package/dist/workspace/ProjectError.d.ts +8 -0
- package/dist/workspace/ProjectError.js +11 -0
- package/dist/workspace/ProjectError.js.map +1 -0
- package/dist/workspace/ProjectOptions.d.ts +15 -0
- package/dist/workspace/ProjectOptions.js +3 -0
- package/dist/workspace/ProjectOptions.js.map +1 -0
- package/dist/workspace/ProjectUpdateOptions.d.ts +3 -0
- package/dist/workspace/ProjectUpdateOptions.js +3 -0
- package/dist/workspace/ProjectUpdateOptions.js.map +1 -0
- package/dist/workspace/Workspace.d.ts +68 -0
- package/dist/workspace/Workspace.js +426 -0
- package/dist/workspace/Workspace.js.map +1 -0
- package/dist/workspace/WorkspaceConfig.d.ts +9 -0
- package/dist/workspace/WorkspaceConfig.js +6 -0
- package/dist/workspace/WorkspaceConfig.js.map +1 -0
- package/dist/workspace/WorkspaceCreateOptions.d.ts +5 -0
- package/dist/workspace/WorkspaceCreateOptions.js +3 -0
- package/dist/workspace/WorkspaceCreateOptions.js.map +1 -0
- package/dist/workspace/WorkspaceCreateProjectOptions.d.ts +6 -0
- package/dist/workspace/WorkspaceCreateProjectOptions.js +3 -0
- package/dist/workspace/WorkspaceCreateProjectOptions.js.map +1 -0
- package/dist/workspace/WorkspaceDependencies.d.ts +30 -0
- package/dist/workspace/WorkspaceDependencies.js +126 -0
- package/dist/workspace/WorkspaceDependencies.js.map +1 -0
- package/dist/workspace/WorkspaceError.d.ts +8 -0
- package/dist/workspace/WorkspaceError.js +13 -0
- package/dist/workspace/WorkspaceError.js.map +1 -0
- package/dist/workspace/WorkspaceOptions.d.ts +25 -0
- package/dist/workspace/WorkspaceOptions.js +3 -0
- package/dist/workspace/WorkspaceOptions.js.map +1 -0
- package/dist/workspace/WorkspaceOptionsProjectOptions.d.ts +7 -0
- package/dist/workspace/WorkspaceOptionsProjectOptions.js +3 -0
- package/dist/workspace/WorkspaceOptionsProjectOptions.js.map +1 -0
- package/dist/workspace/WorkspacePackageJson.d.ts +2 -0
- package/dist/workspace/WorkspacePackageJson.js +3 -0
- package/dist/workspace/WorkspacePackageJson.js.map +1 -0
- package/dist/workspace/WorkspaceProjectGlobs.d.ts +1 -0
- package/dist/workspace/WorkspaceProjectGlobs.js +3 -0
- package/dist/workspace/WorkspaceProjectGlobs.js.map +1 -0
- package/dist/workspace/WorkspaceProjects.d.ts +2 -0
- package/dist/workspace/WorkspaceProjects.js +3 -0
- package/dist/workspace/WorkspaceProjects.js.map +1 -0
- package/dist/workspace/WorkspaceRepository.d.ts +4 -0
- package/dist/workspace/WorkspaceRepository.js +3 -0
- package/dist/workspace/WorkspaceRepository.js.map +1 -0
- package/dist/workspace/WorkspaceUpdateOptions.d.ts +3 -0
- package/dist/workspace/WorkspaceUpdateOptions.js +3 -0
- package/dist/workspace/WorkspaceUpdateOptions.js.map +1 -0
- package/dist/workspace/internals/compareSemver.d.ts +8 -0
- package/dist/workspace/internals/compareSemver.js +27 -0
- package/dist/workspace/internals/compareSemver.js.map +1 -0
- package/dist/workspace/internals/getPackageJsonWorkspaces.d.ts +2 -0
- package/dist/workspace/internals/getPackageJsonWorkspaces.js +11 -0
- package/dist/workspace/internals/getPackageJsonWorkspaces.js.map +1 -0
- package/dist/workspace/internals/getRepositoryBranches.d.ts +1 -0
- package/dist/workspace/internals/getRepositoryBranches.js +21 -0
- package/dist/workspace/internals/getRepositoryBranches.js.map +1 -0
- package/dist/workspace/internals/getRepositoryUrl.d.ts +1 -0
- package/dist/workspace/internals/getRepositoryUrl.js +21 -0
- package/dist/workspace/internals/getRepositoryUrl.js.map +1 -0
- package/dist/workspace/internals.d.ts +4 -0
- package/dist/workspace/internals.js +6 -0
- package/dist/workspace/internals.js.map +1 -0
- package/dist/workspace/saveProjectConfig.d.ts +6 -0
- package/dist/workspace/saveProjectConfig.js +13 -0
- package/dist/workspace/saveProjectConfig.js.map +1 -0
- package/dist/workspace/saveWorkspaceConfig.d.ts +6 -0
- package/dist/workspace/saveWorkspaceConfig.js +13 -0
- package/dist/workspace/saveWorkspaceConfig.js.map +1 -0
- package/dist/workspace.d.ts +10 -0
- package/dist/workspace.js +12 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +84 -0
- package/src/commands/create-project/CreateProject.tsx +130 -0
- package/src/commands/create-project/CreateProjectInput.ts +37 -0
- package/src/commands/create-project/createProjectCommand.tsx +33 -0
- package/src/commands/create-project/runCreateProject.ts +59 -0
- package/src/commands/create-project.ts +4 -0
- package/src/commands/create-workspace/CreateWorkspace.tsx +90 -0
- package/src/commands/create-workspace/CreateWorkspaceInput.ts +21 -0
- package/src/commands/create-workspace/createWorkspaceCommand.tsx +34 -0
- package/src/commands/create-workspace/runCreateWorkspace.ts +49 -0
- package/src/commands/create-workspace.ts +4 -0
- package/src/commands/internals/packageNameToDirectory.ts +13 -0
- package/src/commands/internals.ts +1 -0
- package/src/commands/update-workspace/UpdateWorkspace.tsx +59 -0
- package/src/commands/update-workspace/runUpdateWorkspace.ts +36 -0
- package/src/commands/update-workspace/updateWorkspaceCommand.tsx +27 -0
- package/src/commands/update-workspace.ts +3 -0
- package/src/commands.ts +3 -0
- package/src/constants.ts +21 -0
- package/src/main.ts +3 -0
- package/src/modules.d.ts +1 -0
- package/src/run.ts +21 -0
- package/src/template/CarsonTemplate.ts +11 -0
- package/src/template/CarsonTemplateConfig.ts +12 -0
- package/src/template/TemplateAttributes.ts +16 -0
- package/src/template/TemplateData.ts +17 -0
- package/src/template/TemplateRender.ts +9 -0
- package/src/template/TemplateRenderSnapshot.ts +13 -0
- package/src/template/TemplateRenderSnapshots.ts +7 -0
- package/src/template/TemplateRenders.ts +3 -0
- package/src/template/applyTemplateRenders.ts +89 -0
- package/src/template/createFileUsingTemplateRender.ts +12 -0
- package/src/template/deleteFileUsingTemplateRender.ts +15 -0
- package/src/template/importCarsonTemplate.ts +13 -0
- package/src/template/insertUsingTemplateRender.ts +33 -0
- package/src/template/internals/merge.ts +44 -0
- package/src/template/internals/prettify.ts +24 -0
- package/src/template/internals/unmerge.ts +48 -0
- package/src/template/internals.ts +3 -0
- package/src/template/loadTemplateRenderSnapshots.ts +18 -0
- package/src/template/mergeFileUsingTemplateRender.ts +39 -0
- package/src/template/overwriteFileUsingTemplateRender.ts +12 -0
- package/src/template/parseTemplateId.ts +9 -0
- package/src/template/readCarsonTemplate.ts +46 -0
- package/src/template/renderTemplate.ts +30 -0
- package/src/template/resolveTemplateModule.ts +9 -0
- package/src/template/saveTemplateRenderSnapshots.ts +34 -0
- package/src/template/uninsertUsingTemplateRender.ts +36 -0
- package/src/template/unmergeFileUsingTemplateRender.ts +42 -0
- package/src/template.ts +20 -0
- package/src/workspace/Project.ts +246 -0
- package/src/workspace/ProjectConfig.ts +9 -0
- package/src/workspace/ProjectCreateOptions.ts +9 -0
- package/src/workspace/ProjectError.ts +15 -0
- package/src/workspace/ProjectOptions.ts +17 -0
- package/src/workspace/ProjectUpdateOptions.ts +3 -0
- package/src/workspace/Workspace.ts +553 -0
- package/src/workspace/WorkspaceConfig.ts +9 -0
- package/src/workspace/WorkspaceCreateOptions.ts +5 -0
- package/src/workspace/WorkspaceCreateProjectOptions.ts +6 -0
- package/src/workspace/WorkspaceDependencies.ts +196 -0
- package/src/workspace/WorkspaceError.ts +18 -0
- package/src/workspace/WorkspaceOptions.ts +29 -0
- package/src/workspace/WorkspaceOptionsProjectOptions.ts +9 -0
- package/src/workspace/WorkspacePackageJson.ts +3 -0
- package/src/workspace/WorkspaceProjectGlobs.ts +1 -0
- package/src/workspace/WorkspaceProjects.ts +3 -0
- package/src/workspace/WorkspaceRepository.ts +4 -0
- package/src/workspace/WorkspaceUpdateOptions.ts +3 -0
- package/src/workspace/internals/compareSemver.ts +35 -0
- package/src/workspace/internals/getPackageJsonWorkspaces.ts +11 -0
- package/src/workspace/internals/getRepositoryBranches.ts +25 -0
- package/src/workspace/internals/getRepositoryUrl.ts +23 -0
- package/src/workspace/internals.ts +4 -0
- package/src/workspace/saveProjectConfig.ts +23 -0
- package/src/workspace/saveWorkspaceConfig.ts +30 -0
- package/src/workspace.ts +10 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import semver from 'semver';
|
|
3
|
+
|
|
4
|
+
import {compareSemver} from './internals.js';
|
|
5
|
+
import {type Project} from './Project.js';
|
|
6
|
+
import {type Workspace} from './Workspace.js';
|
|
7
|
+
|
|
8
|
+
export interface WorkspaceDependencyProject {
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
exactVersion: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface WorkspaceDependency {
|
|
15
|
+
name: string;
|
|
16
|
+
versions: string[];
|
|
17
|
+
exactVersions: string[];
|
|
18
|
+
|
|
19
|
+
/** Associated project, if this dependency is actually a project in this workspace. */
|
|
20
|
+
project?: Project; // TODO: implement this
|
|
21
|
+
|
|
22
|
+
projects: WorkspaceDependencyProject[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface WorkspaceDependenciesGetVersionsOptions {
|
|
26
|
+
useExactVersions?: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface WorkspaceDependenciesFromWorkspaceOptions {
|
|
30
|
+
includeDevDependencies?: boolean;
|
|
31
|
+
includeOnlyDevDependencies?: boolean;
|
|
32
|
+
includeWorkspaceDependencies?: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class WorkspaceDependencies<M extends boolean = true> extends Array<WorkspaceDependency> {
|
|
36
|
+
workspace: Workspace<M>;
|
|
37
|
+
|
|
38
|
+
constructor(...args: [...WorkspaceDependency[], Workspace<M>]) {
|
|
39
|
+
super();
|
|
40
|
+
|
|
41
|
+
if (args.length === 1) {
|
|
42
|
+
[this.workspace] = args as [Workspace<M>];
|
|
43
|
+
} else {
|
|
44
|
+
let values = args.slice(0, -1) as WorkspaceDependency[];
|
|
45
|
+
let workspace = args.at(-1) as Workspace<M>;
|
|
46
|
+
|
|
47
|
+
this.push(...values);
|
|
48
|
+
|
|
49
|
+
this.workspace = workspace;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
override push(...newWorkspaceDependencies: WorkspaceDependency[]): number {
|
|
54
|
+
for (let newWorkspaceDependency of newWorkspaceDependencies) {
|
|
55
|
+
let doesExist = false;
|
|
56
|
+
|
|
57
|
+
for (let workspaceDependency of this) {
|
|
58
|
+
if (workspaceDependency.name === newWorkspaceDependency.name) {
|
|
59
|
+
doesExist = true;
|
|
60
|
+
|
|
61
|
+
workspaceDependency.versions = _.union(
|
|
62
|
+
workspaceDependency.versions,
|
|
63
|
+
newWorkspaceDependency.versions,
|
|
64
|
+
);
|
|
65
|
+
workspaceDependency.exactVersions = _.union(
|
|
66
|
+
workspaceDependency.exactVersions,
|
|
67
|
+
newWorkspaceDependency.exactVersions,
|
|
68
|
+
);
|
|
69
|
+
workspaceDependency.projects = _.unionWith(
|
|
70
|
+
workspaceDependency.projects,
|
|
71
|
+
newWorkspaceDependency.projects,
|
|
72
|
+
(a, b) => a.name === b.name,
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
workspaceDependency.versions.sort(compareSemver);
|
|
76
|
+
workspaceDependency.exactVersions.sort(compareSemver);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (!doesExist) {
|
|
81
|
+
super.push(newWorkspaceDependency);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return this.length;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// TODO: fix
|
|
89
|
+
// eslint-disable-next-line complexity -- TODO
|
|
90
|
+
static fromWorkspace<M extends boolean = true>(
|
|
91
|
+
workspace: Workspace<M>,
|
|
92
|
+
options?: WorkspaceDependenciesFromWorkspaceOptions,
|
|
93
|
+
) {
|
|
94
|
+
let workspaceDependencies: WorkspaceDependency[] = [];
|
|
95
|
+
|
|
96
|
+
if (options?.includeWorkspaceDependencies) {
|
|
97
|
+
for (let [dependencyName, dependencyVersion] of Object.entries({
|
|
98
|
+
...workspace.packageJson?.dependencies,
|
|
99
|
+
...workspace.packageJson?.devDependencies,
|
|
100
|
+
})) {
|
|
101
|
+
let exactDependencyVersion = semver.validRange(dependencyVersion)
|
|
102
|
+
? semver.minVersion(dependencyVersion)?.format() ??
|
|
103
|
+
semver.coerce(dependencyVersion)?.format() ??
|
|
104
|
+
dependencyVersion.trim()
|
|
105
|
+
: dependencyVersion.trim();
|
|
106
|
+
|
|
107
|
+
let workspaceDependency: WorkspaceDependency = {
|
|
108
|
+
name: dependencyName,
|
|
109
|
+
versions: [dependencyVersion],
|
|
110
|
+
exactVersions: [exactDependencyVersion],
|
|
111
|
+
projects: [],
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
workspaceDependencies.push(workspaceDependency);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
for (let project of workspace.projects) {
|
|
119
|
+
if (!options?.includeOnlyDevDependencies) {
|
|
120
|
+
for (let [dependencyName, dependencyVersion] of Object.entries(
|
|
121
|
+
project.packageJson.dependencies ?? {},
|
|
122
|
+
)) {
|
|
123
|
+
let exactDependencyVersion = semver.validRange(dependencyVersion)
|
|
124
|
+
? semver.minVersion(dependencyVersion)?.format() ??
|
|
125
|
+
semver.coerce(dependencyVersion)?.format() ??
|
|
126
|
+
dependencyVersion.trim()
|
|
127
|
+
: dependencyVersion.trim();
|
|
128
|
+
|
|
129
|
+
let workspaceDependency: WorkspaceDependency = {
|
|
130
|
+
name: dependencyName,
|
|
131
|
+
versions: [dependencyVersion],
|
|
132
|
+
exactVersions: [exactDependencyVersion],
|
|
133
|
+
projects: [],
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
if (project.name) {
|
|
137
|
+
workspaceDependency.projects = [
|
|
138
|
+
{
|
|
139
|
+
name: project.name,
|
|
140
|
+
version: dependencyVersion,
|
|
141
|
+
exactVersion: exactDependencyVersion,
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
workspaceDependencies.push(workspaceDependency);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (options?.includeDevDependencies || options?.includeOnlyDevDependencies) {
|
|
151
|
+
for (let [dependencyName, dependencyVersion] of Object.entries(
|
|
152
|
+
project.packageJson.devDependencies ?? {},
|
|
153
|
+
)) {
|
|
154
|
+
let exactDependencyVersion = semver.validRange(dependencyVersion)
|
|
155
|
+
? semver.minVersion(dependencyVersion)?.format() ??
|
|
156
|
+
semver.coerce(dependencyVersion)?.format() ??
|
|
157
|
+
dependencyVersion.trim()
|
|
158
|
+
: dependencyVersion.trim();
|
|
159
|
+
|
|
160
|
+
let workspaceDependency: WorkspaceDependency = {
|
|
161
|
+
name: dependencyName,
|
|
162
|
+
versions: [dependencyVersion],
|
|
163
|
+
exactVersions: [exactDependencyVersion],
|
|
164
|
+
projects: [],
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
if (project.name) {
|
|
168
|
+
workspaceDependency.projects = [
|
|
169
|
+
{
|
|
170
|
+
name: project.name,
|
|
171
|
+
version: dependencyVersion,
|
|
172
|
+
exactVersion: exactDependencyVersion,
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
workspaceDependencies.push(workspaceDependency);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return new this(...workspaceDependencies, workspace);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
getVersions(options?: WorkspaceDependenciesGetVersionsOptions) {
|
|
186
|
+
let versions: Record<string, string[]> = {};
|
|
187
|
+
|
|
188
|
+
for (let dependency of this) {
|
|
189
|
+
versions[dependency.name] = options?.useExactVersions
|
|
190
|
+
? dependency.exactVersions
|
|
191
|
+
: dependency.versions;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return versions;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {createCustomErrorWithData} from '@jakubmazanec/error';
|
|
2
|
+
import {type ZodIssue} from 'zod';
|
|
3
|
+
|
|
4
|
+
export const WorkspaceError = createCustomErrorWithData(
|
|
5
|
+
'WorkspaceError',
|
|
6
|
+
{
|
|
7
|
+
// MISSING_NAME_FIELD: 'No "name" field in file "{0}".',
|
|
8
|
+
INVALID_PACKAGE_JSON: 'Invalid package.json file "{0}".',
|
|
9
|
+
INVALID_WORKSPACE_CONFIG: 'Invalid workspace config file "{0}".',
|
|
10
|
+
NO_SUCH_WORKSPACE_PATH: 'Workspace path "{0}" doesn\'t exist.',
|
|
11
|
+
PATH_MISMATCH:
|
|
12
|
+
'In a single-project workspace, the workspace path must be the same as the project path.',
|
|
13
|
+
},
|
|
14
|
+
class WorkspaceErrorData {
|
|
15
|
+
path?: string;
|
|
16
|
+
zodIssues?: ZodIssue[];
|
|
17
|
+
},
|
|
18
|
+
);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {type PackageJson} from '@jakubmazanec/zod-utils';
|
|
2
|
+
|
|
3
|
+
import {type WorkspaceConfig} from './WorkspaceConfig.js';
|
|
4
|
+
import {type WorkspaceError} from './WorkspaceError.js';
|
|
5
|
+
import {type WorkspaceOptionsProjectOptions} from './WorkspaceOptionsProjectOptions.js';
|
|
6
|
+
import {type WorkspaceRepository} from './WorkspaceRepository.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* New workspace options.
|
|
10
|
+
*/
|
|
11
|
+
export type WorkspaceOptions<M extends boolean> = M extends true
|
|
12
|
+
? {
|
|
13
|
+
path: string;
|
|
14
|
+
isMultiProject?: M;
|
|
15
|
+
projectGlobs?: string[];
|
|
16
|
+
projects?: WorkspaceOptionsProjectOptions[];
|
|
17
|
+
config?: WorkspaceConfig;
|
|
18
|
+
packageJson?: PackageJson;
|
|
19
|
+
repository?: WorkspaceRepository;
|
|
20
|
+
errors?: Array<InstanceType<typeof WorkspaceError>>;
|
|
21
|
+
}
|
|
22
|
+
: {
|
|
23
|
+
path: string;
|
|
24
|
+
isMultiProject?: M;
|
|
25
|
+
projects?: [WorkspaceOptionsProjectOptions];
|
|
26
|
+
config?: WorkspaceConfig;
|
|
27
|
+
repository?: WorkspaceRepository;
|
|
28
|
+
errors?: Array<InstanceType<typeof WorkspaceError>>;
|
|
29
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type WorkspaceProjectGlobs<M extends boolean> = M extends true ? string[] : null;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Defines sort order between two SemVer strings.
|
|
5
|
+
*
|
|
6
|
+
* @param a The first SemVer string.
|
|
7
|
+
* @param b The second SemvEr string.
|
|
8
|
+
* @returns Number whose positivity indicates the relative order of the two elements.
|
|
9
|
+
*/
|
|
10
|
+
export function compareSemver(a: string, b: string) {
|
|
11
|
+
let firstSemver = semver.validRange(a)
|
|
12
|
+
? semver.minVersion(a)?.format() ?? semver.coerce(a)?.format() ?? '0.0.0'
|
|
13
|
+
: '0.0.0';
|
|
14
|
+
let secondSemver = semver.validRange(b)
|
|
15
|
+
? semver.minVersion(b)?.format() ?? semver.coerce(b)?.format() ?? '0.0.0'
|
|
16
|
+
: '0.0.0';
|
|
17
|
+
|
|
18
|
+
let comparison = semver.compare(firstSemver, secondSemver);
|
|
19
|
+
|
|
20
|
+
if (comparison === 0 && (a !== firstSemver || b !== secondSemver)) {
|
|
21
|
+
if (a !== firstSemver && b !== secondSemver) {
|
|
22
|
+
return b.localeCompare(a);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (a !== firstSemver) {
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (b !== secondSemver) {
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return comparison;
|
|
35
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type {PackageJson} from '@jakubmazanec/zod-utils';
|
|
2
|
+
|
|
3
|
+
export function getPackageJsonWorkspaces(packageJson: PackageJson) {
|
|
4
|
+
if (Array.isArray(packageJson.workspaces)) {
|
|
5
|
+
return packageJson.workspaces;
|
|
6
|
+
} else if (packageJson.workspaces?.packages) {
|
|
7
|
+
return packageJson.workspaces.packages;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {simpleGit} from 'simple-git';
|
|
2
|
+
|
|
3
|
+
const REMOTE_NAME_PREFIX_REGEXP = /^[^/]*\//iu;
|
|
4
|
+
|
|
5
|
+
export async function getRepositoryBranches(repositoryPath: string): Promise<string[] | undefined> {
|
|
6
|
+
let repositoryBranches: string[] | undefined;
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
let git = simpleGit({
|
|
10
|
+
baseDir: repositoryPath,
|
|
11
|
+
binary: 'git',
|
|
12
|
+
maxConcurrentProcesses: 1,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
let branchSummary = await git.branch(['-r']);
|
|
16
|
+
|
|
17
|
+
repositoryBranches = branchSummary.all.map((branch) =>
|
|
18
|
+
branch.replace(REMOTE_NAME_PREFIX_REGEXP, ''),
|
|
19
|
+
);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
// no-op
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return repositoryBranches;
|
|
25
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {simpleGit} from 'simple-git';
|
|
2
|
+
|
|
3
|
+
export async function getRepositoryUrl(repositoryPath: string): Promise<string | undefined> {
|
|
4
|
+
let repositoryUrl: string | undefined;
|
|
5
|
+
|
|
6
|
+
try {
|
|
7
|
+
// load git repo
|
|
8
|
+
let git = simpleGit({
|
|
9
|
+
baseDir: repositoryPath,
|
|
10
|
+
binary: 'git',
|
|
11
|
+
maxConcurrentProcesses: 1,
|
|
12
|
+
});
|
|
13
|
+
let {value} = await git.getConfig('remote.origin.url');
|
|
14
|
+
|
|
15
|
+
if (value) {
|
|
16
|
+
repositoryUrl = value;
|
|
17
|
+
}
|
|
18
|
+
} catch {
|
|
19
|
+
// no-op
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return repositoryUrl;
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
import {type ProjectConfig} from './ProjectConfig.js';
|
|
5
|
+
import {CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME} from '../constants.js';
|
|
6
|
+
import {prettify} from '../template/internals.js';
|
|
7
|
+
|
|
8
|
+
export type SaveProjectConfigOptions = {
|
|
9
|
+
projectPath: string;
|
|
10
|
+
projectConfig: ProjectConfig;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export async function saveProjectConfig({projectPath, projectConfig}: SaveProjectConfigOptions) {
|
|
14
|
+
await fs.ensureDir(path.join(projectPath, CARSON_CONFIG_DIRECTORY));
|
|
15
|
+
|
|
16
|
+
let projectConfigPath = path.join(projectPath, CARSON_CONFIG_DIRECTORY, PROJECT_CONFIG_FILENAME);
|
|
17
|
+
|
|
18
|
+
await fs.writeFile(
|
|
19
|
+
projectConfigPath,
|
|
20
|
+
await prettify(JSON.stringify(projectConfig), projectConfigPath),
|
|
21
|
+
{encoding: 'utf8'},
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
import {type WorkspaceConfig} from './WorkspaceConfig.js';
|
|
5
|
+
import {CARSON_CONFIG_DIRECTORY, WORKSPACE_CONFIG_FILENAME} from '../constants.js';
|
|
6
|
+
import {prettify} from '../template/internals.js';
|
|
7
|
+
|
|
8
|
+
export type SaveWorkspaceConfigOptions = {
|
|
9
|
+
workspacePath: string;
|
|
10
|
+
workspaceConfig: WorkspaceConfig;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export async function saveWorkspaceConfig({
|
|
14
|
+
workspacePath,
|
|
15
|
+
workspaceConfig,
|
|
16
|
+
}: SaveWorkspaceConfigOptions) {
|
|
17
|
+
await fs.ensureDir(path.join(workspacePath, CARSON_CONFIG_DIRECTORY));
|
|
18
|
+
|
|
19
|
+
let workspaceConfigPath = path.join(
|
|
20
|
+
workspacePath,
|
|
21
|
+
CARSON_CONFIG_DIRECTORY,
|
|
22
|
+
WORKSPACE_CONFIG_FILENAME,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
await fs.writeFile(
|
|
26
|
+
workspaceConfigPath,
|
|
27
|
+
await prettify(JSON.stringify(workspaceConfig), workspaceConfigPath),
|
|
28
|
+
{encoding: 'utf8'},
|
|
29
|
+
);
|
|
30
|
+
}
|
package/src/workspace.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './workspace/Project.js';
|
|
2
|
+
export * from './workspace/ProjectConfig.js';
|
|
3
|
+
export * from './workspace/ProjectError.js';
|
|
4
|
+
export * from './workspace/saveProjectConfig.js';
|
|
5
|
+
export * from './workspace/saveWorkspaceConfig.js';
|
|
6
|
+
export * from './workspace/Workspace.js';
|
|
7
|
+
export * from './workspace/WorkspaceConfig.js';
|
|
8
|
+
export * from './workspace/WorkspaceDependencies.js';
|
|
9
|
+
export * from './workspace/WorkspaceError.js';
|
|
10
|
+
export * from './workspace/WorkspaceRepository.js';
|