@jujulego/jill 3.0.0-alpha.1 → 3.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/TaskName.js +33 -0
  2. package/dist/TaskName.js.map +1 -0
  3. package/dist/inked.js +62 -0
  4. package/dist/inked.js.map +1 -0
  5. package/dist/list.ink.js +49 -0
  6. package/dist/list.ink.js.map +1 -0
  7. package/dist/main.js +20 -38
  8. package/dist/main.js.map +1 -1
  9. package/dist/parser.js +1879 -0
  10. package/dist/parser.js.map +1 -0
  11. package/dist/planner.service.js +46 -0
  12. package/dist/planner.service.js.map +1 -0
  13. package/dist/task-exec.ink.js +538 -0
  14. package/dist/task-exec.ink.js.map +1 -0
  15. package/dist/task-plan.ink.js +113 -0
  16. package/dist/task-plan.ink.js.map +1 -0
  17. package/dist/tree.ink.js +184 -0
  18. package/dist/tree.ink.js.map +1 -0
  19. package/dist/tsconfig.build.tsbuildinfo +1 -1
  20. package/package.json +43 -44
  21. package/dist/ajv.config.d.ts +0 -3
  22. package/dist/commands/each.d.ts +0 -25
  23. package/dist/commands/exec.d.ts +0 -26
  24. package/dist/commands/group.d.ts +0 -16
  25. package/dist/commands/list.d.ts +0 -30
  26. package/dist/commands/run.d.ts +0 -24
  27. package/dist/commands/tree.d.ts +0 -6
  28. package/dist/commons/context.service.d.ts +0 -23
  29. package/dist/commons/git.service.d.ts +0 -62
  30. package/dist/commons/logger/log.gateway.d.ts +0 -18
  31. package/dist/commons/logger/parameters.d.ts +0 -2
  32. package/dist/commons/logger/thread.gateway.d.ts +0 -12
  33. package/dist/commons/logger/types.d.ts +0 -2
  34. package/dist/commons/logger.service.d.ts +0 -1
  35. package/dist/config/config-loader.d.ts +0 -4
  36. package/dist/config/config-options.d.ts +0 -5
  37. package/dist/config/types.d.ts +0 -8
  38. package/dist/config/utils.d.ts +0 -5
  39. package/dist/constants.d.ts +0 -1
  40. package/dist/core.plugin-CxgfxFUI.js +0 -642
  41. package/dist/core.plugin-CxgfxFUI.js.map +0 -1
  42. package/dist/core.plugin.d.ts +0 -2
  43. package/dist/filters/affected.filter.d.ts +0 -12
  44. package/dist/filters/pipeline.d.ts +0 -11
  45. package/dist/filters/private.filter.d.ts +0 -7
  46. package/dist/filters/scripts.filter.d.ts +0 -8
  47. package/dist/index.d.ts +0 -45
  48. package/dist/index.js +0 -35
  49. package/dist/index.js.map +0 -1
  50. package/dist/ink-command-CsbkuRbm.js +0 -2071
  51. package/dist/ink-command-CsbkuRbm.js.map +0 -1
  52. package/dist/ink.config.d.ts +0 -3
  53. package/dist/inversify.config.d.ts +0 -4
  54. package/dist/jill.application-DNJpmnCF.js +0 -637
  55. package/dist/jill.application-DNJpmnCF.js.map +0 -1
  56. package/dist/jill.application.d.ts +0 -19
  57. package/dist/main.d.ts +0 -1
  58. package/dist/middlewares/load-project.d.ts +0 -21
  59. package/dist/middlewares/load-workspace.d.ts +0 -20
  60. package/dist/modules/command.d.ts +0 -20
  61. package/dist/modules/ink-command.d.ts +0 -11
  62. package/dist/modules/middleware.d.ts +0 -8
  63. package/dist/modules/module.d.ts +0 -7
  64. package/dist/modules/plugin-loader.service.d.ts +0 -10
  65. package/dist/modules/plugin.d.ts +0 -14
  66. package/dist/modules/service.d.ts +0 -8
  67. package/dist/modules/task-command.d.ts +0 -14
  68. package/dist/project/project.d.ts +0 -27
  69. package/dist/project/project.repository.d.ts +0 -15
  70. package/dist/project/types.d.ts +0 -1
  71. package/dist/project/workspace.d.ts +0 -41
  72. package/dist/tasks/command-task.d.ts +0 -15
  73. package/dist/tasks/errors.d.ts +0 -4
  74. package/dist/tasks/script-task.d.ts +0 -27
  75. package/dist/tasks/task-expression.service.d.ts +0 -25
  76. package/dist/tasks/task-manager.config.d.ts +0 -3
  77. package/dist/types.d.ts +0 -11
  78. package/dist/ui/hooks/useFlatTaskTree.d.ts +0 -14
  79. package/dist/ui/hooks/useIsVerbose.d.ts +0 -1
  80. package/dist/ui/hooks/useStdoutDimensions.d.ts +0 -4
  81. package/dist/ui/layout.d.ts +0 -5
  82. package/dist/ui/list.d.ts +0 -5
  83. package/dist/ui/static-logs.d.ts +0 -1
  84. package/dist/ui/task-name.d.ts +0 -5
  85. package/dist/ui/task-spinner.d.ts +0 -5
  86. package/dist/ui/task-tree-completed.d.ts +0 -5
  87. package/dist/ui/task-tree-full-spinner.d.ts +0 -5
  88. package/dist/ui/task-tree-scrollable-spinner.d.ts +0 -5
  89. package/dist/ui/task-tree-spinner.d.ts +0 -5
  90. package/dist/ui/task-tree-stats.d.ts +0 -5
  91. package/dist/ui/workspace-tree.d.ts +0 -8
  92. package/dist/utils/events.d.ts +0 -3
  93. package/dist/utils/exit.d.ts +0 -4
  94. package/dist/utils/import.d.ts +0 -4
  95. package/dist/utils/json.d.ts +0 -1
  96. package/dist/utils/streams.d.ts +0 -3
  97. package/dist/utils/string.d.ts +0 -2
  98. package/dist/utils/worker-cache.d.ts +0 -3
  99. package/dist/workspace-tree-VWKE0B6b.js +0 -1120
  100. package/dist/workspace-tree-VWKE0B6b.js.map +0 -1
