@jujulego/jill 3.0.0-alpha.1 → 3.0.0-alpha.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.
Files changed (104) hide show
  1. package/README.md +1 -2
  2. package/bin/jill.js +1 -0
  3. package/dist/TaskName.js +33 -0
  4. package/dist/TaskName.js.map +1 -0
  5. package/dist/inked.js +66 -0
  6. package/dist/inked.js.map +1 -0
  7. package/dist/instrument.js +8 -0
  8. package/dist/instrument.js.map +1 -0
  9. package/dist/list.ink.js +50 -0
  10. package/dist/list.ink.js.map +1 -0
  11. package/dist/main.js +44 -35
  12. package/dist/main.js.map +1 -1
  13. package/dist/parser.js +2104 -0
  14. package/dist/parser.js.map +1 -0
  15. package/dist/planner.service.js +58 -0
  16. package/dist/planner.service.js.map +1 -0
  17. package/dist/task-exec.ink.js +539 -0
  18. package/dist/task-exec.ink.js.map +1 -0
  19. package/dist/task-plan.ink.js +114 -0
  20. package/dist/task-plan.ink.js.map +1 -0
  21. package/dist/tree.ink.js +185 -0
  22. package/dist/tree.ink.js.map +1 -0
  23. package/dist/tsconfig.build.tsbuildinfo +1 -1
  24. package/package.json +46 -45
  25. package/dist/ajv.config.d.ts +0 -3
  26. package/dist/commands/each.d.ts +0 -25
  27. package/dist/commands/exec.d.ts +0 -26
  28. package/dist/commands/group.d.ts +0 -16
  29. package/dist/commands/list.d.ts +0 -30
  30. package/dist/commands/run.d.ts +0 -24
  31. package/dist/commands/tree.d.ts +0 -6
  32. package/dist/commons/context.service.d.ts +0 -23
  33. package/dist/commons/git.service.d.ts +0 -62
  34. package/dist/commons/logger/log.gateway.d.ts +0 -18
  35. package/dist/commons/logger/parameters.d.ts +0 -2
  36. package/dist/commons/logger/thread.gateway.d.ts +0 -12
  37. package/dist/commons/logger/types.d.ts +0 -2
  38. package/dist/commons/logger.service.d.ts +0 -1
  39. package/dist/config/config-loader.d.ts +0 -4
  40. package/dist/config/config-options.d.ts +0 -5
  41. package/dist/config/types.d.ts +0 -8
  42. package/dist/config/utils.d.ts +0 -5
  43. package/dist/constants.d.ts +0 -1
  44. package/dist/core.plugin-CxgfxFUI.js +0 -642
  45. package/dist/core.plugin-CxgfxFUI.js.map +0 -1
  46. package/dist/core.plugin.d.ts +0 -2
  47. package/dist/filters/affected.filter.d.ts +0 -12
  48. package/dist/filters/pipeline.d.ts +0 -11
  49. package/dist/filters/private.filter.d.ts +0 -7
  50. package/dist/filters/scripts.filter.d.ts +0 -8
  51. package/dist/index.d.ts +0 -45
  52. package/dist/index.js +0 -35
  53. package/dist/index.js.map +0 -1
  54. package/dist/ink-command-CsbkuRbm.js +0 -2071
  55. package/dist/ink-command-CsbkuRbm.js.map +0 -1
  56. package/dist/ink.config.d.ts +0 -3
  57. package/dist/inversify.config.d.ts +0 -4
  58. package/dist/jill.application-DNJpmnCF.js +0 -637
  59. package/dist/jill.application-DNJpmnCF.js.map +0 -1
  60. package/dist/jill.application.d.ts +0 -19
  61. package/dist/main.d.ts +0 -1
  62. package/dist/middlewares/load-project.d.ts +0 -21
  63. package/dist/middlewares/load-workspace.d.ts +0 -20
  64. package/dist/modules/command.d.ts +0 -20
  65. package/dist/modules/ink-command.d.ts +0 -11
  66. package/dist/modules/middleware.d.ts +0 -8
  67. package/dist/modules/module.d.ts +0 -7
  68. package/dist/modules/plugin-loader.service.d.ts +0 -10
  69. package/dist/modules/plugin.d.ts +0 -14
  70. package/dist/modules/service.d.ts +0 -8
  71. package/dist/modules/task-command.d.ts +0 -14
  72. package/dist/project/project.d.ts +0 -27
  73. package/dist/project/project.repository.d.ts +0 -15
  74. package/dist/project/types.d.ts +0 -1
  75. package/dist/project/workspace.d.ts +0 -41
  76. package/dist/tasks/command-task.d.ts +0 -15
  77. package/dist/tasks/errors.d.ts +0 -4
  78. package/dist/tasks/script-task.d.ts +0 -27
  79. package/dist/tasks/task-expression.service.d.ts +0 -25
  80. package/dist/tasks/task-manager.config.d.ts +0 -3
  81. package/dist/types.d.ts +0 -11
  82. package/dist/ui/hooks/useFlatTaskTree.d.ts +0 -14
  83. package/dist/ui/hooks/useIsVerbose.d.ts +0 -1
  84. package/dist/ui/hooks/useStdoutDimensions.d.ts +0 -4
  85. package/dist/ui/layout.d.ts +0 -5
  86. package/dist/ui/list.d.ts +0 -5
  87. package/dist/ui/static-logs.d.ts +0 -1
  88. package/dist/ui/task-name.d.ts +0 -5
  89. package/dist/ui/task-spinner.d.ts +0 -5
  90. package/dist/ui/task-tree-completed.d.ts +0 -5
  91. package/dist/ui/task-tree-full-spinner.d.ts +0 -5
  92. package/dist/ui/task-tree-scrollable-spinner.d.ts +0 -5
  93. package/dist/ui/task-tree-spinner.d.ts +0 -5
  94. package/dist/ui/task-tree-stats.d.ts +0 -5
  95. package/dist/ui/workspace-tree.d.ts +0 -8
  96. package/dist/utils/events.d.ts +0 -3
  97. package/dist/utils/exit.d.ts +0 -4
  98. package/dist/utils/import.d.ts +0 -4
  99. package/dist/utils/json.d.ts +0 -1
  100. package/dist/utils/streams.d.ts +0 -3
  101. package/dist/utils/string.d.ts +0 -2
  102. package/dist/utils/worker-cache.d.ts +0 -3
  103. package/dist/workspace-tree-VWKE0B6b.js +0 -1120
  104. package/dist/workspace-tree-VWKE0B6b.js.map +0 -1
