@jujulego/jill 2.5.1 → 3.0.0-alpha.1
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/dist/commands/exec.d.ts +3 -2
- package/dist/commons/logger/thread.gateway.d.ts +0 -1
- package/dist/{core.plugin-D4KeO5G0.js → core.plugin-CxgfxFUI.js} +202 -215
- package/dist/core.plugin-CxgfxFUI.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/{ink-command-dQCqkmg0.js → ink-command-CsbkuRbm.js} +108 -119
- package/dist/ink-command-CsbkuRbm.js.map +1 -0
- package/dist/inversify.config.d.ts +1 -1
- package/dist/{jill.application-BEjmcH4e.js → jill.application-DNJpmnCF.js} +71 -70
- package/dist/jill.application-DNJpmnCF.js.map +1 -0
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/json.d.ts +0 -1
- package/dist/utils/worker-cache.d.ts +0 -1
- package/dist/{workspace-tree-BJ9EO1FB.js → workspace-tree-VWKE0B6b.js} +117 -117
- package/dist/{workspace-tree-BJ9EO1FB.js.map → workspace-tree-VWKE0B6b.js.map} +1 -1
- package/package.json +26 -28
- package/dist/core.plugin-D4KeO5G0.js.map +0 -1
- package/dist/ink-command-dQCqkmg0.js.map +0 -1
- package/dist/jill.application-BEjmcH4e.js.map +0 -1
|
@@ -3,7 +3,7 @@ import { _ as _$1 } from '@swc/helpers/_/_ts_param';
|
|
|
3
3
|
import { Logger, withLabel } from '@jujulego/logger';
|
|
4
4
|
import { injectable, inject } from 'inversify';
|
|
5
5
|
import yargs from 'yargs';
|
|
6
|
-
import { m as container, C as CONFIG, p as isCommandCtx, t as ScriptTask, q as CommandTask, b as TaskSpinner, n as lazyInject, u as TASK_MANAGER, I as InkCommand, y as printJson, r as isScriptCtx, a as List, E as ExitException, D as ContextService, P as PluginLoaderService, l as CURRENT, F as applyConfigOptions, j as getModule, d as COMMAND_MODULE, c as COMMAND, g as getCommandOpts, e as buildCommandModule } from './ink-command-
|
|
6
|
+
import { m as container, C as CONFIG, p as isCommandCtx, t as ScriptTask, q as CommandTask, b as TaskSpinner, n as lazyInject, u as TASK_MANAGER, I as InkCommand, y as printJson, r as isScriptCtx, a as List, E as ExitException, D as ContextService, P as PluginLoaderService, l as CURRENT, F as applyConfigOptions, j as getModule, d as COMMAND_MODULE, c as COMMAND, g as getCommandOpts, e as buildCommandModule } from './ink-command-CsbkuRbm.js';
|
|
7
7
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
8
8
|
import { waitFor$ } from '@jujulego/event-tree';
|
|
9
9
|
import { GroupTask, TaskSet, plan } from '@jujulego/tasks';
|
|
@@ -17,8 +17,8 @@ function useIsVerbose() {
|
|
|
17
17
|
const config = container.get(CONFIG);
|
|
18
18
|
if (config.verbose) {
|
|
19
19
|
return [
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
'verbose',
|
|
21
|
+
'debug'
|
|
22
22
|
].includes(config.verbose);
|
|
23
23
|
} else {
|
|
24
24
|
return false;
|
|
@@ -37,15 +37,15 @@ function useIsVerbose() {
|
|
|
37
37
|
return kindB - kindA;
|
|
38
38
|
}
|
|
39
39
|
// 2 - compare workspaces
|
|
40
|
-
const wksA =
|
|
41
|
-
const wksB =
|
|
40
|
+
const wksA = 'workspace' in a.context ? a.context.workspace.name : '\uffff';
|
|
41
|
+
const wksB = 'workspace' in b.context ? b.context.workspace.name : '\uffff';
|
|
42
42
|
const wksDiff = wksA.localeCompare(wksB);
|
|
43
43
|
if (wksDiff !== 0) {
|
|
44
44
|
return wksDiff;
|
|
45
45
|
}
|
|
46
46
|
// 1 - compare scripts
|
|
47
|
-
const scriptA =
|
|
48
|
-
const scriptB =
|
|
47
|
+
const scriptA = 'script' in a.context ? a.context.script : '\uffff';
|
|
48
|
+
const scriptB = 'script' in b.context ? b.context.script : '\uffff';
|
|
49
49
|
return scriptA.localeCompare(scriptB);
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
@@ -61,8 +61,8 @@ function useIsVerbose() {
|
|
|
61
61
|
};
|
|
62
62
|
if (task instanceof GroupTask) {
|
|
63
63
|
const isCommandGroup = task.tasks.some((t)=>!isCommandCtx(t.context));
|
|
64
|
-
const hasFailed = task.tasks.some((t)=>t.status ===
|
|
65
|
-
const isStarted = task.status ===
|
|
64
|
+
const hasFailed = task.tasks.some((t)=>t.status === 'failed');
|
|
65
|
+
const isStarted = task.status === 'running';
|
|
66
66
|
if (isVerbose || isCommandGroup || hasFailed || isStarted) {
|
|
67
67
|
let tasks = task.tasks;
|
|
68
68
|
if (task instanceof ScriptTask) {
|
|
@@ -84,7 +84,7 @@ function useFlatTaskTree(manager) {
|
|
|
84
84
|
const [version, setVersion] = useState(0);
|
|
85
85
|
useLayoutEffect(()=>{
|
|
86
86
|
let dirty = false;
|
|
87
|
-
return manager.on(
|
|
87
|
+
return manager.on('added', ()=>{
|
|
88
88
|
if (!dirty) {
|
|
89
89
|
dirty = true;
|
|
90
90
|
queueMicrotask(()=>{
|
|
@@ -100,7 +100,7 @@ function useFlatTaskTree(manager) {
|
|
|
100
100
|
]);
|
|
101
101
|
useLayoutEffect(()=>{
|
|
102
102
|
let dirty = false;
|
|
103
|
-
return manager.on(
|
|
103
|
+
return manager.on('started', ()=>{
|
|
104
104
|
if (!dirty) {
|
|
105
105
|
dirty = true;
|
|
106
106
|
setTimeout(()=>{
|
|
@@ -114,7 +114,7 @@ function useFlatTaskTree(manager) {
|
|
|
114
114
|
]);
|
|
115
115
|
useLayoutEffect(()=>{
|
|
116
116
|
let dirty = false;
|
|
117
|
-
return manager.on(
|
|
117
|
+
return manager.on('completed', ()=>{
|
|
118
118
|
if (!dirty) {
|
|
119
119
|
dirty = true;
|
|
120
120
|
setTimeout(()=>{
|
|
@@ -146,21 +146,21 @@ function TaskTreeStats({ manager }) {
|
|
|
146
146
|
};
|
|
147
147
|
for (const task of manager.tasks){
|
|
148
148
|
switch(task.status){
|
|
149
|
-
case
|
|
150
|
-
case
|
|
149
|
+
case 'starting':
|
|
150
|
+
case 'running':
|
|
151
151
|
base.running += task.weight;
|
|
152
152
|
break;
|
|
153
|
-
case
|
|
153
|
+
case 'done':
|
|
154
154
|
base.done += task.weight;
|
|
155
155
|
break;
|
|
156
|
-
case
|
|
156
|
+
case 'failed':
|
|
157
157
|
base.failed += task.weight;
|
|
158
158
|
break;
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
return base;
|
|
162
162
|
});
|
|
163
|
-
useLayoutEffect(()=>manager.on(
|
|
163
|
+
useLayoutEffect(()=>manager.on('started', (task)=>{
|
|
164
164
|
setStats((old)=>({
|
|
165
165
|
...old,
|
|
166
166
|
running: old.running + task.weight
|
|
@@ -168,11 +168,11 @@ function TaskTreeStats({ manager }) {
|
|
|
168
168
|
}), [
|
|
169
169
|
manager
|
|
170
170
|
]);
|
|
171
|
-
useLayoutEffect(()=>manager.on(
|
|
171
|
+
useLayoutEffect(()=>manager.on('completed', (task)=>{
|
|
172
172
|
setStats((old)=>({
|
|
173
173
|
running: old.running - task.weight,
|
|
174
|
-
done: task.status ===
|
|
175
|
-
failed: task.status ===
|
|
174
|
+
done: task.status === 'done' ? old.done + task.weight : old.done,
|
|
175
|
+
failed: task.status === 'failed' ? old.failed + task.weight : old.failed
|
|
176
176
|
}));
|
|
177
177
|
}), [
|
|
178
178
|
manager
|
|
@@ -265,9 +265,9 @@ function useStdoutDimensions() {
|
|
|
265
265
|
columns: stdout.columns ?? Infinity,
|
|
266
266
|
rows: stdout.rows ?? Infinity
|
|
267
267
|
});
|
|
268
|
-
stdout.on(
|
|
268
|
+
stdout.on('resize', handler);
|
|
269
269
|
return ()=>{
|
|
270
|
-
stdout.off(
|
|
270
|
+
stdout.off('resize', handler);
|
|
271
271
|
};
|
|
272
272
|
}, [
|
|
273
273
|
stdout
|
|
@@ -376,18 +376,18 @@ function TaskTreeSpinner({ manager }) {
|
|
|
376
376
|
|
|
377
377
|
class TaskCommand extends InkCommand {
|
|
378
378
|
addTaskOptions(parser) {
|
|
379
|
-
return parser.option(
|
|
380
|
-
type:
|
|
381
|
-
desc:
|
|
379
|
+
return parser.option('plan', {
|
|
380
|
+
type: 'boolean',
|
|
381
|
+
desc: 'Only prints tasks to be run',
|
|
382
382
|
default: false
|
|
383
|
-
}).option(
|
|
384
|
-
type:
|
|
385
|
-
desc:
|
|
383
|
+
}).option('plan-mode', {
|
|
384
|
+
type: 'string',
|
|
385
|
+
desc: 'Plan output mode',
|
|
386
386
|
choices: [
|
|
387
|
-
|
|
388
|
-
|
|
387
|
+
'json',
|
|
388
|
+
'list'
|
|
389
389
|
],
|
|
390
|
-
default:
|
|
390
|
+
default: 'list'
|
|
391
391
|
});
|
|
392
392
|
}
|
|
393
393
|
async *render(args) {
|
|
@@ -398,15 +398,15 @@ class TaskCommand extends InkCommand {
|
|
|
398
398
|
}
|
|
399
399
|
if (args.plan) {
|
|
400
400
|
const plan$1 = Array.from(plan(tasks));
|
|
401
|
-
if (args.planMode ===
|
|
401
|
+
if (args.planMode === 'json') {
|
|
402
402
|
printJson(plan$1);
|
|
403
403
|
} else {
|
|
404
404
|
const data = plan$1.map((tsk)=>({
|
|
405
405
|
id: tsk.id.substring(0, 6),
|
|
406
406
|
name: tsk.name,
|
|
407
|
-
workspace: isCommandCtx(tsk.context) || isScriptCtx(tsk.context) ? tsk.context.workspace.name :
|
|
407
|
+
workspace: isCommandCtx(tsk.context) || isScriptCtx(tsk.context) ? tsk.context.workspace.name : '',
|
|
408
408
|
group: tsk.groupId?.substring(0, 6),
|
|
409
|
-
|
|
409
|
+
'depends on': tsk.dependenciesIds.map((id)=>id.substring(0, 6)).join(', ')
|
|
410
410
|
}));
|
|
411
411
|
yield /*#__PURE__*/ jsx(List, {
|
|
412
412
|
items: data,
|
|
@@ -420,7 +420,7 @@ class TaskCommand extends InkCommand {
|
|
|
420
420
|
});
|
|
421
421
|
// Start tasks
|
|
422
422
|
tasks.start(this.manager);
|
|
423
|
-
const result = await waitFor$(tasks,
|
|
423
|
+
const result = await waitFor$(tasks, 'finished');
|
|
424
424
|
this.app.clear();
|
|
425
425
|
yield /*#__PURE__*/ jsx(TaskTreeCompleted, {
|
|
426
426
|
manager: this.manager
|
|
@@ -430,7 +430,7 @@ class TaskCommand extends InkCommand {
|
|
|
430
430
|
}
|
|
431
431
|
} else {
|
|
432
432
|
const logger = container.get(Logger);
|
|
433
|
-
logger.warning(
|
|
433
|
+
logger.warning('No task found');
|
|
434
434
|
}
|
|
435
435
|
}
|
|
436
436
|
}
|
|
@@ -442,7 +442,7 @@ TaskCommand = _([
|
|
|
442
442
|
], TaskCommand);
|
|
443
443
|
|
|
444
444
|
var name = "@jujulego/jill";
|
|
445
|
-
var version = "
|
|
445
|
+
var version = "3.0.0-alpha.1";
|
|
446
446
|
var license = "MIT";
|
|
447
447
|
var repository = {
|
|
448
448
|
type: "git",
|
|
@@ -468,7 +468,7 @@ var scripts = {
|
|
|
468
468
|
"e2e:yarn": "yarn run e2e -t yarn"
|
|
469
469
|
};
|
|
470
470
|
var engines = {
|
|
471
|
-
node: "
|
|
471
|
+
node: "18.x || 20.x || 22.x"
|
|
472
472
|
};
|
|
473
473
|
var dependencies = {
|
|
474
474
|
"@jujulego/aegis": "^2.1.0",
|
|
@@ -500,39 +500,37 @@ var dependencies = {
|
|
|
500
500
|
};
|
|
501
501
|
var devDependencies = {
|
|
502
502
|
"@jujulego/2d-maths": "1.6.0",
|
|
503
|
-
"@jujulego/vite-plugin-swc": "1.
|
|
504
|
-
"@microsoft/eslint-formatter-sarif": "3.
|
|
503
|
+
"@jujulego/vite-plugin-swc": "1.2.0",
|
|
504
|
+
"@microsoft/eslint-formatter-sarif": "3.1.0",
|
|
505
505
|
"@rollup/plugin-json": "6.1.0",
|
|
506
|
-
"@rollup/plugin-node-resolve": "15.
|
|
507
|
-
"@swc/core": "1.
|
|
506
|
+
"@rollup/plugin-node-resolve": "15.3.0",
|
|
507
|
+
"@swc/core": "1.6.5",
|
|
508
508
|
"@types/moo": "0.5.9",
|
|
509
|
-
"@types/node": "
|
|
509
|
+
"@types/node": "22.13.14",
|
|
510
510
|
"@types/normalize-package-data": "2.4.4",
|
|
511
|
-
"@types/react": "18.
|
|
512
|
-
"@types/semver": "7.5.
|
|
513
|
-
"@types/yargs": "17.0.
|
|
514
|
-
"@typescript-eslint/eslint-plugin": "7.0
|
|
515
|
-
"@typescript-eslint/parser": "7.0
|
|
516
|
-
"@vitest/coverage-v8": "
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
eslint: "
|
|
521
|
-
"eslint-plugin-
|
|
522
|
-
"eslint-plugin-
|
|
523
|
-
"eslint-plugin-vitest": "0.3.22",
|
|
524
|
-
"eslint-plugin-workspaces": "0.10.0",
|
|
511
|
+
"@types/react": "18.3.14",
|
|
512
|
+
"@types/semver": "7.5.8",
|
|
513
|
+
"@types/yargs": "17.0.33",
|
|
514
|
+
"@typescript-eslint/eslint-plugin": "7.18.0",
|
|
515
|
+
"@typescript-eslint/parser": "7.18.0",
|
|
516
|
+
"@vitest/coverage-v8": "3.2.4",
|
|
517
|
+
browserslist: "4.24.2",
|
|
518
|
+
eslint: "8.57.1",
|
|
519
|
+
"eslint-plugin-react": "7.37.2",
|
|
520
|
+
"eslint-plugin-react-hooks": "4.6.2",
|
|
521
|
+
"eslint-plugin-vitest": "0.4.1",
|
|
522
|
+
"eslint-plugin-workspaces": "0.10.1",
|
|
525
523
|
"ink-testing-library": "3.0.0",
|
|
526
|
-
memfs: "4.
|
|
527
|
-
rollup: "4.
|
|
524
|
+
memfs: "4.15.0",
|
|
525
|
+
rollup: "4.28.1",
|
|
528
526
|
shx: "0.3.4",
|
|
529
527
|
"ts-node": "10.9.2",
|
|
530
|
-
typescript: "5.
|
|
531
|
-
vite: "5.
|
|
532
|
-
"vite-tsconfig-paths": "
|
|
533
|
-
vitest: "
|
|
528
|
+
typescript: "5.7.2",
|
|
529
|
+
vite: "5.4.11",
|
|
530
|
+
"vite-tsconfig-paths": "5.1.4",
|
|
531
|
+
vitest: "3.2.4"
|
|
534
532
|
};
|
|
535
|
-
var packageManager = "yarn@
|
|
533
|
+
var packageManager = "yarn@4.9.2";
|
|
536
534
|
var pkg = {
|
|
537
535
|
name: name,
|
|
538
536
|
version: version,
|
|
@@ -558,7 +556,7 @@ class JillApplication {
|
|
|
558
556
|
// Create container
|
|
559
557
|
this.container = container.createChild();
|
|
560
558
|
// Create parser
|
|
561
|
-
this.parser = yargs().scriptName(
|
|
559
|
+
this.parser = yargs().scriptName('jill').completion('completion', 'Generate bash completion script').help('help', 'Show help for a command').version('version', 'Show version', pkg.version).wrap(process.stdout.columns).exitProcess(false);
|
|
562
560
|
}
|
|
563
561
|
// Methods
|
|
564
562
|
_prepareParser(commands) {
|
|
@@ -566,8 +564,8 @@ class JillApplication {
|
|
|
566
564
|
return this.parser.command(commands).recommendCommands().strict().fail(false);
|
|
567
565
|
}
|
|
568
566
|
async _loadPlugins() {
|
|
569
|
-
this.logger.child(withLabel(
|
|
570
|
-
const { CorePlugin } = await import('./core.plugin-
|
|
567
|
+
this.logger.child(withLabel('plugin')).verbose('Loading plugin <core>');
|
|
568
|
+
const { CorePlugin } = await import('./core.plugin-CxgfxFUI.js');
|
|
571
569
|
this.container.load(getModule(CorePlugin, true));
|
|
572
570
|
await this.plugins.loadPlugins(this.container);
|
|
573
571
|
}
|
|
@@ -596,7 +594,10 @@ class JillApplication {
|
|
|
596
594
|
mod.handler = async (args)=>{
|
|
597
595
|
if (cmd instanceof TaskCommand) {
|
|
598
596
|
const tasks = [];
|
|
599
|
-
for await (const tsk of cmd.prepare(
|
|
597
|
+
for await (const tsk of cmd.prepare({
|
|
598
|
+
...args,
|
|
599
|
+
plan: true
|
|
600
|
+
})){
|
|
600
601
|
tasks.push(tsk);
|
|
601
602
|
}
|
|
602
603
|
resolve(tasks);
|
|
@@ -622,7 +623,7 @@ container.bind(JillApplication).toDynamicValue(({ container })=>{
|
|
|
622
623
|
const ctx = container.get(ContextService);
|
|
623
624
|
const app = ctx.application;
|
|
624
625
|
if (!app) {
|
|
625
|
-
throw new Error(
|
|
626
|
+
throw new Error('Cannot inject current application, it not yet defined');
|
|
626
627
|
}
|
|
627
628
|
return app;
|
|
628
629
|
}).whenTargetNamed(CURRENT);
|
|
@@ -633,4 +634,4 @@ var jill_application = /*#__PURE__*/Object.freeze({
|
|
|
633
634
|
});
|
|
634
635
|
|
|
635
636
|
export { JillApplication as J, TaskCommand as T, jill_application as j };
|
|
636
|
-
//# sourceMappingURL=jill.application-
|
|
637
|
+
//# sourceMappingURL=jill.application-DNJpmnCF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jill.application-DNJpmnCF.js","sources":["../src/ui/hooks/useIsVerbose.ts","../src/ui/hooks/useFlatTaskTree.ts","../src/ui/task-tree-stats.tsx","../src/ui/task-tree-completed.tsx","../src/ui/hooks/useStdoutDimensions.ts","../src/ui/task-tree-scrollable-spinner.tsx","../src/ui/task-tree-full-spinner.tsx","../src/ui/task-tree-spinner.tsx","../src/modules/task-command.tsx","../src/jill.application.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { CONFIG } from '@/src/config/config-loader.ts';\nimport { container } from '@/src/inversify.config.ts';\n\nexport function useIsVerbose() {\n return useMemo(() => {\n const config = container.get(CONFIG);\n\n if (config.verbose) {\n return ['verbose', 'debug'].includes(config.verbose);\n } else {\n return false;\n }\n }, []);\n}\n","import { GroupTask, Task, TaskManager } from '@jujulego/tasks';\nimport { useLayoutEffect, useMemo, useState } from 'react';\n\nimport { Workspace } from '@/src/project/workspace.ts';\nimport { CommandTask, isCommandCtx } from '@/src/tasks/command-task.ts';\nimport { ScriptTask } from '@/src/tasks/script-task.ts';\nimport { useIsVerbose } from '@/src/ui/hooks/useIsVerbose.ts';\n\n// Types\nexport interface FlatTask {\n task: Task;\n level: number;\n}\n\n// Utils\n/**\n * Sorts tasks according to workspace and script, keeping command at the end\n */\nexport function taskComparator(a: Task, b: Task) {\n // 1 - compare kind\n const kindA = a instanceof CommandTask ? 0 : 1;\n const kindB = b instanceof CommandTask ? 0 : 1;\n\n if (kindA !== kindB) {\n return kindB - kindA;\n }\n\n // 2 - compare workspaces\n const wksA = 'workspace' in a.context ? (a.context.workspace as Workspace).name : '\\uffff';\n const wksB = 'workspace' in b.context ? (b.context.workspace as Workspace).name : '\\uffff';\n const wksDiff = wksA.localeCompare(wksB);\n\n if (wksDiff !== 0) {\n return wksDiff;\n }\n\n // 1 - compare scripts\n const scriptA = 'script' in a.context ? a.context.script as string : '\\uffff';\n const scriptB = 'script' in b.context ? b.context.script as string : '\\uffff';\n\n return scriptA.localeCompare(scriptB);\n}\n\n/**\n * Extract tasks to be printed, with their level in the tree\n */\nexport function * flatTasks(tasks: readonly Task[], isVerbose: boolean, groupId?: string, level = 0): Generator<FlatTask> {\n for (const task of tasks) {\n if (task.group?.id !== groupId) {\n continue;\n }\n\n yield { task, level };\n\n if (task instanceof GroupTask) {\n const isCommandGroup = task.tasks.some((t) => !isCommandCtx(t.context));\n const hasFailed = task.tasks.some((t) => t.status === 'failed');\n const isStarted = task.status === 'running';\n\n if (isVerbose || isCommandGroup || hasFailed || isStarted) {\n let tasks = task.tasks;\n\n if (task instanceof ScriptTask) {\n tasks = [...tasks].sort(taskComparator);\n }\n\n yield* flatTasks(tasks, isVerbose, task.id, level + 1);\n }\n }\n }\n}\n\n// Hook\nexport function useFlatTaskTree(manager: TaskManager): FlatTask[] {\n const isVerbose = useIsVerbose();\n\n const [tasks, setTasks] = useState([...manager.tasks].sort(taskComparator));\n const [version, setVersion] = useState(0);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.on('added', () => {\n if (!dirty) {\n dirty = true;\n\n queueMicrotask(() => {\n setTasks([...manager.tasks].sort(taskComparator));\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.on('started', () => {\n if (!dirty) {\n dirty = true;\n\n setTimeout(() => {\n setVersion((old) => ++old);\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.on('completed', () => {\n if (!dirty) {\n dirty = true;\n\n setTimeout(() => {\n setVersion((old) => ++old);\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n return useMemo(() => {\n return Array.from(flatTasks(tasks, isVerbose));\n }, [tasks, isVerbose, version]);\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport { useLayoutEffect, useState } from 'react';\n\n// Types\nexport interface TaskTreeStatsProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeStats({ manager }: TaskTreeStatsProps) {\n // Follow stats\n const [stats, setStats] = useState(() => {\n const base = { running: 0, done: 0, failed: 0 };\n \n for (const task of manager.tasks) {\n switch (task.status) {\n case 'starting':\n case 'running':\n base.running += task.weight;\n break;\n\n case 'done':\n base.done += task.weight;\n break;\n\n case 'failed':\n base.failed += task.weight;\n break;\n }\n }\n \n return base;\n });\n\n useLayoutEffect(() => manager.on('started', (task) => {\n setStats((old) => ({\n ...old,\n running: old.running + task.weight\n }));\n }), [manager]);\n\n useLayoutEffect(() => manager.on('completed', (task) => {\n setStats((old) => ({\n running: old.running - task.weight,\n done: task.status === 'done' ? old.done + task.weight : old.done,\n failed: task.status === 'failed' ? old.failed + task.weight : old.failed,\n }));\n }), [manager]);\n\n // Render\n return (\n <Text>\n { (stats.running !== 0) && (\n <><Spinner type=\"sand\" /> <Text bold>{ stats.running }</Text> running</>\n ) }\n { (stats.running !== 0 && stats.done !== 0) && (<>, </>) }\n { (stats.done !== 0) && (\n <Text color=\"green\">{ symbols.success } { stats.done } done</Text>\n ) }\n { (stats.running + stats.done !== 0 && stats.failed !== 0) && (<>, </>) }\n { (stats.failed !== 0) && (\n <Text color=\"red\">{ symbols.error } { stats.failed } failed</Text>\n ) }\n </Text>\n );\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Box, Static } from 'ink';\nimport { useMemo } from 'react';\n\nimport { flatTasks, taskComparator } from '@/src/ui/hooks/useFlatTaskTree.ts';\nimport { useIsVerbose } from '@/src/ui/hooks/useIsVerbose.ts';\nimport TaskSpinner from '@/src/ui/task-spinner.tsx';\nimport TaskTreeStats from '@/src/ui/task-tree-stats.tsx';\n\n// Types\nexport interface TaskTreeCompletedProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeCompleted({ manager }: TaskTreeCompletedProps) {\n // Config\n const isVerbose = useIsVerbose();\n\n // Extract all tasks\n const flat = useMemo(() => {\n return Array.from(flatTasks([...manager.tasks].sort(taskComparator), isVerbose));\n }, [manager, isVerbose]);\n\n // Render\n return (\n <>\n <Static items={flat}>\n { ({ task, level }) => (\n <Box key={task.id} marginLeft={level * 2} flexShrink={0}>\n <TaskSpinner task={task} />\n </Box>\n ) }\n </Static>\n <TaskTreeStats manager={manager} />\n </>\n );\n}\n","import { useStdout } from 'ink';\nimport { useEffect, useState } from 'react';\n\nexport function useStdoutDimensions() {\n const { stdout } = useStdout();\n const [dimensions, setDimensions] = useState({\n columns: stdout.columns ?? Infinity,\n rows: stdout.rows ?? Infinity,\n });\n\n useEffect(() => {\n const handler = () => setDimensions({\n columns: stdout.columns ?? Infinity,\n rows: stdout.rows ?? Infinity,\n });\n stdout.on('resize', handler);\n\n return () => {\n stdout.off('resize', handler);\n };\n }, [stdout]);\n\n return dimensions;\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Box, Text, useInput } from 'ink';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { useStdoutDimensions } from '@/src/ui/hooks/useStdoutDimensions.ts';\nimport { useFlatTaskTree } from '@/src/ui/hooks/useFlatTaskTree.ts';\nimport TaskSpinner from '@/src/ui/task-spinner.tsx';\nimport TaskTreeStats from '@/src/ui/task-tree-stats.tsx';\n\n// Types\nexport interface TaskTreeScrollableSpinnerProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeScrollableSpinner({ manager }: TaskTreeScrollableSpinnerProps) {\n const { rows: termHeight } = useStdoutDimensions();\n\n // Extract all tasks\n const flat = useFlatTaskTree(manager);\n\n const maxHeight = useMemo(\n () => Math.min(termHeight - 4, flat.length),\n [termHeight, flat]\n );\n\n // Manage scroll\n const [start, setStart] = useState(0);\n\n const slice = useMemo(\n () => flat.slice(start, start + maxHeight),\n [flat, start, maxHeight]\n );\n\n useEffect(() => {\n if (start + maxHeight > flat.length) {\n setStart(Math.max(flat.length - maxHeight, 0));\n }\n }, [start, flat, maxHeight]);\n\n useInput((_, key) => {\n if (key.upArrow) {\n setStart((old) => Math.max(0, old - 1));\n } else if (key.downArrow) {\n setStart((old) => Math.min(flat.length - maxHeight, old + 1));\n }\n });\n\n // Render\n return (\n <>\n <Box flexDirection=\"column\">\n { slice.map(({ task, level }) => (\n <Box key={task.id} marginLeft={level * 2} flexShrink={0}>\n <TaskSpinner task={task} />\n </Box>\n )) }\n </Box>\n <Text>\n <TaskTreeStats manager={manager} />\n { (maxHeight < flat.length) && (<Text color=\"grey\"> - use keyboard arrows to scroll</Text>) }\n </Text>\n </>\n );\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Box, Text } from 'ink';\n\nimport { useFlatTaskTree } from '@/src/ui/hooks/useFlatTaskTree.ts';\nimport TaskSpinner from '@/src/ui/task-spinner.tsx';\nimport TaskTreeStats from '@/src/ui/task-tree-stats.tsx';\n\n// Types\nexport interface TaskTreeFullSpinnerProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeFullSpinner({ manager }: TaskTreeFullSpinnerProps) {\n const flat = useFlatTaskTree(manager);\n\n // Render\n return (\n <>\n <Box flexDirection=\"column\">\n { flat.map(({ task, level }) => (\n <Box key={task.id} marginLeft={level * 2} flexShrink={0}>\n <TaskSpinner task={task} />\n </Box>\n )) }\n </Box>\n <Text>\n <TaskTreeStats manager={manager} />\n </Text>\n </>\n );\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { useStdin } from 'ink';\n\nimport TaskTreeScrollableSpinner from '@/src/ui/task-tree-scrollable-spinner.tsx';\nimport TaskTreeFullSpinner from '@/src/ui/task-tree-full-spinner.tsx';\n\n// Types\nexport interface TaskTreeSpinnerProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeSpinner({ manager }: TaskTreeSpinnerProps) {\n const stdin = useStdin();\n\n if (stdin.isRawModeSupported) {\n return <TaskTreeScrollableSpinner manager={manager} />;\n } else {\n return <TaskTreeFullSpinner manager={manager} />;\n }\n}\n","import { waitFor$ } from '@jujulego/event-tree';\nimport { Logger } from '@jujulego/logger';\nimport { plan as extractPlan, type Task, type TaskManager, TaskSet, type TaskSummary } from '@jujulego/tasks';\nimport { injectable } from 'inversify';\nimport { type ArgumentsCamelCase, type Argv } from 'yargs';\n\nimport { container, lazyInject } from '@/src/inversify.config.ts';\nimport { isCommandCtx } from '@/src/tasks/command-task.ts';\nimport { isScriptCtx } from '@/src/tasks/script-task.ts';\nimport { TASK_MANAGER } from '@/src/tasks/task-manager.config.ts';\nimport { type AwaitableGenerator } from '@/src/types.ts';\nimport List from '@/src/ui/list.tsx';\nimport TaskTreeCompleted from '@/src/ui/task-tree-completed.tsx';\nimport TaskTreeSpinner from '@/src/ui/task-tree-spinner.tsx';\nimport { ExitException } from '@/src/utils/exit.ts';\nimport { printJson } from '@/src/utils/json.ts';\n\nimport { InkCommand } from './ink-command.tsx';\n\n// Types\nexport interface ITaskCommandArgs {\n plan: boolean;\n 'plan-mode': 'json' | 'list';\n}\n\n// Class\n@injectable()\nexport abstract class TaskCommand<A = unknown> extends InkCommand<A> {\n // Attributes\n @lazyInject(TASK_MANAGER)\n readonly manager: TaskManager;\n\n // Methods\n abstract prepare(args: ArgumentsCamelCase<A>): AwaitableGenerator<Task>;\n\n protected addTaskOptions(parser: Argv): Argv<ITaskCommandArgs> {\n return parser\n .option('plan', {\n type: 'boolean',\n desc: 'Only prints tasks to be run',\n default: false,\n })\n .option('plan-mode', {\n type: 'string',\n desc: 'Plan output mode',\n choices: ['json', 'list'] as const,\n default: 'list' as const\n });\n }\n\n async* render(args: ArgumentsCamelCase<A & ITaskCommandArgs>) {\n // Prepare tasks\n const tasks = new TaskSet();\n\n for await (const tsk of this.prepare(args)) {\n tasks.add(tsk);\n }\n\n if (args.plan) {\n const plan: TaskSummary[] = Array.from(extractPlan(tasks));\n\n if (args.planMode === 'json') {\n printJson(plan);\n } else {\n const data = plan.map((tsk) => ({\n id: tsk.id.substring(0, 6),\n name: tsk.name,\n workspace: isCommandCtx(tsk.context) || isScriptCtx(tsk.context) ? tsk.context.workspace.name : '',\n group: tsk.groupId?.substring(0, 6),\n 'depends on': tsk.dependenciesIds.map(id => id.substring(0, 6)).join(', ')\n }));\n\n yield <List items={data} headers/>;\n }\n } else if (tasks.tasks.length > 0) {\n // Render\n yield <TaskTreeSpinner manager={this.manager} />;\n\n // Start tasks\n tasks.start(this.manager);\n\n const result = await waitFor$(tasks, 'finished');\n\n this.app.clear();\n yield <TaskTreeCompleted manager={this.manager} />;\n\n if (result.failed > 0) {\n throw new ExitException(1);\n }\n } else {\n const logger = container.get(Logger);\n logger.warning('No task found');\n }\n }\n}\n","import { Logger, withLabel } from '@jujulego/logger';\nimport { type Task } from '@jujulego/tasks';\nimport { inject, injectable, type interfaces as int } from 'inversify';\nimport yargs, { type Argv, type CommandModule } from 'yargs';\n\nimport { ContextService, type Context } from '@/src/commons/context.service.ts';\nimport { applyConfigOptions } from '@/src/config/config-options.ts';\nimport { CURRENT } from '@/src/constants.ts';\nimport { container, lazyInjectNamed } from '@/src/inversify.config.ts';\nimport { buildCommandModule, COMMAND, COMMAND_MODULE, getCommandOpts, type ICommand } from '@/src/modules/command.ts';\nimport { getModule } from '@/src/modules/module.ts';\nimport { PluginLoaderService } from '@/src/modules/plugin-loader.service.ts';\nimport { TaskCommand } from '@/src/modules/task-command.tsx';\nimport { type Class } from '@/src/types.ts';\n\n// @ts-ignore: Outside of typescript's rootDir in build\nimport pkg from '../package.json';\n\n// Application\n@injectable()\nexport class JillApplication {\n // Attributes\n readonly container: int.Container;\n readonly parser: Argv;\n\n // Constructor\n constructor(\n @inject(ContextService)\n private readonly context: ContextService,\n @inject(PluginLoaderService)\n private readonly plugins: PluginLoaderService,\n @inject(Logger)\n private readonly logger: Logger,\n ) {\n // Create container\n this.container = container.createChild();\n\n // Create parser\n this.parser = yargs()\n .scriptName('jill')\n .completion('completion', 'Generate bash completion script')\n .help('help', 'Show help for a command')\n .version('version', 'Show version', pkg.version)\n .wrap(process.stdout.columns)\n .exitProcess(false);\n }\n\n // Methods\n private _prepareParser(commands: CommandModule[]): Argv {\n applyConfigOptions(this.parser);\n\n return this.parser\n .command(commands)\n .recommendCommands()\n .strict()\n .fail(false);\n }\n\n private async _loadPlugins(): Promise<void> {\n this.logger.child(withLabel('plugin')).verbose('Loading plugin <core>');\n\n const { CorePlugin } = await import('@/src/core.plugin.ts');\n this.container.load(getModule(CorePlugin, true));\n\n await this.plugins.loadPlugins(this.container);\n }\n\n async run(argv: string | readonly string[]): Promise<void> {\n this.context.reset({ application: this });\n await this._loadPlugins();\n\n // Parse command\n const commands = await this.container.getAllAsync(COMMAND_MODULE);\n\n await this._prepareParser(commands).parseAsync(argv);\n }\n\n async tasksOf(argv: string[], ctx: Omit<Context, 'application'> = {}): Promise<Task[]> {\n this.context.reset({ ...ctx, application: this });\n await this._loadPlugins();\n\n // Prepare commands\n const commands = await this.container.getAllAsync(COMMAND);\n\n return new Promise<Task[]>((resolve, reject) => {\n const modules: CommandModule[] = [];\n\n for (const cmd of commands) {\n const opts = getCommandOpts(cmd.constructor as Class<ICommand>);\n const mod = buildCommandModule(cmd, opts);\n\n mod.handler = async (args) => {\n if (cmd instanceof TaskCommand) {\n const tasks: Task[] = [];\n\n for await (const tsk of cmd.prepare({ ...args, plan: true })) {\n tasks.push(tsk);\n }\n\n resolve(tasks);\n } else {\n resolve([]);\n }\n };\n\n modules.push(mod);\n }\n\n // Parse command\n this._prepareParser(modules)\n .parseAsync(argv)\n .catch(reject);\n });\n }\n}\n\ncontainer.bind(JillApplication)\n .toSelf()\n .inTransientScope()\n .whenTargetIsDefault();\n\n// Lazy injection\nexport function LazyCurrentApplication() {\n return lazyInjectNamed(JillApplication, CURRENT);\n}\n\ncontainer.bind(JillApplication)\n .toDynamicValue(({ container }) => {\n const ctx = container.get(ContextService);\n const app = ctx.application;\n\n if (!app) {\n throw new Error('Cannot inject current application, it not yet defined');\n }\n\n return app;\n })\n .whenTargetNamed(CURRENT);\n"],"names":["useIsVerbose","useMemo","config","container","get","CONFIG","verbose","includes","taskComparator","a","b","kindA","CommandTask","kindB","wksA","context","workspace","name","wksB","wksDiff","localeCompare","scriptA","script","scriptB","flatTasks","tasks","isVerbose","groupId","level","task","group","id","GroupTask","isCommandGroup","some","t","isCommandCtx","hasFailed","status","isStarted","ScriptTask","sort","useFlatTaskTree","manager","setTasks","useState","version","setVersion","useLayoutEffect","dirty","on","queueMicrotask","setTimeout","old","Array","from","TaskTreeStats","stats","setStats","base","running","done","failed","weight","_jsxs","Text","_Fragment","_jsx","Spinner","type","bold","color","symbols","success","error","TaskTreeCompleted","flat","Static","items","Box","marginLeft","flexShrink","TaskSpinner","useStdoutDimensions","stdout","useStdout","dimensions","setDimensions","columns","Infinity","rows","useEffect","handler","off","TaskTreeScrollableSpinner","termHeight","maxHeight","Math","min","length","start","setStart","slice","max","useInput","_","key","upArrow","downArrow","flexDirection","map","TaskTreeFullSpinner","TaskTreeSpinner","stdin","useStdin","isRawModeSupported","TaskCommand","InkCommand","addTaskOptions","parser","option","desc","default","choices","render","args","TaskSet","tsk","prepare","add","plan","extractPlan","planMode","printJson","data","substring","isScriptCtx","dependenciesIds","join","List","headers","result","waitFor$","app","clear","ExitException","logger","Logger","warning","JillApplication","constructor","plugins","createChild","yargs","scriptName","completion","help","pkg","wrap","process","exitProcess","_prepareParser","commands","applyConfigOptions","command","recommendCommands","strict","fail","_loadPlugins","child","withLabel","CorePlugin","load","getModule","loadPlugins","run","argv","reset","application","getAllAsync","COMMAND_MODULE","parseAsync","tasksOf","ctx","COMMAND","Promise","resolve","reject","modules","cmd","opts","getCommandOpts","mod","buildCommandModule","push","catch","bind","toSelf","inTransientScope","whenTargetIsDefault","toDynamicValue","ContextService","Error","whenTargetNamed","CURRENT"],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger } from '@jujulego/logger';
|
|
2
2
|
import { hideBin } from 'yargs/helpers';
|
|
3
|
-
import { m as container, E as ExitException } from './ink-command-
|
|
4
|
-
import { J as JillApplication } from './jill.application-
|
|
3
|
+
import { m as container, E as ExitException } from './ink-command-CsbkuRbm.js';
|
|
4
|
+
import { J as JillApplication } from './jill.application-DNJpmnCF.js';
|
|
5
5
|
import '@swc/helpers/_/_ts_decorate';
|
|
6
6
|
import '@swc/helpers/_/_ts_param';
|
|
7
7
|
import 'inversify';
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../src/main.ts"],"sourcesContent":["import { Logger } from '@jujulego/logger';\nimport { hideBin } from 'yargs/helpers';\n\nimport '@/src/commons/logger.service.ts';\nimport { container } from '@/src/inversify.config.ts';\nimport { JillApplication } from '@/src/jill.application.ts';\nimport { ExitException } from '@/src/utils/exit.ts';\n\n// Bootstrap\n(async () => {\n const app = await container.getAsync(JillApplication);\n\n try {\n await app.run(hideBin(process.argv));\n } catch (err) {\n if (err instanceof ExitException) {\n process.exit(err.code);\n } else {\n console.error(await app.parser.getHelp());\n\n if (err.message) {\n const logger = container.get(Logger);\n logger.error(err.message);\n }\n\n process.exit(1);\n }\n }\n})();\n"],"names":["app","container","getAsync","JillApplication","run","hideBin","process","argv","err","ExitException","exit","code","console","error","parser","getHelp","message","logger","get","Logger"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AACC,CAAA,UAAA;AACC,IAAA,MAAMA,GAAM,GAAA,MAAMC,SAAUC,CAAAA,QAAQ,CAACC,eAAAA,CAAAA
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../src/main.ts"],"sourcesContent":["import { Logger } from '@jujulego/logger';\nimport { hideBin } from 'yargs/helpers';\n\nimport '@/src/commons/logger.service.ts';\nimport { container } from '@/src/inversify.config.ts';\nimport { JillApplication } from '@/src/jill.application.ts';\nimport { ExitException } from '@/src/utils/exit.ts';\n\n// Bootstrap\n(async () => {\n const app = await container.getAsync(JillApplication);\n\n try {\n await app.run(hideBin(process.argv));\n } catch (err) {\n if (err instanceof ExitException) {\n process.exit(err.code);\n } else {\n console.error(await app.parser.getHelp());\n\n if (err.message) {\n const logger = container.get(Logger);\n logger.error(err.message);\n }\n\n process.exit(1);\n }\n }\n})();\n"],"names":["app","container","getAsync","JillApplication","run","hideBin","process","argv","err","ExitException","exit","code","console","error","parser","getHelp","message","logger","get","Logger"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AACC,CAAA,UAAA;AACC,IAAA,MAAMA,GAAM,GAAA,MAAMC,SAAUC,CAAAA,QAAQ,CAACC,eAAAA,CAAAA;IAErC,IAAI;AACF,QAAA,MAAMH,GAAII,CAAAA,GAAG,CAACC,OAAAA,CAAQC,QAAQC,IAAI,CAAA,CAAA;AACpC,KAAA,CAAE,OAAOC,GAAK,EAAA;AACZ,QAAA,IAAIA,eAAeC,aAAe,EAAA;YAChCH,OAAQI,CAAAA,IAAI,CAACF,GAAAA,CAAIG,IAAI,CAAA;SAChB,MAAA;AACLC,YAAAA,OAAAA,CAAQC,KAAK,CAAC,MAAMb,GAAIc,CAAAA,MAAM,CAACC,OAAO,EAAA,CAAA;YAEtC,IAAIP,GAAAA,CAAIQ,OAAO,EAAE;gBACf,MAAMC,MAAAA,GAAShB,SAAUiB,CAAAA,GAAG,CAACC,MAAAA,CAAAA;gBAC7BF,MAAOJ,CAAAA,KAAK,CAACL,GAAAA,CAAIQ,OAAO,CAAA;AAC1B;AAEAV,YAAAA,OAAAA,CAAQI,IAAI,CAAC,CAAA,CAAA;AACf;AACF;AACF,CAAA,GAAA"}
|