@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.
- package/dist/TaskName.js +33 -0
- package/dist/TaskName.js.map +1 -0
- package/dist/inked.js +62 -0
- package/dist/inked.js.map +1 -0
- package/dist/list.ink.js +49 -0
- package/dist/list.ink.js.map +1 -0
- package/dist/main.js +20 -38
- package/dist/main.js.map +1 -1
- package/dist/parser.js +1879 -0
- package/dist/parser.js.map +1 -0
- package/dist/planner.service.js +46 -0
- package/dist/planner.service.js.map +1 -0
- package/dist/task-exec.ink.js +538 -0
- package/dist/task-exec.ink.js.map +1 -0
- package/dist/task-plan.ink.js +113 -0
- package/dist/task-plan.ink.js.map +1 -0
- package/dist/tree.ink.js +184 -0
- package/dist/tree.ink.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +43 -44
- package/dist/ajv.config.d.ts +0 -3
- package/dist/commands/each.d.ts +0 -25
- package/dist/commands/exec.d.ts +0 -26
- package/dist/commands/group.d.ts +0 -16
- package/dist/commands/list.d.ts +0 -30
- package/dist/commands/run.d.ts +0 -24
- package/dist/commands/tree.d.ts +0 -6
- package/dist/commons/context.service.d.ts +0 -23
- package/dist/commons/git.service.d.ts +0 -62
- package/dist/commons/logger/log.gateway.d.ts +0 -18
- package/dist/commons/logger/parameters.d.ts +0 -2
- package/dist/commons/logger/thread.gateway.d.ts +0 -12
- package/dist/commons/logger/types.d.ts +0 -2
- package/dist/commons/logger.service.d.ts +0 -1
- package/dist/config/config-loader.d.ts +0 -4
- package/dist/config/config-options.d.ts +0 -5
- package/dist/config/types.d.ts +0 -8
- package/dist/config/utils.d.ts +0 -5
- package/dist/constants.d.ts +0 -1
- package/dist/core.plugin-CxgfxFUI.js +0 -642
- package/dist/core.plugin-CxgfxFUI.js.map +0 -1
- package/dist/core.plugin.d.ts +0 -2
- package/dist/filters/affected.filter.d.ts +0 -12
- package/dist/filters/pipeline.d.ts +0 -11
- package/dist/filters/private.filter.d.ts +0 -7
- package/dist/filters/scripts.filter.d.ts +0 -8
- package/dist/index.d.ts +0 -45
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/ink-command-CsbkuRbm.js +0 -2071
- package/dist/ink-command-CsbkuRbm.js.map +0 -1
- package/dist/ink.config.d.ts +0 -3
- package/dist/inversify.config.d.ts +0 -4
- package/dist/jill.application-DNJpmnCF.js +0 -637
- package/dist/jill.application-DNJpmnCF.js.map +0 -1
- package/dist/jill.application.d.ts +0 -19
- package/dist/main.d.ts +0 -1
- package/dist/middlewares/load-project.d.ts +0 -21
- package/dist/middlewares/load-workspace.d.ts +0 -20
- package/dist/modules/command.d.ts +0 -20
- package/dist/modules/ink-command.d.ts +0 -11
- package/dist/modules/middleware.d.ts +0 -8
- package/dist/modules/module.d.ts +0 -7
- package/dist/modules/plugin-loader.service.d.ts +0 -10
- package/dist/modules/plugin.d.ts +0 -14
- package/dist/modules/service.d.ts +0 -8
- package/dist/modules/task-command.d.ts +0 -14
- package/dist/project/project.d.ts +0 -27
- package/dist/project/project.repository.d.ts +0 -15
- package/dist/project/types.d.ts +0 -1
- package/dist/project/workspace.d.ts +0 -41
- package/dist/tasks/command-task.d.ts +0 -15
- package/dist/tasks/errors.d.ts +0 -4
- package/dist/tasks/script-task.d.ts +0 -27
- package/dist/tasks/task-expression.service.d.ts +0 -25
- package/dist/tasks/task-manager.config.d.ts +0 -3
- package/dist/types.d.ts +0 -11
- package/dist/ui/hooks/useFlatTaskTree.d.ts +0 -14
- package/dist/ui/hooks/useIsVerbose.d.ts +0 -1
- package/dist/ui/hooks/useStdoutDimensions.d.ts +0 -4
- package/dist/ui/layout.d.ts +0 -5
- package/dist/ui/list.d.ts +0 -5
- package/dist/ui/static-logs.d.ts +0 -1
- package/dist/ui/task-name.d.ts +0 -5
- package/dist/ui/task-spinner.d.ts +0 -5
- package/dist/ui/task-tree-completed.d.ts +0 -5
- package/dist/ui/task-tree-full-spinner.d.ts +0 -5
- package/dist/ui/task-tree-scrollable-spinner.d.ts +0 -5
- package/dist/ui/task-tree-spinner.d.ts +0 -5
- package/dist/ui/task-tree-stats.d.ts +0 -5
- package/dist/ui/workspace-tree.d.ts +0 -8
- package/dist/utils/events.d.ts +0 -3
- package/dist/utils/exit.d.ts +0 -4
- package/dist/utils/import.d.ts +0 -4
- package/dist/utils/json.d.ts +0 -1
- package/dist/utils/streams.d.ts +0 -3
- package/dist/utils/string.d.ts +0 -2
- package/dist/utils/worker-cache.d.ts +0 -3
- package/dist/workspace-tree-VWKE0B6b.js +0 -1120
- 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":"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"}
|
package/dist/tree.ink.js
ADDED
|
@@ -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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"}
|