@jujulego/jill 2.0.3 → 2.0.4

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 (83) hide show
  1. package/dist/798.js +3 -0
  2. package/dist/798.js.LICENSE.txt +73 -0
  3. package/dist/798.js.map +1 -0
  4. package/dist/main.js +1 -28
  5. package/dist/main.js.map +1 -1
  6. package/dist/runtime.js +2 -0
  7. package/dist/runtime.js.map +1 -0
  8. package/package.json +39 -40
  9. package/dist/commands/each.js +0 -118
  10. package/dist/commands/each.js.map +0 -1
  11. package/dist/commands/list.js +0 -170
  12. package/dist/commands/list.js.map +0 -1
  13. package/dist/commands/run.js +0 -71
  14. package/dist/commands/run.js.map +0 -1
  15. package/dist/commands/tree.js +0 -35
  16. package/dist/commands/tree.js.map +0 -1
  17. package/dist/filters/affected.filter.js +0 -82
  18. package/dist/filters/affected.filter.js.map +0 -1
  19. package/dist/filters/index.js +0 -21
  20. package/dist/filters/index.js.map +0 -1
  21. package/dist/filters/pipeline.js +0 -34
  22. package/dist/filters/pipeline.js.map +0 -1
  23. package/dist/filters/private.filter.js +0 -20
  24. package/dist/filters/private.filter.js.map +0 -1
  25. package/dist/filters/scripts.filter.js +0 -21
  26. package/dist/filters/scripts.filter.js.map +0 -1
  27. package/dist/git.js +0 -94
  28. package/dist/git.js.map +0 -1
  29. package/dist/middlewares/global-config.js +0 -36
  30. package/dist/middlewares/global-config.js.map +0 -1
  31. package/dist/middlewares/index.js +0 -21
  32. package/dist/middlewares/index.js.map +0 -1
  33. package/dist/middlewares/load-project.js +0 -41
  34. package/dist/middlewares/load-project.js.map +0 -1
  35. package/dist/middlewares/load-workspace.js +0 -42
  36. package/dist/middlewares/load-workspace.js.map +0 -1
  37. package/dist/middlewares/setup-ink.js +0 -22
  38. package/dist/middlewares/setup-ink.js.map +0 -1
  39. package/dist/project/index.js +0 -19
  40. package/dist/project/index.js.map +0 -1
  41. package/dist/project/project.js +0 -190
  42. package/dist/project/project.js.map +0 -1
  43. package/dist/project/workspace.js +0 -173
  44. package/dist/project/workspace.js.map +0 -1
  45. package/dist/services/index.js +0 -21
  46. package/dist/services/index.js.map +0 -1
  47. package/dist/services/inversify.config.js +0 -34
  48. package/dist/services/inversify.config.js.map +0 -1
  49. package/dist/services/logger.service.js +0 -75
  50. package/dist/services/logger.service.js.map +0 -1
  51. package/dist/services/spinner.service.js +0 -57
  52. package/dist/services/spinner.service.js.map +0 -1
  53. package/dist/services/task-manager.service.js +0 -18
  54. package/dist/services/task-manager.service.js.map +0 -1
  55. package/dist/tsconfig.tsbuildinfo +0 -1
  56. package/dist/types.js +0 -7
  57. package/dist/types.js.map +0 -1
  58. package/dist/ui/global-spinner.js +0 -65
  59. package/dist/ui/global-spinner.js.map +0 -1
  60. package/dist/ui/index.js +0 -25
  61. package/dist/ui/index.js.map +0 -1
  62. package/dist/ui/layout.js +0 -20
  63. package/dist/ui/layout.js.map +0 -1
  64. package/dist/ui/list.js +0 -30
  65. package/dist/ui/list.js.map +0 -1
  66. package/dist/ui/static-logs.js +0 -63
  67. package/dist/ui/static-logs.js.map +0 -1
  68. package/dist/ui/task-name.js +0 -35
  69. package/dist/ui/task-name.js.map +0 -1
  70. package/dist/ui/task-spinner.js +0 -117
  71. package/dist/ui/task-spinner.js.map +0 -1
  72. package/dist/ui/tasks-spinner.js +0 -39
  73. package/dist/ui/tasks-spinner.js.map +0 -1
  74. package/dist/ui/workspace-tree.js +0 -88
  75. package/dist/ui/workspace-tree.js.map +0 -1
  76. package/dist/utils/index.js +0 -20
  77. package/dist/utils/index.js.map +0 -1
  78. package/dist/utils/streams.js +0 -49
  79. package/dist/utils/streams.js.map +0 -1
  80. package/dist/utils/string.js +0 -14
  81. package/dist/utils/string.js.map +0 -1
  82. package/dist/utils/yargs.js +0 -33
  83. package/dist/utils/yargs.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/layout.tsx"],"sourcesContent":["import { FC } from 'react';\n\nimport { GlobalSpinner } from './global-spinner';\nimport { StaticLogs } from './static-logs';\n\n// Component\nexport const Layout: FC = ({ children }) => (\n <>\n <StaticLogs />\n <GlobalSpinner />\n { children }\n </>\n);\n"],"names":["Layout","children","StaticLogs","GlobalSpinner"],"mappings":"AAAA;;;;+BAMaA;;aAAAA;;;+BAJiB;4BACH;AAGpB,MAAMA,SAAa,CAAC,EAAEC,SAAQ,EAAE,iBACrC;;0BACE,qBAACC,sBAAU;0BACX,qBAACC,4BAAa;YACZF"}