@@ -0,0 +1,113 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { plan } from '@jujulego/tasks';
3
+ import { Box, Text } from 'ink';
4
+ import { pipe$, map$, collect$ } from 'kyrielle';
5
+ import { i as isCommandCtx, a as isScriptCtx } from './parser.js';
6
+ import { T as TaskName } from './TaskName.js';
7
+ import { i as inked } from './inked.js';
8
+ import '@kyrielle/injector';
9
+ import '@kyrielle/logger';
10
+ import 'node:path';
11
+ import 'glob';
12
+ import 'node:fs';
13
+ import 'normalize-package-data';
14
+ import 'semver';
15
+ import 'moo';
16
+ import 'node:child_process';
17
+ import 'node:process';
18
+ import 'chalk';
19
+ import 'slugify';
20
+ import 'yargs';
21
+ import 'yargs/helpers';
22
+ import 'path-scurry';
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 TaskPlanInk = inked(function*({ tasks }) {
31
+ const planned = Array.from(plan(tasks));
32
+ yield /*#__PURE__*/ jsxs(Box, {
33
+ children: [
34
+ /*#__PURE__*/ jsxs(Box, {
35
+ flexDirection: "column",
36
+ marginRight: 2,
37
+ children: [
38
+ /*#__PURE__*/ jsx(Text, {
39
+ bold: true,
40
+ children: "ID"
41
+ }),
42
+ pipe$(planned, map$((task)=>/*#__PURE__*/ jsx(Text, {
43
+ children: task.id.substring(0, 6)
44
+ }, task.id)), collect$())
45
+ ]
46
+ }),
47
+ /*#__PURE__*/ jsxs(Box, {
48
+ flexDirection: "column",
49
+ marginRight: 2,
50
+ children: [
51
+ /*#__PURE__*/ jsx(Text, {
52
+ bold: true,
53
+ children: "Name"
54
+ }),
55
+ pipe$(planned, map$((task)=>/*#__PURE__*/ jsx(TaskName, {
56
+ task: task
57
+ }, task.id)), collect$())
58
+ ]
59
+ }),
60
+ /*#__PURE__*/ jsxs(Box, {
61
+ flexDirection: "column",
62
+ marginRight: 2,
63
+ children: [
64
+ /*#__PURE__*/ jsx(Text, {
65
+ bold: true,
66
+ children: "Workspace"
67
+ }),
68
+ pipe$(planned, map$((task)=>/*#__PURE__*/ jsx(Text, {
69
+ children: isCommandCtx(task.context) || isScriptCtx(task.context) ? task.context.workspace.name : ''
70
+ }, task.id)), collect$())
71
+ ]
72
+ }),
73
+ /*#__PURE__*/ jsxs(Box, {
74
+ flexDirection: "column",
75
+ marginRight: 2,
76
+ children: [
77
+ /*#__PURE__*/ jsx(Text, {
78
+ bold: true,
79
+ children: "Group"
80
+ }),
81
+ pipe$(planned, map$((task)=>task.groupId ? /*#__PURE__*/ jsx(Text, {
82
+ children: task.groupId.substring(0, 6)
83
+ }, task.id) : /*#__PURE__*/ jsx(Text, {
84
+ color: "gray",
85
+ children: "none"
86
+ }, task.id)), collect$())
87
+ ]
88
+ }),
89
+ /*#__PURE__*/ jsxs(Box, {
90
+ flexDirection: "column",
91
+ marginRight: 2,
92
+ children: [
93
+ /*#__PURE__*/ jsx(Text, {
94
+ bold: true,
95
+ children: "Depends on"
96
+ }),
97
+ pipe$(planned, map$((task)=>{
98
+ const ids = task.dependenciesIds.map((id)=>id.substring(0, 6));
99
+ return ids.length > 0 ? /*#__PURE__*/ jsx(Text, {
100
+ children: ids.join(', ')
101
+ }, task.id) : /*#__PURE__*/ jsx(Text, {
102
+ color: "gray",
103
+ children: "none"
104
+ }, task.id);
105
+ }), collect$())
106
+ ]
107
+ })
108
+ ]
109
+ });
110
+ });
111
+
112
+ export { TaskPlanInk as default };
113
+ //# sourceMappingURL=task-plan.ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-plan.ink.js","sources":["../src/cli/bases/task-plan.ink.tsx"],"sourcesContent":["import { plan, type TaskSet } from '@jujulego/tasks';\nimport { Box, Text } from 'ink';\nimport { collect$, map$, pipe$ } from 'kyrielle';\nimport { isCommandCtx } from '../../tasks/command-task.js';\nimport { isScriptCtx } from '../../tasks/script-task.js';\nimport TaskName from '../components/TaskName.jsx';\nimport { inked } from '../inked.jsx';\n\nconst TaskPlanInk = inked(function* ({ tasks }: TaskPlanInkProps) {\n const planned = Array.from(plan(tasks));\n\n yield (\n <Box>\n <Box flexDirection=\"column\" marginRight={2}>\n <Text bold>ID</Text>\n { pipe$(\n planned,\n map$((task) => (\n <Text key={task.id}>{ task.id.substring(0, 6) }</Text>\n )),\n collect$()\n ) }\n </Box>\n <Box flexDirection=\"column\" marginRight={2}>\n <Text bold>Name</Text>\n { pipe$(\n planned,\n map$((task) => (\n <TaskName key={task.id} task={task} />\n )),\n collect$()\n ) }\n </Box>\n <Box flexDirection=\"column\" marginRight={2}>\n <Text bold>Workspace</Text>\n { pipe$(\n planned,\n map$((task) => (\n <Text key={task.id}>{ isCommandCtx(task.context) || isScriptCtx(task.context) ? task.context.workspace.name : '' }</Text>\n )),\n collect$()\n ) }\n </Box>\n <Box flexDirection=\"column\" marginRight={2}>\n <Text bold>Group</Text>\n { pipe$(\n planned,\n map$((task) => task.groupId ? (\n <Text key={task.id}>{ task.groupId.substring(0, 6) }</Text>\n ) : (\n <Text key={task.id} color=\"gray\">none</Text>\n )),\n collect$()\n ) }\n </Box>\n <Box flexDirection=\"column\" marginRight={2}>\n <Text bold>Depends on</Text>\n { pipe$(\n planned,\n map$((task) => {\n const ids = task.dependenciesIds.map((id) => id.substring(0, 6));\n\n return ids.length > 0 ? (\n <Text key={task.id}>{ ids.join(', ') }</Text>\n ) : (\n <Text key={task.id} color=\"gray\">none</Text>\n );\n }),\n collect$()\n ) }\n </Box>\n </Box>\n );\n});\n\nexport default TaskPlanInk;\n\n// Types\nexport interface TaskPlanInkProps {\n readonly tasks: TaskSet;\n}\n"],"names":["TaskPlanInk","inked","tasks","planned","Array","from","plan","_jsxs","Box","flexDirection","marginRight","_jsx","Text","bold","pipe$","map$","task","id","substring","collect$","TaskName","isCommandCtx","context","isScriptCtx","workspace","name","groupId","color","ids","dependenciesIds","map","length","join"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAMA,WAAAA,GAAcC,KAAAA,CAAM,UAAW,EAAEC,KAAK,EAAoB,EAAA;AAC9D,IAAA,MAAMC,OAAAA,GAAUC,KAAAA,CAAMC,IAAI,CAACC,IAAAA,CAAKJ,KAAAA,CAAAA,CAAAA;AAEhC,IAAA,oBACEK,IAAA,CAACC,GAAAA,EAAAA;;0BACCD,IAAA,CAACC,GAAAA,EAAAA;gBAAIC,aAAAA,EAAc,QAAA;gBAASC,WAAAA,EAAa,CAAA;;kCACvCC,GAAA,CAACC,IAAAA,EAAAA;wBAAKC,IAAI,EAAA,IAAA;AAAC,wBAAA,QAAA,EAAA;;AACTC,oBAAAA,KAAAA,CACAX,OAAAA,EACAY,IAAAA,CAAK,CAACC,IAAAA,iBACJL,GAAA,CAACC,IAAAA,EAAAA;AAAqBI,4BAAAA,QAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAACC,SAAS,CAAC,CAAA,EAAG,CAAA;AAAhCF,yBAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA,CAAA,EAEpBE,QAAAA,EAAAA;;;0BAGJZ,IAAA,CAACC,GAAAA,EAAAA;gBAAIC,aAAAA,EAAc,QAAA;gBAASC,WAAAA,EAAa,CAAA;;kCACvCC,GAAA,CAACC,IAAAA,EAAAA;wBAAKC,IAAI,EAAA,IAAA;AAAC,wBAAA,QAAA,EAAA;;AACTC,oBAAAA,KAAAA,CACAX,OAAAA,EACAY,IAAAA,CAAK,CAACC,IAAAA,iBACJL,GAAA,CAACS,QAAAA,EAAAA;4BAAuBJ,IAAAA,EAAMA;AAAfA,yBAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA,CAAA,EAExBE,QAAAA,EAAAA;;;0BAGJZ,IAAA,CAACC,GAAAA,EAAAA;gBAAIC,aAAAA,EAAc,QAAA;gBAASC,WAAAA,EAAa,CAAA;;kCACvCC,GAAA,CAACC,IAAAA,EAAAA;wBAAKC,IAAI,EAAA,IAAA;AAAC,wBAAA,QAAA,EAAA;;AACTC,oBAAAA,KAAAA,CACAX,OAAAA,EACAY,IAAAA,CAAK,CAACC,IAAAA,iBACJL,GAAA,CAACC,IAAAA,EAAAA;AAAqBS,4BAAAA,QAAAA,EAAAA,YAAAA,CAAaL,IAAAA,CAAKM,OAAO,CAAA,IAAKC,WAAAA,CAAYP,IAAAA,CAAKM,OAAO,CAAA,GAAIN,IAAAA,CAAKM,OAAO,CAACE,SAAS,CAACC,IAAI,GAAG;AAAnGT,yBAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA,CAAA,EAEpBE,QAAAA,EAAAA;;;0BAGJZ,IAAA,CAACC,GAAAA,EAAAA;gBAAIC,aAAAA,EAAc,QAAA;gBAASC,WAAAA,EAAa,CAAA;;kCACvCC,GAAA,CAACC,IAAAA,EAAAA;wBAAKC,IAAI,EAAA,IAAA;AAAC,wBAAA,QAAA,EAAA;;AACTC,oBAAAA,KAAAA,CACAX,SACAY,IAAAA,CAAK,CAACC,OAASA,IAAAA,CAAKU,OAAO,iBACzBf,GAAA,CAACC,IAAAA,EAAAA;AAAqBI,4BAAAA,QAAAA,EAAAA,IAAAA,CAAKU,OAAO,CAACR,SAAS,CAAC,CAAA,EAAG,CAAA;2BAArCF,IAAAA,CAAKC,EAAE,kBAElBN,GAAA,CAACC,IAAAA,EAAAA;4BAAmBe,KAAAA,EAAM,MAAA;AAAO,4BAAA,QAAA,EAAA;AAAtBX,yBAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA,CAAA,EAEpBE,QAAAA,EAAAA;;;0BAGJZ,IAAA,CAACC,GAAAA,EAAAA;gBAAIC,aAAAA,EAAc,QAAA;gBAASC,WAAAA,EAAa,CAAA;;kCACvCC,GAAA,CAACC,IAAAA,EAAAA;wBAAKC,IAAI,EAAA,IAAA;AAAC,wBAAA,QAAA,EAAA;;oBACTC,KAAAA,CACAX,OAAAA,EACAY,KAAK,CAACC,IAAAA,GAAAA;wBACJ,MAAMY,GAAAA,GAAMZ,IAAAA,CAAKa,eAAe,CAACC,GAAG,CAAC,CAACb,EAAAA,GAAOA,EAAAA,CAAGC,SAAS,CAAC,CAAA,EAAG,CAAA,CAAA,CAAA;AAE7D,wBAAA,OAAOU,GAAAA,CAAIG,MAAM,GAAG,CAAA,iBAClBpB,GAAA,CAACC,IAAAA,EAAAA;AAAqBgB,4BAAAA,QAAAA,EAAAA,GAAAA,CAAII,IAAI,CAAC,IAAA;2BAApBhB,IAAAA,CAAKC,EAAE,kBAElBN,GAAA,CAACC,IAAAA,EAAAA;4BAAmBe,KAAAA,EAAM,MAAA;AAAO,4BAAA,QAAA,EAAA;AAAtBX,yBAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA;oBAEtB,CAAA,CAAA,EACAE,QAAAA,EAAAA;;;;;AAKV,CAAA;;;;"}
@@ -0,0 +1,184 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { var$, once$, pipe$, filter$, source$, waitFor$ } from 'kyrielle';
3
+ import { Text, Newline } from 'ink';
4
+ import Spinner from 'ink-spinner';
5
+ import { Suspense, use, useRef, useCallback, useEffect } from 'react';
6
+ import { i as inked } from './inked.js';
7
+ import '@kyrielle/injector';
8
+ import '@kyrielle/logger';
9
+ import './parser.js';
10
+ import '@jujulego/tasks';
11
+ import 'node:path';
12
+ import 'glob';
13
+ import 'node:fs';
14
+ import 'normalize-package-data';
15
+ import 'semver';
16
+ import 'moo';
17
+ import 'node:child_process';
18
+ import 'node:process';
19
+ import 'chalk';
20
+ import 'slugify';
21
+ import 'yargs';
22
+ import 'yargs/helpers';
23
+ import 'path-scurry';
24
+ import '@jujulego/quick-tag';
25
+ import 'ajv';
26
+ import 'node:os';
27
+ import 'cosmiconfig';
28
+ import 'chalk-template';
29
+
30
+ // Component
31
+ function WorkspaceTree(props) {
32
+ const { workspace, dev = false, level = '' } = props;
33
+ // Render
34
+ const style = workspaceStyle(dev);
35
+ return /*#__PURE__*/ jsxs(Text, {
36
+ children: [
37
+ /*#__PURE__*/ jsx(Text, {
38
+ ...style,
39
+ children: workspace.name
40
+ }),
41
+ workspace.version && /*#__PURE__*/ jsxs(Text, {
42
+ color: "grey",
43
+ children: [
44
+ "@",
45
+ workspace.version
46
+ ]
47
+ }),
48
+ /*#__PURE__*/ jsx(Suspense, {
49
+ fallback: /*#__PURE__*/ jsxs(Fragment, {
50
+ children: [
51
+ /*#__PURE__*/ jsx(Newline, {}),
52
+ /*#__PURE__*/ jsxs(Text, {
53
+ children: [
54
+ level,
55
+ /*#__PURE__*/ jsxs(Text, {
56
+ ...style,
57
+ dimColor: true,
58
+ children: [
59
+ "└─ Loading tree",
60
+ /*#__PURE__*/ jsx(Spinner, {
61
+ type: "simpleDots"
62
+ })
63
+ ]
64
+ })
65
+ ]
66
+ })
67
+ ]
68
+ }),
69
+ children: /*#__PURE__*/ jsx(WorkspaceDependencies, {
70
+ ...props
71
+ })
72
+ })
73
+ ]
74
+ });
75
+ }
76
+ function WorkspaceDependencies(props) {
77
+ const { workspace, dev = false, level = '', onLoaded } = props;
78
+ const deps = use(workspaceDeps(workspace));
79
+ const count = useRef(var$(deps.length));
80
+ const handleLoaded = useCallback(()=>{
81
+ const cnt = count.current.defer();
82
+ if (cnt > 0) {
83
+ count.current.mutate(cnt - 1);
84
+ }
85
+ }, [
86
+ count
87
+ ]);
88
+ useEffect(()=>{
89
+ if (!onLoaded) return;
90
+ if (count.current.defer() === 0) {
91
+ onLoaded();
92
+ } else {
93
+ const sub = once$(pipe$(count.current, filter$((v)=>v === 0)), onLoaded);
94
+ return sub.unsubscribe;
95
+ }
96
+ }, [
97
+ count,
98
+ onLoaded
99
+ ]);
100
+ // Render
101
+ if (!deps.length) {
102
+ return null;
103
+ }
104
+ const style = workspaceStyle(dev);
105
+ return /*#__PURE__*/ jsxs(Fragment, {
106
+ children: [
107
+ /*#__PURE__*/ jsx(Newline, {}),
108
+ deps.map(([dep, isDev], idx)=>/*#__PURE__*/ jsxs(Text, {
109
+ children: [
110
+ level,
111
+ /*#__PURE__*/ jsxs(Text, {
112
+ ...style,
113
+ children: [
114
+ idx === deps.length - 1 ? '└' : '├',
115
+ "─",
116
+ ' '
117
+ ]
118
+ }),
119
+ /*#__PURE__*/ jsx(WorkspaceTree, {
120
+ workspace: dep,
121
+ dev: isDev ?? dev,
122
+ level: /*#__PURE__*/ jsxs(Fragment, {
123
+ children: [
124
+ level,
125
+ /*#__PURE__*/ jsxs(Text, {
126
+ ...style,
127
+ children: [
128
+ idx === deps.length - 1 ? ' ' : '│',
129
+ ' '
130
+ ]
131
+ })
132
+ ]
133
+ }),
134
+ onLoaded: handleLoaded
135
+ }),
136
+ idx < deps.length - 1 && /*#__PURE__*/ jsx(Newline, {})
137
+ ]
138
+ }, dep.name))
139
+ ]
140
+ });
141
+ }
142
+ // Utils
143
+ const WORKSPACE_DEPS = new Map;
144
+ async function _workspaceDeps(workspace) {
145
+ const deps = [];
146
+ for await (const dep of workspace.dependencies()){
147
+ deps.push([
148
+ dep,
149
+ null
150
+ ]);
151
+ }
152
+ for await (const dep of workspace.devDependencies()){
153
+ deps.push([
154
+ dep,
155
+ true
156
+ ]);
157
+ }
158
+ return deps;
159
+ }
160
+ function workspaceDeps(workspace) {
161
+ let prom = WORKSPACE_DEPS.get(workspace.root);
162
+ if (!prom) {
163
+ prom = _workspaceDeps(workspace);
164
+ WORKSPACE_DEPS.set(workspace.root, prom);
165
+ }
166
+ return prom;
167
+ }
168
+ function workspaceStyle(dev) {
169
+ return {
170
+ color: dev ? 'blue' : ''
171
+ };
172
+ }
173
+
174
+ const TreeInk = inked(async function*(props) {
175
+ const loaded$ = source$();
176
+ yield /*#__PURE__*/ jsx(WorkspaceTree, {
177
+ workspace: props.workspace,
178
+ onLoaded: loaded$.next
179
+ });
180
+ await waitFor$(loaded$);
181
+ });
182
+
183
+ export { TreeInk as default };
184
+ //# sourceMappingURL=tree.ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.ink.js","sources":["../src/cli/components/WorkspaceTree.tsx","../src/cli/commands/tree.ink.tsx"],"sourcesContent":["import { Newline, Text, type TextProps } from 'ink';\nimport Spinner from 'ink-spinner';\nimport { filter$, once$, pipe$, var$ } from 'kyrielle';\nimport { type ReactElement, Suspense, use, useCallback, useEffect, useRef } from 'react';\nimport type { Workspace } from '../../projects/workspace.js';\n\n// Component\nexport default function WorkspaceTree(props: WorkspaceTreeProps) {\n const { workspace, dev = false, level = '' } = props;\n\n // Render\n const style = workspaceStyle(dev);\n\n return (\n <Text>\n <Text {...style}>{workspace.name}</Text>\n {workspace.version && <Text color=\"grey\">@{workspace.version}</Text>}\n\n <Suspense fallback={\n <>\n <Newline/>\n <Text>{level}<Text {...style} dimColor>└─ Loading tree<Spinner type=\"simpleDots\" /></Text></Text>\n </>\n }>\n <WorkspaceDependencies {...props} />\n </Suspense>\n </Text>\n );\n}\n\nfunction WorkspaceDependencies(props: WorkspaceTreeProps) {\n const { workspace, dev = false, level = '', onLoaded } = props;\n const deps = use(workspaceDeps(workspace));\n\n const count = useRef(var$(deps.length));\n const handleLoaded = useCallback(() => {\n const cnt = count.current.defer();\n\n if (cnt > 0) {\n count.current.mutate(cnt - 1);\n }\n }, [count]);\n useEffect(() => {\n if (!onLoaded) return;\n\n if (count.current.defer() === 0) {\n onLoaded();\n } else {\n const sub = once$(pipe$(count.current, filter$((v) => v === 0)), onLoaded);\n return sub.unsubscribe;\n }\n }, [count, onLoaded]);\n\n // Render\n if (!deps.length) {\n return null;\n }\n\n const style = workspaceStyle(dev);\n\n return (<>\n <Newline />\n { deps.map(([dep, isDev], idx) => (\n <Text key={dep.name}>\n {level}<Text {...style}>{idx === deps.length - 1 ? '└' : '├'}─{' '}</Text>\n <WorkspaceTree\n workspace={dep}\n dev={isDev ?? dev}\n level={<>{level}<Text {...style}>{idx === deps.length - 1 ? ' ' : '│'}{' '}</Text></>}\n onLoaded={handleLoaded}\n />\n {(idx < deps.length - 1) && <Newline/>}\n </Text>\n )) }\n </>);\n}\n\n// Types\nexport interface WorkspaceTreeProps {\n readonly workspace: Workspace;\n readonly dev?: boolean;\n readonly level?: ReactElement;\n readonly onLoaded?: () => void;\n}\n\ntype WorkspaceDep = [Workspace, boolean | null];\n\n// Utils\nconst WORKSPACE_DEPS = new Map<string, Promise<WorkspaceDep[]>>;\n\nasync function _workspaceDeps(workspace: Workspace): Promise<WorkspaceDep[]> {\n const deps: WorkspaceDep[] = [];\n\n for await (const dep of workspace.dependencies()) {\n deps.push([dep, null]);\n }\n\n for await (const dep of workspace.devDependencies()) {\n deps.push([dep, true]);\n }\n\n return deps;\n}\n\nfunction workspaceDeps(workspace: Workspace): Promise<WorkspaceDep[]> {\n let prom = WORKSPACE_DEPS.get(workspace.root);\n\n if (!prom) {\n prom = _workspaceDeps(workspace);\n WORKSPACE_DEPS.set(workspace.root, prom);\n }\n\n return prom;\n}\n\nfunction workspaceStyle(dev: boolean): TextProps {\n return ({ color: dev ? 'blue' : '' });\n}\n","import { source$, waitFor$ } from 'kyrielle';\nimport type { Workspace } from '../../projects/workspace.js';\nimport WorkspaceTree from '../components/WorkspaceTree.jsx';\nimport { inked } from '../inked.jsx';\n\nconst TreeInk = inked(async function* (props: TreeInkProps) {\n const loaded$ = source$<void>();\n\n yield <WorkspaceTree workspace={props.workspace} onLoaded={loaded$.next} />;\n\n await waitFor$(loaded$);\n});\n\nexport default TreeInk;\n\n// Types\nexport interface TreeInkProps {\n readonly workspace: Workspace;\n}\n"],"names":["WorkspaceTree","props","workspace","dev","level","style","workspaceStyle","_jsxs","Text","_jsx","name","version","color","Suspense","fallback","_Fragment","Newline","dimColor","Spinner","type","WorkspaceDependencies","onLoaded","deps","use","workspaceDeps","count","useRef","var$","length","handleLoaded","useCallback","cnt","current","defer","mutate","useEffect","sub","once$","pipe$","filter$","v","unsubscribe","map","dep","isDev","idx","WORKSPACE_DEPS","Map","_workspaceDeps","dependencies","push","devDependencies","prom","get","root","set","TreeInk","inked","loaded$","source$","next","waitFor$"],"mappings":"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"}