@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"jill.application-DNJpmnCF.js","sources":["../src/ui/hooks/useIsVerbose.ts","../src/ui/hooks/useFlatTaskTree.ts","../src/ui/task-tree-stats.tsx","../src/ui/task-tree-completed.tsx","../src/ui/hooks/useStdoutDimensions.ts","../src/ui/task-tree-scrollable-spinner.tsx","../src/ui/task-tree-full-spinner.tsx","../src/ui/task-tree-spinner.tsx","../src/modules/task-command.tsx","../src/jill.application.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { CONFIG } from '@/src/config/config-loader.ts';\nimport { container } from '@/src/inversify.config.ts';\n\nexport function useIsVerbose() {\n return useMemo(() => {\n const config = container.get(CONFIG);\n\n if (config.verbose) {\n return ['verbose', 'debug'].includes(config.verbose);\n } else {\n return false;\n }\n }, []);\n}\n","import { GroupTask, Task, TaskManager } from '@jujulego/tasks';\nimport { useLayoutEffect, useMemo, useState } from 'react';\n\nimport { Workspace } from '@/src/project/workspace.ts';\nimport { CommandTask, isCommandCtx } from '@/src/tasks/command-task.ts';\nimport { ScriptTask } from '@/src/tasks/script-task.ts';\nimport { useIsVerbose } from '@/src/ui/hooks/useIsVerbose.ts';\n\n// Types\nexport interface FlatTask {\n task: Task;\n level: number;\n}\n\n// Utils\n/**\n * Sorts tasks according to workspace and script, keeping command at the end\n */\nexport function taskComparator(a: Task, b: Task) {\n // 1 - compare kind\n const kindA = a instanceof CommandTask ? 0 : 1;\n const kindB = b instanceof CommandTask ? 0 : 1;\n\n if (kindA !== kindB) {\n return kindB - kindA;\n }\n\n // 2 - compare workspaces\n const wksA = 'workspace' in a.context ? (a.context.workspace as Workspace).name : '\\uffff';\n const wksB = 'workspace' in b.context ? (b.context.workspace as Workspace).name : '\\uffff';\n const wksDiff = wksA.localeCompare(wksB);\n\n if (wksDiff !== 0) {\n return wksDiff;\n }\n\n // 1 - compare scripts\n const scriptA = 'script' in a.context ? a.context.script as string : '\\uffff';\n const scriptB = 'script' in b.context ? b.context.script as string : '\\uffff';\n\n return scriptA.localeCompare(scriptB);\n}\n\n/**\n * Extract tasks to be printed, with their level in the tree\n */\nexport function * flatTasks(tasks: readonly Task[], isVerbose: boolean, groupId?: string, level = 0): Generator<FlatTask> {\n for (const task of tasks) {\n if (task.group?.id !== groupId) {\n continue;\n }\n\n yield { task, level };\n\n if (task instanceof GroupTask) {\n const isCommandGroup = task.tasks.some((t) => !isCommandCtx(t.context));\n const hasFailed = task.tasks.some((t) => t.status === 'failed');\n const isStarted = task.status === 'running';\n\n if (isVerbose || isCommandGroup || hasFailed || isStarted) {\n let tasks = task.tasks;\n\n if (task instanceof ScriptTask) {\n tasks = [...tasks].sort(taskComparator);\n }\n\n yield* flatTasks(tasks, isVerbose, task.id, level + 1);\n }\n }\n }\n}\n\n// Hook\nexport function useFlatTaskTree(manager: TaskManager): FlatTask[] {\n const isVerbose = useIsVerbose();\n\n const [tasks, setTasks] = useState([...manager.tasks].sort(taskComparator));\n const [version, setVersion] = useState(0);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.on('added', () => {\n if (!dirty) {\n dirty = true;\n\n queueMicrotask(() => {\n setTasks([...manager.tasks].sort(taskComparator));\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.on('started', () => {\n if (!dirty) {\n dirty = true;\n\n setTimeout(() => {\n setVersion((old) => ++old);\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.on('completed', () => {\n if (!dirty) {\n dirty = true;\n\n setTimeout(() => {\n setVersion((old) => ++old);\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n return useMemo(() => {\n return Array.from(flatTasks(tasks, isVerbose));\n }, [tasks, isVerbose, version]);\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport { useLayoutEffect, useState } from 'react';\n\n// Types\nexport interface TaskTreeStatsProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeStats({ manager }: TaskTreeStatsProps) {\n // Follow stats\n const [stats, setStats] = useState(() => {\n const base = { running: 0, done: 0, failed: 0 };\n \n for (const task of manager.tasks) {\n switch (task.status) {\n case 'starting':\n case 'running':\n base.running += task.weight;\n break;\n\n case 'done':\n base.done += task.weight;\n break;\n\n case 'failed':\n base.failed += task.weight;\n break;\n }\n }\n \n return base;\n });\n\n useLayoutEffect(() => manager.on('started', (task) => {\n setStats((old) => ({\n ...old,\n running: old.running + task.weight\n }));\n }), [manager]);\n\n useLayoutEffect(() => manager.on('completed', (task) => {\n setStats((old) => ({\n running: old.running - task.weight,\n done: task.status === 'done' ? old.done + task.weight : old.done,\n failed: task.status === 'failed' ? old.failed + task.weight : old.failed,\n }));\n }), [manager]);\n\n // Render\n return (\n <Text>\n { (stats.running !== 0) && (\n <><Spinner type=\"sand\" /> <Text bold>{ stats.running }</Text> running</>\n ) }\n { (stats.running !== 0 && stats.done !== 0) && (<>, </>) }\n { (stats.done !== 0) && (\n <Text color=\"green\">{ symbols.success } { stats.done } done</Text>\n ) }\n { (stats.running + stats.done !== 0 && stats.failed !== 0) && (<>, </>) }\n { (stats.failed !== 0) && (\n <Text color=\"red\">{ symbols.error } { stats.failed } failed</Text>\n ) }\n </Text>\n );\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Box, Static } from 'ink';\nimport { useMemo } from 'react';\n\nimport { flatTasks, taskComparator } from '@/src/ui/hooks/useFlatTaskTree.ts';\nimport { useIsVerbose } from '@/src/ui/hooks/useIsVerbose.ts';\nimport TaskSpinner from '@/src/ui/task-spinner.tsx';\nimport TaskTreeStats from '@/src/ui/task-tree-stats.tsx';\n\n// Types\nexport interface TaskTreeCompletedProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeCompleted({ manager }: TaskTreeCompletedProps) {\n // Config\n const isVerbose = useIsVerbose();\n\n // Extract all tasks\n const flat = useMemo(() => {\n return Array.from(flatTasks([...manager.tasks].sort(taskComparator), isVerbose));\n }, [manager, isVerbose]);\n\n // Render\n return (\n <>\n <Static items={flat}>\n { ({ task, level }) => (\n <Box key={task.id} marginLeft={level * 2} flexShrink={0}>\n <TaskSpinner task={task} />\n </Box>\n ) }\n </Static>\n <TaskTreeStats manager={manager} />\n </>\n );\n}\n","import { useStdout } from 'ink';\nimport { useEffect, useState } from 'react';\n\nexport function useStdoutDimensions() {\n const { stdout } = useStdout();\n const [dimensions, setDimensions] = useState({\n columns: stdout.columns ?? Infinity,\n rows: stdout.rows ?? Infinity,\n });\n\n useEffect(() => {\n const handler = () => setDimensions({\n columns: stdout.columns ?? Infinity,\n rows: stdout.rows ?? Infinity,\n });\n stdout.on('resize', handler);\n\n return () => {\n stdout.off('resize', handler);\n };\n }, [stdout]);\n\n return dimensions;\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Box, Text, useInput } from 'ink';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { useStdoutDimensions } from '@/src/ui/hooks/useStdoutDimensions.ts';\nimport { useFlatTaskTree } from '@/src/ui/hooks/useFlatTaskTree.ts';\nimport TaskSpinner from '@/src/ui/task-spinner.tsx';\nimport TaskTreeStats from '@/src/ui/task-tree-stats.tsx';\n\n// Types\nexport interface TaskTreeScrollableSpinnerProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeScrollableSpinner({ manager }: TaskTreeScrollableSpinnerProps) {\n const { rows: termHeight } = useStdoutDimensions();\n\n // Extract all tasks\n const flat = useFlatTaskTree(manager);\n\n const maxHeight = useMemo(\n () => Math.min(termHeight - 4, flat.length),\n [termHeight, flat]\n );\n\n // Manage scroll\n const [start, setStart] = useState(0);\n\n const slice = useMemo(\n () => flat.slice(start, start + maxHeight),\n [flat, start, maxHeight]\n );\n\n useEffect(() => {\n if (start + maxHeight > flat.length) {\n setStart(Math.max(flat.length - maxHeight, 0));\n }\n }, [start, flat, maxHeight]);\n\n useInput((_, key) => {\n if (key.upArrow) {\n setStart((old) => Math.max(0, old - 1));\n } else if (key.downArrow) {\n setStart((old) => Math.min(flat.length - maxHeight, old + 1));\n }\n });\n\n // Render\n return (\n <>\n <Box flexDirection=\"column\">\n { slice.map(({ task, level }) => (\n <Box key={task.id} marginLeft={level * 2} flexShrink={0}>\n <TaskSpinner task={task} />\n </Box>\n )) }\n </Box>\n <Text>\n <TaskTreeStats manager={manager} />\n { (maxHeight < flat.length) && (<Text color=\"grey\"> - use keyboard arrows to scroll</Text>) }\n </Text>\n </>\n );\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { Box, Text } from 'ink';\n\nimport { useFlatTaskTree } from '@/src/ui/hooks/useFlatTaskTree.ts';\nimport TaskSpinner from '@/src/ui/task-spinner.tsx';\nimport TaskTreeStats from '@/src/ui/task-tree-stats.tsx';\n\n// Types\nexport interface TaskTreeFullSpinnerProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeFullSpinner({ manager }: TaskTreeFullSpinnerProps) {\n const flat = useFlatTaskTree(manager);\n\n // Render\n return (\n <>\n <Box flexDirection=\"column\">\n { flat.map(({ task, level }) => (\n <Box key={task.id} marginLeft={level * 2} flexShrink={0}>\n <TaskSpinner task={task} />\n </Box>\n )) }\n </Box>\n <Text>\n <TaskTreeStats manager={manager} />\n </Text>\n </>\n );\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { useStdin } from 'ink';\n\nimport TaskTreeScrollableSpinner from '@/src/ui/task-tree-scrollable-spinner.tsx';\nimport TaskTreeFullSpinner from '@/src/ui/task-tree-full-spinner.tsx';\n\n// Types\nexport interface TaskTreeSpinnerProps {\n readonly manager: TaskManager;\n}\n\n// Component\nexport default function TaskTreeSpinner({ manager }: TaskTreeSpinnerProps) {\n const stdin = useStdin();\n\n if (stdin.isRawModeSupported) {\n return <TaskTreeScrollableSpinner manager={manager} />;\n } else {\n return <TaskTreeFullSpinner manager={manager} />;\n }\n}\n","import { waitFor$ } from '@jujulego/event-tree';\nimport { Logger } from '@jujulego/logger';\nimport { plan as extractPlan, type Task, type TaskManager, TaskSet, type TaskSummary } from '@jujulego/tasks';\nimport { injectable } from 'inversify';\nimport { type ArgumentsCamelCase, type Argv } from 'yargs';\n\nimport { container, lazyInject } from '@/src/inversify.config.ts';\nimport { isCommandCtx } from '@/src/tasks/command-task.ts';\nimport { isScriptCtx } from '@/src/tasks/script-task.ts';\nimport { TASK_MANAGER } from '@/src/tasks/task-manager.config.ts';\nimport { type AwaitableGenerator } from '@/src/types.ts';\nimport List from '@/src/ui/list.tsx';\nimport TaskTreeCompleted from '@/src/ui/task-tree-completed.tsx';\nimport TaskTreeSpinner from '@/src/ui/task-tree-spinner.tsx';\nimport { ExitException } from '@/src/utils/exit.ts';\nimport { printJson } from '@/src/utils/json.ts';\n\nimport { InkCommand } from './ink-command.tsx';\n\n// Types\nexport interface ITaskCommandArgs {\n plan: boolean;\n 'plan-mode': 'json' | 'list';\n}\n\n// Class\n@injectable()\nexport abstract class TaskCommand<A = unknown> extends InkCommand<A> {\n // Attributes\n @lazyInject(TASK_MANAGER)\n readonly manager: TaskManager;\n\n // Methods\n abstract prepare(args: ArgumentsCamelCase<A>): AwaitableGenerator<Task>;\n\n protected addTaskOptions(parser: Argv): Argv<ITaskCommandArgs> {\n return parser\n .option('plan', {\n type: 'boolean',\n desc: 'Only prints tasks to be run',\n default: false,\n })\n .option('plan-mode', {\n type: 'string',\n desc: 'Plan output mode',\n choices: ['json', 'list'] as const,\n default: 'list' as const\n });\n }\n\n async* render(args: ArgumentsCamelCase<A & ITaskCommandArgs>) {\n // Prepare tasks\n const tasks = new TaskSet();\n\n for await (const tsk of this.prepare(args)) {\n tasks.add(tsk);\n }\n\n if (args.plan) {\n const plan: TaskSummary[] = Array.from(extractPlan(tasks));\n\n if (args.planMode === 'json') {\n printJson(plan);\n } else {\n const data = plan.map((tsk) => ({\n id: tsk.id.substring(0, 6),\n name: tsk.name,\n workspace: isCommandCtx(tsk.context) || isScriptCtx(tsk.context) ? tsk.context.workspace.name : '',\n group: tsk.groupId?.substring(0, 6),\n 'depends on': tsk.dependenciesIds.map(id => id.substring(0, 6)).join(', ')\n }));\n\n yield <List items={data} headers/>;\n }\n } else if (tasks.tasks.length > 0) {\n // Render\n yield <TaskTreeSpinner manager={this.manager} />;\n\n // Start tasks\n tasks.start(this.manager);\n\n const result = await waitFor$(tasks, 'finished');\n\n this.app.clear();\n yield <TaskTreeCompleted manager={this.manager} />;\n\n if (result.failed > 0) {\n throw new ExitException(1);\n }\n } else {\n const logger = container.get(Logger);\n logger.warning('No task found');\n }\n }\n}\n","import { Logger, withLabel } from '@jujulego/logger';\nimport { type Task } from '@jujulego/tasks';\nimport { inject, injectable, type interfaces as int } from 'inversify';\nimport yargs, { type Argv, type CommandModule } from 'yargs';\n\nimport { ContextService, type Context } from '@/src/commons/context.service.ts';\nimport { applyConfigOptions } from '@/src/config/config-options.ts';\nimport { CURRENT } from '@/src/constants.ts';\nimport { container, lazyInjectNamed } from '@/src/inversify.config.ts';\nimport { buildCommandModule, COMMAND, COMMAND_MODULE, getCommandOpts, type ICommand } from '@/src/modules/command.ts';\nimport { getModule } from '@/src/modules/module.ts';\nimport { PluginLoaderService } from '@/src/modules/plugin-loader.service.ts';\nimport { TaskCommand } from '@/src/modules/task-command.tsx';\nimport { type Class } from '@/src/types.ts';\n\n// @ts-ignore: Outside of typescript's rootDir in build\nimport pkg from '../package.json';\n\n// Application\n@injectable()\nexport class JillApplication {\n // Attributes\n readonly container: int.Container;\n readonly parser: Argv;\n\n // Constructor\n constructor(\n @inject(ContextService)\n private readonly context: ContextService,\n @inject(PluginLoaderService)\n private readonly plugins: PluginLoaderService,\n @inject(Logger)\n private readonly logger: Logger,\n ) {\n // Create container\n this.container = container.createChild();\n\n // Create parser\n this.parser = yargs()\n .scriptName('jill')\n .completion('completion', 'Generate bash completion script')\n .help('help', 'Show help for a command')\n .version('version', 'Show version', pkg.version)\n .wrap(process.stdout.columns)\n .exitProcess(false);\n }\n\n // Methods\n private _prepareParser(commands: CommandModule[]): Argv {\n applyConfigOptions(this.parser);\n\n return this.parser\n .command(commands)\n .recommendCommands()\n .strict()\n .fail(false);\n }\n\n private async _loadPlugins(): Promise<void> {\n this.logger.child(withLabel('plugin')).verbose('Loading plugin <core>');\n\n const { CorePlugin } = await import('@/src/core.plugin.ts');\n this.container.load(getModule(CorePlugin, true));\n\n await this.plugins.loadPlugins(this.container);\n }\n\n async run(argv: string | readonly string[]): Promise<void> {\n this.context.reset({ application: this });\n await this._loadPlugins();\n\n // Parse command\n const commands = await this.container.getAllAsync(COMMAND_MODULE);\n\n await this._prepareParser(commands).parseAsync(argv);\n }\n\n async tasksOf(argv: string[], ctx: Omit<Context, 'application'> = {}): Promise<Task[]> {\n this.context.reset({ ...ctx, application: this });\n await this._loadPlugins();\n\n // Prepare commands\n const commands = await this.container.getAllAsync(COMMAND);\n\n return new Promise<Task[]>((resolve, reject) => {\n const modules: CommandModule[] = [];\n\n for (const cmd of commands) {\n const opts = getCommandOpts(cmd.constructor as Class<ICommand>);\n const mod = buildCommandModule(cmd, opts);\n\n mod.handler = async (args) => {\n if (cmd instanceof TaskCommand) {\n const tasks: Task[] = [];\n\n for await (const tsk of cmd.prepare({ ...args, plan: true })) {\n tasks.push(tsk);\n }\n\n resolve(tasks);\n } else {\n resolve([]);\n }\n };\n\n modules.push(mod);\n }\n\n // Parse command\n this._prepareParser(modules)\n .parseAsync(argv)\n .catch(reject);\n });\n }\n}\n\ncontainer.bind(JillApplication)\n .toSelf()\n .inTransientScope()\n .whenTargetIsDefault();\n\n// Lazy injection\nexport function LazyCurrentApplication() {\n return lazyInjectNamed(JillApplication, CURRENT);\n}\n\ncontainer.bind(JillApplication)\n .toDynamicValue(({ container }) => {\n const ctx = container.get(ContextService);\n const app = ctx.application;\n\n if (!app) {\n throw new Error('Cannot inject current application, it not yet defined');\n }\n\n return app;\n })\n .whenTargetNamed(CURRENT);\n"],"names":["useIsVerbose","useMemo","config","container","get","CONFIG","verbose","includes","taskComparator","a","b","kindA","CommandTask","kindB","wksA","context","workspace","name","wksB","wksDiff","localeCompare","scriptA","script","scriptB","flatTasks","tasks","isVerbose","groupId","level","task","group","id","GroupTask","isCommandGroup","some","t","isCommandCtx","hasFailed","status","isStarted","ScriptTask","sort","useFlatTaskTree","manager","setTasks","useState","version","setVersion","useLayoutEffect","dirty","on","queueMicrotask","setTimeout","old","Array","from","TaskTreeStats","stats","setStats","base","running","done","failed","weight","_jsxs","Text","_Fragment","_jsx","Spinner","type","bold","color","symbols","success","error","TaskTreeCompleted","flat","Static","items","Box","marginLeft","flexShrink","TaskSpinner","useStdoutDimensions","stdout","useStdout","dimensions","setDimensions","columns","Infinity","rows","useEffect","handler","off","TaskTreeScrollableSpinner","termHeight","maxHeight","Math","min","length","start","setStart","slice","max","useInput","_","key","upArrow","downArrow","flexDirection","map","TaskTreeFullSpinner","TaskTreeSpinner","stdin","useStdin","isRawModeSupported","TaskCommand","InkCommand","addTaskOptions","parser","option","desc","default","choices","render","args","TaskSet","tsk","prepare","add","plan","extractPlan","planMode","printJson","data","substring","isScriptCtx","dependenciesIds","join","List","headers","result","waitFor$","app","clear","ExitException","logger","Logger","warning","JillApplication","constructor","plugins","createChild","yargs","scriptName","completion","help","pkg","wrap","process","exitProcess","_prepareParser","commands","applyConfigOptions","command","recommendCommands","strict","fail","_loadPlugins","child","withLabel","CorePlugin","load","getModule","loadPlugins","run","argv","reset","application","getAllAsync","COMMAND_MODULE","parseAsync","tasksOf","ctx","COMMAND","Promise","resolve","reject","modules","cmd","opts","getCommandOpts","mod","buildCommandModule","push","catch","bind","toSelf","inTransientScope","whenTargetIsDefault","toDynamicValue","ContextService","Error","whenTargetNamed","CURRENT"],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { Logger } from '@jujulego/logger';
2
- import { type Task } from '@jujulego/tasks';
3
- import { type interfaces as int } from 'inversify';
4
- import { type Argv } from 'yargs';
5
- import { ContextService, type Context } from '@/src/commons/context.service.ts';
6
- import { PluginLoaderService } from '@/src/modules/plugin-loader.service.ts';
7
- export declare class JillApplication {
8
- private readonly context;
9
- private readonly plugins;
10
- private readonly logger;
11
- readonly container: int.Container;
12
- readonly parser: Argv;
13
- constructor(context: ContextService, plugins: PluginLoaderService, logger: Logger);
14
- private _prepareParser;
15
- private _loadPlugins;
16
- run(argv: string | readonly string[]): Promise<void>;
17
- tasksOf(argv: string[], ctx?: Omit<Context, 'application'>): Promise<Task[]>;
18
- }
19
- export declare function LazyCurrentApplication(): (proto: any, key: string) => void;
package/dist/main.d.ts DELETED
@@ -1 +0,0 @@
1
- import '@/src/commons/logger.service.ts';
@@ -1,21 +0,0 @@
1
- import { type ArgumentsCamelCase, type Argv } from 'yargs';
2
- import { ContextService } from '@/src/commons/context.service.ts';
3
- import { type IMiddleware } from '@/src/modules/middleware.ts';
4
- import { ProjectRepository } from '@/src/project/project.repository.ts';
5
- import { type PackageManager } from '@/src/project/types.ts';
6
- export interface ILoadProjectArgs {
7
- project?: string;
8
- 'package-manager'?: PackageManager;
9
- }
10
- export declare class LoadProject implements IMiddleware<ILoadProjectArgs> {
11
- private readonly projects;
12
- private readonly context;
13
- constructor(projects: ProjectRepository, context: ContextService);
14
- builder(parser: Argv): Argv<{
15
- project: string | undefined;
16
- } & {
17
- "package-manager": "npm" | "yarn" | undefined;
18
- }>;
19
- handler(args: ArgumentsCamelCase<ILoadProjectArgs>): Promise<void>;
20
- }
21
- export declare function LazyCurrentProject(): (proto: any, key: string) => void;
@@ -1,20 +0,0 @@
1
- import { Logger } from '@jujulego/logger';
2
- import { type ArgumentsCamelCase, type Argv } from 'yargs';
3
- import { ContextService } from '@/src/commons/context.service.ts';
4
- import { type IMiddleware } from '@/src/modules/middleware.ts';
5
- import { type Project } from '@/src/project/project.ts';
6
- import { ILoadProjectArgs } from './load-project.ts';
7
- export interface ILoadWorkspaceArgs extends ILoadProjectArgs {
8
- workspace?: string;
9
- }
10
- export declare class LoadWorkspace implements IMiddleware<ILoadWorkspaceArgs> {
11
- private readonly context;
12
- private readonly logger;
13
- readonly project: Project;
14
- constructor(context: ContextService, logger: Logger);
15
- builder(parser: Argv): Argv<{
16
- workspace: string | undefined;
17
- }>;
18
- handler(args: ArgumentsCamelCase<ILoadWorkspaceArgs>): Promise<void>;
19
- }
20
- export declare function LazyCurrentWorkspace(): (proto: any, key: string) => void;
@@ -1,20 +0,0 @@
1
- import { type interfaces as int } from 'inversify';
2
- import { type ArgumentsCamelCase, type Argv, type CommandModule } from 'yargs';
3
- import { type Awaitable, type Class, type Type } from '@/src/types.ts';
4
- import { type IMiddleware } from './middleware.ts';
5
- export declare const COMMAND: int.ServiceIdentifier<ICommand>;
6
- export declare const COMMAND_MODULE: int.ServiceIdentifier<CommandModule>;
7
- export interface ICommand<A = unknown> {
8
- builder?: (parser: Argv) => Argv<A>;
9
- handler(args: ArgumentsCamelCase<A>): Awaitable<void>;
10
- }
11
- export interface ICommandOpts {
12
- readonly command: string;
13
- readonly aliases?: string | readonly string[];
14
- readonly describe?: string;
15
- readonly deprecated?: boolean;
16
- readonly middlewares?: Type<IMiddleware>[];
17
- }
18
- export declare function getCommandOpts(target: Class<ICommand>): ICommandOpts;
19
- export declare function buildCommandModule(cmd: ICommand, opts: ICommandOpts): CommandModule;
20
- export declare function Command(opts: ICommandOpts): (target: Class<ICommand>) => void;
@@ -1,11 +0,0 @@
1
- import { type Instance } from 'ink';
2
- import { type ReactNode } from 'react';
3
- import { type ArgumentsCamelCase, type Argv } from 'yargs';
4
- import { type AwaitableGenerator } from '@/src/types.ts';
5
- import { type ICommand } from './command.ts';
6
- export declare abstract class InkCommand<A = unknown> implements ICommand<A> {
7
- readonly app: Instance;
8
- abstract render(args: ArgumentsCamelCase<A>): AwaitableGenerator<ReactNode>;
9
- builder(parser: Argv): Argv<A>;
10
- handler(args: ArgumentsCamelCase<A>): Promise<void>;
11
- }
@@ -1,8 +0,0 @@
1
- import { type ArgumentsCamelCase, type Argv } from 'yargs';
2
- import { type Awaitable, type Type } from '@/src/types.ts';
3
- export interface IMiddleware<A = unknown> {
4
- builder?: (parser: Argv) => Argv<A>;
5
- handler(args: ArgumentsCamelCase<A>): Awaitable<void>;
6
- }
7
- export declare function Middleware(): (target: Type<IMiddleware>) => void;
8
- export declare function applyMiddlewares(parser: Argv, middlewares: Type<IMiddleware>[]): Argv;
@@ -1,7 +0,0 @@
1
- import { ContainerModule, type interfaces as int } from 'inversify';
2
- import { type Class } from '@/src/types.ts';
3
- export declare function getRegistry(target: Class): int.ContainerModuleCallBack;
4
- export declare function setRegistry(target: Class, registry: int.ContainerModuleCallBack): void;
5
- export declare function getModule(target: Class): ContainerModule | null;
6
- export declare function getModule(target: Class, assert: true): ContainerModule;
7
- export declare function setModule(target: Class, module: ContainerModule): void;
@@ -1,10 +0,0 @@
1
- import { Logger } from '@jujulego/logger';
2
- import { type interfaces as int } from 'inversify';
3
- import { type IConfig } from '@/src/config/types.ts';
4
- export declare class PluginLoaderService {
5
- private readonly _config;
6
- private readonly _logger;
7
- constructor(_config: IConfig, logger: Logger);
8
- private _importPlugin;
9
- loadPlugins(ctn?: int.Container): Promise<void>;
10
- }
@@ -1,14 +0,0 @@
1
- import { ContainerModule } from 'inversify';
2
- import { type Class, type Type } from '@/src/types.ts';
3
- import { type ICommand } from './command.ts';
4
- export interface IPluginOpts {
5
- readonly name?: string;
6
- readonly commands: Type<ICommand>[];
7
- }
8
- export declare class PluginModule extends ContainerModule implements IPluginOpts {
9
- readonly name: string;
10
- readonly commands: Type<ICommand>[];
11
- readonly id: number;
12
- constructor(name: string, commands: Type<ICommand>[]);
13
- }
14
- export declare function Plugin(opts: IPluginOpts): (target: Class) => void;
@@ -1,8 +0,0 @@
1
- import { interfaces as int } from 'inversify';
2
- export interface OnServiceActivate {
3
- onServiceActivate(context: int.Context): void;
4
- }
5
- /**
6
- * Register class as a service
7
- */
8
- export declare function Service(): ClassDecorator;
@@ -1,14 +0,0 @@
1
- import { type Task, type TaskManager } from '@jujulego/tasks';
2
- import { type ArgumentsCamelCase, type Argv } from 'yargs';
3
- import { type AwaitableGenerator } from '@/src/types.ts';
4
- import { InkCommand } from './ink-command.tsx';
5
- export interface ITaskCommandArgs {
6
- plan: boolean;
7
- 'plan-mode': 'json' | 'list';
8
- }
9
- export declare abstract class TaskCommand<A = unknown> extends InkCommand<A> {
10
- readonly manager: TaskManager;
11
- abstract prepare(args: ArgumentsCamelCase<A>): AwaitableGenerator<Task>;
12
- protected addTaskOptions(parser: Argv): Argv<ITaskCommandArgs>;
13
- render(args: ArgumentsCamelCase<A & ITaskCommandArgs>): AsyncGenerator<import("react/jsx-runtime").JSX.Element, void, unknown>;
14
- }
@@ -1,27 +0,0 @@
1
- import { Logger } from '@jujulego/logger';
2
- import { Workspace } from './workspace.ts';
3
- import { type PackageManager } from './types.ts';
4
- export interface ProjectOptions {
5
- packageManager?: PackageManager | undefined;
6
- }
7
- export declare class Project {
8
- private readonly _root;
9
- private readonly _logger;
10
- private _mainWorkspace?;
11
- private readonly _names;
12
- private readonly _workspaces;
13
- private readonly _scurry;
14
- private _workspaceGlob?;
15
- private _packageManager?;
16
- private _isFullyLoaded;
17
- private _lock;
18
- constructor(_root: string, _logger: Logger, opts?: ProjectOptions);
19
- private _loadManifest;
20
- private _loadWorkspace;
21
- packageManager(): Promise<PackageManager>;
22
- mainWorkspace(): Promise<Workspace>;
23
- currentWorkspace(cwd?: string): Promise<Workspace | null>;
24
- workspaces(): AsyncGenerator<Workspace, void>;
25
- workspace(name?: string): Promise<Workspace | null>;
26
- get root(): string;
27
- }
@@ -1,15 +0,0 @@
1
- import { Logger } from '@jujulego/logger';
2
- import { Project, type ProjectOptions } from './project.ts';
3
- export interface IsProjectRoot {
4
- hasManifest: boolean;
5
- hasLockFile: boolean;
6
- }
7
- export declare class ProjectRepository {
8
- private readonly _logger;
9
- private readonly _cache;
10
- private readonly _roots;
11
- constructor(logger: Logger);
12
- isProjectRoot(dir: string): Promise<IsProjectRoot>;
13
- searchProjectRoot(directory: string): Promise<string>;
14
- getProject(root: string, opts?: ProjectOptions): Project;
15
- }
@@ -1 +0,0 @@
1
- export type PackageManager = 'npm' | 'yarn';
@@ -1,41 +0,0 @@
1
- import { type TaskOptions } from '@jujulego/tasks';
2
- import { type Package } from 'normalize-package-data';
3
- import { CommandTask } from '@/src/tasks/command-task.ts';
4
- import { ScriptTask } from '@/src/tasks/script-task.ts';
5
- import { type Project } from './project.ts';
6
- export type WorkspaceDepsMode = 'all' | 'prod' | 'none';
7
- export interface WorkspaceRunOptions extends Omit<TaskOptions, 'logger'> {
8
- buildDeps?: WorkspaceDepsMode;
9
- buildScript?: string;
10
- }
11
- export declare class Workspace {
12
- private readonly _cwd;
13
- readonly manifest: Package;
14
- readonly project: Project;
15
- private readonly _logger;
16
- private readonly _affectedCache;
17
- private readonly _tasks;
18
- private readonly _git;
19
- private readonly _config;
20
- constructor(_cwd: string, manifest: Package, project: Project);
21
- private _satisfies;
22
- private _buildDependencies;
23
- private _isAffected;
24
- isAffected(reference: string): Promise<boolean>;
25
- private _loadDependencies;
26
- dependencies(): AsyncGenerator<Workspace, void>;
27
- devDependencies(): AsyncGenerator<Workspace, void>;
28
- exec(command: string, args?: string[], opts?: WorkspaceRunOptions): Promise<CommandTask>;
29
- run(script: string, args?: string[], opts?: WorkspaceRunOptions): Promise<ScriptTask | null>;
30
- build(opts?: WorkspaceRunOptions): Promise<ScriptTask | null>;
31
- getScript(script: string): string | null;
32
- toJSON(): {
33
- name: string;
34
- version: string;
35
- cwd: string;
36
- };
37
- get name(): string;
38
- get version(): string;
39
- get reference(): string;
40
- get cwd(): string;
41
- }
@@ -1,15 +0,0 @@
1
- import { SpawnTask, type SpawnTaskOptions, type TaskContext } from '@jujulego/tasks';
2
- import { type Workspace } from '@/src/project/workspace.ts';
3
- export interface CommandContext extends TaskContext {
4
- workspace: Workspace;
5
- command: string;
6
- }
7
- export interface CommandOptions extends Omit<SpawnTaskOptions, 'cwd'> {
8
- superCommand?: string | string[];
9
- }
10
- export declare function isCommandCtx(ctx: Readonly<TaskContext>): ctx is Readonly<CommandContext>;
11
- export declare class CommandTask extends SpawnTask<CommandContext> {
12
- readonly workspace: Workspace;
13
- constructor(workspace: Workspace, command: string, args: string[], opts?: CommandOptions);
14
- private _logStreams;
15
- }
@@ -1,4 +0,0 @@
1
- export declare class TaskExpressionError extends Error {
2
- }
3
- export declare class TaskSyntaxError extends Error {
4
- }
@@ -1,27 +0,0 @@
1
- import { GroupTask, type Task, type TaskContext, type TaskOptions } from '@jujulego/tasks';
2
- import { type Workspace } from '@/src/project/workspace.ts';
3
- export interface ScriptContext extends TaskContext {
4
- workspace: Workspace;
5
- script: string;
6
- }
7
- export interface ScriptOpts extends TaskOptions {
8
- runHooks?: boolean;
9
- }
10
- export declare function isScriptCtx(ctx: Readonly<TaskContext>): ctx is Readonly<ScriptContext>;
11
- export declare class ScriptTask extends GroupTask<ScriptContext> {
12
- readonly workspace: Workspace;
13
- readonly script: string;
14
- readonly args: string[];
15
- private _preHookTasks;
16
- private _postHookTasks;
17
- private _scriptTasks;
18
- private readonly _runHooks;
19
- constructor(workspace: Workspace, script: string, args: string[], opts?: ScriptOpts);
20
- private _runScript;
21
- prepare(): Promise<void>;
22
- protected _orchestrate(): AsyncGenerator<Task, void, undefined>;
23
- private _hasFailed;
24
- protected _stop(): void;
25
- complexity(cache?: Map<string, number>): number;
26
- get project(): import("../index.ts").Project;
27
- }
@@ -1,25 +0,0 @@
1
- import { Logger } from '@jujulego/logger';
2
- import { type Task } from '@jujulego/tasks';
3
- import { type Workspace, type WorkspaceRunOptions } from '@/src/project/workspace.ts';
4
- export interface TaskNode {
5
- script: string;
6
- args: string[];
7
- }
8
- export interface GroupNode {
9
- operator: string;
10
- tasks: (TaskNode | GroupNode)[];
11
- }
12
- export interface TaskTree {
13
- roots: (TaskNode | GroupNode)[];
14
- }
15
- export declare class TaskExpressionService {
16
- private readonly _logger;
17
- static isTaskNode(node: TaskNode | GroupNode): node is TaskNode;
18
- private static _sequenceOperatorWarn;
19
- constructor(_logger: Logger);
20
- private _lexer;
21
- private _nextNode;
22
- parse(expr: string): TaskTree;
23
- extractScripts(node: TaskTree | TaskNode | GroupNode): Generator<string>;
24
- buildTask(node: TaskNode | GroupNode, workspace: Workspace, opts?: WorkspaceRunOptions): Promise<Task>;
25
- }
@@ -1,3 +0,0 @@
1
- import { TaskManager } from '@jujulego/tasks';
2
- import { type interfaces as int } from 'inversify';
3
- export declare const TASK_MANAGER: int.ServiceIdentifier<TaskManager>;
package/dist/types.d.ts DELETED
@@ -1,11 +0,0 @@
1
- export type Awaitable<T> = T | Promise<T>;
2
- export type AwaitableGenerator<T> = Generator<T> | AsyncGenerator<T>;
3
- export interface Type<T = unknown> {
4
- new (...args: any[]): T;
5
- }
6
- export interface Class<T = unknown> extends Type<T> {
7
- readonly name: string;
8
- }
9
- export interface TaskUIContext {
10
- hidden?: boolean;
11
- }
@@ -1,14 +0,0 @@
1
- import { Task, TaskManager } from '@jujulego/tasks';
2
- export interface FlatTask {
3
- task: Task;
4
- level: number;
5
- }
6
- /**
7
- * Sorts tasks according to workspace and script, keeping command at the end
8
- */
9
- export declare function taskComparator(a: Task, b: Task): number;
10
- /**
11
- * Extract tasks to be printed, with their level in the tree
12
- */
13
- export declare function flatTasks(tasks: readonly Task[], isVerbose: boolean, groupId?: string, level?: number): Generator<FlatTask>;
14
- export declare function useFlatTaskTree(manager: TaskManager): FlatTask[];
@@ -1 +0,0 @@
1
- export declare function useIsVerbose(): boolean;
@@ -1,4 +0,0 @@
1
- export declare function useStdoutDimensions(): {
2
- columns: number;
3
- rows: number;
4
- };
@@ -1,5 +0,0 @@
1
- import { type ReactNode } from 'react';
2
- export interface LayoutProps {
3
- children?: ReactNode;
4
- }
5
- export default function Layout({ children }: LayoutProps): import("react/jsx-runtime").JSX.Element;
package/dist/ui/list.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export interface ListProps<T extends Record<string, unknown>> {
2
- items: T[];
3
- headers?: boolean;
4
- }
5
- export default function List<T extends Record<string, unknown>>({ items, headers }: ListProps<T>): import("react/jsx-runtime").JSX.Element | null;
@@ -1 +0,0 @@
1
- export default function StaticLogs(): null;
@@ -1,5 +0,0 @@
1
- import { type Task } from '@jujulego/tasks';
2
- export interface TaskNameProps {
3
- task: Task;
4
- }
5
- export default function TaskName({ task }: TaskNameProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +0,0 @@
1
- import { type Task } from '@jujulego/tasks';
2
- export interface TaskSpinnerProps {
3
- task: Task;
4
- }
5
- export default function TaskSpinner({ task }: TaskSpinnerProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +0,0 @@
1
- import { TaskManager } from '@jujulego/tasks';
2
- export interface TaskTreeCompletedProps {
3
- readonly manager: TaskManager;
4
- }
5
- export default function TaskTreeCompleted({ manager }: TaskTreeCompletedProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +0,0 @@
1
- import { TaskManager } from '@jujulego/tasks';
2
- export interface TaskTreeFullSpinnerProps {
3
- readonly manager: TaskManager;
4
- }
5
- export default function TaskTreeFullSpinner({ manager }: TaskTreeFullSpinnerProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +0,0 @@
1
- import { TaskManager } from '@jujulego/tasks';
2
- export interface TaskTreeScrollableSpinnerProps {
3
- readonly manager: TaskManager;
4
- }
5
- export default function TaskTreeScrollableSpinner({ manager }: TaskTreeScrollableSpinnerProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +0,0 @@
1
- import { TaskManager } from '@jujulego/tasks';
2
- export interface TaskTreeSpinnerProps {
3
- readonly manager: TaskManager;
4
- }
5
- export default function TaskTreeSpinner({ manager }: TaskTreeSpinnerProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +0,0 @@
1
- import { TaskManager } from '@jujulego/tasks';
2
- export interface TaskTreeStatsProps {
3
- readonly manager: TaskManager;
4
- }
5
- export default function TaskTreeStats({ manager }: TaskTreeStatsProps): import("react/jsx-runtime").JSX.Element;
@@ -1,8 +0,0 @@
1
- import { type ReactElement } from 'react';
2
- import { type Workspace } from '@/src/project/workspace.ts';
3
- export interface WorkspaceTreeProps {
4
- workspace: Workspace;
5
- dev?: boolean;
6
- level?: ReactElement;
7
- }
8
- export default function WorkspaceTree(props: WorkspaceTreeProps): import("react/jsx-runtime").JSX.Element;
@@ -1,3 +0,0 @@
1
- import { type Source } from '@jujulego/event-tree';
2
- import { type SpawnTask, type SpawnTaskStream } from '@jujulego/tasks';
3
- export declare function linesFrom(task: SpawnTask, stream: SpawnTaskStream): Source<string>;
@@ -1,4 +0,0 @@
1
- export declare class ExitException extends Error {
2
- readonly code: number;
3
- constructor(code: number, message?: string);
4
- }
@@ -1,4 +0,0 @@
1
- export declare function dynamicImport(filepath: string): Promise<any>;
2
- export declare function fixDefaultExport<T extends {
3
- default: unknown;
4
- }>(mod: T): T['default'];
@@ -1 +0,0 @@
1
- export declare function printJson(data: unknown, stream?: NodeJS.WriteStream): void;
@@ -1,3 +0,0 @@
1
- import { type SpawnTask, type SpawnTaskStream } from '@jujulego/tasks';
2
- export declare function combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T>;
3
- export declare function streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string>;
@@ -1,2 +0,0 @@
1
- export declare function capitalize(txt: string): string;
2
- export declare function splitCommandLine(line: string): string[];
@@ -1,3 +0,0 @@
1
- import { type Serializable } from 'node:worker_threads';
2
- import { type Awaitable } from '@/src/types.ts';
3
- export declare function workerCache<R extends Serializable>(key: Serializable, compute: () => Awaitable<R>): Promise<R>;