@jujulego/jill 2.0.0-rc.1 → 2.0.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/each.d.ts.map +1 -1
- package/dist/commands/each.js +3 -2
- package/dist/commands/each.js.map +1 -1
- package/dist/commands/run.d.ts +2 -2
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +12 -0
- package/dist/commands/run.js.map +1 -1
- package/dist/ui/task-spinner.d.ts.map +1 -1
- package/dist/ui/task-spinner.js +3 -31
- package/dist/ui/task-spinner.js.map +1 -1
- package/dist/ui/tasks-spinner.d.ts.map +1 -1
- package/dist/ui/tasks-spinner.js +25 -3
- package/dist/ui/tasks-spinner.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -2
- package/dist/utils.js.map +1 -1
- package/package.json +3 -6
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"sources":["commands/each.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAA6B,iBAAiB,EAAE,MAAM,YAAY,CAAC;;;;;;;;;;;;;;AAM1E,wBAiHG","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 // Render\n app.rerender(\n <Layout>\n <TasksSpinner manager={manager} />\n </Layout>\n );\n\n // Start and wait for result\n tasks.start();\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"]}
|
package/dist/commands/each.js
CHANGED
|
@@ -97,13 +97,14 @@ const _default = (0, _utils.defineCommand)({
|
|
|
97
97
|
return _yargs.default.exit(1, new Error('No workspace found !'));
|
|
98
98
|
}
|
|
99
99
|
spinner.stop();
|
|
100
|
-
//
|
|
101
|
-
tasks.start();
|
|
100
|
+
// Render
|
|
102
101
|
app.rerender(/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.Layout, {
|
|
103
102
|
children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.TasksSpinner, {
|
|
104
103
|
manager: manager
|
|
105
104
|
})
|
|
106
105
|
}));
|
|
106
|
+
// Start and wait for result
|
|
107
|
+
tasks.start();
|
|
107
108
|
const result = await (0, _eventTree.waitForEvent)(tasks, 'finished');
|
|
108
109
|
if (result.failed > 0) {
|
|
109
110
|
return _yargs.default.exit(1, new Error('A tasks failed !'));
|
|
@@ -1 +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 //
|
|
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 // Render\n app.rerender(\n <Layout>\n <TasksSpinner manager={manager} />\n </Layout>\n );\n\n // Start and wait for result\n tasks.start();\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","rerender","Layout","TasksSpinner","start","result","waitForEvent"],"mappings":"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","file":"each.js"}
|
package/dist/commands/run.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import yargs from 'yargs';
|
|
2
2
|
import { WorkspaceDepsMode } from '../project';
|
|
3
|
-
declare const _default:
|
|
3
|
+
declare const _default: yargs.CommandModule<unknown, {
|
|
4
4
|
script: string;
|
|
5
5
|
} & {
|
|
6
6
|
"deps-mode": WorkspaceDepsMode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["commands/run.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["commands/run.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAa,iBAAiB,EAAE,MAAM,YAAY,CAAC;;;;;;AAM1D,wBAkDG","file":"run.d.ts","sourcesContent":["import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskManager } from '@jujulego/tasks';\nimport ink from 'ink';\nimport yargs from 'yargs';\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 // Wait for result\n const result = await waitForEvent(task, 'completed');\n\n if (result.status === 'failed') {\n return yargs.exit(1, new Error('Task failed !'));\n }\n }\n});\n"]}
|
package/dist/commands/run.js
CHANGED
|
@@ -8,12 +8,19 @@ Object.defineProperty(exports, // Command
|
|
|
8
8
|
get: ()=>_default
|
|
9
9
|
});
|
|
10
10
|
const _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
const _eventTree = require("@jujulego/event-tree");
|
|
11
12
|
const _tasks = require("@jujulego/tasks");
|
|
13
|
+
const _yargs = /*#__PURE__*/ _interopRequireDefault(require("yargs"));
|
|
12
14
|
const _middlewares = require("../middlewares");
|
|
13
15
|
const _project = require("../project");
|
|
14
16
|
const _services = require("../services");
|
|
15
17
|
const _ui = require("../ui");
|
|
16
18
|
const _utils = require("../utils");
|
|
19
|
+
function _interopRequireDefault(obj) {
|
|
20
|
+
return obj && obj.__esModule ? obj : {
|
|
21
|
+
default: obj
|
|
22
|
+
};
|
|
23
|
+
}
|
|
17
24
|
const _default = (0, _utils.defineCommand)({
|
|
18
25
|
command: 'run <script>',
|
|
19
26
|
describe: 'Run script inside workspace',
|
|
@@ -53,6 +60,11 @@ const _default = (0, _utils.defineCommand)({
|
|
|
53
60
|
manager: manager
|
|
54
61
|
})
|
|
55
62
|
}));
|
|
63
|
+
// Wait for result
|
|
64
|
+
const result = await (0, _eventTree.waitForEvent)(task, 'completed');
|
|
65
|
+
if (result.status === 'failed') {
|
|
66
|
+
return _yargs.default.exit(1, new Error('Task failed !'));
|
|
67
|
+
}
|
|
56
68
|
}
|
|
57
69
|
});
|
|
58
70
|
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +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;;;;+
|
|
1
|
+
{"version":3,"sources":["commands/run.js"],"sourcesContent":["import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskManager } from '@jujulego/tasks';\nimport ink from 'ink';\nimport yargs from 'yargs';\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 // Wait for result\n const result = await waitForEvent(task, 'completed');\n\n if (result.status === 'failed') {\n return yargs.exit(1, new Error('Task failed !'));\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","result","waitForEvent","status","exit","Error"],"mappings":"AAAA;;;;+BAWA,UAAU;AACV;;aAAA;;;2BAZ6B;uBACD;4DAEV;6BAEmC;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;;;QAI3B,kBAAkB;QAClB,MAAMiB,SAAS,MAAMC,IAAAA,uBAAY,EAACV,MAAM;QAExC,IAAIS,OAAOE,MAAM,KAAK,UAAU;YAC9B,OAAOzC,cAAK,CAAC0C,IAAI,CAAC,GAAG,IAAIC,MAAM;QACjC,CAAC;IACH;AACF","file":"run.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ui/task-spinner.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["ui/task-spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAKvC,OAAO,EAAE,EAAE,EAA6B,MAAM,OAAO,CAAC;AAKtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,IAAI,CAAC;CACZ;AAGD,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAmD5C,CAAC","file":"task-spinner.d.ts","sourcesContent":["import { Task } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport ms from 'ms';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { TaskName } from './task-name';\n\n// Types\nexport interface TaskSpinnerProps {\n task: Task;\n}\n\n// Components\nexport const TaskSpinner: FC<TaskSpinnerProps> = ({ task }) => {\n // State\n const [status, setStatus] = useState(task.status);\n const [time, setTime] = useState(0);\n\n // Effects\n useLayoutEffect(() => {\n return task.subscribe('status', (event) => {\n setStatus(event.status);\n });\n }, [task]);\n\n useLayoutEffect(() => {\n return task.subscribe('completed', ({ duration }) => {\n setTime(duration);\n });\n }, [task]);\n\n // Render\n switch (status) {\n case 'blocked':\n case 'ready':\n return (\n <Text color=\"grey\">\n <Spinner type=\"line2\" />{' '}<TaskName task={task} />\n </Text>\n );\n\n case 'running':\n return (\n <Text>\n <Spinner />{' '}<TaskName task={task} />\n </Text>\n );\n\n case 'done':\n return (\n <Text>\n <Text color=\"green\">{ symbols.success }{' '}<TaskName task={task} /></Text>\n <Text color=\"magenta\">{' '}took { ms(time) }</Text>\n </Text>\n );\n\n case 'failed':\n return (\n <Text>\n <Text color=\"red\">{ symbols.error }{' '}<TaskName task={task} /></Text>\n <Text color=\"magenta\">{' '}took { ms(time) }</Text>\n </Text>\n );\n }\n};\n"]}
|
package/dist/ui/task-spinner.js
CHANGED
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "TaskSpinner", {
|
|
|
7
7
|
get: ()=>TaskSpinner
|
|
8
8
|
});
|
|
9
9
|
const _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
-
const _eventTree = require("@jujulego/event-tree");
|
|
11
10
|
const _ink = require("ink");
|
|
12
11
|
const _inkSpinner = /*#__PURE__*/ _interopRequireDefault(require("ink-spinner"));
|
|
13
12
|
const _logSymbols = /*#__PURE__*/ _interopRequireDefault(require("log-symbols"));
|
|
@@ -32,36 +31,9 @@ const TaskSpinner = ({ task })=>{
|
|
|
32
31
|
task
|
|
33
32
|
]);
|
|
34
33
|
(0, _react.useLayoutEffect)(()=>{
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if ([
|
|
39
|
-
'blocked',
|
|
40
|
-
'ready'
|
|
41
|
-
]?.includes(task.status)) {
|
|
42
|
-
await (0, _eventTree.waitForEvent)(task, 'status.running', {
|
|
43
|
-
signal: ctrl.signal
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
const start = Date.now();
|
|
47
|
-
if (task.status === 'running') {
|
|
48
|
-
await Promise.race([
|
|
49
|
-
(0, _eventTree.waitForEvent)(task, 'status.done', {
|
|
50
|
-
signal: ctrl.signal
|
|
51
|
-
}),
|
|
52
|
-
(0, _eventTree.waitForEvent)(task, 'status.failed', {
|
|
53
|
-
signal: ctrl.signal
|
|
54
|
-
})
|
|
55
|
-
]);
|
|
56
|
-
}
|
|
57
|
-
setTime(Date.now() - start);
|
|
58
|
-
} catch (err) {
|
|
59
|
-
if (err) {
|
|
60
|
-
throw err;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
})();
|
|
64
|
-
return ()=>ctrl.abort();
|
|
34
|
+
return task.subscribe('completed', ({ duration })=>{
|
|
35
|
+
setTime(duration);
|
|
36
|
+
});
|
|
65
37
|
}, [
|
|
66
38
|
task
|
|
67
39
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ui/task-spinner.js"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["ui/task-spinner.js"],"sourcesContent":["import { Task } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport ms from 'ms';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { TaskName } from './task-name';\n\n// Types\nexport interface TaskSpinnerProps {\n task: Task;\n}\n\n// Components\nexport const TaskSpinner: FC<TaskSpinnerProps> = ({ task }) => {\n // State\n const [status, setStatus] = useState(task.status);\n const [time, setTime] = useState(0);\n\n // Effects\n useLayoutEffect(() => {\n return task.subscribe('status', (event) => {\n setStatus(event.status);\n });\n }, [task]);\n\n useLayoutEffect(() => {\n return task.subscribe('completed', ({ duration }) => {\n setTime(duration);\n });\n }, [task]);\n\n // Render\n switch (status) {\n case 'blocked':\n case 'ready':\n return (\n <Text color=\"grey\">\n <Spinner type=\"line2\" />{' '}<TaskName task={task} />\n </Text>\n );\n\n case 'running':\n return (\n <Text>\n <Spinner />{' '}<TaskName task={task} />\n </Text>\n );\n\n case 'done':\n return (\n <Text>\n <Text color=\"green\">{ symbols.success }{' '}<TaskName task={task} /></Text>\n <Text color=\"magenta\">{' '}took { ms(time) }</Text>\n </Text>\n );\n\n case 'failed':\n return (\n <Text>\n <Text color=\"red\">{ symbols.error }{' '}<TaskName task={task} /></Text>\n <Text color=\"magenta\">{' '}took { ms(time) }</Text>\n </Text>\n );\n }\n};\n"],"names":["TaskSpinner","task","status","setStatus","useState","time","setTime","useLayoutEffect","subscribe","event","duration","Text","color","Spinner","type","TaskName","symbols","success","ms","error"],"mappings":"AAAA;;;;+BAeaA;;aAAAA;;;qBAdQ;iEACD;iEACA;yDACL;uBAC+B;0BAErB;;;;;;AAQlB,MAAMA,cAAoC,CAAC,EAAEC,KAAI,EAAE,GAAK;IAC7D,QAAQ;IACR,MAAM,CAACC,QAAQC,UAAU,GAAGC,IAAAA,eAAQ,EAACH,KAAKC,MAAM;IAChD,MAAM,CAACG,MAAMC,QAAQ,GAAGF,IAAAA,eAAQ,EAAC;IAEjC,UAAU;IACVG,IAAAA,sBAAe,EAAC,IAAM;QACpB,OAAON,KAAKO,SAAS,CAAC,UAAU,CAACC,QAAU;YACzCN,UAAUM,MAAMP,MAAM;QACxB;IACF,GAAG;QAACD;KAAK;IAETM,IAAAA,sBAAe,EAAC,IAAM;QACpB,OAAON,KAAKO,SAAS,CAAC,aAAa,CAAC,EAAEE,SAAQ,EAAE,GAAK;YACnDJ,QAAQI;QACV;IACF,GAAG;QAACT;KAAK;IAET,SAAS;IACT,OAAQC;QACN,KAAK;QACL,KAAK;YACH,qBACE,sBAACS,SAAI;gBAACC,OAAM;;kCACV,qBAACC,mBAAO;wBAACC,MAAK;;oBAAW;kCAAI,qBAACC,kBAAQ;wBAACd,MAAMA;;;;QAInD,KAAK;YACH,qBACE,sBAACU,SAAI;;kCACH,qBAACE,mBAAO;oBAAI;kCAAI,qBAACE,kBAAQ;wBAACd,MAAMA;;;;QAItC,KAAK;YACH,qBACE,sBAACU,SAAI;;kCACH,sBAACA,SAAI;wBAACC,OAAM;;4BAAUI,mBAAO,CAACC,OAAO;4BAAG;0CAAI,qBAACF,kBAAQ;gCAACd,MAAMA;;;;kCAC5D,sBAACU,SAAI;wBAACC,OAAM;;4BAAW;4BAAI;4BAAOM,IAAAA,WAAE,EAACb;;;;;QAI3C,KAAK;YACH,qBACE,sBAACM,SAAI;;kCACH,sBAACA,SAAI;wBAACC,OAAM;;4BAAQI,mBAAO,CAACG,KAAK;4BAAG;0CAAI,qBAACJ,kBAAQ;gCAACd,MAAMA;;;;kCACxD,sBAACU,SAAI;wBAACC,OAAM;;4BAAW;4BAAI;4BAAOM,IAAAA,WAAE,EAACb;;;;;IAG7C;AACF","file":"task-spinner.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ui/tasks-spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"sources":["ui/tasks-spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAA6B,MAAM,OAAO,CAAC;AAKtD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;CACtB;AAGD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAyB9C,CAAC","file":"tasks-spinner.d.ts","sourcesContent":["import { TaskManager } from '@jujulego/tasks';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { TaskSpinner } from './task-spinner';\n\n// Types\nexport interface TasksSpinnerProps {\n manager: TaskManager;\n}\n\n// Components\nexport const TasksSpinner: FC<TasksSpinnerProps> = ({ manager }) => {\n const [tasks, setTasks] = useState([...manager.tasks]);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.subscribe('added', () => {\n if (!dirty) {\n dirty = true;\n\n queueMicrotask(() => {\n setTasks([...manager.tasks]);\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n return (\n <>\n { tasks.map((task) => (\n <TaskSpinner key={task.id} task={task}/>\n )) }\n </>\n );\n};\n"]}
|
package/dist/ui/tasks-spinner.js
CHANGED
|
@@ -7,11 +7,33 @@ Object.defineProperty(exports, "TasksSpinner", {
|
|
|
7
7
|
get: ()=>TasksSpinner
|
|
8
8
|
});
|
|
9
9
|
const _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
const _react = require("react");
|
|
10
11
|
const _taskSpinner = require("./task-spinner");
|
|
11
|
-
const TasksSpinner = ({ manager })
|
|
12
|
-
|
|
12
|
+
const TasksSpinner = ({ manager })=>{
|
|
13
|
+
const [tasks, setTasks] = (0, _react.useState)([
|
|
14
|
+
...manager.tasks
|
|
15
|
+
]);
|
|
16
|
+
(0, _react.useLayoutEffect)(()=>{
|
|
17
|
+
let dirty = false;
|
|
18
|
+
return manager.subscribe('added', ()=>{
|
|
19
|
+
if (!dirty) {
|
|
20
|
+
dirty = true;
|
|
21
|
+
queueMicrotask(()=>{
|
|
22
|
+
setTasks([
|
|
23
|
+
...manager.tasks
|
|
24
|
+
]);
|
|
25
|
+
dirty = false;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}, [
|
|
30
|
+
manager
|
|
31
|
+
]);
|
|
32
|
+
return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
33
|
+
children: tasks.map((task)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_taskSpinner.TaskSpinner, {
|
|
13
34
|
task: task
|
|
14
|
-
},
|
|
35
|
+
}, task.id))
|
|
15
36
|
});
|
|
37
|
+
};
|
|
16
38
|
|
|
17
39
|
//# sourceMappingURL=tasks-spinner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ui/tasks-spinner.js"],"sourcesContent":["import { TaskManager } from '@jujulego/tasks';\nimport { FC } from 'react';\n\nimport { TaskSpinner } from './task-spinner';\n\n// Types\nexport interface TasksSpinnerProps {\n manager: TaskManager;\n}\n\n// Components\nexport const TasksSpinner: FC<TasksSpinnerProps> = ({ manager }) => (\n
|
|
1
|
+
{"version":3,"sources":["ui/tasks-spinner.js"],"sourcesContent":["import { TaskManager } from '@jujulego/tasks';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { TaskSpinner } from './task-spinner';\n\n// Types\nexport interface TasksSpinnerProps {\n manager: TaskManager;\n}\n\n// Components\nexport const TasksSpinner: FC<TasksSpinnerProps> = ({ manager }) => {\n const [tasks, setTasks] = useState([...manager.tasks]);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.subscribe('added', () => {\n if (!dirty) {\n dirty = true;\n\n queueMicrotask(() => {\n setTasks([...manager.tasks]);\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n return (\n <>\n { tasks.map((task) => (\n <TaskSpinner key={task.id} task={task}/>\n )) }\n </>\n );\n};\n"],"names":["TasksSpinner","manager","tasks","setTasks","useState","useLayoutEffect","dirty","subscribe","queueMicrotask","map","task","TaskSpinner","id"],"mappings":"AAAA;;;;+BAWaA;;aAAAA;;;uBAViC;6BAElB;AAQrB,MAAMA,eAAsC,CAAC,EAAEC,QAAO,EAAE,GAAK;IAClE,MAAM,CAACC,OAAOC,SAAS,GAAGC,IAAAA,eAAQ,EAAC;WAAIH,QAAQC,KAAK;KAAC;IAErDG,IAAAA,sBAAe,EAAC,IAAM;QACpB,IAAIC,QAAQ,KAAK;QAEjB,OAAOL,QAAQM,SAAS,CAAC,SAAS,IAAM;YACtC,IAAI,CAACD,OAAO;gBACVA,QAAQ,IAAI;gBAEZE,eAAe,IAAM;oBACnBL,SAAS;2BAAIF,QAAQC,KAAK;qBAAC;oBAC3BI,QAAQ,KAAK;gBACf;YACF,CAAC;QACH;IACF,GAAG;QAACL;KAAQ;IAEZ,qBACE;kBACIC,MAAMO,GAAG,CAAC,CAACC,qBACX,qBAACC,wBAAW;gBAAeD,MAAMA;eAAfA,KAAKE,EAAE;;AAIjC","file":"tasks-spinner.js"}
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,wBAAuB,OAAO,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAIvF;AAED,wBAAuB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,wBAAuB,OAAO,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAIvF;AAED,wBAAuB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CA6BnG;AAGD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAYtF;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAErF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAErF;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C","file":"utils.d.ts","sourcesContent":["import { streamEvents } from '@jujulego/event-tree';\nimport { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { Arguments, Argv, CommandModule } from 'yargs';\nimport { Awaitable } from './types';\n\n// Stream utils\nexport async function* combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T> {\n for (const gen of generators) {\n yield* gen;\n }\n}\n\nexport async function *streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string> {\n // Abort\n const ctrl = new AbortController();\n\n task.subscribe('completed', () => ctrl.abort());\n\n // Stream\n let current = '';\n\n try {\n for await (const chunk of streamEvents(task, `stream.${stream}`, { signal: ctrl.signal })) {\n const data = current + chunk.data.toString('utf-8');\n const lines = data.split(/\\r?\\n/g);\n\n current = lines.pop() ?? '';\n\n for (const line of lines) {\n yield line;\n }\n }\n } catch (err) {\n if (task.exitCode !== 0) {\n throw err;\n }\n\n if (current) {\n yield current;\n }\n }\n}\n\n// Command utils\nexport interface Middleware<T = unknown, U = unknown> {\n builder?: (yargs: Argv<T>) => Argv<U>;\n handler(args: Arguments<U>): Awaitable<void>;\n}\n\nexport function applyMiddlewares<T>(yargs: Argv<T>, middlewares: Middleware[]): Argv<T> {\n let tmp: Argv<unknown> = yargs;\n\n for (const middleware of middlewares) {\n if (middleware.builder) {\n tmp = middleware.builder(tmp);\n }\n\n tmp.middleware(middleware.handler);\n }\n\n return tmp as Argv<T>;\n}\n\nexport function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U> {\n return command;\n}\n\nexport function defineMiddleware<T, U>(middleware: Middleware<T, U>): Middleware<T, U> {\n return middleware;\n}\n\n// String utils\nexport function capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n}\n"]}
|
package/dist/utils.js
CHANGED
|
@@ -25,8 +25,7 @@ async function* combine(...generators) {
|
|
|
25
25
|
async function* streamLines(task, stream) {
|
|
26
26
|
// Abort
|
|
27
27
|
const ctrl = new AbortController();
|
|
28
|
-
task.subscribe('
|
|
29
|
-
task.subscribe('status.failed', ()=>ctrl.abort());
|
|
28
|
+
task.subscribe('completed', ()=>ctrl.abort());
|
|
30
29
|
// Stream
|
|
31
30
|
let current = '';
|
|
32
31
|
try {
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils.js"],"sourcesContent":["import { streamEvents } from '@jujulego/event-tree';\nimport { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { Arguments, Argv, CommandModule } from 'yargs';\nimport { Awaitable } from './types';\n\n// Stream utils\nexport async function* combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T> {\n for (const gen of generators) {\n yield* gen;\n }\n}\n\nexport async function *streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string> {\n // Abort\n const ctrl = new AbortController();\n\n task.subscribe('
|
|
1
|
+
{"version":3,"sources":["utils.js"],"sourcesContent":["import { streamEvents } from '@jujulego/event-tree';\nimport { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { Arguments, Argv, CommandModule } from 'yargs';\nimport { Awaitable } from './types';\n\n// Stream utils\nexport async function* combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T> {\n for (const gen of generators) {\n yield* gen;\n }\n}\n\nexport async function *streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string> {\n // Abort\n const ctrl = new AbortController();\n\n task.subscribe('completed', () => ctrl.abort());\n\n // Stream\n let current = '';\n\n try {\n for await (const chunk of streamEvents(task, `stream.${stream}`, { signal: ctrl.signal })) {\n const data = current + chunk.data.toString('utf-8');\n const lines = data.split(/\\r?\\n/g);\n\n current = lines.pop() ?? '';\n\n for (const line of lines) {\n yield line;\n }\n }\n } catch (err) {\n if (task.exitCode !== 0) {\n throw err;\n }\n\n if (current) {\n yield current;\n }\n }\n}\n\n// Command utils\nexport interface Middleware<T = unknown, U = unknown> {\n builder?: (yargs: Argv<T>) => Argv<U>;\n handler(args: Arguments<U>): Awaitable<void>;\n}\n\nexport function applyMiddlewares<T>(yargs: Argv<T>, middlewares: Middleware[]): Argv<T> {\n let tmp: Argv<unknown> = yargs;\n\n for (const middleware of middlewares) {\n if (middleware.builder) {\n tmp = middleware.builder(tmp);\n }\n\n tmp.middleware(middleware.handler);\n }\n\n return tmp as Argv<T>;\n}\n\nexport function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U> {\n return command;\n}\n\nexport function defineMiddleware<T, U>(middleware: Middleware<T, U>): Middleware<T, U> {\n return middleware;\n}\n\n// String utils\nexport function capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n}\n"],"names":["combine","streamLines","applyMiddlewares","defineCommand","defineMiddleware","capitalize","generators","gen","task","stream","ctrl","AbortController","subscribe","abort","current","chunk","streamEvents","signal","data","toString","lines","split","pop","line","err","exitCode","yargs","middlewares","tmp","middleware","builder","handler","command","txt","charAt","toUpperCase","substring","toLowerCase"],"mappings":"AAAA;;;;;;;;;;;IAMuBA,OAAO,MAAPA;IAMAC,WAAW,MAAXA;IAqCPC,gBAAgB,MAAhBA;IAcAC,aAAa,MAAbA;IAIAC,gBAAgB,MAAhBA;IAKAC,UAAU,MAAVA;;2BAxEa;AAMtB,gBAAgBL,QAAW,GAAGM,UAA+B,EAAqB;IACvF,KAAK,MAAMC,OAAOD,WAAY;QAC5B,OAAOC;IACT;AACF;AAEO,gBAAgBN,YAAYO,IAAe,EAAEC,MAAuB,EAA0B;IACnG,QAAQ;IACR,MAAMC,OAAO,IAAIC;IAEjBH,KAAKI,SAAS,CAAC,aAAa,IAAMF,KAAKG,KAAK;IAE5C,SAAS;IACT,IAAIC,UAAU;IAEd,IAAI;QACF,WAAW,MAAMC,SAASC,IAAAA,uBAAY,EAACR,MAAM,CAAC,OAAO,EAAEC,OAAO,CAAC,EAAE;YAAEQ,QAAQP,KAAKO,MAAM;QAAC,GAAI;YACzF,MAAMC,OAAOJ,UAAUC,MAAMG,IAAI,CAACC,QAAQ,CAAC;YAC3C,MAAMC,QAAQF,KAAKG,KAAK,CAAC;YAEzBP,UAAUM,MAAME,GAAG,MAAM;YAEzB,KAAK,MAAMC,QAAQH,MAAO;gBACxB,MAAMG;YACR;QACF;IACF,EAAE,OAAOC,KAAK;QACZ,IAAIhB,KAAKiB,QAAQ,KAAK,GAAG;YACvB,MAAMD,IAAI;QACZ,CAAC;QAED,IAAIV,SAAS;YACX,MAAMA;QACR,CAAC;IACH;AACF;AAQO,SAASZ,iBAAoBwB,KAAc,EAAEC,WAAyB,EAAW;IACtF,IAAIC,MAAqBF;IAEzB,KAAK,MAAMG,cAAcF,YAAa;QACpC,IAAIE,WAAWC,OAAO,EAAE;YACtBF,MAAMC,WAAWC,OAAO,CAACF;QAC3B,CAAC;QAEDA,IAAIC,UAAU,CAACA,WAAWE,OAAO;IACnC;IAEA,OAAOH;AACT;AAEO,SAASzB,cAAoB6B,OAA4B,EAAuB;IACrF,OAAOA;AACT;AAEO,SAAS5B,iBAAuByB,UAA4B,EAAoB;IACrF,OAAOA;AACT;AAGO,SAASxB,WAAW4B,GAAW,EAAU;IAC9C,OAAOA,IAAIC,MAAM,CAAC,GAAGC,WAAW,KAAKF,IAAIG,SAAS,CAAC,GAAGC,WAAW;AACnE","file":"utils.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jujulego/jill",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"node": "^16"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@jujulego/event-tree": "^1.1.0-rc.
|
|
32
|
-
"@jujulego/tasks": "^1.0.0-rc.
|
|
31
|
+
"@jujulego/event-tree": "^1.1.0-rc.2",
|
|
32
|
+
"@jujulego/tasks": "^1.0.0-rc.5",
|
|
33
33
|
"async-lock": "^1.3.1",
|
|
34
34
|
"chalk": "^4.1.2",
|
|
35
35
|
"ink": "^3.2.0",
|
|
@@ -44,8 +44,6 @@
|
|
|
44
44
|
"semver": "^7.3.5",
|
|
45
45
|
"slugify": "^1.6.5",
|
|
46
46
|
"tiny-glob": "^0.2.9",
|
|
47
|
-
"tree-kill": "^1.2.2",
|
|
48
|
-
"use-sync-external-store": "^1.2.0",
|
|
49
47
|
"winston": "^3.6.0",
|
|
50
48
|
"winston-transport": "^4.5.0",
|
|
51
49
|
"yargs": "^17.6.0"
|
|
@@ -63,7 +61,6 @@
|
|
|
63
61
|
"@types/normalize-package-data": "2.4.1",
|
|
64
62
|
"@types/react": "17.0.50",
|
|
65
63
|
"@types/semver": "7.3.9",
|
|
66
|
-
"@types/use-sync-external-store": "^0.0.3",
|
|
67
64
|
"@types/yargs": "17.0.13",
|
|
68
65
|
"@typescript-eslint/eslint-plugin": "5.39.0",
|
|
69
66
|
"@typescript-eslint/parser": "5.39.0",
|