package/README.md CHANGED
@@ -2,8 +2,7 @@
2
2
  [![Version](https://img.shields.io/npm/v/@jujulego/jill)](https://www.npmjs.com/package/@jujulego/jill)
3
3
  ![Licence](https://img.shields.io/github/license/jujulego/jill)
4
4
  ![Language](https://img.shields.io/github/languages/top/jujulego/jill)
5
- [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=jujulego_jill&metric=alert_status)](https://sonarcloud.io/dashboard?id=jujulego_jill)
6
- [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=jujulego_jill&metric=coverage)](https://sonarcloud.io/dashboard?id=jujulego_jill)
5
+ [![codecov](https://codecov.io/gh/Jujulego/jill/graph/badge.svg?token=Ug8TWPaPNA)](https://codecov.io/gh/Jujulego/jill)
7
6
 
8
7
  Zero-config monorepo cli
9
8
 
package/bin/jill.js CHANGED
@@ -1,3 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import '../dist/instrument.js';
3
4
  import '../dist/main.js';
@@ -0,0 +1,33 @@
1
+ ;{try{(function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="37ad726c-3634-4efb-a2ff-4245662538b8",e._sentryDebugIdIdentifier="sentry-dbid-37ad726c-3634-4efb-a2ff-4245662538b8");})();}catch(e){}};!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"3.0.0-alpha.3"};}catch(e){}}();import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { Text } from 'ink';
3
+ import { a as isScriptCtx } from './parser.js';
4
+
5
+ // Components
6
+ function TaskName({ task, withWorkspace }) {
7
+ if (isScriptCtx(task.context)) {
8
+ return /*#__PURE__*/ jsxs(Text, {
9
+ children: [
10
+ "Run ",
11
+ /*#__PURE__*/ jsx(Text, {
12
+ bold: true,
13
+ children: task.context.script
14
+ }),
15
+ " script",
16
+ withWorkspace && /*#__PURE__*/ jsxs(Fragment, {
17
+ children: [
18
+ ' ',
19
+ "in ",
20
+ task.context.workspace.name
21
+ ]
22
+ })
23
+ ]
24
+ });
25
+ } else {
26
+ return /*#__PURE__*/ jsx(Text, {
27
+ children: task.name
28
+ });
29
+ }
30
+ }
31
+
32
+ export { TaskName as T };
33
+ //# sourceMappingURL=TaskName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskName.js","sources":["../src/cli/components/TaskName.tsx"],"sourcesContent":["import { type Task, type TaskSummary } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport { isScriptCtx } from '../../tasks/script-task.js';\n\n// Components\nexport default function TaskName({ task, withWorkspace }: TaskNameProps) {\n if (isScriptCtx(task.context)) {\n return (\n <Text>\n Run <Text bold>{ task.context.script }</Text> script{ withWorkspace && <>{' '}in { task.context.workspace.name }</> }\n </Text>\n );\n } else {\n return <Text>{ task.name }</Text>;\n }\n}\n\n// Types\nexport interface TaskNameProps {\n readonly task: Task | TaskSummary;\n readonly withWorkspace?: boolean;\n}\n"],"names":["TaskName","task","withWorkspace","isScriptCtx","context","_jsxs","Text","_jsx","bold","script","_Fragment","workspace","name"],"mappings":";;;;AAIA,CAAA,CAAA,CAAA,UAAA;AACe,QAAA,CAASA,QAAAA,CAAS,CAAA,CAAEC,IAAI,CAAA,CAAEC,aAAa,EAAiB,CAAA,CAAA,CAAA;IACrE,IAAIC,WAAAA,CAAYF,IAAAA,CAAKG,OAAO,CAAA,CAAA,CAAG,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CACEC,IAAA,CAACC,IAAAA,CAAAA,CAAAA,CAAAA;;AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA;8BACAC,GAAA,CAACD,IAAAA,CAAAA,CAAAA,CAAAA;oBAAKE,IAAI,EAAA,IAAA,CAAA;8BAAGP,IAAAA,CAAKG,OAAO,CAACK,MAAAA;;AAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;gBAASP,aAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,CAAiBG,IAAA,CAAAK,QAAA,CAAA,CAAA,CAAA;;AAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;AAAKT,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAKG,OAAO,CAACO,SAAS,CAACC,IAAAA;;;;;IAGhH,CAAA,CAAA,IAAA,CAAO,CAAA;AACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAOL,GAAA,CAACD,IAAAA,CAAAA,CAAAA,CAAAA;AAAOL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,IAAAA,CAAKW,IAAAA;;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA;;"}
package/dist/inked.js ADDED
@@ -0,0 +1,66 @@
1
+ ;{try{(function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="dbf89afb-2036-40fc-a280-520e18c50982",e._sentryDebugIdIdentifier="sentry-dbid-dbf89afb-2036-40fc-a280-520e18c50982");})();}catch(e){}};!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"3.0.0-alpha.3"};}catch(e){}}();import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { startSpan } from '@sentry/node';
3
+ import { useStderr, render } from 'ink';
4
+ import { inject$ } from '@kyrielle/injector';
5
+ import { LogGateway } from '@kyrielle/logger';
6
+ import { observer$ } from 'kyrielle';
7
+ import { useLayoutEffect } from 'react';
8
+ import { l as logFormat } from './parser.js';
9
+
10
+ // Component
11
+ function StaticLogs() {
12
+ const stderr = useStderr();
13
+ useLayoutEffect(()=>{
14
+ const gateway = inject$(LogGateway);
15
+ const toConsole = gateway.disconnect('console');
16
+ gateway.connect('ink', observer$({
17
+ next: (log)=>stderr.write(logFormat(log) + '\n')
18
+ }));
19
+ return ()=>{
20
+ gateway.disconnect('ink');
21
+ gateway.connect('console', toConsole);
22
+ };
23
+ }, [
24
+ stderr
25
+ ]);
26
+ return null;
27
+ }
28
+
29
+ /**
30
+ * Renders each yielded element using ink
31
+ */ function inked(stepper) {
32
+ return (props)=>startSpan({
33
+ name: 'inked',
34
+ op: 'ui.ink'
35
+ }, async ()=>{
36
+ const controller = new AbortController();
37
+ const app = render(/*#__PURE__*/ jsx(StaticLogs, {}), {
38
+ exitOnCtrlC: true
39
+ });
40
+ void app.waitUntilExit().then(()=>{
41
+ controller.abort();
42
+ });
43
+ try {
44
+ const generator = stepper(props, {
45
+ app,
46
+ controller
47
+ });
48
+ let result = await generator.next();
49
+ while(!result.done){
50
+ app.rerender(/*#__PURE__*/ jsxs(Fragment, {
51
+ children: [
52
+ /*#__PURE__*/ jsx(StaticLogs, {}),
53
+ result.value
54
+ ]
55
+ }));
56
+ result = await generator.next();
57
+ }
58
+ return result.value;
59
+ } finally{
60
+ app.unmount();
61
+ }
62
+ });
63
+ }
64
+
65
+ export { inked as i };
66
+ //# sourceMappingURL=inked.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inked.js","sources":["../src/cli/components/StaticLogs.tsx","../src/cli/inked.tsx"],"sourcesContent":["import { inject$ } from '@kyrielle/injector';\nimport { LogGateway, type WithDelay } from '@kyrielle/logger';\nimport { useStderr } from 'ink';\nimport { observer$ } from 'kyrielle';\nimport { useLayoutEffect } from 'react';\nimport { logFormat } from '../../utils/logger.js';\n\n// Component\nexport default function StaticLogs() {\n const stderr = useStderr();\n\n useLayoutEffect(() => {\n const gateway: LogGateway<WithDelay> = inject$(LogGateway);\n const toConsole = gateway.disconnect('console')!;\n\n gateway.connect('ink', observer$({\n next: (log) => stderr.write(logFormat(log) + '\\n')\n }));\n\n return () => {\n gateway.disconnect('ink');\n gateway.connect('console', toConsole);\n };\n }, [stderr]);\n\n return null;\n}\n\n","import { startSpan } from '@sentry/node';\nimport { type Instance, render } from 'ink';\nimport type { ReactNode } from 'react';\nimport StaticLogs from './components/StaticLogs.jsx';\n\n/**\n * Renders each yielded element using ink\n */\nexport function inked<P, R>(stepper: InkedStepper<P, R>): InkedComponent<P, R> {\n return (props: P): Promise<R> => startSpan({ name: 'inked', op: 'ui.ink' }, async () => {\n const controller = new AbortController();\n\n const app = render(<StaticLogs />, { exitOnCtrlC: true });\n void app.waitUntilExit().then(() => {\n controller.abort();\n });\n\n try {\n const generator = stepper(props, { app, controller });\n let result = await generator.next();\n\n while (!result.done) {\n app.rerender(\n <>\n <StaticLogs />\n { result.value }\n </>\n );\n\n result = await generator.next();\n }\n\n return result.value;\n } finally {\n app.unmount();\n }\n });\n}\n\n// Types\nexport interface InkedContext {\n readonly app: Instance;\n readonly controller: AbortController;\n}\n\nexport type InkedStepper<P, R> = (props: P, context: InkedContext) => AsyncGenerator<ReactNode, R> | Generator<ReactNode, R>;\nexport type InkedComponent<P, R> = (props: P) => Promise<R>;\n"],"names":["StaticLogs","stderr","useStderr","useLayoutEffect","gateway","inject$","LogGateway","toConsole","disconnect","connect","observer$","next","log","write","logFormat","inked","stepper","props","startSpan","name","op","controller","AbortController","app","render","_jsx","exitOnCtrlC","waitUntilExit","then","abort","generator","result","done","rerender","_jsxs","_Fragment","value","unmount"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ ;{try{(function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c9edf498-8d73-40aa-9138-6bd0d404a495",e._sentryDebugIdIdentifier="sentry-dbid-c9edf498-8d73-40aa-9138-6bd0d404a495");})();}catch(e){}};!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"3.0.0-alpha.3"};}catch(e){}}();import { init } from '@sentry/node';
2
+
3
+ init({
4
+ dsn: 'https://53e6d10c16975ebd025175d9836d039b@o4508229080055808.ingest.de.sentry.io/4509876546895952',
5
+ sendDefaultPii: false,
6
+ tracesSampleRate: 1.0
7
+ });
8
+ //# sourceMappingURL=instrument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrument.js","sources":["../src/instrument.ts"],"sourcesContent":["import { init } from '@sentry/node';\n\ninit({\n dsn: 'https://53e6d10c16975ebd025175d9836d039b@o4508229080055808.ingest.de.sentry.io/4509876546895952',\n sendDefaultPii: false,\n tracesSampleRate: 1.0,\n});\n"],"names":["init","dsn","sendDefaultPii","tracesSampleRate"],"mappings":";;AAEAA,IAAAA,CAAK,CAAA;IACHC,GAAAA,EAAK,CAAA,KAAA,CAAA,CAAA,CAAA,gCAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,CAAA;IACLC,cAAAA,EAAgB,KAAA,CAAA;IAChBC,gBAAAA,CAAAA,CAAkB,CAAA,CAAA,CAAA;AACpB,CAAA,CAAA"}
@@ -0,0 +1,50 @@
1
+ ;{try{(function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3a2f22a4-6985-460a-97d1-9545683745a8",e._sentryDebugIdIdentifier="sentry-dbid-3a2f22a4-6985-460a-97d1-9545683745a8");})();}catch(e){}};!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"3.0.0-alpha.3"};}catch(e){}}();import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Box, Text } from 'ink';
3
+ import { c as capitalize } from './parser.js';
4
+ import { i as inked } from './inked.js';
5
+ import '@jujulego/tasks';
6
+ import '@kyrielle/injector';
7
+ import 'kyrielle';
8
+ import '@kyrielle/logger';
9
+ import '@sentry/node';
10
+ import 'node:path';
11
+ import 'node:child_process';
12
+ import 'node:process';
13
+ import 'chalk';
14
+ import 'semver';
15
+ import 'slugify';
16
+ import 'yargs';
17
+ import 'node:fs';
18
+ import 'path-scurry';
19
+ import '@swc/helpers/_/_apply_decs_2203_r';
20
+ import 'glob';
21
+ import 'normalize-package-data';
22
+ import 'moo';
23
+ import '@jujulego/quick-tag';
24
+ import 'ajv';
25
+ import 'node:os';
26
+ import 'cosmiconfig';
27
+ import 'chalk-template';
28
+ import 'react';
29
+
30
+ const ListInk = inked(function*(props) {
31
+ const { attributes, headers, workspaces } = props;
32
+ yield /*#__PURE__*/ jsx(Box, {
33
+ children: attributes.map((attr)=>/*#__PURE__*/ jsxs(Box, {
34
+ flexDirection: "column",
35
+ marginRight: 2,
36
+ children: [
37
+ headers && /*#__PURE__*/ jsx(Text, {
38
+ bold: true,
39
+ children: capitalize(attr)
40
+ }),
41
+ workspaces.map((wks, idx)=>/*#__PURE__*/ jsx(Text, {
42
+ children: wks[attr] || ' '
43
+ }, idx))
44
+ ]
45
+ }, attr))
46
+ });
47
+ });
48
+
49
+ export { ListInk as default };
50
+ //# sourceMappingURL=list.ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.ink.js","sources":["../src/cli/commands/list.ink.tsx"],"sourcesContent":["import { Box, Text } from 'ink';\nimport { capitalize } from '../../utils/string.js';\nimport { inked } from '../inked.jsx';\nimport type { ExtractedData, ListAttr } from './list.js';\n\nconst ListInk = inked(function* (props: ListInkProps) {\n const { attributes, headers, workspaces } = props;\n\n yield (\n <Box>\n { attributes.map((attr) => (\n <Box key={attr} flexDirection=\"column\" marginRight={2}>\n { headers && (\n <Text bold>{ capitalize(attr) }</Text>\n ) }\n { workspaces.map((wks, idx) => (\n <Text key={idx}>{ wks[attr] || ' ' }</Text>\n ))}\n </Box>\n )) }\n </Box>\n );\n});\n\nexport default ListInk;\n\n// Types\nexport interface ListInkProps {\n readonly attributes: readonly ListAttr[];\n readonly headers?: boolean;\n readonly workspaces: readonly ExtractedData[];\n}"],"names":["ListInk","inked","props","attributes","headers","workspaces","_jsx","Box","map","attr","_jsxs","flexDirection","marginRight","Text","bold","capitalize","wks","idx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,KAAA,CAAMA,OAAAA,CAAAA,CAAAA,CAAUC,KAAAA,CAAM,QAAA,CAAA,CAAWC,KAAmB,CAAA,CAAA,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,EAAEC,UAAU,CAAA,CAAEC,OAAO,CAAA,CAAEC,UAAU,CAAA,CAAE,CAAA,CAAA,CAAGH,KAAAA,CAAAA;AAE5C,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CACEI,GAAA,CAACC,GAAAA,CAAAA,CAAAA,CAAAA;AACGJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,UAAAA,CAAWK,GAAG,CAAC,CAACC,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,CAChBC,IAAA,CAACH,GAAAA,CAAAA,CAAAA,CAAAA;gBAAeI,aAAAA,EAAc,CAAA,MAAA,CAAA,CAAA;gBAASC,WAAAA,EAAa,CAAA,CAAA;;AAChDR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,CACAE,GAAA,CAACO,IAAAA,CAAAA,CAAAA,CAAAA;wBAAKC,IAAI,EAAA,IAAA,CAAA;kCAAGC,UAAAA,CAAWN,IAAAA,CAAAA;;AAExBJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,UAAAA,CAAWG,GAAG,CAAC,CAACQ,GAAAA,CAAAA,CAAKC,oBACrBX,GAAA,CAACO,IAAAA,CAAAA,CAAAA,CAAAA;sCAAiBG,GAAG,CAACP,KAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA;AAApBQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA;;AALLR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAAA;;AAWlB,CAAA,CAAA,CAAA;;"}
package/dist/main.js CHANGED
@@ -1,46 +1,55 @@
1
- import { Logger } from '@jujulego/logger';
1
+ ;{try{(function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8a2485f3-b592-4c76-b67b-06ad641e7844",e._sentryDebugIdIdentifier="sentry-dbid-8a2485f3-b592-4c76-b67b-06ad641e7844");})();}catch(e){}};!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"3.0.0-alpha.3"};}catch(e){}}();import { inject$ } from '@kyrielle/injector';
2
+ import { startSpan, captureMessage, captureException } from '@sentry/node';
3
+ import process from 'node:process';
2
4
  import { hideBin } from 'yargs/helpers';
3
- import { m as container, E as ExitException } from './ink-command-CsbkuRbm.js';
4
- import { J as JillApplication } from './jill.application-DNJpmnCF.js';
5
- import '@swc/helpers/_/_ts_decorate';
6
- import '@swc/helpers/_/_ts_param';
7
- import 'inversify';
8
- import 'node:async_hooks';
5
+ import { e as executeParser, L as LOGGER, C as ClientError } from './parser.js';
9
6
  import '@jujulego/tasks';
10
- import 'node:os';
7
+ import 'kyrielle';
8
+ import '@kyrielle/logger';
11
9
  import 'node:path';
12
- import 'ajv';
13
- import 'node:worker_threads';
10
+ import 'node:child_process';
11
+ import 'chalk';
12
+ import 'semver';
13
+ import 'slugify';
14
14
  import 'yargs';
15
- import 'cosmiconfig';
16
- import 'react/jsx-runtime';
17
- import 'ink';
18
- import 'ink-spinner';
19
- import 'log-symbols';
20
- import 'pretty-ms';
21
- import 'react';
22
- import '@jujulego/event-tree';
23
- import 'inversify-inject-decorators';
24
- import '@jujulego/aegis';
15
+ import 'node:fs';
16
+ import 'path-scurry';
17
+ import '@swc/helpers/_/_apply_decs_2203_r';
18
+ import 'glob';
19
+ import 'normalize-package-data';
20
+ import 'moo';
25
21
  import '@jujulego/quick-tag';
22
+ import 'ajv';
23
+ import 'node:os';
24
+ import 'cosmiconfig';
26
25
  import 'chalk-template';
27
26
 
28
27
  // Bootstrap
29
- (async ()=>{
30
- const app = await container.getAsync(JillApplication);
31
- try {
32
- await app.run(hideBin(process.argv));
33
- } catch (err) {
34
- if (err instanceof ExitException) {
35
- process.exit(err.code);
28
+ const argv = hideBin(process.argv);
29
+ const parser = executeParser();
30
+ await startSpan({
31
+ name: 'jill',
32
+ op: 'cli.main',
33
+ attributes: {
34
+ 'cli.argv': argv
35
+ }
36
+ }, ()=>parser.wrap(parser.terminalWidth()).fail((msg, err)=>{
37
+ const logger = inject$(LOGGER);
38
+ if (msg) {
39
+ logger.error(msg);
40
+ captureMessage(msg, {
41
+ level: 'error'
42
+ });
43
+ } else if (err instanceof ClientError) {
44
+ logger.warning(err.message);
36
45
  } else {
37
- console.error(await app.parser.getHelp());
38
- if (err.message) {
39
- const logger = container.get(Logger);
40
- logger.error(err.message);
41
- }
42
- process.exit(1);
46
+ captureException(err, {
47
+ tags: {
48
+ handled: false
49
+ }
50
+ });
51
+ logger.error(err.message);
43
52
  }
44
- }
45
- })();
53
+ process.exitCode = 1;
54
+ }).parseAsync(argv).catch(()=>{}));
46
55
  //# sourceMappingURL=main.js.map
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;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"}
1
+ {"version":3,"file":"main.js","sources":["../src/main.ts"],"sourcesContent":["import { inject$ } from '@kyrielle/injector';\nimport { captureException, captureMessage, startSpan } from '@sentry/node';\nimport process from 'node:process';\nimport { hideBin } from 'yargs/helpers';\nimport { executeParser } from './cli/parser.js';\nimport { ClientError } from './cli/utils/errors.js';\nimport { LOGGER } from './tokens.js';\n\n// Bootstrap\nconst argv = hideBin(process.argv);\nconst parser = executeParser();\n\nawait startSpan({ name: 'jill', op: 'cli.main', attributes: { 'cli.argv': argv } }, () => parser\n .wrap(parser.terminalWidth())\n .fail((msg, err) => {\n const logger = inject$(LOGGER);\n\n if (msg) {\n logger.error(msg);\n captureMessage(msg, { level: 'error' });\n } else if (err instanceof ClientError) {\n logger.warning(err.message);\n } else {\n captureException(err, { tags: { handled: false } });\n logger.error(err.message);\n }\n\n process.exitCode = 1;\n })\n .parseAsync(argv)\n .catch(() => {})\n);\n"],"names":["argv","hideBin","process","parser","executeParser","startSpan","name","op","attributes","wrap","terminalWidth","fail","msg","err","logger","inject$","LOGGER","error","captureMessage","level","ClientError","warning","message","captureException","tags","handled","exitCode","parseAsync","catch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,CAAA,CAAA,CAAA,SAAA;AACA,KAAA,CAAMA,IAAAA,CAAAA,CAAAA,CAAOC,OAAAA,CAAQC,OAAAA,CAAQF,IAAI,CAAA,CAAA;AACjC,KAAA,CAAMG,MAAAA,CAAAA,CAAAA,CAASC,aAAAA,CAAAA,CAAAA,CAAAA;AAEf,KAAA,CAAMC,SAAAA,CAAU,CAAA;IAAEC,IAAAA,EAAM,CAAA,IAAA,CAAA,CAAA;IAAQC,EAAAA,EAAI,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA;IAAYC,UAAAA,CAAAA,CAAY,CAAA;QAAE,UAAA,CAAA,CAAYR,IAAAA;AAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAAE,CAAA,EAAG,CAAA,CAAA,CAAA,CAAMG,MAAAA,CACvFM,IAAI,CAACN,MAAAA,CAAOO,aAAa,CAAA,CAAA,CAAA,CACzBC,IAAI,CAAC,CAACC,GAAAA,CAAAA,CAAKC,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAMC,SAASC,MAAAA,CAAAA,CAAQC,MAAAA,CAAAA,CAAAA;AAEvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAIJ,GAAAA,CAAAA,CAAK,CAAA;AACPE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAOG,KAAK,CAACL,GAAAA,CAAAA,CAAAA;AACbM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,cAAAA,CAAeN,GAAAA,CAAAA,CAAK,CAAA;gBAAEO,KAAAA,CAAAA,CAAO,CAAA,KAAA,CAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QACvC,CAAA,CAAA,IAAA,CAAO,EAAA,CAAA,CAAIN,eAAeO,WAAAA,CAAAA,CAAa,CAAA;YACrCN,MAAAA,CAAOO,OAAO,CAACR,GAAAA,CAAIS,OAAO,CAAA,CAAA;QAC5B,CAAA,CAAA,IAAA,CAAO,CAAA;AACLC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,gBAAAA,CAAiBV,GAAAA,CAAAA,CAAK,CAAA;gBAAEW,IAAAA,CAAAA,CAAM,CAAA;oBAAEC,OAAAA,CAAAA,CAAS,KAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YACjDX,MAAAA,CAAOG,KAAK,CAACJ,GAAAA,CAAIS,OAAO,CAAA,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEApB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAQwB,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACCC,UAAU,CAAC3B,IAAAA,CAAAA,CACX4B,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA"}