rman 1.3.0 → 2.0.0-beta.3
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 -31
- package/builtins/platforms/node/augmentation/rmanrc.augmentation.d.ts +83 -0
- package/builtins/platforms/node/augmentation/system-info.augmentation.d.ts +26 -0
- package/builtins/platforms/node/augmentation/system-info.augmentation.js +79 -0
- package/builtins/platforms/node/commands/ci.command.d.ts +133 -0
- package/builtins/platforms/node/commands/ci.command.js +60 -0
- package/builtins/platforms/node/commands/clean.command.d.ts +185 -0
- package/builtins/platforms/node/commands/clean.command.js +74 -0
- package/builtins/platforms/node/index.d.ts +8 -0
- package/builtins/platforms/node/index.js +8 -0
- package/builtins/platforms/node/node-config.interface.d.ts +76 -0
- package/builtins/platforms/node/node-config.interface.js +7 -0
- package/builtins/platforms/node/node-manifest.provider.d.ts +68 -0
- package/builtins/platforms/node/node-manifest.provider.js +125 -0
- package/builtins/platforms/node/node.platform.d.ts +53 -0
- package/builtins/platforms/node/node.platform.js +134 -0
- package/builtins/platforms/node/services/ci.service.d.ts +47 -0
- package/builtins/platforms/node/services/ci.service.js +213 -0
- package/builtins/platforms/node/services/clean.service.d.ts +53 -0
- package/builtins/platforms/node/services/clean.service.js +237 -0
- package/builtins/platforms/node/services/publish.service.d.ts +114 -0
- package/builtins/platforms/node/services/publish.service.js +371 -0
- package/builtins/platforms/node/services/version-plan.service.d.ts +44 -0
- package/builtins/platforms/node/services/version-plan.service.js +58 -0
- package/builtins/platforms/node/utils/workspace-range.d.ts +26 -0
- package/builtins/platforms/node/utils/workspace-range.js +28 -0
- package/builtins/presets/index.d.ts +15 -0
- package/builtins/presets/index.js +57 -0
- package/builtins/presets/node.d.ts +16 -0
- package/builtins/presets/node.js +57 -0
- package/{services → builtins/publish-targets/docker}/docker-publish.service.d.ts +52 -31
- package/{services → builtins/publish-targets/docker}/docker-publish.service.js +49 -26
- package/builtins/publish-targets/docker/docker.target.d.ts +54 -0
- package/builtins/publish-targets/docker/docker.target.js +40 -0
- package/builtins/publish-targets/docker/index.d.ts +2 -0
- package/builtins/publish-targets/docker/index.js +2 -0
- package/builtins/publish-targets/npm/index.d.ts +2 -0
- package/builtins/publish-targets/npm/index.js +2 -0
- package/builtins/publish-targets/npm/npm-publish-target.d.ts +73 -0
- package/builtins/publish-targets/npm/npm-publish-target.js +95 -0
- package/builtins/publish-targets/npm/npm-view.d.ts +48 -0
- package/builtins/publish-targets/npm/npm-view.js +71 -0
- package/cli.d.ts +8 -0
- package/cli.js +228 -93
- package/commands/build.command.d.ts +177 -3
- package/commands/build.command.js +20 -10
- package/commands/changelog.command.d.ts +296 -3
- package/commands/changelog.command.js +127 -43
- package/commands/config.command.d.ts +44 -3
- package/commands/config.command.js +53 -24
- package/commands/diff.command.d.ts +37 -3
- package/commands/diff.command.js +25 -16
- package/commands/exec.command.d.ts +193 -3
- package/commands/exec.command.js +60 -58
- package/commands/github-release.command.d.ts +154 -3
- package/commands/github-release.command.js +67 -37
- package/commands/import.command.d.ts +36 -3
- package/commands/import.command.js +28 -20
- package/commands/info.command.d.ts +35 -7
- package/commands/info.command.js +36 -30
- package/commands/lint.command.d.ts +176 -0
- package/commands/lint.command.js +34 -0
- package/commands/list.command.d.ts +163 -3
- package/commands/list.command.js +109 -71
- package/commands/publish.command.d.ts +231 -0
- package/commands/publish.command.js +304 -0
- package/commands/run.command.d.ts +186 -6
- package/commands/run.command.js +26 -72
- package/commands/test.command.d.ts +173 -3
- package/commands/test.command.js +16 -10
- package/commands/version.command.d.ts +330 -3
- package/commands/version.command.js +292 -78
- package/commands.d.ts +32 -0
- package/commands.js +28 -0
- package/constants.js +1 -1
- package/core/application.d.ts +116 -0
- package/core/application.js +160 -0
- package/core/classes/package.d.ts +219 -0
- package/core/classes/package.js +214 -0
- package/core/classes/registry.d.ts +30 -0
- package/core/classes/registry.js +47 -0
- package/core/{repository.d.ts → classes/repository.d.ts} +69 -20
- package/core/{repository.js → classes/repository.js} +195 -75
- package/core/classes/service.d.ts +49 -0
- package/core/classes/service.js +40 -0
- package/core/{version-scheme.d.ts → classes/version-scheme.d.ts} +23 -1
- package/core/{version-scheme.js → classes/version-scheme.js} +29 -1
- package/core/classes/workspace.d.ts +275 -0
- package/core/classes/workspace.js +537 -0
- package/core/command-builder.d.ts +14 -0
- package/core/command-builder.js +94 -0
- package/core/config/config-file-scope.d.ts +107 -0
- package/core/config/config-file-scope.js +226 -0
- package/core/config/config-interpolator.d.ts +164 -0
- package/core/config/config-interpolator.js +577 -0
- package/core/config/config-paths.d.ts +65 -0
- package/core/config/config-paths.js +78 -0
- package/core/config/config-reader.d.ts +192 -0
- package/core/config/config-reader.js +727 -0
- package/core/{merge-config.d.ts → config/merge-config.d.ts} +33 -34
- package/core/config/merge-config.js +260 -0
- package/core/{resolve-target.d.ts → config/resolve-config-target.d.ts} +1 -1
- package/core/{resolve-target.js → config/resolve-config-target.js} +1 -1
- package/core/{custom-command.d.ts → interfaces/custom-command.d.ts} +46 -10
- package/core/{custom-command.js → interfaces/custom-command.js} +44 -17
- package/core/{manifest.d.ts → interfaces/manifest.d.ts} +49 -27
- package/core/interfaces/manifest.js +132 -0
- package/core/interfaces/plugin.d.ts +174 -0
- package/core/interfaces/plugin.js +124 -0
- package/core/interfaces/publish-target.d.ts +136 -0
- package/core/interfaces/publish-target.js +43 -0
- package/core/{run-step.d.ts → interfaces/run-step.d.ts} +4 -4
- package/core/interfaces/run-step.js +1 -0
- package/core/plugin-loader.d.ts +25 -0
- package/core/plugin-loader.js +53 -0
- package/index.d.ts +122 -24
- package/index.js +66 -16
- package/interfaces/config-scope.interface.d.ts +223 -0
- package/interfaces/config-scope.interface.js +1 -0
- package/interfaces/rman-config.interface.d.ts +821 -203
- package/interfaces/rman-config.interface.js +78 -1
- package/package.json +3 -1
- package/services/change-hash.service.d.ts +42 -8
- package/services/change-hash.service.js +92 -13
- package/services/changelog.service.d.ts +91 -52
- package/services/changelog.service.js +460 -74
- package/services/config-service.d.ts +8 -0
- package/services/config-service.js +3 -0
- package/services/exec.service.d.ts +23 -12
- package/services/exec.service.js +14 -9
- package/services/github-release.service.d.ts +45 -34
- package/services/github-release.service.js +15 -12
- package/services/import.service.d.ts +25 -14
- package/services/import.service.js +9 -5
- package/services/list.service.d.ts +67 -13
- package/services/list.service.js +62 -15
- package/services/run.service.d.ts +35 -22
- package/services/run.service.js +316 -233
- package/services/system-info.d.ts +1 -1
- package/services/version-plan.service.d.ts +35 -8
- package/services/version-plan.service.js +96 -36
- package/services/version.service.d.ts +34 -14
- package/services/version.service.js +35 -16
- package/services.d.ts +1 -1
- package/services.js +1 -1
- package/utils/bin-path.d.ts +6 -7
- package/utils/bin-path.js +7 -18
- package/utils/branch-guard.d.ts +30 -1
- package/utils/branch-guard.js +31 -0
- package/utils/color-yaml.d.ts +8 -0
- package/utils/color-yaml.js +86 -0
- package/utils/exec.d.ts +10 -0
- package/utils/exec.js +1 -1
- package/utils/git.d.ts +26 -0
- package/utils/git.js +65 -0
- package/utils/logger.d.ts +2 -2
- package/utils/logger.js +1 -1
- package/utils/package-filter.d.ts +135 -8
- package/utils/package-filter.js +204 -16
- package/utils/printable-config.d.ts +9 -1
- package/utils/printable-config.js +46 -1
- package/utils/progress-panel.d.ts +9 -0
- package/utils/progress-panel.js +23 -1
- package/utils/release-version.d.ts +1 -1
- package/utils/run-bin.d.ts +10 -0
- package/utils/run-bin.js +1 -1
- package/utils/run-options.d.ts +97 -0
- package/utils/run-options.js +81 -0
- package/utils/version-group.d.ts +31 -0
- package/utils/version-group.js +43 -0
- package/utils/version-stamp.d.ts +1 -1
- package/utils/version-stamp.js +1 -1
- package/commands/changed.command.d.ts +0 -3
- package/commands/changed.command.js +0 -29
- package/core/config.d.ts +0 -409
- package/core/config.js +0 -939
- package/core/extends-config.d.ts +0 -27
- package/core/extends-config.js +0 -89
- package/core/manifest.js +0 -150
- package/core/merge-config.js +0 -219
- package/core/package.d.ts +0 -83
- package/core/package.js +0 -106
- package/core/plugin.d.ts +0 -112
- package/core/plugin.js +0 -189
- package/core/workspace.d.ts +0 -68
- package/core/workspace.js +0 -83
- /package/{core/run-step.js → builtins/platforms/node/augmentation/rmanrc.augmentation.js} +0 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { type RmanConfig } from '../interfaces/rman-config.interface.js';
|
|
2
|
+
declare const COMMAND: "lint";
|
|
3
|
+
declare const config: {
|
|
4
|
+
parallel: {
|
|
5
|
+
target: "cli";
|
|
6
|
+
describe: string;
|
|
7
|
+
coerce: (v: unknown) => boolean | number | undefined;
|
|
8
|
+
};
|
|
9
|
+
bail: {
|
|
10
|
+
target: "cli";
|
|
11
|
+
describe: string;
|
|
12
|
+
type: "boolean";
|
|
13
|
+
};
|
|
14
|
+
topo: {
|
|
15
|
+
target: "cli";
|
|
16
|
+
describe: string;
|
|
17
|
+
type: "boolean";
|
|
18
|
+
};
|
|
19
|
+
progress: {
|
|
20
|
+
target: "cli";
|
|
21
|
+
describe: string;
|
|
22
|
+
type: "boolean";
|
|
23
|
+
};
|
|
24
|
+
changed: {
|
|
25
|
+
target: "cli";
|
|
26
|
+
alias: string;
|
|
27
|
+
describe: string;
|
|
28
|
+
type: "boolean";
|
|
29
|
+
};
|
|
30
|
+
changedSince: {
|
|
31
|
+
target: "cli";
|
|
32
|
+
cliName: string;
|
|
33
|
+
describe: string;
|
|
34
|
+
type: "string";
|
|
35
|
+
conflicts: string;
|
|
36
|
+
};
|
|
37
|
+
fromRoot: {
|
|
38
|
+
target: "cli";
|
|
39
|
+
cliName: string;
|
|
40
|
+
alias: string;
|
|
41
|
+
describe: string;
|
|
42
|
+
type: "boolean";
|
|
43
|
+
};
|
|
44
|
+
allowBranch: {
|
|
45
|
+
target: "cli";
|
|
46
|
+
cliName: string;
|
|
47
|
+
describe: string;
|
|
48
|
+
type: "string";
|
|
49
|
+
};
|
|
50
|
+
ignoreBranch: {
|
|
51
|
+
target: "cli";
|
|
52
|
+
cliName: string;
|
|
53
|
+
describe: string;
|
|
54
|
+
type: "string";
|
|
55
|
+
};
|
|
56
|
+
scope: {
|
|
57
|
+
target: "cli";
|
|
58
|
+
describe: string;
|
|
59
|
+
type: "string";
|
|
60
|
+
};
|
|
61
|
+
ignore: {
|
|
62
|
+
target: "cli";
|
|
63
|
+
describe: string;
|
|
64
|
+
type: "string";
|
|
65
|
+
};
|
|
66
|
+
platform: {
|
|
67
|
+
target: "cli";
|
|
68
|
+
describe: string;
|
|
69
|
+
type: "string";
|
|
70
|
+
};
|
|
71
|
+
deps: {
|
|
72
|
+
target: "cli";
|
|
73
|
+
describe: string;
|
|
74
|
+
type: "boolean";
|
|
75
|
+
};
|
|
76
|
+
dependents: {
|
|
77
|
+
target: "cli";
|
|
78
|
+
describe: string;
|
|
79
|
+
type: "boolean";
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
type Args = RmanConfig.ArgsOf<typeof config, typeof COMMAND>;
|
|
83
|
+
/**
|
|
84
|
+
* `rman lint` - an alias for `rman run lint`, the third of the trio beside `build` and `test`.
|
|
85
|
+
*/
|
|
86
|
+
declare const lintCommand: (app: import("../index.js").RmanApplication) => {
|
|
87
|
+
command: "lint";
|
|
88
|
+
describe: string;
|
|
89
|
+
/** Read, not owned - see the note above. */
|
|
90
|
+
configKeys: string[];
|
|
91
|
+
config: {
|
|
92
|
+
parallel: {
|
|
93
|
+
target: "cli";
|
|
94
|
+
describe: string;
|
|
95
|
+
coerce: (v: unknown) => boolean | number | undefined;
|
|
96
|
+
};
|
|
97
|
+
bail: {
|
|
98
|
+
target: "cli";
|
|
99
|
+
describe: string;
|
|
100
|
+
type: "boolean";
|
|
101
|
+
};
|
|
102
|
+
topo: {
|
|
103
|
+
target: "cli";
|
|
104
|
+
describe: string;
|
|
105
|
+
type: "boolean";
|
|
106
|
+
};
|
|
107
|
+
progress: {
|
|
108
|
+
target: "cli";
|
|
109
|
+
describe: string;
|
|
110
|
+
type: "boolean";
|
|
111
|
+
};
|
|
112
|
+
changed: {
|
|
113
|
+
target: "cli";
|
|
114
|
+
alias: string;
|
|
115
|
+
describe: string;
|
|
116
|
+
type: "boolean";
|
|
117
|
+
};
|
|
118
|
+
changedSince: {
|
|
119
|
+
target: "cli";
|
|
120
|
+
cliName: string;
|
|
121
|
+
describe: string;
|
|
122
|
+
type: "string";
|
|
123
|
+
conflicts: string;
|
|
124
|
+
};
|
|
125
|
+
fromRoot: {
|
|
126
|
+
target: "cli";
|
|
127
|
+
cliName: string;
|
|
128
|
+
alias: string;
|
|
129
|
+
describe: string;
|
|
130
|
+
type: "boolean";
|
|
131
|
+
};
|
|
132
|
+
allowBranch: {
|
|
133
|
+
target: "cli";
|
|
134
|
+
cliName: string;
|
|
135
|
+
describe: string;
|
|
136
|
+
type: "string";
|
|
137
|
+
};
|
|
138
|
+
ignoreBranch: {
|
|
139
|
+
target: "cli";
|
|
140
|
+
cliName: string;
|
|
141
|
+
describe: string;
|
|
142
|
+
type: "string";
|
|
143
|
+
};
|
|
144
|
+
scope: {
|
|
145
|
+
target: "cli";
|
|
146
|
+
describe: string;
|
|
147
|
+
type: "string";
|
|
148
|
+
};
|
|
149
|
+
ignore: {
|
|
150
|
+
target: "cli";
|
|
151
|
+
describe: string;
|
|
152
|
+
type: "string";
|
|
153
|
+
};
|
|
154
|
+
platform: {
|
|
155
|
+
target: "cli";
|
|
156
|
+
describe: string;
|
|
157
|
+
type: "string";
|
|
158
|
+
};
|
|
159
|
+
deps: {
|
|
160
|
+
target: "cli";
|
|
161
|
+
describe: string;
|
|
162
|
+
type: "boolean";
|
|
163
|
+
};
|
|
164
|
+
dependents: {
|
|
165
|
+
target: "cli";
|
|
166
|
+
describe: string;
|
|
167
|
+
type: "boolean";
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
examples: {
|
|
171
|
+
command: string;
|
|
172
|
+
description: string;
|
|
173
|
+
}[];
|
|
174
|
+
handler: (args: Args) => Promise<void>;
|
|
175
|
+
};
|
|
176
|
+
export default lintCommand;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { registerCommand } from '../interfaces/rman-config.interface.js';
|
|
2
|
+
import { assertAllowedBranch, readBranchGuardOptions } from '../utils/branch-guard.js';
|
|
3
|
+
import { readRunOptions, runOptions } from '../utils/run-options.js';
|
|
4
|
+
const COMMAND = 'lint';
|
|
5
|
+
const config = runOptions;
|
|
6
|
+
/**
|
|
7
|
+
* `rman lint` - an alias for `rman run lint`, the third of the trio beside `build` and `test`.
|
|
8
|
+
*/
|
|
9
|
+
/* **Core, not the `node` preset, and the test is what the command *knows*.** It knows a script
|
|
10
|
+
* name and nothing else: a Cargo repository declaring `lint: 'cargo clippy'` and a Go one
|
|
11
|
+
* declaring `golangci-lint run` are served by exactly this file. That is the line `clean` is on the
|
|
12
|
+
* other side of - everything `clean` knows how to delete is a TypeScript fact - and it is why
|
|
13
|
+
* `build` and `test` are here too.
|
|
14
|
+
*
|
|
15
|
+
* **It owns no config key**, for the reason `build` documents: `lint` is `run lint` under another
|
|
16
|
+
* name, so its settings are `run.lint`, which belongs to `run`. Two commands cannot contribute
|
|
17
|
+
* under one top-level key - interface merging is not a deep merge - and these three never needed
|
|
18
|
+
* to. */
|
|
19
|
+
const lintCommand = registerCommand(app => {
|
|
20
|
+
const repository = app.repository;
|
|
21
|
+
return {
|
|
22
|
+
command: COMMAND,
|
|
23
|
+
describe: 'Alias for "run lint"',
|
|
24
|
+
/** Read, not owned - see the note above. */
|
|
25
|
+
configKeys: ['run.lint'],
|
|
26
|
+
config,
|
|
27
|
+
examples: [{ command: '$0 lint', description: '# Lints packages' }],
|
|
28
|
+
handler: async (args) => {
|
|
29
|
+
await assertAllowedBranch(repository, readBranchGuardOptions(args));
|
|
30
|
+
await app.getService('run').runScript('lint', { ...readRunOptions(args), commandName: 'lint' });
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
export default lintCommand;
|
|
@@ -1,3 +1,163 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { type RmanConfig } from '../interfaces/rman-config.interface.js';
|
|
2
|
+
/** `[options...]` is yargs-meaningless - its variadic marker is two dots, and this command declares
|
|
3
|
+
* no positional for it. Left as it is rather than fixed in passing: dropping it makes
|
|
4
|
+
* `rman list foo` start failing, which is a behaviour change and belongs in its own commit. */
|
|
5
|
+
declare const COMMAND: "list [options...]";
|
|
6
|
+
declare const config: {
|
|
7
|
+
short: {
|
|
8
|
+
target: "cli";
|
|
9
|
+
alias: string;
|
|
10
|
+
describe: string;
|
|
11
|
+
type: "boolean";
|
|
12
|
+
};
|
|
13
|
+
parseable: {
|
|
14
|
+
target: "cli";
|
|
15
|
+
alias: string;
|
|
16
|
+
describe: string;
|
|
17
|
+
type: "boolean";
|
|
18
|
+
};
|
|
19
|
+
toposort: {
|
|
20
|
+
target: "cli";
|
|
21
|
+
alias: string;
|
|
22
|
+
describe: string;
|
|
23
|
+
type: "boolean";
|
|
24
|
+
};
|
|
25
|
+
graph: {
|
|
26
|
+
target: "cli";
|
|
27
|
+
alias: string;
|
|
28
|
+
describe: string;
|
|
29
|
+
type: "boolean";
|
|
30
|
+
/** Declared on the option instead of as separate `.conflicts()` calls - what a flag is and what
|
|
31
|
+
* it cannot be combined with end up in one place. */
|
|
32
|
+
conflicts: string[];
|
|
33
|
+
};
|
|
34
|
+
json: {
|
|
35
|
+
target: "cli";
|
|
36
|
+
alias: string;
|
|
37
|
+
describe: string;
|
|
38
|
+
type: "boolean";
|
|
39
|
+
};
|
|
40
|
+
changed: {
|
|
41
|
+
target: "cli";
|
|
42
|
+
alias: string;
|
|
43
|
+
describe: string;
|
|
44
|
+
type: "boolean";
|
|
45
|
+
};
|
|
46
|
+
changedSince: {
|
|
47
|
+
target: "cli";
|
|
48
|
+
cliName: string;
|
|
49
|
+
describe: string;
|
|
50
|
+
type: "string";
|
|
51
|
+
conflicts: string;
|
|
52
|
+
};
|
|
53
|
+
scope: {
|
|
54
|
+
target: "cli";
|
|
55
|
+
describe: string;
|
|
56
|
+
type: "string";
|
|
57
|
+
};
|
|
58
|
+
ignore: {
|
|
59
|
+
target: "cli";
|
|
60
|
+
describe: string;
|
|
61
|
+
type: "string";
|
|
62
|
+
};
|
|
63
|
+
platform: {
|
|
64
|
+
target: "cli";
|
|
65
|
+
describe: string;
|
|
66
|
+
type: "string";
|
|
67
|
+
};
|
|
68
|
+
deps: {
|
|
69
|
+
target: "cli";
|
|
70
|
+
describe: string;
|
|
71
|
+
type: "boolean";
|
|
72
|
+
};
|
|
73
|
+
dependents: {
|
|
74
|
+
target: "cli";
|
|
75
|
+
describe: string;
|
|
76
|
+
type: "boolean";
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
type Args = RmanConfig.ArgsOf<typeof config, typeof COMMAND>;
|
|
80
|
+
declare const listCommand: (app: import("../index.js").RmanApplication) => {
|
|
81
|
+
command: "list [options...]";
|
|
82
|
+
aliases: string[];
|
|
83
|
+
describe: string;
|
|
84
|
+
config: {
|
|
85
|
+
short: {
|
|
86
|
+
target: "cli";
|
|
87
|
+
alias: string;
|
|
88
|
+
describe: string;
|
|
89
|
+
type: "boolean";
|
|
90
|
+
};
|
|
91
|
+
parseable: {
|
|
92
|
+
target: "cli";
|
|
93
|
+
alias: string;
|
|
94
|
+
describe: string;
|
|
95
|
+
type: "boolean";
|
|
96
|
+
};
|
|
97
|
+
toposort: {
|
|
98
|
+
target: "cli";
|
|
99
|
+
alias: string;
|
|
100
|
+
describe: string;
|
|
101
|
+
type: "boolean";
|
|
102
|
+
};
|
|
103
|
+
graph: {
|
|
104
|
+
target: "cli";
|
|
105
|
+
alias: string;
|
|
106
|
+
describe: string;
|
|
107
|
+
type: "boolean";
|
|
108
|
+
/** Declared on the option instead of as separate `.conflicts()` calls - what a flag is and what
|
|
109
|
+
* it cannot be combined with end up in one place. */
|
|
110
|
+
conflicts: string[];
|
|
111
|
+
};
|
|
112
|
+
json: {
|
|
113
|
+
target: "cli";
|
|
114
|
+
alias: string;
|
|
115
|
+
describe: string;
|
|
116
|
+
type: "boolean";
|
|
117
|
+
};
|
|
118
|
+
changed: {
|
|
119
|
+
target: "cli";
|
|
120
|
+
alias: string;
|
|
121
|
+
describe: string;
|
|
122
|
+
type: "boolean";
|
|
123
|
+
};
|
|
124
|
+
changedSince: {
|
|
125
|
+
target: "cli";
|
|
126
|
+
cliName: string;
|
|
127
|
+
describe: string;
|
|
128
|
+
type: "string";
|
|
129
|
+
conflicts: string;
|
|
130
|
+
};
|
|
131
|
+
scope: {
|
|
132
|
+
target: "cli";
|
|
133
|
+
describe: string;
|
|
134
|
+
type: "string";
|
|
135
|
+
};
|
|
136
|
+
ignore: {
|
|
137
|
+
target: "cli";
|
|
138
|
+
describe: string;
|
|
139
|
+
type: "string";
|
|
140
|
+
};
|
|
141
|
+
platform: {
|
|
142
|
+
target: "cli";
|
|
143
|
+
describe: string;
|
|
144
|
+
type: "string";
|
|
145
|
+
};
|
|
146
|
+
deps: {
|
|
147
|
+
target: "cli";
|
|
148
|
+
describe: string;
|
|
149
|
+
type: "boolean";
|
|
150
|
+
};
|
|
151
|
+
dependents: {
|
|
152
|
+
target: "cli";
|
|
153
|
+
describe: string;
|
|
154
|
+
type: "boolean";
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
examples: {
|
|
158
|
+
command: string;
|
|
159
|
+
description: string;
|
|
160
|
+
}[];
|
|
161
|
+
handler: (args: Args) => Promise<void>;
|
|
162
|
+
};
|
|
163
|
+
export default listCommand;
|
package/commands/list.command.js
CHANGED
|
@@ -1,7 +1,91 @@
|
|
|
1
1
|
import colors from 'ansi-colors';
|
|
2
2
|
import EasyTable from 'easy-table';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { registerCommand } from '../interfaces/rman-config.interface.js';
|
|
4
|
+
import { packageFilterOptions, readPackageFilterOptions } from '../utils/package-filter.js';
|
|
5
|
+
/** `[options...]` is yargs-meaningless - its variadic marker is two dots, and this command declares
|
|
6
|
+
* no positional for it. Left as it is rather than fixed in passing: dropping it makes
|
|
7
|
+
* `rman list foo` start failing, which is a behaviour change and belongs in its own commit. */
|
|
8
|
+
const COMMAND = 'list [options...]';
|
|
9
|
+
const config = {
|
|
10
|
+
...packageFilterOptions,
|
|
11
|
+
short: { target: 'cli', alias: 's', describe: 'Do not show extended information', type: 'boolean' },
|
|
12
|
+
parseable: { target: 'cli', alias: 'p', describe: 'Show parseable output', type: 'boolean' },
|
|
13
|
+
toposort: {
|
|
14
|
+
target: 'cli',
|
|
15
|
+
alias: 't',
|
|
16
|
+
describe: 'Sort packages in topological order (dependencies before dependents) instead of lexical by directory',
|
|
17
|
+
type: 'boolean',
|
|
18
|
+
},
|
|
19
|
+
graph: {
|
|
20
|
+
target: 'cli',
|
|
21
|
+
alias: 'g',
|
|
22
|
+
describe: 'Show dependency graph as a JSON-formatted adjacency list',
|
|
23
|
+
type: 'boolean',
|
|
24
|
+
/** Declared on the option instead of as separate `.conflicts()` calls - what a flag is and what
|
|
25
|
+
* it cannot be combined with end up in one place. */
|
|
26
|
+
conflicts: ['parseable', 'json'],
|
|
27
|
+
},
|
|
28
|
+
json: { target: 'cli', alias: 'j', describe: 'Show output in JSON format', type: 'boolean' },
|
|
29
|
+
changed: {
|
|
30
|
+
target: 'cli',
|
|
31
|
+
alias: 'c',
|
|
32
|
+
describe: 'Only list packages you have touched but not pushed - uncommitted, or committed and not yet on the upstream branch. Not a release question; see "version --json" for that',
|
|
33
|
+
type: 'boolean',
|
|
34
|
+
},
|
|
35
|
+
changedSince: {
|
|
36
|
+
target: 'cli',
|
|
37
|
+
cliName: 'changed-since',
|
|
38
|
+
describe: 'Only list packages that have changed since the given git commit/hash',
|
|
39
|
+
type: 'string',
|
|
40
|
+
conflicts: 'changed',
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const listCommand = registerCommand(app => {
|
|
44
|
+
return {
|
|
45
|
+
command: COMMAND,
|
|
46
|
+
aliases: ['ls'],
|
|
47
|
+
describe: 'Lists packages in repository',
|
|
48
|
+
config,
|
|
49
|
+
examples: [
|
|
50
|
+
{ command: '$0 list', description: '# List all packages' },
|
|
51
|
+
{ command: '$0 list --json', description: '# List all packages in JSON format' },
|
|
52
|
+
],
|
|
53
|
+
handler: async (args) => {
|
|
54
|
+
/**
|
|
55
|
+
* **Only the table asks for the root**, and that is why the option exists rather than the
|
|
56
|
+
* service always including it. The table draws a tree, which needs the row its members are
|
|
57
|
+
* nested under; the other four forms are the inventory a script parses, and the inventory is
|
|
58
|
+
* the workspace members - which is also what the count line reports.
|
|
59
|
+
*/
|
|
60
|
+
const table = !args.graph && !args.json && !args.parseable && !args.short;
|
|
61
|
+
const items = await app.getService('list').getPackages({
|
|
62
|
+
...readPackageFilterOptions(args),
|
|
63
|
+
toposort: args.toposort,
|
|
64
|
+
changed: args.changed,
|
|
65
|
+
changedSince: args.changedSince,
|
|
66
|
+
includeRoot: table,
|
|
67
|
+
});
|
|
68
|
+
if (args.graph)
|
|
69
|
+
printGraph(items);
|
|
70
|
+
else if (args.json)
|
|
71
|
+
console.log(JSON.stringify(items, undefined, 2));
|
|
72
|
+
else if (args.parseable)
|
|
73
|
+
printParseable(items);
|
|
74
|
+
else if (args.short)
|
|
75
|
+
for (const it of items)
|
|
76
|
+
console.log(it.name);
|
|
77
|
+
/**
|
|
78
|
+
* **Whether a root row was added is asked here, not inferred from the rows.** `isRoot` is
|
|
79
|
+
* true of the one package in a *single-package* repository too - it genuinely is the root -
|
|
80
|
+
* so counting rows that are not the root reported `0 Package(s) found` there (measured). The
|
|
81
|
+
* condition is the same one the service applies, and it is one line.
|
|
82
|
+
*/
|
|
83
|
+
else
|
|
84
|
+
printTable(items, table && app.repository.monorepo);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
export default listCommand;
|
|
5
89
|
function statusLabel(status) {
|
|
6
90
|
switch (status) {
|
|
7
91
|
case 'dirty':
|
|
@@ -14,11 +98,31 @@ function statusLabel(status) {
|
|
|
14
98
|
return '';
|
|
15
99
|
}
|
|
16
100
|
}
|
|
17
|
-
|
|
101
|
+
/**
|
|
102
|
+
* **The tree, as a table**: the root first, then each package indented by how far below it sits.
|
|
103
|
+
*
|
|
104
|
+
* Indentation rather than box-drawing characters, which was the cheaper answer to the same
|
|
105
|
+
* question and stays legible when the output is pasted somewhere without a monospace font, copied
|
|
106
|
+
* into a `--scope` argument, or read by eye for the one name someone is looking for. The nesting is
|
|
107
|
+
* `Item.depth`, a fact about the package - so `--toposort` reorders the rows and leaves each one's
|
|
108
|
+
* indentation telling the truth about where it lives.
|
|
109
|
+
*
|
|
110
|
+
* **`Platform` is a column because a package's technology is now a per-package answer.** A polyglot
|
|
111
|
+
* repository is the whole point of the walk finding nested packages of another platform, and until
|
|
112
|
+
* this column existed `rman list` was the one place that showed every package and could not say
|
|
113
|
+
* which technology each belonged to. Blank rather than a word when none claimed it: `Package.provider`
|
|
114
|
+
* is an empty string there, and inventing `unknown` would read as a technology's name.
|
|
115
|
+
*
|
|
116
|
+
* **The count is the members**, root excluded, which is what `repository.packages` means and what
|
|
117
|
+
* every other form of this command reports.
|
|
118
|
+
*/
|
|
119
|
+
function printTable(items, withRoot) {
|
|
18
120
|
const table = new EasyTable();
|
|
19
121
|
for (const it of items) {
|
|
20
|
-
|
|
122
|
+
const indent = ' '.repeat(it.depth);
|
|
123
|
+
table.cell('Package', indent + (it.isRoot ? colors.whiteBright(it.selector) : colors.yellowBright(it.selector)));
|
|
21
124
|
table.cell('Version', colors.yellow(it.version));
|
|
125
|
+
table.cell('Platform', it.platform ? colors.cyan(it.platform) : '');
|
|
22
126
|
table.cell('Private', it.private ? colors.magentaBright('yes') : '');
|
|
23
127
|
table.cell('Changed', statusLabel(it.status));
|
|
24
128
|
table.cell('Path', it.location);
|
|
@@ -26,7 +130,7 @@ function printTable(items) {
|
|
|
26
130
|
}
|
|
27
131
|
console.log(table.toString().trim());
|
|
28
132
|
console.log('');
|
|
29
|
-
console.log(colors.gray(`${items.length} Package(s) found`));
|
|
133
|
+
console.log(colors.gray(`${items.length - (withRoot ? 1 : 0)} Package(s) found`));
|
|
30
134
|
}
|
|
31
135
|
function printParseable(items) {
|
|
32
136
|
for (const it of items) {
|
|
@@ -45,69 +149,3 @@ function printGraph(items) {
|
|
|
45
149
|
graph[it.name] = it.dependencies;
|
|
46
150
|
console.log(JSON.stringify(graph, undefined, 2));
|
|
47
151
|
}
|
|
48
|
-
export function initCli(repository, program) {
|
|
49
|
-
program.command({
|
|
50
|
-
command: 'list [options...]',
|
|
51
|
-
aliases: ['ls'],
|
|
52
|
-
describe: 'Lists packages in repository',
|
|
53
|
-
builder: cmd => applyPackageFilterOptions(cmd)
|
|
54
|
-
.example('$0 list', '# List all packages')
|
|
55
|
-
.example('$0 list --json', '# List all packages in JSON format')
|
|
56
|
-
.conflicts('graph', ['parseable', 'json'])
|
|
57
|
-
.conflicts('short', ['parseable', 'json'])
|
|
58
|
-
.conflicts('changed', 'changed-since')
|
|
59
|
-
.option('short', {
|
|
60
|
-
alias: 's',
|
|
61
|
-
describe: 'Do not show extended information',
|
|
62
|
-
type: 'boolean',
|
|
63
|
-
})
|
|
64
|
-
.option('parseable', {
|
|
65
|
-
alias: 'p',
|
|
66
|
-
describe: 'Show parseable output',
|
|
67
|
-
type: 'boolean',
|
|
68
|
-
})
|
|
69
|
-
.option('toposort', {
|
|
70
|
-
alias: 't',
|
|
71
|
-
describe: 'Sort packages in topological order (dependencies before dependents) instead of lexical by directory',
|
|
72
|
-
type: 'boolean',
|
|
73
|
-
})
|
|
74
|
-
.option('graph', {
|
|
75
|
-
alias: 'g',
|
|
76
|
-
describe: 'Show dependency graph as a JSON-formatted adjacency list',
|
|
77
|
-
type: 'boolean',
|
|
78
|
-
})
|
|
79
|
-
.option('json', {
|
|
80
|
-
alias: 'j',
|
|
81
|
-
describe: 'Show output in JSON format',
|
|
82
|
-
type: 'boolean',
|
|
83
|
-
})
|
|
84
|
-
.option('changed', {
|
|
85
|
-
alias: 'c',
|
|
86
|
-
describe: 'Only list packages that have changed since the last publish (dirty or committed but not yet published)',
|
|
87
|
-
type: 'boolean',
|
|
88
|
-
})
|
|
89
|
-
.option('changed-since', {
|
|
90
|
-
describe: 'Only list packages that have changed since the given git commit/hash',
|
|
91
|
-
type: 'string',
|
|
92
|
-
}),
|
|
93
|
-
handler: async (args) => {
|
|
94
|
-
const items = await ListService.getPackages(repository, {
|
|
95
|
-
...readPackageFilterOptions(args),
|
|
96
|
-
toposort: args.toposort,
|
|
97
|
-
changed: args.changed,
|
|
98
|
-
changedSince: args.changedSince,
|
|
99
|
-
});
|
|
100
|
-
if (args.graph)
|
|
101
|
-
printGraph(items);
|
|
102
|
-
else if (args.json)
|
|
103
|
-
console.log(JSON.stringify(items, undefined, 2));
|
|
104
|
-
else if (args.parseable)
|
|
105
|
-
printParseable(items);
|
|
106
|
-
else if (args.short)
|
|
107
|
-
for (const it of items)
|
|
108
|
-
console.log(it.name);
|
|
109
|
-
else
|
|
110
|
-
printTable(items);
|
|
111
|
-
},
|
|
112
|
-
});
|
|
113
|
-
}
|