package/dist/ui/list.js DELETED
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "List", {
6
- enumerable: true,
7
- get: ()=>List
8
- });
9
- const _jsxRuntime = require("react/jsx-runtime");
10
- const _ink = require("ink");
11
- const _utils = require("../utils/index");
12
- function List({ items , headers }) {
13
- return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Box, {
14
- children: Object.keys(items[0]).map((key)=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Box, {
15
- flexDirection: "column",
16
- marginRight: 2,
17
- children: [
18
- headers && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
19
- bold: true,
20
- children: (0, _utils.capitalize)(key)
21
- }),
22
- items.map((item, idx)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
23
- children: item[key] || ' '
24
- }, idx))
25
- ]
26
- }, key))
27
- });
28
- }
29
-
30
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/list.tsx"],"sourcesContent":["import { Box, Text } from 'ink';\nimport { ReactElement } from 'react';\n\nimport { capitalize } from '../utils';\n\n// Types\nexport interface ListProps<T extends Record<string, unknown>> {\n items: T[];\n headers?: boolean;\n}\n\n// Component\nexport function List<T extends Record<string, unknown>>({ items, headers }: ListProps<T>): ReactElement {\n return (\n <Box>\n { Object.keys(items[0]).map((key) => (\n <Box key={key} flexDirection=\"column\" marginRight={2}>\n { headers && (\n <Text bold>{ capitalize(key) }</Text>\n ) }\n { items.map((item, idx) => (\n <Text key={idx}>{ item[key] || ' ' }</Text>\n )) }\n </Box>\n )) }\n </Box>\n );\n}\n"],"names":["List","items","headers","Box","Object","keys","map","key","flexDirection","marginRight","Text","bold","capitalize","item","idx"],"mappings":"AAAA;;;;+BAYgBA;;aAAAA;;;qBAZU;uBAGC;AASpB,SAASA,KAAwC,EAAEC,MAAK,EAAEC,QAAO,EAAgB,EAAgB;IACtG,qBACE,qBAACC,QAAG;kBACAC,OAAOC,IAAI,CAACJ,KAAK,CAAC,EAAE,EAAEK,GAAG,CAAC,CAACC,oBAC3B,sBAACJ,QAAG;gBAAWK,eAAc;gBAASC,aAAa;;oBAC/CP,yBACA,qBAACQ,SAAI;wBAACC,IAAI;kCAAGC,IAAAA,iBAAU,EAACL;;oBAExBN,MAAMK,GAAG,CAAC,CAACO,MAAMC,oBACjB,qBAACJ,SAAI;sCAAaG,IAAI,CAACN,IAAI,IAAI;2BAApBO;;eALLP;;AAWlB"}
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "StaticLogs", {
6
- enumerable: true,
7
- get: ()=>StaticLogs
8
- });
9
- const _ink = require("ink");
10
- const _react = require("react");
11
- const _winstonTransport = /*#__PURE__*/ _interopRequireDefault(require("winston-transport"));
12
- const _services = require("../services/index");
13
- const _winston = /*#__PURE__*/ _interopRequireDefault(require("winston"));
14
- function _interopRequireDefault(obj) {
15
- return obj && obj.__esModule ? obj : {
16
- default: obj
17
- };
18
- }
19
- // Constants
20
- const MESSAGE = Symbol.for('message');
21
- const StaticLogs = ()=>{
22
- // State
23
- const { write } = (0, _ink.useStderr)();
24
- // Effect
25
- (0, _react.useLayoutEffect)(()=>{
26
- const logger = _services.container.get(_services.Logger);
27
- // Remove Console transport
28
- for (const transport of logger.transports){
29
- if (transport instanceof _winston.default.transports.Console) {
30
- logger.remove(transport);
31
- }
32
- }
33
- // Add custom transport
34
- const transport1 = new class extends _winstonTransport.default {
35
- // Constructor
36
- constructor(){
37
- super({
38
- format: _services.consoleFormat
39
- });
40
- }
41
- // Methods
42
- log(info, next) {
43
- setTimeout(()=>{
44
- this.emit('logged', info);
45
- }, 0);
46
- write(info[MESSAGE] + '\n');
47
- next();
48
- }
49
- };
50
- logger.add(transport1);
51
- return ()=>{
52
- logger.remove(transport1);
53
- logger.add(new _winston.default.transports.Console({
54
- format: _services.consoleFormat
55
- }));
56
- };
57
- }, [
58
- write
59
- ]);
60
- return null;
61
- };
62
-
63
- //# sourceMappingURL=static-logs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/static-logs.tsx"],"sourcesContent":["import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\nimport winston from 'winston';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n\n // Remove Console transport\n for (const transport of logger.transports) {\n if (transport instanceof winston.transports.Console) {\n logger.remove(transport);\n }\n }\n\n // Add custom transport\n const transport = new class extends Transport {\n // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\n\n next();\n }\n };\n\n logger.add(transport);\n\n return () => {\n logger.remove(transport);\n logger.add(new winston.transports.Console({\n format: consoleFormat\n }));\n };\n }, [write]);\n\n return null;\n};\n"],"names":["StaticLogs","MESSAGE","Symbol","for","write","useStderr","useLayoutEffect","logger","container","get","Logger","transport","transports","winston","Console","remove","Transport","constructor","format","consoleFormat","log","info","next","setTimeout","emit","add"],"mappings":"AAAA;;;;+BAgBaA;;aAAAA;;qBAhBa;uBACW;uEACf;0BAE2B;8DAC7B;;;;;;AAEpB,YAAY;AACZ,MAAMC,UAAUC,OAAOC,GAAG,CAAC;AAQpB,MAAMH,aAAiB,IAAM;IAClC,QAAQ;IACR,MAAM,EAAEI,MAAK,EAAE,GAAGC,IAAAA,cAAS;IAE3B,SAAS;IACTC,IAAAA,sBAAe,EAAC,IAAM;QACpB,MAAMC,SAASC,mBAAS,CAACC,GAAG,CAACC,gBAAM;QAEnC,2BAA2B;QAC3B,KAAK,MAAMC,aAAaJ,OAAOK,UAAU,CAAE;YACzC,IAAID,qBAAqBE,gBAAO,CAACD,UAAU,CAACE,OAAO,EAAE;gBACnDP,OAAOQ,MAAM,CAACJ;YAChB,CAAC;QACH;QAEA,uBAAuB;QACvB,MAAMA,aAAY,IAAI,cAAcK,yBAAS;YAC3C,cAAc;YACdC,aAAc;gBACZ,KAAK,CAAC;oBACJC,QAAQC,uBAAa;gBACvB;YACF;YAEA,UAAU;YACVC,IAAIC,IAAU,EAAEC,IAAgB,EAAQ;gBACtCC,WAAW,IAAM;oBACf,IAAI,CAACC,IAAI,CAAC,UAAUH;gBACtB,GAAG;gBAEHjB,MAAMiB,IAAI,CAACpB,QAAQ,GAAG;gBAEtBqB;YACF;QACF;QAEAf,OAAOkB,GAAG,CAACd;QAEX,OAAO,IAAM;YACXJ,OAAOQ,MAAM,CAACJ;YACdJ,OAAOkB,GAAG,CAAC,IAAIZ,gBAAO,CAACD,UAAU,CAACE,OAAO,CAAC;gBACxCI,QAAQC,uBAAa;YACvB;QACF;IACF,GAAG;QAACf;KAAM;IAEV,OAAO,IAAI;AACb"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "TaskName", {
6
- enumerable: true,
7
- get: ()=>TaskName
8
- });
9
- const _jsxRuntime = require("react/jsx-runtime");
10
- const _ink = require("ink");
11
- // Utils
12
- function isWorkspaceCtx(ctx) {
13
- return 'workspace' in ctx;
14
- }
15
- const TaskName = ({ task })=>{
16
- if (isWorkspaceCtx(task.context)) {
17
- return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
18
- children: [
19
- "Running ",
20
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
21
- bold: true,
22
- children: task.context.script
23
- }),
24
- " in ",
25
- task.context.workspace.name
26
- ]
27
- });
28
- } else {
29
- return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
30
- children: task.name
31
- });
32
- }
33
- };
34
-
35
- //# sourceMappingURL=task-name.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/task-name.tsx"],"sourcesContent":["import { Task, TaskContext } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport { FC } from 'react';\n\nimport { WorkspaceContext } from '../project';\n\n// Types\nexport interface TaskNameProps {\n task: Task;\n}\n\n// Utils\nfunction isWorkspaceCtx(ctx: Readonly<TaskContext>): ctx is Readonly<WorkspaceContext> {\n return 'workspace' in ctx;\n}\n\n// Components\nexport const TaskName: FC<TaskNameProps> = ({ task }) => {\n if (isWorkspaceCtx(task.context)) {\n return (\n <Text>\n Running <Text bold>{ task.context.script }</Text> in { task.context.workspace.name }\n </Text>\n );\n } else {\n return <Text>{ task.name }</Text>;\n }\n};\n"],"names":["TaskName","isWorkspaceCtx","ctx","task","context","Text","bold","script","workspace","name"],"mappings":"AAAA;;;;+BAiBaA;;aAAAA;;;qBAhBQ;AAUrB,QAAQ;AACR,SAASC,eAAeC,GAA0B,EAAqC;IACrF,OAAO,eAAeA;AACxB;AAGO,MAAMF,WAA8B,CAAC,EAAEG,KAAI,EAAE,GAAK;IACvD,IAAIF,eAAeE,KAAKC,OAAO,GAAG;QAChC,qBACE,sBAACC,SAAI;;gBAAC;8BACI,qBAACA,SAAI;oBAACC,IAAI;8BAAGH,KAAKC,OAAO,CAACG,MAAM;;gBAAS;gBAAMJ,KAAKC,OAAO,CAACI,SAAS,CAACC,IAAI;;;IAGxF,OAAO;QACL,qBAAO,qBAACJ,SAAI;sBAAGF,KAAKM,IAAI;;IAC1B,CAAC;AACH"}
@@ -1,117 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "TaskSpinner", {
6
- enumerable: true,
7
- get: ()=>TaskSpinner
8
- });
9
- const _jsxRuntime = require("react/jsx-runtime");
10
- const _ink = require("ink");
11
- const _inkSpinner = /*#__PURE__*/ _interopRequireDefault(require("ink-spinner"));
12
- const _logSymbols = /*#__PURE__*/ _interopRequireDefault(require("log-symbols"));
13
- const _ms = /*#__PURE__*/ _interopRequireDefault(require("ms"));
14
- const _react = require("react");
15
- const _taskName = require("./task-name");
16
- function _interopRequireDefault(obj) {
17
- return obj && obj.__esModule ? obj : {
18
- default: obj
19
- };
20
- }
21
- const TaskSpinner = ({ task })=>{
22
- // State
23
- const [status, setStatus] = (0, _react.useState)(task.status);
24
- const [time, setTime] = (0, _react.useState)(0);
25
- // Effects
26
- (0, _react.useLayoutEffect)(()=>{
27
- return task.subscribe('status', (event)=>{
28
- setStatus(event.status);
29
- });
30
- }, [
31
- task
32
- ]);
33
- (0, _react.useLayoutEffect)(()=>{
34
- return task.subscribe('completed', ({ duration })=>{
35
- setTime(duration);
36
- });
37
- }, [
38
- task
39
- ]);
40
- // Render
41
- switch(status){
42
- case 'blocked':
43
- case 'ready':
44
- return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
45
- color: "grey",
46
- children: [
47
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_inkSpinner.default, {
48
- type: "line2"
49
- }),
50
- ' ',
51
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_taskName.TaskName, {
52
- task: task
53
- })
54
- ]
55
- });
56
- case 'running':
57
- return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
58
- children: [
59
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_inkSpinner.default, {}),
60
- ' ',
61
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_taskName.TaskName, {
62
- task: task
63
- })
64
- ]
65
- });
66
- case 'done':
67
- return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
68
- children: [
69
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
70
- color: "green",
71
- children: [
72
- _logSymbols.default.success,
73
- ' ',
74
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_taskName.TaskName, {
75
- task: task
76
- })
77
- ]
78
- }),
79
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
80
- color: "magenta",
81
- children: [
82
- ' ',
83
- "(took ",
84
- (0, _ms.default)(time),
85
- ")"
86
- ]
87
- })
88
- ]
89
- });
90
- case 'failed':
91
- return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
92
- children: [
93
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
94
- color: "red",
95
- children: [
96
- _logSymbols.default.error,
97
- ' ',
98
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_taskName.TaskName, {
99
- task: task
100
- })
101
- ]
102
- }),
103
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
104
- color: "magenta",
105
- children: [
106
- ' ',
107
- "(took ",
108
- (0, _ms.default)(time),
109
- ")"
110
- ]
111
- })
112
- ]
113
- });
114
- }
115
- };
116
-
117
- //# sourceMappingURL=task-spinner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/task-spinner.tsx"],"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;4BAAQM,IAAAA,WAAE,EAACb;4BAAO;;;;;QAInD,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;4BAAQM,IAAAA,WAAE,EAACb;4BAAO;;;;;IAGrD;AACF"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "TasksSpinner", {
6
- enumerable: true,
7
- get: ()=>TasksSpinner
8
- });
9
- const _jsxRuntime = require("react/jsx-runtime");
10
- const _react = require("react");
11
- const _taskSpinner = require("./task-spinner");
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, {
34
- task: task
35
- }, task.id))
36
- });
37
- };
38
-
39
- //# sourceMappingURL=tasks-spinner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/tasks-spinner.tsx"],"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"}
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "WorkspaceTree", {
6
- enumerable: true,
7
- get: ()=>WorkspaceTree
8
- });
9
- const _jsxRuntime = require("react/jsx-runtime");
10
- const _ink = require("ink");
11
- const _react = require("react");
12
- // Utils
13
- const style = (dev)=>({
14
- color: dev ? 'blue' : ''
15
- });
16
- const WorkspaceTree = (props)=>{
17
- const { workspace: wks , dev =false , level ='' } = props;
18
- // State
19
- const [deps, setDeps] = (0, _react.useState)([]);
20
- // Effects
21
- (0, _react.useEffect)(()=>void (async ()=>{
22
- const deps = [];
23
- for await (const dep of wks.dependencies()){
24
- deps.push([
25
- dep,
26
- null
27
- ]);
28
- }
29
- for await (const dep1 of wks.devDependencies()){
30
- deps.push([
31
- dep1,
32
- true
33
- ]);
34
- }
35
- setDeps(deps);
36
- })(), [
37
- wks
38
- ]);
39
- // Render
40
- return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
41
- children: [
42
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
43
- ...style(dev),
44
- children: wks.name
45
- }),
46
- wks.version && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
47
- color: "grey",
48
- children: [
49
- "@",
50
- wks.version
51
- ]
52
- }),
53
- deps.length > 0 && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Newline, {}),
54
- deps.map(([dep, isDev], idx)=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
55
- children: [
56
- level,
57
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
58
- ...style(dev),
59
- children: [
60
- idx === deps.length - 1 ? '└' : '├',
61
- "─",
62
- ' '
63
- ]
64
- }),
65
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(WorkspaceTree, {
66
- workspace: dep,
67
- dev: isDev ?? dev,
68
- level: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
69
- children: [
70
- level,
71
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
72
- ...style(dev),
73
- children: [
74
- idx === deps.length - 1 ? ' ' : '│',
75
- ' '
76
- ]
77
- })
78
- ]
79
- })
80
- }),
81
- idx < deps.length - 1 && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Newline, {})
82
- ]
83
- }, dep.name))
84
- ]
85
- });
86
- };
87
-
88
- //# sourceMappingURL=workspace-tree.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ui/workspace-tree.tsx"],"sourcesContent":["import { Newline, Text, TextProps } from 'ink';\nimport { FC, ReactElement, useEffect, useState } from 'react';\n\nimport { Workspace } from '../project';\n\n// Types\nexport interface WorkspaceTreeProps {\n workspace: Workspace;\n dev?: boolean;\n level?: ReactElement;\n}\n\n// Utils\nconst style = (dev: boolean): TextProps => ({ color: dev ? 'blue' : '' });\n\n// Component\nexport const WorkspaceTree: FC<WorkspaceTreeProps> = (props) => {\n const { workspace: wks, dev = false, level = '' } = props;\n\n // State\n const [deps, setDeps] = useState<[Workspace, boolean | null][]>([]);\n\n // Effects\n useEffect(() => void (async () => {\n const deps: [Workspace, boolean | null][] = [];\n\n for await (const dep of wks.dependencies()) {\n deps.push([dep, null]);\n }\n\n for await (const dep of wks.devDependencies()) {\n deps.push([dep, true]);\n }\n\n setDeps(deps);\n })(), [wks]);\n\n // Render\n return (\n <Text>\n <Text {...style(dev)}>{ wks.name }</Text>\n { wks.version && <Text color=\"grey\">@{ wks.version }</Text> }\n { (deps.length > 0) && <Newline /> }\n\n { deps.map(([dep, isDev], idx) => (\n <Text key={dep.name}>\n { level }<Text {...style(dev)}>{ idx === deps.length - 1 ? '└' : '├'}─{' '}</Text>\n <WorkspaceTree\n workspace={dep}\n dev={isDev ?? dev}\n level={<>{ level }<Text {...style(dev)}>{ idx === deps.length - 1 ? ' ' : '│' }{' '}</Text></>}\n />\n { (idx < deps.length - 1) && <Newline /> }\n </Text>\n )) }\n </Text>\n );\n};\n"],"names":["WorkspaceTree","style","dev","color","props","workspace","wks","level","deps","setDeps","useState","useEffect","dep","dependencies","push","devDependencies","Text","name","version","length","Newline","map","isDev","idx"],"mappings":"AAAA;;;;+BAgBaA;;aAAAA;;;qBAhB4B;uBACa;AAWtD,QAAQ;AACR,MAAMC,QAAQ,CAACC,MAA6B,CAAA;QAAEC,OAAOD,MAAM,SAAS,EAAE;IAAC,CAAA;AAGhE,MAAMF,gBAAwC,CAACI,QAAU;IAC9D,MAAM,EAAEC,WAAWC,IAAG,EAAEJ,KAAM,KAAK,CAAA,EAAEK,OAAQ,GAAE,EAAE,GAAGH;IAEpD,QAAQ;IACR,MAAM,CAACI,MAAMC,QAAQ,GAAGC,IAAAA,eAAQ,EAAgC,EAAE;IAElE,UAAU;IACVC,IAAAA,gBAAS,EAAC,IAAM,KAAK,AAAC,CAAA,UAAY;YAChC,MAAMH,OAAsC,EAAE;YAE9C,WAAW,MAAMI,OAAON,IAAIO,YAAY,GAAI;gBAC1CL,KAAKM,IAAI,CAAC;oBAACF;oBAAK,IAAI;iBAAC;YACvB;YAEA,WAAW,MAAMA,QAAON,IAAIS,eAAe,GAAI;gBAC7CP,KAAKM,IAAI,CAAC;oBAACF;oBAAK,IAAI;iBAAC;YACvB;YAEAH,QAAQD;QACV,CAAA,KAAM;QAACF;KAAI;IAEX,SAAS;IACT,qBACE,sBAACU,SAAI;;0BACH,qBAACA,SAAI;gBAAE,GAAGf,MAAMC,IAAI;0BAAII,IAAIW,IAAI;;YAC9BX,IAAIY,OAAO,kBAAI,sBAACF,SAAI;gBAACb,OAAM;;oBAAO;oBAAGG,IAAIY,OAAO;;;YAC/CV,KAAKW,MAAM,GAAG,mBAAM,qBAACC,YAAO;YAE7BZ,KAAKa,GAAG,CAAC,CAAC,CAACT,KAAKU,MAAM,EAAEC,oBACxB,sBAACP,SAAI;;wBACDT;sCAAO,sBAACS,SAAI;4BAAE,GAAGf,MAAMC,IAAI;;gCAAIqB,QAAQf,KAAKW,MAAM,GAAG,IAAI,MAAM,GAAG;gCAAC;gCAAE;;;sCACvE,qBAACnB;4BACCK,WAAWO;4BACXV,KAAKoB,SAASpB;4BACdK,qBAAO;;oCAAIA;kDAAO,sBAACS,SAAI;wCAAE,GAAGf,MAAMC,IAAI;;4CAAIqB,QAAQf,KAAKW,MAAM,GAAG,IAAI,MAAM,GAAG;4CAAG;;;;;;wBAE/EI,MAAMf,KAAKW,MAAM,GAAG,mBAAM,qBAACC,YAAO;;mBAP5BR,IAAIK,IAAI;;;AAY3B"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _exportStar(require("./streams"), exports);
6
- _exportStar(require("./string"), exports);
7
- _exportStar(require("./yargs"), exports);
8
- function _exportStar(from, to) {
9
- Object.keys(from).forEach(function(k) {
10
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
11
- enumerable: true,
12
- get: function() {
13
- return from[k];
14
- }
15
- });
16
- });
17
- return from;
18
- }
19
-
20
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export * from './streams';\nexport * from './string';\nexport * from './yargs';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA"}
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- combine: ()=>combine,
13
- streamLines: ()=>streamLines
14
- });
15
- const _eventTree = require("@jujulego/event-tree");
16
- async function* combine(...generators) {
17
- for (const gen of generators){
18
- yield* gen;
19
- }
20
- }
21
- async function* streamLines(task, stream) {
22
- // Abort
23
- const ctrl = new AbortController();
24
- const reason = new Error('aborted');
25
- task.subscribe('completed', ()=>ctrl.abort(reason));
26
- // Stream
27
- let current = '';
28
- try {
29
- for await (const chunk of (0, _eventTree.streamEvents)(task, `stream.${stream}`, {
30
- signal: ctrl.signal
31
- })){
32
- const data = current + chunk.data.toString('utf-8');
33
- const lines = data.split(/\r?\n/);
34
- current = lines.pop() ?? '';
35
- for (const line of lines){
36
- yield line;
37
- }
38
- }
39
- } catch (err) {
40
- if (err !== reason) {
41
- throw err;
42
- }
43
- if (current) {
44
- yield current;
45
- }
46
- }
47
- }
48
-
49
- //# sourceMappingURL=streams.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/streams.ts"],"sourcesContent":["import { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { streamEvents } from '@jujulego/event-tree';\n\n// 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 const reason = new Error('aborted');\n\n task.subscribe('completed', () => ctrl.abort(reason));\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/);\n\n current = lines.pop() ?? '';\n\n for (const line of lines) {\n yield line;\n }\n }\n } catch (err) {\n if (err !== reason) {\n throw err;\n }\n\n if (current) {\n yield current;\n }\n }\n}\n"],"names":["combine","streamLines","generators","gen","task","stream","ctrl","AbortController","reason","Error","subscribe","abort","current","chunk","streamEvents","signal","data","toString","lines","split","pop","line","err"],"mappings":"AAAA;;;;;;;;;;;IAIuBA,OAAO,MAAPA;IAMAC,WAAW,MAAXA;;2BATM;AAGtB,gBAAgBD,QAAW,GAAGE,UAA+B,EAAqB;IACvF,KAAK,MAAMC,OAAOD,WAAY;QAC5B,OAAOC;IACT;AACF;AAEO,gBAAgBF,YAAYG,IAAe,EAAEC,MAAuB,EAA0B;IACnG,QAAQ;IACR,MAAMC,OAAO,IAAIC;IACjB,MAAMC,SAAS,IAAIC,MAAM;IAEzBL,KAAKM,SAAS,CAAC,aAAa,IAAMJ,KAAKK,KAAK,CAACH;IAE7C,SAAS;IACT,IAAII,UAAU;IAEd,IAAI;QACF,WAAW,MAAMC,SAASC,IAAAA,uBAAY,EAACV,MAAM,CAAC,OAAO,EAAEC,OAAO,CAAC,EAAE;YAAEU,QAAQT,KAAKS,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,IAAIA,QAAQd,QAAQ;YAClB,MAAMc,IAAI;QACZ,CAAC;QAED,IAAIV,SAAS;YACX,MAAMA;QACR,CAAC;IACH;AACF"}
@@ -1,14 +0,0 @@
1
- // Utils
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "capitalize", {
7
- enumerable: true,
8
- get: ()=>capitalize
9
- });
10
- function capitalize(txt) {
11
- return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();
12
- }
13
-
14
- //# sourceMappingURL=string.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/string.ts"],"sourcesContent":["// Utils\nexport function capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n}\n"],"names":["capitalize","txt","charAt","toUpperCase","substring","toLowerCase"],"mappings":"AAAA,QAAQ;AACR;;;;+BAAgBA;;aAAAA;;AAAT,SAASA,WAAWC,GAAW,EAAU;IAC9C,OAAOA,IAAIC,MAAM,CAAC,GAAGC,WAAW,KAAKF,IAAIG,SAAS,CAAC,GAAGC,WAAW;AACnE"}
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- defineCommand: ()=>defineCommand,
13
- defineMiddleware: ()=>defineMiddleware,
14
- applyMiddlewares: ()=>applyMiddlewares
15
- });
16
- function defineCommand(command) {
17
- return command;
18
- }
19
- function defineMiddleware(middleware) {
20
- return middleware;
21
- }
22
- function applyMiddlewares(yargs, middlewares) {
23
- let tmp = yargs;
24
- for (const middleware of middlewares){
25
- if (middleware.builder) {
26
- tmp = middleware.builder(tmp);
27
- }
28
- tmp.middleware(middleware.handler);
29
- }
30
- return tmp;
31
- }
32
-
33
- //# sourceMappingURL=yargs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/yargs.ts"],"sourcesContent":["import { Arguments, Argv, CommandModule } from 'yargs';\n\nimport { Awaitable } from '../types';\n\n// Types\nexport interface Middleware<T = unknown, U = unknown> {\n builder?: (yargs: Argv<T>) => Argv<U>;\n handler(args: Arguments<U>): Awaitable<void>;\n}\n\n// Command utils\nexport function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U> {\n return command;\n}\n\n// Middleware utils\nexport function defineMiddleware<T, U>(middleware: Middleware<T, U>): Middleware<T, U> {\n return middleware;\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"],"names":["defineCommand","defineMiddleware","applyMiddlewares","command","middleware","yargs","middlewares","tmp","builder","handler"],"mappings":"AAAA;;;;;;;;;;;IAWgBA,aAAa,MAAbA;IAKAC,gBAAgB,MAAhBA;IAIAC,gBAAgB,MAAhBA;;AATT,SAASF,cAAoBG,OAA4B,EAAuB;IACrF,OAAOA;AACT;AAGO,SAASF,iBAAuBG,UAA4B,EAAoB;IACrF,OAAOA;AACT;AAEO,SAASF,iBAAoBG,KAAc,EAAEC,WAAyB,EAAW;IACtF,IAAIC,MAAqBF;IAEzB,KAAK,MAAMD,cAAcE,YAAa;QACpC,IAAIF,WAAWI,OAAO,EAAE;YACtBD,MAAMH,WAAWI,OAAO,CAACD;QAC3B,CAAC;QAEDA,IAAIH,UAAU,CAACA,WAAWK,OAAO;IACnC;IAEA,OAAOF;AACT"}