@jujulego/jill 2.0.0-beta.2 → 2.0.0-rc.2
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 +21 -0
- package/README.md +28 -0
- package/dist/commands/each.d.ts +16 -0
- package/dist/commands/each.d.ts.map +1 -0
- package/dist/commands/each.js +117 -0
- package/dist/commands/each.js.map +1 -0
- package/dist/commands/{list.command.d.ts → list.d.ts} +3 -5
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +170 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/run.d.ts +8 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +59 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/tree.d.ts +3 -0
- package/dist/commands/tree.d.ts.map +1 -0
- package/dist/commands/tree.js +35 -0
- package/dist/commands/tree.js.map +1 -0
- package/dist/filters/affected.filter.d.ts +11 -0
- package/dist/filters/affected.filter.d.ts.map +1 -0
- package/dist/filters/affected.filter.js +82 -0
- package/dist/filters/affected.filter.js.map +1 -0
- package/dist/filters/index.d.ts +4 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +21 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/pipeline.d.ts +11 -0
- package/dist/filters/pipeline.d.ts.map +1 -0
- package/dist/filters/pipeline.js +34 -0
- package/dist/filters/pipeline.js.map +1 -0
- package/dist/filters/private.filter.d.ts +7 -0
- package/dist/filters/private.filter.d.ts.map +1 -0
- package/dist/filters/private.filter.js +20 -0
- package/dist/filters/private.filter.js.map +1 -0
- package/dist/filters/scripts.filter.d.ts +7 -0
- package/dist/filters/scripts.filter.d.ts.map +1 -0
- package/dist/filters/scripts.filter.js +21 -0
- package/dist/filters/scripts.filter.js.map +1 -0
- package/dist/git.d.ts +16 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +94 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -33
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +26 -62
- package/dist/main.js.map +1 -1
- package/dist/middlewares/global-config.d.ts +5 -0
- package/dist/middlewares/global-config.d.ts.map +1 -0
- package/dist/middlewares/global-config.js +29 -0
- package/dist/middlewares/global-config.js.map +1 -0
- package/dist/middlewares/index.d.ts +4 -0
- package/dist/middlewares/index.d.ts.map +1 -0
- package/dist/middlewares/index.js +21 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/middlewares/load-project.d.ts +6 -0
- package/dist/middlewares/load-project.d.ts.map +1 -0
- package/dist/middlewares/load-project.js +41 -0
- package/dist/middlewares/load-project.js.map +1 -0
- package/dist/middlewares/load-workspace.d.ts +3 -0
- package/dist/middlewares/load-workspace.d.ts.map +1 -0
- package/dist/middlewares/load-workspace.js +42 -0
- package/dist/middlewares/load-workspace.js.map +1 -0
- package/dist/middlewares/setup-ink.d.ts +1 -0
- package/dist/middlewares/setup-ink.d.ts.map +1 -0
- package/dist/middlewares/setup-ink.js +22 -0
- package/dist/middlewares/setup-ink.js.map +1 -0
- package/dist/project/index.d.ts +2 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +19 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/project.d.ts +25 -0
- package/dist/project/project.d.ts.map +1 -0
- package/dist/project/project.js +190 -0
- package/dist/project/project.js.map +1 -0
- package/dist/project/workspace.d.ts +34 -0
- package/dist/project/workspace.d.ts.map +1 -0
- package/dist/project/workspace.js +173 -0
- package/dist/project/workspace.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/inversify.config.d.ts +11 -0
- package/dist/services/inversify.config.d.ts.map +1 -0
- package/dist/services/inversify.config.js +34 -0
- package/dist/services/inversify.config.js.map +1 -0
- package/dist/services/logger.service.d.ts +6 -0
- package/dist/services/logger.service.d.ts.map +1 -0
- package/dist/services/logger.service.js +75 -0
- package/dist/services/logger.service.js.map +1 -0
- package/dist/services/spinner.service.d.ts +18 -0
- package/dist/services/spinner.service.d.ts.map +1 -0
- package/dist/services/spinner.service.js +68 -0
- package/dist/services/spinner.service.js.map +1 -0
- package/dist/services/task-manager.service.d.ts +1 -0
- package/dist/services/task-manager.service.d.ts.map +1 -0
- package/dist/services/task-manager.service.js +18 -0
- package/dist/services/task-manager.service.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/global-spinner.d.ts +2 -0
- package/dist/ui/global-spinner.d.ts.map +1 -0
- package/dist/ui/global-spinner.js +65 -0
- package/dist/ui/global-spinner.js.map +1 -0
- package/dist/ui/index.d.ts +7 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +24 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/layout.d.ts +2 -0
- package/dist/ui/layout.d.ts.map +1 -0
- package/dist/ui/layout.js +20 -0
- package/dist/ui/layout.js.map +1 -0
- package/dist/ui/list.d.ts +6 -0
- package/dist/ui/list.d.ts.map +1 -0
- package/dist/ui/list.js +30 -0
- package/dist/ui/list.js.map +1 -0
- package/dist/{components/StaticLogs.d.ts → ui/static-logs.d.ts} +0 -0
- package/dist/ui/static-logs.d.ts.map +1 -0
- package/dist/ui/static-logs.js +63 -0
- package/dist/ui/static-logs.js.map +1 -0
- package/dist/ui/task-name.d.ts +6 -0
- package/dist/ui/task-name.d.ts.map +1 -0
- package/dist/ui/task-name.js +35 -0
- package/dist/ui/task-name.js.map +1 -0
- package/dist/ui/task-spinner.d.ts +6 -0
- package/dist/ui/task-spinner.d.ts.map +1 -0
- package/dist/ui/task-spinner.js +143 -0
- package/dist/ui/task-spinner.js.map +1 -0
- package/dist/ui/tasks-spinner.d.ts +6 -0
- package/dist/ui/tasks-spinner.d.ts.map +1 -0
- package/dist/ui/tasks-spinner.js +17 -0
- package/dist/ui/tasks-spinner.js.map +1 -0
- package/dist/{components/WorkspaceTree.d.ts → ui/workspace-tree.d.ts} +1 -1
- package/dist/ui/workspace-tree.d.ts.map +1 -0
- package/dist/ui/workspace-tree.js +87 -0
- package/dist/ui/workspace-tree.js.map +1 -0
- package/dist/utils.d.ts +13 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +72 -0
- package/dist/utils.js.map +1 -0
- package/package.json +55 -56
- package/dist/application.context.d.ts +0 -28
- package/dist/application.context.d.ts.map +0 -1
- package/dist/application.context.js +0 -30
- package/dist/application.context.js.map +0 -1
- package/dist/application.d.ts +0 -7
- package/dist/application.d.ts.map +0 -1
- package/dist/application.js +0 -125
- package/dist/application.js.map +0 -1
- package/dist/command.d.ts +0 -8
- package/dist/command.d.ts.map +0 -1
- package/dist/command.js +0 -24
- package/dist/command.js.map +0 -1
- package/dist/commands/each.command.d.ts +0 -18
- package/dist/commands/each.command.d.ts.map +0 -1
- package/dist/commands/each.command.js +0 -176
- package/dist/commands/each.command.js.map +0 -1
- package/dist/commands/list.command.d.ts.map +0 -1
- package/dist/commands/list.command.js +0 -252
- package/dist/commands/list.command.js.map +0 -1
- package/dist/commands/run.command.d.ts +0 -12
- package/dist/commands/run.command.d.ts.map +0 -1
- package/dist/commands/run.command.js +0 -94
- package/dist/commands/run.command.js.map +0 -1
- package/dist/commands/tree.command.d.ts +0 -7
- package/dist/commands/tree.command.d.ts.map +0 -1
- package/dist/commands/tree.command.js +0 -35
- package/dist/commands/tree.command.js.map +0 -1
- package/dist/components/StaticLogs.d.ts.map +0 -1
- package/dist/components/StaticLogs.js +0 -77
- package/dist/components/StaticLogs.js.map +0 -1
- package/dist/components/WorkspaceTree.d.ts.map +0 -1
- package/dist/components/WorkspaceTree.js +0 -151
- package/dist/components/WorkspaceTree.js.map +0 -1
- package/dist/wrapper.d.ts +0 -6
- package/dist/wrapper.d.ts.map +0 -1
- package/dist/wrapper.js +0 -30
- package/dist/wrapper.js.map +0 -1
- package/dist/wrappers/project.wrapper.d.ts +0 -7
- package/dist/wrappers/project.wrapper.d.ts.map +0 -1
- package/dist/wrappers/project.wrapper.js +0 -105
- package/dist/wrappers/project.wrapper.js.map +0 -1
- package/dist/wrappers/workspace.wrapper.d.ts +0 -5
- package/dist/wrappers/workspace.wrapper.d.ts.map +0 -1
- package/dist/wrappers/workspace.wrapper.js +0 -108
- package/dist/wrappers/workspace.wrapper.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Julien Capellari
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,8 +1,36 @@
|
|
|
1
1
|
# @jujulego/jill
|
|
2
2
|
[](https://www.npmjs.com/package/@jujulego/jill)
|
|
3
3
|

|
|
4
|
+

|
|
4
5
|
[](https://sonarcloud.io/dashboard?id=jujulego_jill)
|
|
5
6
|
[](https://sonarcloud.io/dashboard?id=jujulego_jill)
|
|
6
7
|
|
|
7
8
|
## Description
|
|
8
9
|
Zero-config monorepo cli
|
|
10
|
+
|
|
11
|
+
Jill uses the `workspaces` attribute of your root package.json manifest to build your workspaces dependency tree.
|
|
12
|
+
That done it can offer you various utilities:
|
|
13
|
+
- `jill info` prints data about the current workspace, including name, version and local dependency tree
|
|
14
|
+
- `jill list` prints a list of all your workspaces, with many useful filters
|
|
15
|
+
- `jill run` build all workspace's local dependencies before run a given script
|
|
16
|
+
- `jill each` do the same as `run` but for a list of workspaces, optimizing builds. Supports the same filters as `list`.
|
|
17
|
+
|
|
18
|
+
It supports both `npm` and `yarn`.
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
Just install jill as a dev dependency:
|
|
22
|
+
```shell
|
|
23
|
+
npm install --save-dev @jujulego/jill
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or if you're using yarn
|
|
27
|
+
```shell
|
|
28
|
+
yarn add --dev @jujulego/jill
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Configuration
|
|
32
|
+
Almost nothing ;)
|
|
33
|
+
|
|
34
|
+
To work, jill only needs the `workspaces` attribute (see [npm workspaces](https://docs.npmjs.com/cli/v8/using-npm/workspaces) or [yarn workspace](https://yarnpkg.com/features/workspaces)).
|
|
35
|
+
|
|
36
|
+
To build a workspaces, jill will try to run it's `build` script. If no `build` script is found, jill will just warn and continue.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import yargs from 'yargs';
|
|
2
|
+
import { WorkspaceDepsMode } from '../project';
|
|
3
|
+
declare const _default: yargs.CommandModule<unknown, {
|
|
4
|
+
script: string;
|
|
5
|
+
} & {
|
|
6
|
+
"deps-mode": WorkspaceDepsMode;
|
|
7
|
+
} & {
|
|
8
|
+
private: boolean | undefined;
|
|
9
|
+
} & {
|
|
10
|
+
affected: string | undefined;
|
|
11
|
+
} & {
|
|
12
|
+
"affected-rev-sort": string | undefined;
|
|
13
|
+
} & {
|
|
14
|
+
"affected-rev-fallback": string;
|
|
15
|
+
}>;
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/each.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAA6B,iBAAiB,EAAE,MAAM,YAAY,CAAC;;;;;;;;;;;;;;AAM1E,wBA+GG","file":"each.d.ts","sourcesContent":["import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskManager, TaskSet } from '@jujulego/tasks';\nimport ink from 'ink';\nimport yargs from 'yargs';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, WorkspaceContext, WorkspaceDepsMode } from '../project';\nimport { container, CURRENT, INK_APP, SpinnerService } from '../services';\nimport { Layout, TasksSpinner } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'each <script>',\n describe: 'Run script on many workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Run options\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n }),\n async handler(args) {\n const app = container.get<ink.Instance>(INK_APP);\n const project = container.getNamed(Project, CURRENT);\n const manager = container.get(TaskManager);\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading workspaces ...');\n\n // Setup pipeline\n const pipeline = new Pipeline();\n pipeline.add(new ScriptsFilter([args.script]));\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'each') {\n rest.splice(0, 1);\n }\n\n // Create script tasks\n const tasks = new TaskSet<WorkspaceContext>(manager);\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n tasks.add(await wks.run(args.script, rest, {\n buildDeps: args.depsMode,\n }));\n }\n\n if (tasks.tasks.length === 0) {\n spinner.failed('No workspace found !');\n return yargs.exit(1, new Error('No workspace found !'));\n }\n\n spinner.stop();\n\n // Start and wait for result\n tasks.start();\n app.rerender(\n <Layout>\n <TasksSpinner manager={manager} />\n </Layout>\n );\n\n const result = await waitForEvent(tasks, 'finished');\n\n if (result.failed > 0) {\n return yargs.exit(1, new Error('A tasks failed !'));\n }\n } finally {\n spinner.stop();\n }\n }\n});\n"]}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, // Command
|
|
6
|
+
"default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: ()=>_default
|
|
9
|
+
});
|
|
10
|
+
const _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
const _eventTree = require("@jujulego/event-tree");
|
|
12
|
+
const _tasks = require("@jujulego/tasks");
|
|
13
|
+
const _yargs = /*#__PURE__*/ _interopRequireDefault(require("yargs"));
|
|
14
|
+
const _filters = require("../filters");
|
|
15
|
+
const _middlewares = require("../middlewares");
|
|
16
|
+
const _project = require("../project");
|
|
17
|
+
const _services = require("../services");
|
|
18
|
+
const _ui = require("../ui");
|
|
19
|
+
const _utils = require("../utils");
|
|
20
|
+
function _interopRequireDefault(obj) {
|
|
21
|
+
return obj && obj.__esModule ? obj : {
|
|
22
|
+
default: obj
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const _default = (0, _utils.defineCommand)({
|
|
26
|
+
command: 'each <script>',
|
|
27
|
+
describe: 'Run script on many workspaces',
|
|
28
|
+
builder: (yargs)=>(0, _utils.applyMiddlewares)(yargs, [
|
|
29
|
+
_middlewares.setupInk,
|
|
30
|
+
_middlewares.loadProject
|
|
31
|
+
])// Run options
|
|
32
|
+
.positional('script', {
|
|
33
|
+
type: 'string',
|
|
34
|
+
demandOption: true
|
|
35
|
+
}).option('deps-mode', {
|
|
36
|
+
choice: [
|
|
37
|
+
'all',
|
|
38
|
+
'prod',
|
|
39
|
+
'none'
|
|
40
|
+
],
|
|
41
|
+
default: 'all',
|
|
42
|
+
desc: 'Dependency selection mode:\n' + ' - all = dependencies AND devDependencies\n' + ' - prod = dependencies\n' + ' - none = nothing'
|
|
43
|
+
})// Filters
|
|
44
|
+
.option('private', {
|
|
45
|
+
type: 'boolean',
|
|
46
|
+
group: 'Filters:',
|
|
47
|
+
desc: 'Print only private workspaces'
|
|
48
|
+
})// Affected filter
|
|
49
|
+
.option('affected', {
|
|
50
|
+
alias: 'a',
|
|
51
|
+
type: 'string',
|
|
52
|
+
coerce: (rev)=>rev === '' ? 'master' : rev,
|
|
53
|
+
group: 'Affected:',
|
|
54
|
+
desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\n' + 'Replaces %name by workspace name.'
|
|
55
|
+
}).option('affected-rev-sort', {
|
|
56
|
+
type: 'string',
|
|
57
|
+
group: 'Affected:',
|
|
58
|
+
desc: 'Sort applied to git tag / git branch command'
|
|
59
|
+
}).option('affected-rev-fallback', {
|
|
60
|
+
type: 'string',
|
|
61
|
+
default: 'master',
|
|
62
|
+
group: 'Affected:',
|
|
63
|
+
desc: 'Fallback revision, used if no revision matching the given format is found'
|
|
64
|
+
}),
|
|
65
|
+
async handler (args) {
|
|
66
|
+
const app = _services.container.get(_services.INK_APP);
|
|
67
|
+
const project = _services.container.getNamed(_project.Project, _services.CURRENT);
|
|
68
|
+
const manager = _services.container.get(_tasks.TaskManager);
|
|
69
|
+
const spinner = _services.container.get(_services.SpinnerService);
|
|
70
|
+
try {
|
|
71
|
+
spinner.spin('Loading workspaces ...');
|
|
72
|
+
// Setup pipeline
|
|
73
|
+
const pipeline = new _filters.Pipeline();
|
|
74
|
+
pipeline.add(new _filters.ScriptsFilter([
|
|
75
|
+
args.script
|
|
76
|
+
]));
|
|
77
|
+
if (args.private !== undefined) {
|
|
78
|
+
pipeline.add(new _filters.PrivateFilter(args.private));
|
|
79
|
+
}
|
|
80
|
+
if (args.affected !== undefined) {
|
|
81
|
+
pipeline.add(new _filters.AffectedFilter(args.affected, args.affectedRevFallback, args.affectedRevSort));
|
|
82
|
+
}
|
|
83
|
+
// Extract arguments
|
|
84
|
+
const rest = args._.map((arg)=>arg.toString());
|
|
85
|
+
if (rest[0] === 'each') {
|
|
86
|
+
rest.splice(0, 1);
|
|
87
|
+
}
|
|
88
|
+
// Create script tasks
|
|
89
|
+
const tasks = new _tasks.TaskSet(manager);
|
|
90
|
+
for await (const wks of pipeline.filter(project.workspaces())){
|
|
91
|
+
tasks.add(await wks.run(args.script, rest, {
|
|
92
|
+
buildDeps: args.depsMode
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
if (tasks.tasks.length === 0) {
|
|
96
|
+
spinner.failed('No workspace found !');
|
|
97
|
+
return _yargs.default.exit(1, new Error('No workspace found !'));
|
|
98
|
+
}
|
|
99
|
+
spinner.stop();
|
|
100
|
+
// Start and wait for result
|
|
101
|
+
tasks.start();
|
|
102
|
+
app.rerender(/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.Layout, {
|
|
103
|
+
children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.TasksSpinner, {
|
|
104
|
+
manager: manager
|
|
105
|
+
})
|
|
106
|
+
}));
|
|
107
|
+
const result = await (0, _eventTree.waitForEvent)(tasks, 'finished');
|
|
108
|
+
if (result.failed > 0) {
|
|
109
|
+
return _yargs.default.exit(1, new Error('A tasks failed !'));
|
|
110
|
+
}
|
|
111
|
+
} finally{
|
|
112
|
+
spinner.stop();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=each.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/each.js"],"sourcesContent":["import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskManager, TaskSet } from '@jujulego/tasks';\nimport ink from 'ink';\nimport yargs from 'yargs';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, WorkspaceContext, WorkspaceDepsMode } from '../project';\nimport { container, CURRENT, INK_APP, SpinnerService } from '../services';\nimport { Layout, TasksSpinner } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'each <script>',\n describe: 'Run script on many workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Run options\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n }),\n async handler(args) {\n const app = container.get<ink.Instance>(INK_APP);\n const project = container.getNamed(Project, CURRENT);\n const manager = container.get(TaskManager);\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading workspaces ...');\n\n // Setup pipeline\n const pipeline = new Pipeline();\n pipeline.add(new ScriptsFilter([args.script]));\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'each') {\n rest.splice(0, 1);\n }\n\n // Create script tasks\n const tasks = new TaskSet<WorkspaceContext>(manager);\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n tasks.add(await wks.run(args.script, rest, {\n buildDeps: args.depsMode,\n }));\n }\n\n if (tasks.tasks.length === 0) {\n spinner.failed('No workspace found !');\n return yargs.exit(1, new Error('No workspace found !'));\n }\n\n spinner.stop();\n\n // Start and wait for result\n tasks.start();\n app.rerender(\n <Layout>\n <TasksSpinner manager={manager} />\n </Layout>\n );\n\n const result = await waitForEvent(tasks, 'finished');\n\n if (result.failed > 0) {\n return yargs.exit(1, new Error('A tasks failed !'));\n }\n } finally {\n spinner.stop();\n }\n }\n});\n"],"names":["defineCommand","command","describe","builder","yargs","applyMiddlewares","setupInk","loadProject","positional","type","demandOption","option","choice","default","desc","group","alias","coerce","rev","handler","args","app","container","get","INK_APP","project","getNamed","Project","CURRENT","manager","TaskManager","spinner","SpinnerService","spin","pipeline","Pipeline","add","ScriptsFilter","script","private","undefined","PrivateFilter","affected","AffectedFilter","affectedRevFallback","affectedRevSort","rest","_","map","arg","toString","splice","tasks","TaskSet","wks","filter","workspaces","run","buildDeps","depsMode","length","failed","exit","Error","stop","start","rerender","Layout","TasksSpinner","result","waitForEvent"],"mappings":"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","file":"each.js"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
/// <reference types="yargs" />
|
|
1
2
|
export declare type Attribute = 'name' | 'version' | 'root' | 'slug';
|
|
2
3
|
export declare type Data = Partial<Record<Attribute, string>>;
|
|
3
|
-
|
|
4
|
+
declare const _default: import("yargs").CommandModule<unknown, {
|
|
4
5
|
private: boolean | undefined;
|
|
5
6
|
} & {
|
|
6
7
|
"with-script": string[] | undefined;
|
|
@@ -18,8 +19,5 @@ export declare const ListCommand: import("../application.context").CommandCompon
|
|
|
18
19
|
long: boolean | undefined;
|
|
19
20
|
} & {
|
|
20
21
|
json: boolean | undefined;
|
|
21
|
-
}, "project" | "package-manager"> & {
|
|
22
|
-
project: string | undefined;
|
|
23
|
-
} & {
|
|
24
|
-
"package-manager": import("@jujulego/jill-core").PackageManager | undefined;
|
|
25
22
|
}>;
|
|
23
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/list.tsx"],"names":[],"mappings":";AAaA,oBAAY,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,oBAAY,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;AA8BtD,wBAkIG","file":"list.d.ts","sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport ink from 'ink';\nimport slugify from 'slugify';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, List } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.getNamed(Project, CURRENT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n process.stdout.write(JSON.stringify(data));\n }\n } else {\n const app = container.get<ink.Instance>(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) ?? '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n"]}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, // Command
|
|
6
|
+
"default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: ()=>_default
|
|
9
|
+
});
|
|
10
|
+
const _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
const _chalk = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
|
|
12
|
+
const _nodePath = /*#__PURE__*/ _interopRequireDefault(require("node:path"));
|
|
13
|
+
const _slugify = /*#__PURE__*/ _interopRequireDefault(require("slugify"));
|
|
14
|
+
const _filters = require("../filters");
|
|
15
|
+
const _middlewares = require("../middlewares");
|
|
16
|
+
const _project = require("../project");
|
|
17
|
+
const _services = require("../services");
|
|
18
|
+
const _ui = require("../ui");
|
|
19
|
+
const _utils = require("../utils");
|
|
20
|
+
function _interopRequireDefault(obj) {
|
|
21
|
+
return obj && obj.__esModule ? obj : {
|
|
22
|
+
default: obj
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// Constants
|
|
26
|
+
const LONG_ATTRIBUTES = [
|
|
27
|
+
'name',
|
|
28
|
+
'version',
|
|
29
|
+
'root'
|
|
30
|
+
];
|
|
31
|
+
const JSON_ATTRIBUTES = [
|
|
32
|
+
'name',
|
|
33
|
+
'version',
|
|
34
|
+
'slug',
|
|
35
|
+
'root'
|
|
36
|
+
];
|
|
37
|
+
const DEFAULT_ATTRIBUTES = [
|
|
38
|
+
'name'
|
|
39
|
+
];
|
|
40
|
+
const EXTRACTORS = {
|
|
41
|
+
name: (wks)=>wks.name,
|
|
42
|
+
version: (wks, json)=>wks.manifest.version || (json ? undefined : _chalk.default.grey('unset')),
|
|
43
|
+
root: (wks)=>wks.cwd,
|
|
44
|
+
slug: (wks)=>(0, _slugify.default)(wks.name)
|
|
45
|
+
};
|
|
46
|
+
// Utils
|
|
47
|
+
function buildExtractor(attrs) {
|
|
48
|
+
return (wks, json)=>{
|
|
49
|
+
const data = {};
|
|
50
|
+
for (const attr of attrs){
|
|
51
|
+
data[attr] = EXTRACTORS[attr](wks, json);
|
|
52
|
+
}
|
|
53
|
+
return data;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const _default = (0, _utils.defineCommand)({
|
|
57
|
+
command: [
|
|
58
|
+
'list',
|
|
59
|
+
'ls'
|
|
60
|
+
],
|
|
61
|
+
describe: 'List workspaces',
|
|
62
|
+
builder: (yargs)=>(0, _utils.applyMiddlewares)(yargs, [
|
|
63
|
+
_middlewares.setupInk,
|
|
64
|
+
_middlewares.loadProject
|
|
65
|
+
])// Filters
|
|
66
|
+
.option('private', {
|
|
67
|
+
type: 'boolean',
|
|
68
|
+
group: 'Filters:',
|
|
69
|
+
desc: 'Print only private workspaces'
|
|
70
|
+
}).option('with-script', {
|
|
71
|
+
type: 'array',
|
|
72
|
+
string: true,
|
|
73
|
+
group: 'Filters:',
|
|
74
|
+
desc: 'Print only workspaces having the given script'
|
|
75
|
+
})// Affected filter
|
|
76
|
+
.option('affected', {
|
|
77
|
+
alias: 'a',
|
|
78
|
+
type: 'string',
|
|
79
|
+
coerce: (rev)=>rev === '' ? 'master' : rev,
|
|
80
|
+
group: 'Affected:',
|
|
81
|
+
desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\n' + 'Replaces %name by workspace name.'
|
|
82
|
+
}).option('affected-rev-sort', {
|
|
83
|
+
type: 'string',
|
|
84
|
+
group: 'Affected:',
|
|
85
|
+
desc: 'Sort applied to git tag / git branch command'
|
|
86
|
+
}).option('affected-rev-fallback', {
|
|
87
|
+
type: 'string',
|
|
88
|
+
default: 'master',
|
|
89
|
+
group: 'Affected:',
|
|
90
|
+
desc: 'Fallback revision, used if no revision matching the given format is found'
|
|
91
|
+
}).option('attrs', {
|
|
92
|
+
type: 'array',
|
|
93
|
+
choices: [
|
|
94
|
+
'name',
|
|
95
|
+
'version',
|
|
96
|
+
'root',
|
|
97
|
+
'slug'
|
|
98
|
+
],
|
|
99
|
+
default: [],
|
|
100
|
+
group: 'Format:',
|
|
101
|
+
desc: 'Select printed attributes'
|
|
102
|
+
}).option('headers', {
|
|
103
|
+
type: 'boolean',
|
|
104
|
+
group: 'Format:',
|
|
105
|
+
desc: 'Prints columns headers'
|
|
106
|
+
}).option('long', {
|
|
107
|
+
alias: 'l',
|
|
108
|
+
type: 'boolean',
|
|
109
|
+
group: 'Format:',
|
|
110
|
+
desc: 'Prints name, version and root of all workspaces'
|
|
111
|
+
}).option('json', {
|
|
112
|
+
type: 'boolean',
|
|
113
|
+
group: 'Format:',
|
|
114
|
+
desc: 'Prints data as a JSON array'
|
|
115
|
+
}),
|
|
116
|
+
async handler (args) {
|
|
117
|
+
// Setup pipeline
|
|
118
|
+
const pipeline = new _filters.Pipeline();
|
|
119
|
+
if (args.private !== undefined) {
|
|
120
|
+
pipeline.add(new _filters.PrivateFilter(args.private));
|
|
121
|
+
}
|
|
122
|
+
if (args.withScript) {
|
|
123
|
+
pipeline.add(new _filters.ScriptsFilter(args.withScript));
|
|
124
|
+
}
|
|
125
|
+
if (args.affected !== undefined) {
|
|
126
|
+
pipeline.add(new _filters.AffectedFilter(args.affected, args.affectedRevFallback, args.affectedRevSort));
|
|
127
|
+
}
|
|
128
|
+
// Load workspaces
|
|
129
|
+
const project = _services.container.getNamed(_project.Project, _services.CURRENT);
|
|
130
|
+
const workspaces = [];
|
|
131
|
+
for await (const wks of pipeline.filter(project.workspaces())){
|
|
132
|
+
workspaces.push(wks);
|
|
133
|
+
}
|
|
134
|
+
// Build data
|
|
135
|
+
let attrs = args.attrs;
|
|
136
|
+
if (args.attrs.length === 0) {
|
|
137
|
+
if (args.long) {
|
|
138
|
+
attrs = LONG_ATTRIBUTES;
|
|
139
|
+
} else if (args.json) {
|
|
140
|
+
attrs = JSON_ATTRIBUTES;
|
|
141
|
+
} else {
|
|
142
|
+
attrs = DEFAULT_ATTRIBUTES;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const data = workspaces.map((wks)=>buildExtractor(attrs)(wks, args.json || false));
|
|
146
|
+
// Print list
|
|
147
|
+
if (args.json) {
|
|
148
|
+
if (process.stdout.isTTY) {
|
|
149
|
+
console.log(JSON.stringify(data, null, 2));
|
|
150
|
+
} else {
|
|
151
|
+
process.stdout.write(JSON.stringify(data));
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
const app = _services.container.get(_services.INK_APP);
|
|
155
|
+
for (const d of data){
|
|
156
|
+
if (d.root) {
|
|
157
|
+
d.root = _nodePath.default.relative(process.cwd(), d.root) ?? '.';
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
app.rerender(/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.Layout, {
|
|
161
|
+
children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.List, {
|
|
162
|
+
items: data,
|
|
163
|
+
headers: args.headers ?? attrs.length > 1
|
|
164
|
+
})
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/list.js"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport ink from 'ink';\nimport slugify from 'slugify';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, List } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.getNamed(Project, CURRENT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n process.stdout.write(JSON.stringify(data));\n }\n } else {\n const app = container.get<ink.Instance>(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) ?? '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n"],"names":["LONG_ATTRIBUTES","JSON_ATTRIBUTES","DEFAULT_ATTRIBUTES","EXTRACTORS","name","wks","version","json","manifest","undefined","chalk","grey","root","cwd","slug","slugify","buildExtractor","attrs","data","attr","defineCommand","command","describe","builder","yargs","applyMiddlewares","setupInk","loadProject","option","type","group","desc","string","alias","coerce","rev","default","choices","handler","args","pipeline","Pipeline","private","add","PrivateFilter","withScript","ScriptsFilter","affected","AffectedFilter","affectedRevFallback","affectedRevSort","project","container","getNamed","Project","CURRENT","workspaces","filter","push","length","long","map","process","stdout","isTTY","console","log","JSON","stringify","write","app","get","INK_APP","d","path","relative","rerender","Layout","List","items","headers"],"mappings":"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","file":"list.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/run.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAa,iBAAiB,EAAE,MAAM,YAAY,CAAC;;;;;;AAM1D,wBA2CG","file":"run.d.ts","sourcesContent":["import { TaskManager } from '@jujulego/tasks';\nimport ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace, WorkspaceDepsMode } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, TasksSpinner } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'run <script>',\n describe: 'Run script inside workspace',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ])\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n }),\n async handler(args) {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n const manager = container.get(TaskManager);\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'run') {\n rest.splice(0, 1);\n }\n\n // Run script in workspace\n const task = await workspace.run(args.script, rest, {\n buildDeps: args.depsMode,\n });\n manager.add(task);\n\n // Render\n app.rerender(\n <Layout>\n <TasksSpinner manager={manager} />\n </Layout>\n );\n }\n});\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, // Command
|
|
6
|
+
"default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: ()=>_default
|
|
9
|
+
});
|
|
10
|
+
const _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
const _tasks = require("@jujulego/tasks");
|
|
12
|
+
const _middlewares = require("../middlewares");
|
|
13
|
+
const _project = require("../project");
|
|
14
|
+
const _services = require("../services");
|
|
15
|
+
const _ui = require("../ui");
|
|
16
|
+
const _utils = require("../utils");
|
|
17
|
+
const _default = (0, _utils.defineCommand)({
|
|
18
|
+
command: 'run <script>',
|
|
19
|
+
describe: 'Run script inside workspace',
|
|
20
|
+
builder: (yargs)=>(0, _utils.applyMiddlewares)(yargs, [
|
|
21
|
+
_middlewares.setupInk,
|
|
22
|
+
_middlewares.loadProject,
|
|
23
|
+
_middlewares.loadWorkspace
|
|
24
|
+
]).positional('script', {
|
|
25
|
+
type: 'string',
|
|
26
|
+
demandOption: true
|
|
27
|
+
}).option('deps-mode', {
|
|
28
|
+
choice: [
|
|
29
|
+
'all',
|
|
30
|
+
'prod',
|
|
31
|
+
'none'
|
|
32
|
+
],
|
|
33
|
+
default: 'all',
|
|
34
|
+
desc: 'Dependency selection mode:\n' + ' - all = dependencies AND devDependencies\n' + ' - prod = dependencies\n' + ' - none = nothing'
|
|
35
|
+
}),
|
|
36
|
+
async handler (args) {
|
|
37
|
+
const app = _services.container.get(_services.INK_APP);
|
|
38
|
+
const workspace = _services.container.getNamed(_project.Workspace, _services.CURRENT);
|
|
39
|
+
const manager = _services.container.get(_tasks.TaskManager);
|
|
40
|
+
// Extract arguments
|
|
41
|
+
const rest = args._.map((arg)=>arg.toString());
|
|
42
|
+
if (rest[0] === 'run') {
|
|
43
|
+
rest.splice(0, 1);
|
|
44
|
+
}
|
|
45
|
+
// Run script in workspace
|
|
46
|
+
const task = await workspace.run(args.script, rest, {
|
|
47
|
+
buildDeps: args.depsMode
|
|
48
|
+
});
|
|
49
|
+
manager.add(task);
|
|
50
|
+
// Render
|
|
51
|
+
app.rerender(/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.Layout, {
|
|
52
|
+
children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.TasksSpinner, {
|
|
53
|
+
manager: manager
|
|
54
|
+
})
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/run.js"],"sourcesContent":["import { TaskManager } from '@jujulego/tasks';\nimport ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace, WorkspaceDepsMode } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, TasksSpinner } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'run <script>',\n describe: 'Run script inside workspace',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ])\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n }),\n async handler(args) {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n const manager = container.get(TaskManager);\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'run') {\n rest.splice(0, 1);\n }\n\n // Run script in workspace\n const task = await workspace.run(args.script, rest, {\n buildDeps: args.depsMode,\n });\n manager.add(task);\n\n // Render\n app.rerender(\n <Layout>\n <TasksSpinner manager={manager} />\n </Layout>\n );\n }\n});\n"],"names":["defineCommand","command","describe","builder","yargs","applyMiddlewares","setupInk","loadProject","loadWorkspace","positional","type","demandOption","option","choice","default","desc","handler","args","app","container","get","INK_APP","workspace","getNamed","Workspace","CURRENT","manager","TaskManager","rest","_","map","arg","toString","splice","task","run","script","buildDeps","depsMode","add","rerender","Layout","TasksSpinner"],"mappings":"AAAA;;;;+BASA,UAAU;AACV;;aAAA;;;uBAV4B;6BAGyB;yBACR;0BACD;oBACP;uBACW;MAGhD,WAAeA,IAAAA,oBAAa,EAAC;IAC3BC,SAAS;IACTC,UAAU;IACVC,SAAS,CAACC,QACRC,IAAAA,uBAAgB,EAACD,OAAO;YACtBE,qBAAQ;YACRC,wBAAW;YACXC,0BAAa;SACd,EACEC,UAAU,CAAC,UAAU;YAAEC,MAAM;YAAUC,cAAc,IAAI;QAAC,GAC1DC,MAAM,CAAC,aAAa;YACnBC,QAAQ;gBAAC;gBAAO;gBAAQ;aAAO;YAC/BC,SAAS;YACTC,MAAM,iCACJ,gDACA,6BACA;QACJ;IACJ,MAAMC,SAAQC,IAAI,EAAE;QAClB,MAAMC,MAAMC,mBAAS,CAACC,GAAG,CAAeC,iBAAO;QAC/C,MAAMC,YAAYH,mBAAS,CAACI,QAAQ,CAACC,kBAAS,EAAEC,iBAAO;QACvD,MAAMC,UAAUP,mBAAS,CAACC,GAAG,CAACO,kBAAW;QAEzC,oBAAoB;QACpB,MAAMC,OAAOX,KAAKY,CAAC,CAACC,GAAG,CAACC,CAAAA,MAAOA,IAAIC,QAAQ;QAE3C,IAAIJ,IAAI,CAAC,EAAE,KAAK,OAAO;YACrBA,KAAKK,MAAM,CAAC,GAAG;QACjB,CAAC;QAED,0BAA0B;QAC1B,MAAMC,OAAO,MAAMZ,UAAUa,GAAG,CAAClB,KAAKmB,MAAM,EAAER,MAAM;YAClDS,WAAWpB,KAAKqB,QAAQ;QAC1B;QACAZ,QAAQa,GAAG,CAACL;QAEZ,SAAS;QACThB,IAAIsB,QAAQ,eACV,qBAACC,UAAM;sBACL,cAAA,qBAACC,gBAAY;gBAAChB,SAASA;;;IAG7B;AACF","file":"run.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/tree.tsx"],"names":[],"mappings":";;AASA,wBAmBG","file":"tree.d.ts","sourcesContent":["import ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, WorkspaceTree } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'tree',\n describe: 'Print workspace dependency tree',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]),\n handler: () => {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n\n app.rerender(\n <Layout>\n <WorkspaceTree workspace={workspace} />\n </Layout>\n );\n }\n});\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, // Command
|
|
6
|
+
"default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: ()=>_default
|
|
9
|
+
});
|
|
10
|
+
const _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
const _middlewares = require("../middlewares");
|
|
12
|
+
const _project = require("../project");
|
|
13
|
+
const _services = require("../services");
|
|
14
|
+
const _ui = require("../ui");
|
|
15
|
+
const _utils = require("../utils");
|
|
16
|
+
const _default = (0, _utils.defineCommand)({
|
|
17
|
+
command: 'tree',
|
|
18
|
+
describe: 'Print workspace dependency tree',
|
|
19
|
+
builder: (yargs)=>(0, _utils.applyMiddlewares)(yargs, [
|
|
20
|
+
_middlewares.setupInk,
|
|
21
|
+
_middlewares.loadProject,
|
|
22
|
+
_middlewares.loadWorkspace
|
|
23
|
+
]),
|
|
24
|
+
handler: ()=>{
|
|
25
|
+
const app = _services.container.get(_services.INK_APP);
|
|
26
|
+
const workspace = _services.container.getNamed(_project.Workspace, _services.CURRENT);
|
|
27
|
+
app.rerender(/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.Layout, {
|
|
28
|
+
children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.WorkspaceTree, {
|
|
29
|
+
workspace: workspace
|
|
30
|
+
})
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["commands/tree.js"],"sourcesContent":["import ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, WorkspaceTree } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'tree',\n describe: 'Print workspace dependency tree',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]),\n handler: () => {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n\n app.rerender(\n <Layout>\n <WorkspaceTree workspace={workspace} />\n </Layout>\n );\n }\n});\n"],"names":["defineCommand","command","describe","builder","yargs","applyMiddlewares","setupInk","loadProject","loadWorkspace","handler","app","container","get","INK_APP","workspace","getNamed","Workspace","CURRENT","rerender","Layout","WorkspaceTree"],"mappings":"AAAA;;;;+BAQA,UAAU;AACV;;aAAA;;;6BAPqD;yBAC3B;0BACkB;oBACN;uBACU;MAGhD,WAAeA,IAAAA,oBAAa,EAAC;IAC3BC,SAAS;IACTC,UAAU;IACVC,SAAS,CAACC,QACRC,IAAAA,uBAAgB,EAACD,OAAO;YACtBE,qBAAQ;YACRC,wBAAW;YACXC,0BAAa;SACd;IACHC,SAAS,IAAM;QACb,MAAMC,MAAMC,mBAAS,CAACC,GAAG,CAAeC,iBAAO;QAC/C,MAAMC,YAAYH,mBAAS,CAACI,QAAQ,CAACC,kBAAS,EAAEC,iBAAO;QAEvDP,IAAIQ,QAAQ,eACV,qBAACC,UAAM;sBACL,cAAA,qBAACC,iBAAa;gBAACN,WAAWA;;;IAGhC;AACF","file":"tree.js"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Workspace } from '../project';
|
|
2
|
+
import { PipelineFilter } from './pipeline';
|
|
3
|
+
export declare class AffectedFilter implements PipelineFilter {
|
|
4
|
+
readonly format: string;
|
|
5
|
+
readonly fallback: string;
|
|
6
|
+
readonly sort?: string | undefined;
|
|
7
|
+
private readonly _logger;
|
|
8
|
+
constructor(format: string, fallback: string, sort?: string | undefined);
|
|
9
|
+
private _formatRevision;
|
|
10
|
+
test(workspace: Workspace): Promise<boolean>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["filters/affected.filter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,qBAAa,cAAe,YAAW,cAAc;IAOjD,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,IAAI,CAAC;IANhB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAItB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,oBAAQ;YAIV,eAAe;IA0CvB,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;CAInD","file":"affected.filter.d.ts","sourcesContent":["import { Git } from '../git';\nimport { lazyInject, Logger } from '../services';\nimport { Workspace } from '../project';\n\nimport { PipelineFilter } from './pipeline';\n\n// Class\nexport class AffectedFilter implements PipelineFilter {\n // Properties\n @lazyInject(Logger)\n private readonly _logger: Logger;\n\n // Constructor\n constructor(\n readonly format: string,\n readonly fallback: string,\n readonly sort?: string,\n ) {}\n\n // Methods\n private async _formatRevision(wks: Workspace): Promise<string> {\n const logger = this._logger.child({ label: wks.name });\n\n // Format revision\n let result = this.format;\n result = result.replace(/(?<!\\\\)((?:\\\\\\\\)*)%name/g, `$1${wks.name}`);\n result = result.replace(/\\\\(.)/g, '$1');\n\n // Ask git to complete it\n const sortArgs = this.sort ? ['--sort', this.sort] : [];\n\n // - search in branches\n if (result.includes('*')) {\n const branches = await Git.listBranches([...sortArgs, result], { cwd: wks.cwd, logger: logger });\n\n if (branches.length > 0) {\n result = branches[branches.length - 1];\n }\n }\n\n // - search in tags\n if (result.includes('*')) {\n const tags = await Git.listTags([...sortArgs, result], { cwd: wks.cwd, logger: logger });\n\n if (tags.length > 0) {\n result = tags[tags.length - 1];\n }\n }\n\n if (result !== this.format) {\n logger.verbose(`Resolved ${this.format} into ${result}`);\n }\n\n if (result.includes('*')) {\n logger.warn(`No revision found matching ${result}, using fallback ${this.fallback}`);\n\n return this.fallback;\n }\n\n return result;\n }\n\n async test(workspace: Workspace): Promise<boolean> {\n const rev = await this._formatRevision(workspace);\n return await workspace.isAffected(rev);\n }\n}\n"]}
|