@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 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sources":["../src/cli/bases/command-module.ts","../src/tokens.ts","../src/utils/json.ts","../src/cli/bases/task-module.ts","../src/cli/filters/has-scripts.ts","../src/utils/streams.ts","../src/cli/services/git.service.ts","../src/cli/filters/is-affected.ts","../src/cli/filters/is-private.ts","../src/utils/kyrielle.ts","../src/tasks/command-task.ts","../src/utils/string.ts","../src/tasks/script-task.ts","../src/projects/workspace.ts","../src/projects/project.ts","../src/projects/projects.repository.ts","../src/cli/middlewares/project.ts","../src/tasks/errors.ts","../src/cli/services/task-parser.service.ts","../src/cli/utils/pipeline$.ts","../src/cli/commands/each.ts","../src/cli/middlewares/workspace.ts","../src/cli/commands/exec.ts","../src/cli/commands/list.ts","../src/cli/commands/run.ts","../src/cli/commands/tree.ts","../src/utils/import.ts","../src/config/config-explorer.ts","../src/config/config.service.ts","../src/cli/middlewares/config.middleware.ts","../src/utils/logger.ts","../src/cli/middlewares/logger.middleware.ts","../src/cli/parser.ts"],"sourcesContent":["import type { Argv, CommandModule } from 'yargs';\n\nexport function command<T, U>(module: CommandModule<T, U>) {\n return <V extends T>(parser: Argv<V>) => parser.command(module);\n}\n","import { TaskManager } from '@jujulego/tasks';\nimport { asyncScope$, inject$, token$ } from '@kyrielle/injector';\nimport { logger$, withTimestamp } from '@kyrielle/logger';\nimport { waitFor$ } from 'kyrielle';\nimport fs from 'node:fs';\nimport process from 'node:process';\nimport { PathScurry } from 'path-scurry';\n\n// Tokens\nexport const CONFIG = token$('Config', async () => {\n const { ConfigService } = await import('./config/config.service.js');\n return waitFor$(inject$(ConfigService, asyncScope$()).config$);\n});\nexport const CWD = token$('cwd', () => process.cwd());\nexport const LOGGER = token$('Logger', () => logger$(withTimestamp()));\nexport const PATH_SCURRY = token$('PathScurry', () => new PathScurry('/', { fs }));\nexport const TASK_MANAGER = token$('TaskManager', async () => {\n return new TaskManager({\n jobs: (await inject$(CONFIG, asyncScope$())).jobs,\n logger: inject$(LOGGER),\n });\n});\n","// Utils\nexport function printJson(data: unknown, stream: NodeJS.WriteStream = process.stdout): void {\n if (stream.isTTY) { // Pretty print for ttys\n stream.write(JSON.stringify(data, null, 2));\n } else {\n stream.write(JSON.stringify(data));\n }\n}\n","import { plan, type TaskSet } from '@jujulego/tasks';\nimport { inject$ } from '@kyrielle/injector';\nimport type { Mutator } from 'kyrielle';\nimport process from 'node:process';\nimport type { ArgumentsCamelCase, Argv, CommandModule } from 'yargs';\nimport { LOGGER } from '../../tokens.js';\nimport { printJson } from '../../utils/json.js';\nimport type { LoggerArgs } from '../middlewares/logger.middleware.js';\nimport { command } from './command-module.js';\n\n// Module\nexport interface TaskModule<T extends PlanModeArgs = PlanModeArgs> extends Omit<CommandModule<PlanModeArgs, T>, 'builder' | 'handler'> {\n builder?: (args: Argv<PlanModeArgs>) => Argv<T>,\n\n /**\n * Generates tasks to be run, but do not execute them.\n */\n prepare(this: void, args: ArgumentsCamelCase<T>): Promise<TaskSet> | TaskSet;\n\n /**\n * Allows to override default \"execute\" behavior\n */\n execute?: (this: void, args: ArgumentsCamelCase<T>, tasks: TaskSet) => Promise<void> | void;\n}\n\n// Utils\nexport function executeCommand<T extends LoggerArgs, U extends PlanModeArgs>(module: TaskModule<U>) {\n const { prepare, execute, ...rest } = module;\n\n return command<T, U>({\n ...rest,\n builder(base) {\n const parser = withPlanMode(base);\n\n if (rest.builder) {\n return rest.builder(parser);\n } else {\n return parser as Argv<U>;\n }\n },\n async handler(args) {\n const tasks = await prepare(args);\n\n if (args.plan) {\n if (args.planMode === 'json') {\n printJson(Array.from(plan(tasks)));\n } else {\n const { default: TaskPlanInk } = await import('./task-plan.ink.jsx');\n await TaskPlanInk({ tasks });\n }\n } else {\n if (execute) {\n await execute(args, tasks);\n } else if (tasks.tasks.length > 0) {\n const { default: TaskExecInk } = await import('./task-exec.ink.jsx');\n await TaskExecInk({ tasks, verbose: ['verbose', 'debug'].includes(args.verbose) });\n } else {\n const logger = inject$(LOGGER);\n logger.warning('No task found');\n process.exitCode = 1;\n }\n }\n }\n });\n}\n\nexport function planCommand<T, U>(module: CommandModule<T, U>, tasks$: Mutator<TaskSet>): <V extends T>(parser: Argv<V>) => Argv<V>;\nexport function planCommand<T extends PlanModeArgs>(module: TaskModule<T>, tasks$: Mutator<TaskSet>): <V extends LoggerArgs>(parser: Argv<V>) => Argv<V>;\nexport function planCommand(module: CommandModule | TaskModule, tasks$: Mutator<TaskSet>) {\n if ('prepare' in module) {\n const { prepare, ...rest } = module;\n\n return command<LoggerArgs, PlanModeArgs>({\n ...rest,\n builder(base) {\n const parser = withPlanMode(base);\n\n if (rest.builder) {\n return rest.builder(parser);\n } else {\n return parser;\n }\n },\n async handler(args) {\n tasks$.mutate(await prepare(args));\n }\n });\n } else {\n return command({\n ...module,\n handler: () => undefined\n });\n }\n}\n\n// Types\nexport interface PlanModeArgs extends LoggerArgs {\n readonly plan: boolean;\n readonly 'plan-mode': 'json' | 'list';\n}\n\n// Utils\nexport function withPlanMode<T>(parser: Argv<T>) {\n return parser\n .option('plan', {\n type: 'boolean',\n default: false,\n describe: 'Only prints tasks to be run',\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","import { filter$, type SimpleAsyncIterator } from 'kyrielle';\nimport { type Workspace } from '../../projects/workspace.js';\n\n// Filter\nexport function hasSomeScript$(scripts: readonly string[]) {\n return filter$<SimpleAsyncIterator<Workspace>>((wks) => {\n if (!wks.manifest.scripts) {\n return false;\n }\n\n return scripts.some((script) => script in wks.manifest.scripts!);\n });\n}\n\nexport function hasEveryScript$(scripts: readonly string[]) {\n return filter$<SimpleAsyncIterator<Workspace>>((wks) => {\n if (!wks.manifest.scripts) {\n return false;\n }\n\n return scripts.every((script) => script in wks.manifest.scripts!);\n });\n}\n","import { type SpawnTask } from '@jujulego/tasks';\nimport { type Observable, observable$, off$, once$ } from 'kyrielle';\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 function streamLines$(task: SpawnTask, stream: 'stdout' | 'stderr' = 'stdout'): Observable<string> {\n return observable$((observer, signal) => {\n const off = off$();\n let current = '';\n\n // End\n off.add(once$(task.events$, 'completed', () => {\n if (current) observer.next(current);\n observer.complete();\n off.unsubscribe();\n }));\n\n // Abort\n signal.addEventListener('abort', () => off.unsubscribe(), { once: true });\n\n // Steam\n off.add(task.events$.on(`stream.${stream}`, (chunk) => {\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 observer.next(line);\n }\n }));\n });\n}","import { SpawnTask, type SpawnTaskOptions, type TaskContext } from '@jujulego/tasks';\nimport { inject$ } from '@kyrielle/injector';\nimport { collect$, map$, once$, pipe$, waitFor$ } from 'kyrielle';\nimport { LOGGER, TASK_MANAGER } from '../../tokens.js';\nimport { streamLines$ } from '../../utils/streams.js';\nimport type { TaskUIContext } from '../../utils/types.js';\n\nexport class GitService {\n // Attributes\n private readonly _manager = inject$(TASK_MANAGER);\n private readonly _logger = inject$(LOGGER);\n\n // Methods\n /**\n * Runs a git command inside a SpawnTask\n *\n * @param cmd\n * @param args\n * @param options\n */\n async command(cmd: string, args: string[], options: SpawnTaskOptions = {}): Promise<SpawnTask<GitContext>> {\n const opts = { logger: this._logger, ...options };\n\n // Create task\n const task = new SpawnTask('git', [cmd, ...args], { command: cmd, hidden: true }, opts);\n task.events$.on('stream', ({ data }) => opts.logger.debug(data.toString('utf-8')));\n\n (await this._manager).add(task);\n\n return task;\n }\n\n /**\n * Runs git branch\n *\n * @param args\n * @param options\n */\n branch(args: string[], options?: SpawnTaskOptions): Promise<SpawnTask<GitContext>> {\n return this.command('branch', args, options);\n }\n\n /**\n * Runs git diff\n *\n * @param args\n * @param options\n */\n diff(args: string[], options?: SpawnTaskOptions): Promise<SpawnTask<GitContext>> {\n return this.command('diff', args, options);\n }\n\n /**\n * Runs git tag\n *\n * @param args\n * @param options\n */\n tag(args: string[], options?: SpawnTaskOptions): Promise<SpawnTask<GitContext>> {\n return this.command('tag', args, options);\n }\n\n /**\n * Uses git diff to detect if given files have been affected since given reference\n *\n * @param reference\n * @param files\n * @param opts\n */\n async isAffected(reference: string, files: string[] = [], opts?: SpawnTaskOptions): Promise<boolean> {\n const task = await this.diff(['--quiet', reference, '--', ...files], opts);\n\n return new Promise((resolve, reject) => {\n once$(task.events$, 'status.done', () => resolve(false));\n once$(task.events$, 'status.failed', () => {\n if (task.exitCode) {\n resolve(true);\n } else {\n reject(new Error(`Task ${task.name} failed`));\n }\n });\n });\n }\n\n /**\n * List git branches\n *\n * @param args\n * @param opts\n */\n async listBranches(args: string[] = [], opts?: SpawnTaskOptions): Promise<string[]> {\n const task = await this.branch(['-l', ...args], opts);\n\n return waitFor$(pipe$(\n streamLines$(task),\n map$((line) => line.replace(/^[ *] /, '')),\n collect$()\n ));\n }\n\n /**\n * List git tags\n *\n * @param args\n * @param opts\n */\n async listTags(args: string[] = [], opts?: SpawnTaskOptions): Promise<string[]> {\n const task = await this.tag(['-l', ...args], opts);\n\n return waitFor$(pipe$(streamLines$(task), collect$()));\n }\n}\n\n// Types\nexport interface GitContext extends TaskContext, TaskUIContext {\n command: string;\n}\n","import { inject$ } from '@kyrielle/injector';\nimport { withLabel } from '@kyrielle/logger';\nimport { asyncIterator$, type PipeStep, type SimpleAsyncIterator } from 'kyrielle';\nimport { GitService } from '../services/git.service.js';\nimport { type Workspace } from '../../projects/workspace.js';\nimport { LOGGER } from '../../tokens.js';\n\n// Filter\nexport function isAffected$(opts: IsAffectedOpts): PipeStep<SimpleAsyncIterator<Workspace>, SimpleAsyncIterator<Workspace>> {\n return (origin) => {\n return asyncIterator$((async function* () {\n for await (const wks of origin) {\n const revision = await formatRevision(opts, wks);\n\n if (await wks.isAffected(revision)) {\n yield wks;\n }\n }\n })());\n };\n}\n\nasync function formatRevision(opts: IsAffectedOpts, workspace: Workspace) {\n const git = inject$(GitService);\n const logger = inject$(LOGGER).child(withLabel(workspace.name));\n\n // Format revision\n let result = opts.format;\n result = result.replace(/(?<!\\\\)((?:\\\\\\\\)*)%name/g, `$1${workspace.name}`);\n result = result.replace(/\\\\(.)/g, '$1');\n\n // Ask git to complete it\n const sortArgs = opts.sort ? ['--sort', opts.sort] : [];\n\n // - search in branches\n if (result.includes('*')) {\n const branches = await git.listBranches([...sortArgs, result], { cwd: workspace.root, logger: logger });\n\n if (branches.length > 0) {\n result = branches[branches.length - 1];\n }\n }\n\n // - search in tags\n if (result.includes('*')) {\n const tags = await git.listTags([...sortArgs, result], { cwd: workspace.root, logger: logger });\n\n if (tags.length > 0) {\n result = tags[tags.length - 1];\n }\n }\n\n if (result !== opts.format) {\n logger.verbose(`resolved ${opts.format} into ${result}`);\n }\n\n if (result.includes('*')) {\n logger.warning(`no revision found matching ${result}, using fallback ${opts.fallback}`);\n\n return opts.fallback;\n }\n\n return result;\n}\n\n// Types\nexport interface IsAffectedOpts {\n readonly format: string;\n readonly fallback: string;\n readonly sort?: string | undefined;\n}","import { filter$, type SimpleAsyncIterator } from 'kyrielle';\nimport { type Workspace } from '../../projects/workspace.js';\n\n// Filter\nexport function isPrivate$(value: boolean) {\n return filter$<SimpleAsyncIterator<Workspace>>((wks) => (wks.manifest.private ?? false) === value);\n}","import { var$, waitFor$ } from 'kyrielle';\n\nexport function mutex$(): Lock {\n const count$ = var$(0);\n\n return {\n async acquire() {\n let cnt = count$.defer();\n\n while (cnt > 0) {\n cnt = await waitFor$(count$);\n }\n\n count$.mutate(cnt + 1);\n },\n release() {\n const cnt = count$.defer();\n\n if (cnt > 0) {\n count$.mutate(cnt - 1);\n }\n },\n };\n}\n\nexport async function with$<R>(lock: Lock, fn: () => R): Promise<Awaited<R>> {\n try {\n await lock.acquire();\n return await fn();\n } finally {\n lock.release();\n }\n}\n\n// Types\nexport interface Lock {\n acquire(this: void): Promise<void>;\n release(this: void): void;\n}","import { SpawnTask, type SpawnTaskOptions, type TaskContext } from '@jujulego/tasks';\nimport { off$, once$ } from 'kyrielle';\nimport type { Workspace } from '../projects/workspace.js';\nimport { streamLines$ } from '../utils/streams.js';\n\n// Class\nexport class CommandTask extends SpawnTask<CommandContext> {\n // Constructor\n constructor(readonly workspace: Workspace, command: string, args: string[], opts: CommandOptions = {}) {\n let cmd = command;\n\n if (opts.superCommand) {\n if (typeof opts.superCommand === 'string') {\n opts.superCommand = [opts.superCommand];\n }\n\n if (opts.superCommand.length > 0) {\n cmd = opts.superCommand[0];\n args = [...opts.superCommand.slice(1), command, ...args];\n }\n }\n\n super(cmd, args, { workspace, command }, {\n ...opts,\n cwd: workspace.root,\n env: {\n FORCE_COLOR: '1',\n ...opts.env\n }\n });\n\n this._logStreams();\n }\n\n // Methods\n private _logStreams() {\n const off = off$(\n streamLines$(this, 'stdout').subscribe((line) => this.logger$.info(line)),\n streamLines$(this, 'stderr').subscribe((line) => this.logger$.info(line)),\n );\n\n once$(this.events$, 'completed', () => {\n off.unsubscribe();\n });\n }\n}\n\n// Types\nexport interface CommandContext extends TaskContext {\n workspace: Workspace;\n command: string;\n}\n\nexport interface CommandOptions extends Omit<SpawnTaskOptions, 'cwd'> {\n superCommand?: string | readonly string[] | undefined;\n}\n\n// Utils\nexport function isCommandCtx(ctx: Readonly<TaskContext>): ctx is Readonly<CommandContext> {\n return 'workspace' in ctx && 'command' in ctx;\n}\n","// Utils\nexport function capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n}\n\nexport function splitCommandLine(line: string): string[] {\n line = line.trim();\n\n const parts: string[] = [];\n let current_cote = '';\n let last = 0;\n\n for (let i = 1; i < line.length; ++i) {\n const c = line[i];\n\n if (current_cote) {\n if (c === current_cote) {\n current_cote = '';\n }\n } else {\n if (['\"', '\\''].includes(c)) {\n current_cote = c;\n } else if (c === ' ') {\n parts.push(line.slice(last, i));\n\n last = i + 1;\n }\n }\n }\n\n parts.push(line.slice(last));\n\n return parts;\n}\n","import { GroupTask, type Task, type TaskContext, type TaskOptions, TaskSet } from '@jujulego/tasks';\nimport { inject$ } from '@kyrielle/injector';\nimport { waitFor$ } from 'kyrielle';\nimport type { Workspace } from '../projects/workspace.js';\nimport { splitCommandLine } from '../utils/string.js';\nimport { CommandTask } from './command-task.js';\n\n// Class\nexport class ScriptTask extends GroupTask<ScriptContext> {\n // Attributes\n private _preHookTasks: TaskSet | null = null;\n private _postHookTasks: TaskSet | null = null;\n private _scriptTasks: TaskSet | null = null;\n private readonly _runHooks: boolean;\n\n // Constructor\n constructor(\n readonly workspace: Workspace,\n readonly script: string,\n readonly args: string[],\n opts?: ScriptOpts\n ) {\n super(script, { workspace, script }, opts);\n this._runHooks = opts?.runHooks ?? true;\n }\n\n // Methods\n private async _runScript(script: string, args: string[]): Promise<TaskSet | null> {\n const line = this.workspace.getScript(script);\n\n if (!line) {\n return null;\n }\n\n // Create command task for script\n const [command, ...commandArgs] = splitCommandLine(line);\n const set = new TaskSet();\n\n if (!command) {\n return set;\n }\n\n if (command === 'jill') {\n const argv = commandArgs.map(arg => arg.replace(/^[\"'](.+)[\"']$/, '$1'));\n\n const { PlannerService } = await import('../cli/services/planner.service.js');\n const plannerService = inject$(PlannerService);\n const tasks = await plannerService.plan(argv, this.workspace.root);\n\n if (tasks) {\n return tasks;\n }\n }\n\n const pm = await this.workspace.project.packageManager();\n\n set.add(\n new CommandTask(this.workspace, command, [...commandArgs, ...args], {\n logger: this.logger$,\n superCommand: pm === 'yarn' ? ['yarn', 'exec'] : undefined,\n })\n );\n\n return set;\n }\n\n async prepare(): Promise<void> {\n // Prepare script run\n this._scriptTasks = await this._runScript(this.script, this.args);\n\n if (!this._scriptTasks) {\n throw new Error(`No script ${this.script} in ${this.workspace.name}`);\n }\n\n // Prepare hooks run\n if (this._runHooks) {\n this._preHookTasks = await this._runScript(`pre${this.script}`, []);\n this._postHookTasks = await this._runScript(`post${this.script}`, []);\n }\n\n // Add tasks to group\n if (this._preHookTasks) {\n this.logger$.verbose(`found pre-hook script \"pre${this.script}\"`);\n\n for (const tsk of this._preHookTasks) {\n this.add(tsk);\n }\n }\n\n for (const tsk of this._scriptTasks) {\n this.add(tsk);\n }\n\n if (this._postHookTasks) {\n this.logger$.verbose(`found post-hook script \"post${this.script}\"`);\n\n for (const tsk of this._postHookTasks) {\n this.add(tsk);\n }\n }\n }\n\n protected async *onOrchestrate(): AsyncGenerator<Task, void, undefined> {\n if (!this._scriptTasks) {\n throw new Error('ScriptTask needs to be prepared. Call prepare before starting it');\n }\n\n // Run pre-hook\n if (this._preHookTasks) {\n yield* this._preHookTasks;\n\n if (await this._hasFailed(this._preHookTasks)) {\n return this.setStatus('failed');\n }\n }\n\n // Run script\n yield* this._scriptTasks;\n\n if (await this._hasFailed(this._scriptTasks)) {\n return this.setStatus('failed');\n }\n\n // Run post-hook\n if (this._postHookTasks) {\n yield* this._postHookTasks;\n\n if (await this._hasFailed(this._postHookTasks)) {\n return this.setStatus('failed');\n }\n }\n\n this.setStatus('done');\n }\n\n private async _hasFailed(set: TaskSet): Promise<boolean> {\n const results = await waitFor$(set.events$, 'finished');\n return results.failed > 0;\n }\n\n protected async onStop(): Promise<void> {\n if (!this._scriptTasks) return;\n\n for (const tsk of this._scriptTasks) {\n await tsk.stop();\n }\n }\n\n complexity(cache = new Map<string, number>()): number {\n let complexity = super.complexity(cache);\n\n if (this._scriptTasks) {\n complexity += this._scriptTasks.tasks.reduce((cpl, tsk) => cpl + tsk.complexity(cache), 0);\n }\n\n cache.set(this.id, complexity);\n\n return complexity;\n }\n\n // Properties\n get project() {\n return this.workspace.project;\n }\n}\n\n// Types\nexport interface ScriptContext extends TaskContext {\n workspace: Workspace;\n script: string;\n}\n\nexport interface ScriptOpts extends TaskOptions {\n runHooks?: boolean;\n}\n\n// Utils\nexport function isScriptCtx(ctx: Readonly<TaskContext>): ctx is Readonly<ScriptContext> {\n return 'workspace' in ctx && 'script' in ctx;\n}\n","import type { Task, TaskOptions } from '@jujulego/tasks';\nimport { asyncScope$, inject$ } from '@kyrielle/injector';\nimport { type Logger, withLabel } from '@kyrielle/logger';\nimport path from 'node:path';\nimport type { Package } from 'normalize-package-data';\nimport { satisfies } from 'semver';\nimport { GitService } from '../cli/services/git.service.js';\nimport { CommandTask } from '../tasks/command-task.js';\nimport { ScriptTask } from '../tasks/script-task.js';\nimport { CONFIG, LOGGER } from '../tokens.js';\nimport { combine } from '../utils/streams.js';\nimport type { Project } from './project.js';\n\nexport class Workspace {\n // Attributes\n private readonly _affectedCache = new Map<string, Promise<boolean>>();\n private readonly _logger: Logger;\n private readonly _git = inject$(GitService);\n private readonly _root: string;\n private readonly _tasks = new Map<string, ScriptTask>();\n\n // Constructor\n constructor(\n root: string,\n readonly manifest: Package,\n readonly project: Project,\n ) {\n this._root = root;\n this._logger = inject$(LOGGER).child(withLabel(manifest.name));\n }\n\n // Methods\n private async _buildDependencies(task: Task, opts: WorkspaceRunOptions) {\n const generators: AsyncGenerator<Workspace, void>[] = [];\n\n switch (opts.buildDeps ?? 'all') {\n case 'all':\n generators.unshift(this.devDependencies());\n\n // eslint-disable-next no-fallthrough\n case 'prod':\n generators.unshift(this.dependencies());\n }\n\n // Build deps\n for await (const dep of combine(...generators)) {\n const build = await dep.build(opts);\n\n if (build) {\n task.dependsOn(build);\n }\n }\n }\n\n private async* _loadDependencies(dependencies: Record<string, string>, kind: string): AsyncGenerator<Workspace, void> {\n for (const [dep, range] of Object.entries(dependencies)) {\n const ws = await this.project.workspace(dep);\n\n if (ws) {\n if (ws._satisfies(this, range)) {\n yield ws;\n } else {\n this._logger.warning(`ignoring ${kind} ${ws.reference} as it does not match requirement ${range}`);\n }\n }\n }\n }\n\n private async _isAffected(reference: string): Promise<boolean> {\n const isAffected = await this._git.isAffected(reference, [this.root], {\n cwd: this.project.root,\n logger: this._logger,\n });\n\n if (isAffected) {\n return true;\n }\n\n // Test dependencies\n const proms: Promise<boolean>[] = [];\n\n for await (const dep of combine(this.dependencies(), this.devDependencies())) {\n proms.push(dep.isAffected(reference));\n }\n\n const results = await Promise.all(proms);\n return results.some(r => r);\n }\n\n private _satisfies(from: Workspace, range: string): boolean {\n if (range.startsWith('file:')) {\n return path.resolve(from.root, range.substring(5)) === this.root;\n }\n\n if (range.startsWith('workspace:')) {\n range = range.substring(10);\n }\n\n return !this.version || satisfies(this.version, range);\n }\n\n async isAffected(reference: string): Promise<boolean> {\n let isAffected = this._affectedCache.get(reference);\n\n if (!isAffected) {\n isAffected = this._isAffected(reference);\n this._affectedCache.set(reference, isAffected);\n }\n\n return await isAffected;\n }\n\n async* dependencies(): AsyncGenerator<Workspace, void> {\n if (!this.manifest.dependencies) return;\n\n for await (const ws of this._loadDependencies(this.manifest.dependencies, 'dependency')) {\n yield ws;\n }\n }\n\n async* devDependencies(): AsyncGenerator<Workspace, void> {\n if (!this.manifest.devDependencies) return;\n\n for await (const ws of this._loadDependencies(this.manifest.devDependencies, 'devDependency')) {\n yield ws;\n }\n }\n\n async build(opts: WorkspaceRunOptions = {}): Promise<ScriptTask | null> {\n const script = opts.buildScript ?? 'build';\n const task = await this.run(script, [], opts);\n\n if (!task) {\n this._logger.warning(`will not be built (no \"${script}\" script found)`);\n }\n\n return task;\n }\n\n async exec(command: string, args: string[] = [], opts: WorkspaceRunOptions = {}): Promise<CommandTask> {\n const pm = await this.project.packageManager();\n const task = new CommandTask(this, command, args, {\n ...opts,\n logger: this._logger.child(withLabel(`${this.name}$${command}`)),\n superCommand: pm === 'yarn' ? ['yarn', 'exec'] : undefined\n });\n\n await this._buildDependencies(task, opts);\n\n return task;\n }\n\n getScript(script: string): string | null {\n const { scripts = {} } = this.manifest;\n return scripts[script] || null;\n }\n\n async run(script: string, args: string[] = [], opts: WorkspaceRunOptions = {}): Promise<ScriptTask | null> {\n // Script not found\n if (!this.getScript(script)) {\n return null;\n }\n\n // Create task if it doesn't exist yet\n let task = this._tasks.get(script);\n\n if (!task) {\n const config = await inject$(CONFIG, asyncScope$());\n\n task = new ScriptTask(this, script, args, {\n ...opts,\n logger: this._logger.child(withLabel(`${this.name}#${script}`)),\n runHooks: config.hooks,\n });\n\n await task.prepare();\n await this._buildDependencies(task, opts);\n\n this._tasks.set(script, task);\n }\n\n return task;\n }\n\n toJSON() {\n return {\n name: this.name,\n version: this.version,\n root: this.root,\n };\n }\n\n // Properties\n get name(): string {\n return this.manifest.name;\n }\n\n get reference(): string {\n return this.version ? `${this.name}@${this.version}` : this.name;\n }\n\n get root(): string {\n return path.resolve(this.project.root, this._root);\n }\n\n get version(): string {\n return this.manifest.version;\n }\n}\n\n// Types\nexport type WorkspaceDepsMode = 'all' | 'prod' | 'none';\n\nexport interface WorkspaceRunOptions extends Omit<TaskOptions, 'logger'> {\n readonly buildDeps?: WorkspaceDepsMode;\n readonly buildScript?: string;\n}\n","import { asyncScope$, inject$ } from '@kyrielle/injector';\nimport { withLabel } from '@kyrielle/logger';\nimport { Glob } from 'glob';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport normalize, { type Package } from 'normalize-package-data';\nimport { CWD, LOGGER, PATH_SCURRY } from '../tokens.js';\nimport { mutex$, with$ } from '../utils/kyrielle.js';\nimport type { PackageManager } from '../utils/types.js';\nimport { Workspace } from './workspace.js';\n\nexport class Project {\n // Attributes\n private _isFullyLoaded = false;\n private _lock = mutex$();\n private _mainWorkspace?: Workspace;\n private _packageManager?: PackageManager;\n private _workspaceGlob?: Glob<{ withFileTypes: true }>;\n\n private readonly _names = new Map<string, Workspace>();\n private readonly _logger = inject$(LOGGER).child(withLabel('project'));\n private readonly _root: string;\n private readonly _scurry = inject$(PATH_SCURRY);\n private readonly _workspaces = new Map<string, Workspace>();\n\n // Constructor\n constructor(\n root: string,\n opts: ProjectOptions = {}\n ) {\n this._root = root;\n\n if (opts.packageManager) {\n this._logger.verbose`Forced use of ${opts.packageManager} in ${root}`;\n this._packageManager = opts.packageManager;\n }\n }\n\n // Methods\n private async _loadManifest(dir: string): Promise<Package> {\n const file = path.resolve(this.root, dir, 'package.json');\n\n const relative = path.relative(this.root, path.dirname(file));\n const logger = this._logger.child(withLabel(relative ? `project@${relative}` : 'project'));\n\n logger.debug('loading package.json ...');\n\n const data = await fs.promises.readFile(file, 'utf-8');\n const mnf = JSON.parse(data) as Package;\n normalize(mnf, (msg) => logger.verbose(msg));\n\n return mnf;\n }\n\n private _loadWorkspace(dir: string): Promise<Workspace> {\n return with$(this._lock, async () => {\n let wks = this._workspaces.get(dir);\n\n if (!wks) {\n const manifest = await this._loadManifest(dir);\n wks = new Workspace(dir, manifest, this);\n\n this._workspaces.set(dir, wks);\n this._names.set(wks.name, wks);\n }\n\n return wks;\n });\n }\n\n async currentWorkspace(cwd = inject$(CWD, asyncScope$())): Promise<Workspace | null> {\n let workspace: Workspace | null = null;\n cwd = path.resolve(cwd);\n\n for await (const wks of this.workspaces()) {\n if (cwd.startsWith(wks.root)) {\n workspace = wks;\n\n if (wks.root !== this.root) return wks;\n }\n }\n\n return workspace;\n }\n\n async mainWorkspace(): Promise<Workspace> {\n if (!this._mainWorkspace) {\n const manifest = await this._loadManifest('.');\n this._mainWorkspace = new Workspace('.', manifest, this);\n\n this._names.set(this._mainWorkspace.name, this._mainWorkspace);\n }\n\n return this._mainWorkspace;\n }\n\n async packageManager(): Promise<PackageManager> {\n if (!this._packageManager) {\n this._logger.debug`searching lockfile in ${this.root}`;\n const files = await this._scurry.readdir(this.root, { withFileTypes: false });\n\n if (files.includes('yarn.lock')) {\n this._logger.debug`detected yarn in ${this.root}`;\n this._packageManager = 'yarn';\n } else if (files.includes('package-lock.json')) {\n this._logger.debug`detected npm in ${this.root}`;\n this._packageManager = 'npm';\n } else {\n this._logger.debug`no package manager recognized in ${this.root}, defaults to npm`;\n this._packageManager = 'npm';\n }\n }\n\n return this._packageManager;\n }\n\n async workspace(name?: string): Promise<Workspace | null> {\n // With current directory\n if (!name) {\n const dir = path.relative(this.root, inject$(CWD, asyncScope$()));\n return this._loadWorkspace(dir);\n }\n\n // Try name index\n const wks = this._names.get(name);\n\n if (wks) {\n return wks;\n }\n\n // Load workspaces\n if (!this._isFullyLoaded) {\n for await (const ws of this.workspaces()) {\n if (ws.name === name) {\n return ws;\n }\n }\n\n this._isFullyLoaded = true;\n }\n\n return null;\n }\n\n async* workspaces(): AsyncGenerator<Workspace> {\n const main = await this.mainWorkspace();\n yield main;\n\n if (this._isFullyLoaded) {\n for (const wks of this._names.values()) {\n if (wks.name !== main.name) yield wks;\n }\n } else {\n // Load child workspaces\n const patterns = (main.manifest.workspaces ?? []) as string[];\n this._scurry.chdir(this.root);\n this._workspaceGlob ??= new Glob(patterns, { scurry: this._scurry, withFileTypes: true });\n\n for await (const dir of this._workspaceGlob) {\n try {\n // Check if dir is a directory\n if (dir.isDirectory()) {\n yield await this._loadWorkspace(dir.fullpath());\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n continue;\n }\n\n throw error;\n }\n }\n\n this._isFullyLoaded = true;\n }\n }\n\n // Properties\n get root(): string {\n return path.resolve(this._root);\n }\n}\n\n// Types\nexport interface ProjectOptions {\n packageManager?: PackageManager | undefined;\n}\n","import { inject$ } from '@kyrielle/injector';\nimport { withLabel } from '@kyrielle/logger';\nimport path from 'node:path';\nimport { LOGGER, PATH_SCURRY } from '../tokens.js';\nimport { Project, type ProjectOptions } from './project.js';\n\n/**\n * Helps detecting projects folders\n */\nexport class ProjectsRepository {\n // Attributes\n private readonly _cache = new Map<string, Project>();\n private readonly _logger = inject$(LOGGER).child(withLabel('projects'));\n private readonly _scurry = inject$(PATH_SCURRY);\n\n // Methods\n async isProjectRoot(dir: string): Promise<IsProjectRoot> {\n this._logger.debug`testing ${dir}`;\n const files = await this._scurry.readdir(dir, { withFileTypes: false });\n\n return {\n hasManifest: files.includes(MANIFEST),\n hasLockFile: LOCK_FILES.some((lock) => files.includes(lock)),\n };\n }\n\n async searchProjectRoot(directory: string): Promise<string> {\n directory = path.resolve(directory);\n\n // Test all ancestors\n const steps: string[] = [];\n let foundManifest = false;\n let projectRoot = directory;\n let dir = directory;\n let prev = dir;\n\n do {\n // Look for files\n const { hasManifest, hasLockFile } = await this.isProjectRoot(dir);\n steps.push(dir);\n\n if (hasManifest) {\n projectRoot = dir;\n foundManifest = true;\n }\n\n if (hasLockFile) {\n break;\n }\n\n prev = dir;\n dir = path.dirname(dir);\n } while (prev !== dir);\n\n // Log it\n if (foundManifest) {\n this._logger.verbose`project root found at ${projectRoot}`;\n } else {\n this._logger.verbose`project root not found, keeping ${projectRoot}`;\n }\n\n return projectRoot;\n }\n\n getProject(root: string, opts?: ProjectOptions): Project {\n let project = this._cache.get(root);\n\n if (!project) {\n project = new Project(root, opts);\n this._cache.set(root, project);\n }\n\n return project;\n }\n}\n\n// Constants\nconst MANIFEST = 'package.json';\nconst LOCK_FILES = ['package-lock.json', 'yarn.lock'];\n\n// Types\nexport interface IsProjectRoot {\n hasManifest: boolean;\n hasLockFile: boolean;\n}\n","import { asyncScope$, inject$ } from '@kyrielle/injector';\nimport path from 'node:path';\nimport { type ArgumentsCamelCase, type Argv } from 'yargs';\nimport type { Project } from '../../projects/project.js';\nimport { ProjectsRepository } from '../../projects/projects.repository.js';\nimport { CWD } from '../../tokens.js';\nimport type { PackageManager, Writable } from '../../utils/types.js';\n\n/**\n * Adds arguments to load a project.\n */\nexport function withProject<T = unknown>(parser: Argv<T>): Argv<T & ProjectArgs> {\n return parser\n .option('project', {\n alias: 'p',\n type: 'string',\n default: '',\n defaultDescription: 'current working directory',\n description: 'Project root directory',\n normalize: true,\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'] as const,\n type: 'string',\n description: 'Force package manager'\n })\n .middleware(async (args: ArgumentsCamelCase<Writable<ProjectArgs>>) => {\n const repository = inject$(ProjectsRepository);\n const directory = path.resolve(inject$(CWD, asyncScope$()), args.project);\n\n args.project = await repository.searchProjectRoot(directory);\n });\n}\n\n/**\n * Loads a project, based on arguments.\n */\nexport function loadProject(args: ArgumentsCamelCase<ProjectArgs>): Project {\n const repository = inject$(ProjectsRepository);\n\n return repository.getProject(args.project, {\n packageManager: args.packageManager\n });\n}\n\n// Types\nexport interface ProjectArgs {\n readonly project: string;\n readonly 'package-manager': PackageManager | undefined;\n}\n","export class TaskExpressionError extends Error {}\n\nexport class TaskSyntaxError extends Error {}","import { FallbackGroup, type GroupTask, ParallelGroup, SequenceGroup, type Task } from '@jujulego/tasks';\nimport { inject$ } from '@kyrielle/injector';\nimport { withLabel } from '@kyrielle/logger';\nimport moo from 'moo';\nimport type { Workspace, WorkspaceRunOptions } from '../../projects/workspace.js';\nimport { LOGGER } from '../../tokens.js';\nimport { TaskExpressionError, TaskSyntaxError } from '../../tasks/errors.js';\n\n// Interfaces\nexport interface TaskNode {\n script: string;\n args: string[];\n}\n\nexport interface GroupNode {\n operator: string;\n tasks: (TaskNode | GroupNode)[];\n}\n\nexport interface TaskTree {\n roots: (TaskNode | GroupNode)[];\n}\n\n// Service\nexport class TaskParserService {\n // Attributes\n private readonly _logger = inject$(LOGGER).child(withLabel('task-parser'));\n\n // Statics\n static isTaskNode(node: TaskNode | GroupNode): node is TaskNode {\n return 'script' in node;\n }\n\n private static _sequenceOperatorWarn = true;\n\n // Methods\n private _lexer(): moo.Lexer {\n return moo.states({\n task: {\n lparen: '(',\n whitespace: /[ \\t]+/,\n script: { match: /[-_:a-zA-Z0-9]+/, push: 'operatorOrArgument' },\n string: [\n { // single cotted\n match: /'(?:\\\\['\\\\]|[^\\r\\n'\\\\])+'/,\n push: 'operator',\n value: x => x.slice(1, -1).replace(/\\\\(['\\\\])/g, '$1')\n },\n { // double cotted\n match: /\"(?:\\\\[\"\\\\]|[^\\r\\n\"\\\\])+\"/,\n push: 'operator',\n value: x => x.slice(1, -1).replace(/\\\\([\"\\\\])/g, '$1')\n }\n ],\n },\n operator: {\n rparen: ')',\n whitespace: /[ \\t]+/,\n operator: { match: ['->', '&&', '//', '||'], pop: 1 },\n },\n operatorOrArgument: {\n rparen: ')',\n whitespace: /[ \\t]+/,\n operator: { match: ['->', '&&', '//', '||'], pop: 1 },\n argument: [\n { match: /[-_:a-zA-Z0-9]+/ },\n { // single cotted\n match: /'(?:\\\\['\\\\]|[^\\r\\n'\\\\])+'/,\n value: x => x.slice(1, -1).replace(/\\\\(['\\\\])/g, '$1')\n },\n { // double cotted\n match: /\"(?:\\\\[\"\\\\]|[^\\r\\n\"\\\\])+\"/,\n value: x => x.slice(1, -1).replace(/\\\\([\"\\\\])/g, '$1')\n }\n ],\n }\n });\n }\n\n private _nextNode(lexer: moo.Lexer, i = 0): TaskNode | GroupNode | null {\n let node: TaskNode | GroupNode | null = null;\n\n for (const token of lexer) {\n // Ignore whitespaces\n if (token.type === 'whitespace') {\n continue;\n }\n\n // rparen = end of group\n if (token.type === 'rparen') {\n break;\n }\n\n // Handle argument\n if (token.type === 'argument') {\n if (!node) {\n throw new TaskSyntaxError(lexer.formatError(token, 'Unexpected argument'));\n } else if (TaskParserService.isTaskNode(node)) {\n node.args.push(token.value);\n } else {\n const lastTask = node.tasks[node.tasks.length - 1];\n\n if (!lastTask || !TaskParserService.isTaskNode(lastTask)) {\n throw new TaskSyntaxError(lexer.formatError(token, 'Unexpected argument'));\n } else {\n lastTask.args.push(token.value);\n }\n }\n\n continue;\n }\n\n // Handle operator\n if (token.type === 'operator') {\n const operator = token.value;\n\n if (!node) {\n throw new TaskSyntaxError(lexer.formatError(token, 'Unexpected operator'));\n } else if (TaskParserService.isTaskNode(node)) {\n node = { operator, tasks: [node] };\n\n continue;\n } else {\n if (node.operator !== operator) {\n node = { operator, tasks: [node] };\n }\n\n continue;\n }\n }\n\n // Build \"child\"\n let child: TaskNode | GroupNode;\n\n if (token.type === 'script') {\n child = { script: token.value, args: [] };\n } else if (token.type === 'string') {\n const [script, ...args] = token.value.split(/ +/);\n child = { script, args };\n } else if (token.type === 'lparen') {\n const res = this._nextNode(lexer, i+1);\n\n if (!res) {\n throw new TaskSyntaxError(lexer.formatError(token, 'Empty group found'));\n }\n\n child = res;\n } else {\n throw new TaskSyntaxError(lexer.formatError(token, 'Unexpected token'));\n }\n\n if (!node) {\n node = child;\n } else if (TaskParserService.isTaskNode(node)) {\n throw new TaskSyntaxError(lexer.formatError(token, 'Unexpected token, expected an operator'));\n } else {\n node.tasks.push(child);\n }\n }\n\n return node;\n }\n\n parse(expr: string): TaskTree {\n const lexer = this._lexer().reset(expr);\n\n const tree: TaskTree = {\n roots: [],\n };\n\n while (true) {\n const node = this._nextNode(lexer);\n\n if (node) {\n tree.roots.push(node);\n } else {\n break;\n }\n }\n\n return tree;\n }\n\n *extractScripts(node: TaskTree | TaskNode | GroupNode): Generator<string> {\n if ('roots' in node) {\n for (const child of node.roots) {\n yield* this.extractScripts(child);\n }\n } else if (TaskParserService.isTaskNode(node)) {\n yield node.script;\n } else {\n for (const child of node.tasks) {\n yield* this.extractScripts(child);\n }\n }\n }\n\n async buildTask(node: TaskNode | GroupNode, workspace: Workspace, opts?: WorkspaceRunOptions): Promise<Task> {\n if (TaskParserService.isTaskNode(node)) {\n const task = await workspace.run(node.script, node.args, opts);\n\n if (!task) {\n throw new TaskExpressionError(`Workspace ${workspace.name} have no ${node.script} script`);\n }\n\n return task;\n } else {\n let group: GroupTask;\n\n if (node.operator === '//') {\n group = new ParallelGroup('In parallel', { workspace }, {\n logger: this._logger,\n });\n } else if (node.operator === '||') {\n group = new FallbackGroup('Fallbacks', { workspace }, {\n logger: this._logger,\n });\n } else {\n if (node.operator === '->' && TaskParserService._sequenceOperatorWarn) {\n this._logger.warn('Sequence operator -> is deprecated in favor of &&. It will be removed in a next major release.');\n TaskParserService._sequenceOperatorWarn = true;\n }\n\n group = new SequenceGroup('In sequence', { workspace }, {\n logger: this._logger,\n });\n }\n\n for (const child of node.tasks) {\n group.add(await this.buildTask(child, workspace, opts));\n }\n\n return group;\n }\n }\n}\n","import type { PipeStep } from 'kyrielle';\n\nexport function pipeline$<T>(): Pipeline<T, T>;\nexport function pipeline$(): Pipeline {\n const steps: PipeStep[] = [];\n\n return {\n add(step: PipeStep) {\n steps.push(step);\n return this;\n },\n build() {\n return (value: unknown) => steps.reduce((val, step) => step(val), value);\n }\n } as Pipeline;\n}\n\nexport interface Pipeline<I = unknown, O = unknown> {\n add<R>(step: PipeStep<O, R>): Pipeline<I, R>;\n build(): PipeStep<I, O>;\n}","import { TaskSet } from '@jujulego/tasks';\nimport { inject$ } from '@kyrielle/injector';\nimport { asyncIterator$, pipe$, type SimpleAsyncIterator } from 'kyrielle';\nimport type { Workspace, WorkspaceDepsMode } from '../../projects/workspace.js';\nimport type { PlanModeArgs, TaskModule } from '../bases/task-module.js';\nimport { hasEveryScript$ } from '../filters/has-scripts.js';\nimport { isAffected$ } from '../filters/is-affected.js';\nimport { isPrivate$ } from '../filters/is-private.js';\nimport { loadProject, type ProjectArgs, withProject } from '../middlewares/project.js';\nimport { TaskParserService } from '../services/task-parser.service.js';\nimport { pipeline$ } from '../utils/pipeline$.js';\n\n// Command\nconst command: TaskModule<EachArgs> = {\n command: 'each <expr>',\n describe: 'Run a task expression in many workspace, after having built all theirs dependencies.',\n builder: (parser) => withProject(parser)\n .positional('expr', {\n type: 'string',\n demandOption: true,\n desc: 'Script or task expression',\n })\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Filters:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master. Replaces %name by workspace name.',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Filters:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Filters:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('allow-no-workspaces', {\n type: 'boolean',\n default: false,\n desc: 'Allow no matching workspaces. Without it jill will exit with code 1 if no workspace matches',\n })\n .option('build-script', {\n default: 'build',\n desc: 'Script to use to build dependencies'\n })\n .option('deps-mode', {\n alias: 'd',\n choice: ['all', 'prod', 'none'],\n default: 'all' as const,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n describe: 'Print only private workspaces',\n })\n\n // Config\n .strict(false)\n .parserConfiguration({\n 'unknown-options-as-args': true,\n }),\n async prepare(args) {\n // Extract expression\n const expr = args._.map(arg => arg.toString());\n\n if (expr[0] === 'each') {\n expr.splice(0, 1);\n }\n\n expr.unshift(args.expr);\n\n // Prepare filters\n let filters = pipeline$<SimpleAsyncIterator<Workspace>>();\n\n if (args.private !== undefined) {\n filters = filters.add(isPrivate$(args.private));\n }\n\n if (args.affected !== undefined) {\n filters = filters.add(isAffected$({\n format: args.affected,\n fallback: args.affectedRevFallback,\n sort: args.affectedRevSort,\n }));\n }\n\n // Parse task expression\n const taskParser = inject$(TaskParserService);\n const tree = taskParser.parse(expr.join(' '));\n\n const scripts = Array.from(taskParser.extractScripts(tree));\n\n // Load workspaces\n const project = loadProject(args);\n const workspaces = pipe$(\n asyncIterator$(project.workspaces()),\n hasEveryScript$(scripts),\n filters.build(),\n );\n\n // Prepare tasks\n const tasks = new TaskSet();\n\n for await (const wks of workspaces) {\n tasks.add(await taskParser.buildTask(tree.roots[0], wks, {\n buildScript: args.buildScript,\n buildDeps: args.depsMode,\n }));\n }\n\n return tasks;\n }\n};\n\nexport default command;\n\n// Types\nexport interface EachArgs extends PlanModeArgs, ProjectArgs {\n readonly affected: string | undefined;\n readonly 'affected-rev-fallback': string;\n readonly 'affected-rev-sort': string | undefined;\n readonly 'allow-no-workspaces': boolean;\n readonly 'build-script': string;\n readonly 'deps-mode': WorkspaceDepsMode;\n readonly expr: string;\n readonly private: boolean | undefined;\n}\n","import { asyncScope$, inject$ } from '@kyrielle/injector';\nimport { type ArgumentsCamelCase, type Argv } from 'yargs';\nimport type { Workspace } from '../../projects/workspace.js';\nimport { CWD, LOGGER } from '../../tokens.js';\nimport { loadProject, type ProjectArgs, withProject } from './project.js';\n\n/**\n * Adds arguments to load a workspace.\n */\nexport function withWorkspace<T = unknown>(parser: Argv<T>): Argv<T & WorkspaceArgs> {\n return withProject(parser)\n .option('workspace', {\n alias: 'w',\n type: 'string',\n desc: 'Workspace to use'\n });\n}\n\n/**\n * Loads a workspace, based on arguments.\n */\nexport async function loadWorkspace(args: ArgumentsCamelCase<WorkspaceArgs>): Promise<Workspace> {\n const logger = inject$(LOGGER);\n const project = loadProject(args);\n let workspace: Workspace | null;\n\n if (args.workspace) {\n logger.debug(`loading workspace \"${args.workspace}\"`);\n workspace = await project.workspace(args.workspace);\n } else if (inject$(CWD, asyncScope$()).startsWith(project.root)) {\n logger.debug('loading workspace containing current directory');\n workspace = await project.currentWorkspace(inject$(CWD, asyncScope$()));\n } else {\n logger.debug('loading main workspace');\n workspace = await project.mainWorkspace();\n }\n\n if (!workspace) {\n throw new Error(`Workspace \"${args.workspace || '.'}\" not found`);\n }\n\n return workspace;\n}\n\n// Types\nexport interface WorkspaceArgs extends ProjectArgs {\n readonly workspace: string | undefined;\n}\n","import { TaskSet } from '@jujulego/tasks';\nimport { inject$ } from '@kyrielle/injector';\nimport cp from 'node:child_process';\nimport process from 'node:process';\nimport type { WorkspaceDepsMode } from '../../projects/workspace.js';\nimport type { CommandTask } from '../../tasks/command-task.js';\nimport { LOGGER } from '../../tokens.js';\nimport type { PlanModeArgs, TaskModule } from '../bases/task-module.js';\nimport { loadWorkspace, withWorkspace, type WorkspaceArgs } from '../middlewares/workspace.js';\n\n// Command\nconst command: TaskModule<ExecArgs> = {\n command: 'exec <command>',\n aliases: ['$0'],\n describe: 'Run command inside workspace, after all its dependencies has been built.',\n builder: (args) => withWorkspace(args)\n .positional('command', { type: 'string', demandOption: true })\n .option('build-script', {\n default: 'build',\n desc: 'Script to use to build dependencies'\n })\n .option('deps-mode', {\n alias: 'd',\n choice: ['all', 'prod', 'none'],\n default: 'all' as const,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n\n // Documentation\n .example('jill exec eslint', '')\n .example('jill exec eslint --env-info', 'Unknown arguments are passed down to command. Here it will run \"eslint --env-info\"')\n .example('jill exec eslint -- -v', 'You can use -- to stop argument parsing. Here it will run \"eslint -v\"')\n\n // Config\n .strict(false)\n .parserConfiguration({\n 'unknown-options-as-args': true,\n }),\n async prepare(args) {\n const workspace = await loadWorkspace(args);\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'exec') {\n rest.splice(0, 1);\n }\n\n // Run script in workspace\n const tasks = new TaskSet();\n\n tasks.add(await workspace.exec(args.command, rest, {\n buildScript: args.buildScript,\n buildDeps: args.depsMode,\n }));\n\n return tasks;\n },\n async execute(args, tasks) {\n const task = tasks.tasks[0] as CommandTask;\n\n if (task.dependencies.length > 0) {\n const dependencies = new TaskSet();\n\n for (const dep of task.dependencies) {\n dependencies.add(dep);\n }\n\n // Run dependencies first with spinners\n const { default: TaskExecInk } = await import('../bases/task-exec.ink.jsx');\n await TaskExecInk({ tasks: dependencies, verbose: ['verbose', 'debug'].includes(args.verbose) });\n } else {\n const logger = inject$(LOGGER);\n logger.verbose('No dependency to build');\n }\n\n const child = cp.spawn(task.cmd, task.args, {\n stdio: 'inherit',\n cwd: task.cwd,\n env: {\n ...process.env,\n ...task.env\n },\n shell: true,\n windowsHide: true,\n });\n\n process.exitCode = await new Promise<number>((resolve) => {\n child.on('close', (code) => {\n resolve(code ?? 0);\n });\n });\n }\n};\n\nexport default command;\n\n// Types\nexport interface ExecArgs extends PlanModeArgs, WorkspaceArgs {\n readonly command: string;\n readonly 'build-script': string;\n readonly 'deps-mode': WorkspaceDepsMode;\n}\n","import chalk from 'chalk';\nimport { asyncIterator$, collect$, map$, pipe$, type SimpleAsyncIterator, waitFor$ } from 'kyrielle';\nimport path from 'node:path';\nimport { compare, parse } from 'semver';\nimport slugify from 'slugify';\nimport type { ArgumentsCamelCase, CommandModule } from 'yargs';\nimport type { Workspace } from '../../projects/workspace.js';\nimport { printJson } from '../../utils/json.js';\nimport type { Order } from '../../utils/types.js';\nimport { hasSomeScript$ } from '../filters/has-scripts.js';\nimport { isAffected$ } from '../filters/is-affected.js';\nimport { isPrivate$ } from '../filters/is-private.js';\nimport { loadProject, type ProjectArgs, withProject } from '../middlewares/project.js';\nimport { pipeline$ } from '../utils/pipeline$.js';\n\n// Command\nconst command: CommandModule<unknown, ListArgs> = {\n command: 'list',\n aliases: ['ls'],\n describe: 'List project workspaces',\n builder: (parser) => withProject(parser)\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Filters:',\n desc: `Print only affected workspaces towards given git revision. If no revision is given, it will check towards master. Replaces ${chalk.bold('%name')} by workspace name.`,\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Filters:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Filters:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('attribute', {\n alias: ['attr', 'attrs'],\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'] as const,\n group: 'Format:',\n default: [] as ListAttr[],\n description: 'Select printed attributes',\n defaultDescription: '\"name\" only'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n default: false,\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n default: false,\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n default: false,\n desc: 'Prints data as a JSON array',\n })\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n describe: 'Print only private workspaces',\n })\n .option('sort-by', {\n alias: 's',\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'] as const,\n group: 'Sort:',\n default: [],\n description: 'Sort output by given attribute',\n defaultDescription: 'first attribute'\n })\n .option('sort-order', {\n alias: ['o', 'order'],\n type: 'string',\n choices: ['asc', 'desc'] as const,\n default: 'asc' as const,\n group: 'Sort:',\n desc: 'Sort order'\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n .middleware((argv) => {\n // Compute attributes\n if (!argv.attribute.length) {\n if (argv.json) {\n argv.attrs = argv.attr = argv.attribute = ['name', 'version', 'slug', 'root'];\n } else if (argv.long) {\n argv.attrs = argv.attr = argv.attribute = ['name', 'version', 'root'];\n } else if (argv.sortBy?.length) {\n argv.attrs = argv.attr = argv.attribute = argv.sortBy;\n } else {\n argv.attrs = argv.attr = argv.attribute = ['name'];\n }\n }\n }, true)\n .check((argv) => {\n if (argv.attribute.length > 0 && argv['sort-by']?.length) {\n const miss = argv['sort-by'].filter((attr) => !argv.attribute.includes(attr));\n\n if (miss.length > 0) {\n throw new Error(`Cannot sort by non printed attributes. Missing ${miss.join(', ')}.`);\n }\n }\n\n if (!argv['sort-by']?.length && argv.attribute.length > 0) {\n argv['sort-by'] = argv.sortBy = argv.s = [argv.attribute[0]];\n }\n\n return true;\n }),\n async handler(args) {\n // Prepare filters\n let filters = pipeline$<SimpleAsyncIterator<Workspace>>();\n\n if (args.private !== undefined) {\n filters = filters.add(isPrivate$(args.private));\n }\n\n if (args.withScript) {\n filters = filters.add(hasSomeScript$(args.withScript));\n }\n\n if (args.affected !== undefined) {\n filters = filters.add(isAffected$({\n format: args.affected,\n fallback: args.affectedRevFallback,\n sort: args.affectedRevSort,\n }));\n }\n\n // Load workspaces\n const project = loadProject(args);\n const workspaces = await waitFor$(pipe$(\n asyncIterator$(project.workspaces()),\n filters.build(),\n map$(buildExtractor(args)),\n collect$(),\n ));\n\n if (args.sortBy.length > 0) {\n workspaces.sort(buildComparator(args));\n }\n\n if (args.json) {\n printJson(workspaces);\n } else if (workspaces.length > 0) {\n for (const data of workspaces) {\n if (data.root) {\n data.root = path.relative(process.cwd(), data.root) || '.';\n }\n }\n\n const { default: ListInk } = await import('./list.ink.jsx');\n await ListInk({ attributes: args.attribute, headers: args.headers, workspaces });\n }\n }\n};\n\nexport default command;\n\n// Types\nexport type ListAttr = 'name' | 'version' | 'root' | 'slug';\n\nexport interface ListArgs extends ProjectArgs {\n readonly affected: string | undefined;\n readonly 'affected-rev-fallback': string;\n readonly 'affected-rev-sort': string | undefined;\n readonly attribute: readonly ListAttr[];\n readonly headers: boolean;\n readonly long: boolean;\n readonly json: boolean;\n readonly private: boolean | undefined;\n readonly 'sort-by': readonly ListAttr[];\n readonly 'sort-order': Order;\n readonly 'with-script': readonly string[] | undefined;\n}\n\n// Utils\ntype Comparator<T> = (a: T, b: T) => number;\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\nexport type ExtractedData = Record<ListAttr, string | undefined>;\n\nconst EXTRACTORS = {\n name: (wks) => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: (wks) => wks.root,\n slug: (wks) => slugify(wks.name)\n} satisfies Record<ListAttr, Extractor<string | undefined>>;\n\nconst COMPARATORS = {\n name: (a = '', b = '') => a.localeCompare(b),\n version: (a, b) => compare(parse(a) ?? '0.0.0', parse(b) ?? '0.0.0'),\n root: (a = '', b = '') => a.localeCompare(b),\n slug: (a = '', b = '') => a.localeCompare(b),\n} satisfies Record<ListAttr, Comparator<string | undefined>>;\n\nfunction buildExtractor(args: ArgumentsCamelCase<ListArgs>) {\n return (wks: Workspace): ExtractedData => {\n const data = {} as ExtractedData;\n\n for (const attr of args.attribute) {\n data[attr] = EXTRACTORS[attr](wks, args.json);\n }\n\n return data;\n };\n}\n\nfunction buildComparator(args: ArgumentsCamelCase<ListArgs>): Comparator<ExtractedData> {\n const factor = args.sortOrder === 'asc' ? 1 : -1;\n\n return (a, b) => {\n for (const attr of args.sortBy) {\n const diff = COMPARATORS[attr](a[attr], b[attr]);\n\n if (diff !== 0) {\n return diff * factor;\n }\n }\n\n return 0;\n };\n}\n","import { TaskSet } from '@jujulego/tasks';\nimport { inject$ } from '@kyrielle/injector';\nimport type { WorkspaceDepsMode } from '../../projects/workspace.js';\nimport type { PlanModeArgs, TaskModule } from '../bases/task-module.js';\nimport { loadWorkspace, withWorkspace, type WorkspaceArgs } from '../middlewares/workspace.js';\nimport { TaskParserService } from '../services/task-parser.service.js';\n\n// Command\nconst command: TaskModule<RunArgs> = {\n command: 'run <expr>',\n describe: 'Run a task expression in a workspace, after having built all its dependencies.',\n builder: (parser) => withWorkspace(parser)\n .positional('expr', {\n type: 'string',\n demandOption: true,\n desc: 'Script or task expression',\n })\n .option('build-script', {\n default: 'build',\n desc: 'Script to use to build dependencies'\n })\n .option('deps-mode', {\n alias: 'd',\n choice: ['all', 'prod', 'none'],\n default: 'all' as const,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n\n // Config\n .strict(false)\n .parserConfiguration({\n 'unknown-options-as-args': true,\n }),\n async prepare(args) {\n const workspace = await loadWorkspace(args);\n\n // Extract expression\n const expr = args._.map(arg => arg.toString());\n\n if (expr[0] === 'run') {\n expr.splice(0, 1);\n }\n\n expr.unshift(args.expr);\n\n // Parse task expression\n const taskParser = inject$(TaskParserService);\n const tree = taskParser.parse(expr.join(' '));\n\n const tasks = new TaskSet();\n tasks.add(await taskParser.buildTask(tree.roots[0], workspace, {\n buildScript: args.buildScript,\n buildDeps: args.depsMode,\n }));\n\n return tasks;\n }\n};\n\nexport default command;\n\n// Types\nexport interface RunArgs extends PlanModeArgs, WorkspaceArgs {\n readonly expr: string;\n readonly 'build-script': string;\n readonly 'deps-mode': WorkspaceDepsMode;\n}\n","import type { CommandModule } from 'yargs';\nimport { loadWorkspace, withWorkspace, type WorkspaceArgs } from '../middlewares/workspace.js';\n\n// Command\nconst command: CommandModule<unknown, TreeArgs> = {\n command: 'tree',\n describe: 'Print workspace dependency tree',\n builder: withWorkspace,\n async handler(args) {\n const workspace = await loadWorkspace(args);\n const { default: TreeInk } = await import('./tree.ink.jsx');\n\n await TreeInk({ workspace });\n }\n};\n\nexport default command;\n\n// Types\nexport interface TreeArgs extends WorkspaceArgs {}\n","// Utils\nexport async function dynamicImport<M>(filepath: string): Promise<M> {\n return import(/* webpackIgnore: true */ process.platform === 'win32' ? `file://${filepath}` : filepath) as Promise<M>;\n}\n","import { token$ } from '@kyrielle/injector';\nimport { cosmiconfig, defaultLoaders } from 'cosmiconfig';\nimport { dynamicImport } from '../utils/import.js';\n\nexport const ConfigExplorer = token$('ConfigExplorer', () => cosmiconfig('jill', {\n searchStrategy: 'global',\n loaders: {\n '.cjs': (filepath) => dynamicImport<{ default: unknown }>(filepath).then((mod) => mod.default),\n '.js': (filepath) => dynamicImport<{ default: unknown }>(filepath).then((mod) => mod.default),\n '.json': defaultLoaders['.json'],\n '.yaml': defaultLoaders['.yaml'],\n '.yml': defaultLoaders['.yml'],\n noExt: defaultLoaders.noExt,\n }\n}));\n","import { qjson } from '@jujulego/quick-tag';\nimport { asyncScope$, inject$ } from '@kyrielle/injector';\nimport { withLabel } from '@kyrielle/logger';\nimport Ajv from 'ajv';\nimport { var$, type Ref, type Observable } from 'kyrielle';\nimport os from 'node:os';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { CWD, LOGGER } from '../tokens.js';\nimport { ConfigExplorer } from './config-explorer.js';\nimport schema from './schema.json' with { type: 'json' };\nimport type { Config } from './types';\n\n// Constants\nconst CPU_COUNT = os.cpus().length;\n\n/**\n * Loads and make configuration accessible\n */\nexport class ConfigService {\n // Attributes\n private _filepath?: string;\n\n private readonly _config = var$<Config>();\n private readonly _logger = inject$(LOGGER).child(withLabel('config'));\n private readonly _explorer = inject$(ConfigExplorer);\n\n // Constructor\n constructor(state: ConfigState = {}) {\n if (state.filepath) {\n this._filepath = state.filepath;\n }\n\n if (state.config) {\n this._config.mutate(state.config);\n }\n }\n\n // Methods\n private _validateConfig(config: unknown): Config {\n // Validate config\n const ajv = new Ajv({\n allErrors: true,\n useDefaults: true,\n logger: this._logger.child(withLabel('ajv')),\n strict: process.env.NODE_ENV === 'development' ? 'log' : true,\n });\n\n const validator = ajv.compile<Config>(schema);\n\n if (!validator(config)) {\n const errors = ajv.errorsText(validator.errors, { separator: '\\n- ', dataVar: 'config' });\n\n this._logger.error(`errors in config file:\\n- ${errors}`);\n throw new Error('Error in config file');\n }\n\n // Correct jobs value\n if (config.jobs <= 0) {\n Object.assign(config, { jobs: Math.max(CPU_COUNT - 1, 1) });\n }\n\n this._logger.debug`loaded config:\\n${qjson(config, { pretty: true })}`;\n\n return config;\n }\n\n async searchConfig() {\n const loaded = await this._explorer.search(inject$(CWD, asyncScope$()));\n\n if (loaded) {\n this._logger.verbose`loaded file ${loaded.filepath}`;\n this._filepath = loaded.filepath;\n\n const config = this._validateConfig(loaded.config);\n this._config.mutate(config);\n }\n }\n\n async loadConfig(filepath: string) {\n const loaded = await this._explorer.load(filepath);\n\n if (loaded) {\n this._logger.verbose`loaded file ${loaded.filepath}`;\n this._filepath = loaded.filepath;\n\n const config = this._validateConfig(loaded.config);\n this._config.mutate(config);\n }\n }\n\n // Attributes\n get baseDir(): string {\n return this._filepath ? path.dirname(this._filepath) : inject$(CWD, asyncScope$());\n }\n\n get config$(): Ref<Config | undefined> & Observable<Config> {\n return this._config;\n }\n\n get config(): Config | undefined {\n return this._config.defer();\n }\n\n get state(): ConfigState {\n return {\n filepath: this._filepath,\n config: this.config\n };\n }\n}\n\n// Types\nexport interface ConfigState {\n readonly filepath?: string | undefined;\n readonly config?: Config | undefined;\n}\n","import { ConfigService } from '../../config/config.service.js';\nimport { asyncScope$, inject$ } from '@kyrielle/injector';\nimport type { Argv } from 'yargs';\n\n// Middleware\nexport function configMiddleware<T>(parser: Argv<T>) {\n return parser\n .option('config-file', {\n alias: 'c',\n type: 'string',\n description: 'Configuration file'\n })\n .middleware(async (args) => {\n const configService = inject$(ConfigService, asyncScope$());\n\n if (args.configFile) {\n await configService.loadConfig(args.configFile);\n } else {\n await configService.searchConfig();\n }\n });\n}\n\n// Types\nexport interface ConfigArgs {\n readonly 'config-file'?: string;\n}\n","import { defineQuickFormat, q$, qarg, qerror, qprop, qwrap } from '@jujulego/quick-tag';\nimport { type Log, LogLevel, qLogDelay, type WithDelay } from '@kyrielle/logger';\nimport type { ColorName, ModifierName } from 'chalk';\nimport { chalkTemplateStderr } from 'chalk-template';\nimport os from 'node:os';\n\nconst LEVEL_COLORS = {\n [LogLevel.debug]: 'grey',\n [LogLevel.verbose]: 'blue',\n [LogLevel.info]: 'reset',\n [LogLevel.warning]: 'yellow',\n [LogLevel.error]: 'red',\n} satisfies Record<LogLevel, ColorName | ModifierName>;\n\nconst logColor = defineQuickFormat((level: LogLevel) => LEVEL_COLORS[level])(qprop<Log, 'level'>('level'));\nexport const logFormat = qwrap(chalkTemplateStderr)\n .fun`#?:${qprop('label')}{grey [${q$}]} ?#{${logColor} ${qprop('message')} {grey +${qLogDelay(qarg<WithDelay>())}}#?:${qerror(qprop<Log>('error'))}${os.EOL}${q$}?#}`;\n","import { inject$ } from '@kyrielle/injector';\nimport type { LogLevelKey } from '@kyrielle/logger';\nimport { logDelay$, LogGateway, LogLevel, toStderr } from '@kyrielle/logger';\nimport { filter$, flow$ } from 'kyrielle';\nimport type { Argv } from 'yargs';\nimport { LOGGER } from '../../tokens.js';\nimport { logFormat } from '../../utils/logger.js';\n\n// Utils\nconst VERBOSITY_LEVEL: Record<number, LogLevelKey> = {\n 1: 'verbose',\n 2: 'debug',\n};\n\n// Middleware\nexport function loggerMiddleware<T>(parser: Argv<T>) {\n return parser\n .option('verbose', {\n alias: 'v',\n default: 'info',\n type: 'count',\n description: 'Set verbosity level',\n coerce: (cnt: number) => VERBOSITY_LEVEL[Math.min(cnt, 2)]\n })\n .middleware((args) => {\n const logLevel = args.verbose ? LogLevel[args.verbose] : LogLevel.info;\n const logGateway = inject$(LogGateway);\n\n flow$(\n inject$(LOGGER),\n filter$((log) => log.level >= logLevel),\n logDelay$(),\n logGateway,\n );\n\n logGateway.connect('console', toStderr(logFormat));\n });\n}\n\n// Types\nexport interface LoggerArgs {\n readonly verbose: LogLevelKey;\n}\n","import type { TaskSet } from '@jujulego/tasks';\nimport { type Mutator, pipe$ } from 'kyrielle';\nimport process from 'node:process';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { version } from '../../package.json' with { type: 'json' };\nimport { command } from './bases/command-module.js';\nimport { executeCommand, planCommand } from './bases/task-module.js';\nimport * as commands from './commands.js';\nimport { configMiddleware } from './middlewares/config.middleware.js';\nimport { loggerMiddleware } from './middlewares/logger.middleware.js';\n\n// Utils\nfunction baseParser() {\n return pipe$(\n yargs(hideBin(process.argv))\n .scriptName('jill')\n .version(version)\n .demandCommand()\n .recommendCommands(),\n loggerMiddleware,\n configMiddleware,\n );\n}\n\n/**\n * Prepare parser executing commands\n */\nexport function executeParser() {\n return pipe$(\n baseParser(),\n executeCommand(commands.each),\n executeCommand(commands.exec),\n command(commands.list),\n executeCommand(commands.run),\n command(commands.tree),\n );\n}\n\n/**\n * Prepare parser planning commands\n */\nexport function planParser(tasks$: Mutator<TaskSet>) {\n return pipe$(\n baseParser(),\n planCommand(commands.each, tasks$),\n planCommand(commands.exec, tasks$),\n planCommand(commands.list, tasks$),\n planCommand(commands.run, tasks$),\n planCommand(commands.tree, tasks$),\n );\n}\n"],"names":["command","module","parser","CONFIG","token$","ConfigService","waitFor$","inject$","asyncScope$","config$","CWD","process","cwd","LOGGER","logger$","withTimestamp","PATH_SCURRY","PathScurry","fs","TASK_MANAGER","TaskManager","jobs","logger","printJson","data","stream","stdout","isTTY","write","JSON","stringify","executeCommand","prepare","execute","rest","builder","base","withPlanMode","handler","args","tasks","plan","planMode","Array","from","default","TaskPlanInk","length","TaskExecInk","verbose","includes","warning","exitCode","planCommand","tasks$","mutate","undefined","option","type","describe","desc","choices","hasSomeScript$","scripts","filter$","wks","manifest","some","script","hasEveryScript$","every","combine","generators","gen","streamLines$","task","observable$","observer","signal","off","off$","current","add","once$","events$","next","complete","unsubscribe","addEventListener","once","on","chunk","toString","lines","split","pop","line","GitService","_manager","_logger","cmd","options","opts","SpawnTask","hidden","debug","branch","diff","tag","isAffected","reference","files","Promise","resolve","reject","Error","name","listBranches","pipe$","map$","replace","collect$","listTags","isAffected$","origin","asyncIterator$","revision","formatRevision","workspace","git","child","withLabel","result","format","sortArgs","sort","branches","root","tags","fallback","isPrivate$","value","private","mutex$","count$","var$","acquire","cnt","defer","release","with$","lock","fn","CommandTask","superCommand","slice","env","FORCE_COLOR","_logStreams","subscribe","info","isCommandCtx","ctx","capitalize","txt","charAt","toUpperCase","substring","toLowerCase","splitCommandLine","trim","parts","current_cote","last","i","c","push","ScriptTask","GroupTask","_preHookTasks","_postHookTasks","_scriptTasks","_runHooks","runHooks","_runScript","getScript","commandArgs","set","TaskSet","argv","map","arg","PlannerService","plannerService","pm","project","packageManager","tsk","onOrchestrate","_hasFailed","setStatus","results","failed","onStop","stop","complexity","cache","Map","reduce","cpl","id","isScriptCtx","Workspace","_affectedCache","_git","_root","_tasks","_buildDependencies","buildDeps","unshift","devDependencies","dependencies","dep","build","dependsOn","_loadDependencies","kind","range","Object","entries","ws","_satisfies","_isAffected","proms","all","r","startsWith","path","version","satisfies","get","buildScript","run","exec","config","hooks","toJSON","Project","_isFullyLoaded","_lock","_mainWorkspace","_packageManager","_workspaceGlob","_names","_scurry","_workspaces","_loadManifest","dir","file","relative","dirname","promises","readFile","mnf","parse","normalize","msg","_loadWorkspace","currentWorkspace","workspaces","mainWorkspace","readdir","withFileTypes","main","values","patterns","chdir","Glob","scurry","isDirectory","fullpath","error","code","ProjectsRepository","_cache","isProjectRoot","hasManifest","MANIFEST","hasLockFile","LOCK_FILES","searchProjectRoot","directory","foundManifest","projectRoot","prev","getProject","withProject","alias","defaultDescription","description","middleware","repository","loadProject","TaskExpressionError","TaskSyntaxError","TaskParserService","isTaskNode","node","_sequenceOperatorWarn","_lexer","moo","states","lparen","whitespace","match","string","x","operator","rparen","operatorOrArgument","argument","_nextNode","lexer","token","formatError","lastTask","res","expr","reset","tree","roots","extractScripts","buildTask","group","ParallelGroup","FallbackGroup","warn","SequenceGroup","pipeline$","steps","step","val","positional","demandOption","coerce","rev","choice","strict","parserConfiguration","_","splice","filters","affected","affectedRevFallback","affectedRevSort","taskParser","join","depsMode","withWorkspace","loadWorkspace","aliases","example","cp","spawn","stdio","shell","windowsHide","chalk","bold","attribute","json","attrs","attr","long","sortBy","check","miss","filter","s","withScript","buildExtractor","buildComparator","ListInk","attributes","headers","EXTRACTORS","grey","slug","slugify","COMPARATORS","a","b","localeCompare","compare","factor","sortOrder","TreeInk","dynamicImport","filepath","platform","ConfigExplorer","cosmiconfig","searchStrategy","loaders","then","mod","defaultLoaders","noExt","CPU_COUNT","os","cpus","_filepath","_config","_explorer","state","_validateConfig","ajv","Ajv","allErrors","useDefaults","NODE_ENV","validator","compile","schema","errors","errorsText","separator","dataVar","assign","Math","max","qjson","pretty","searchConfig","loaded","search","loadConfig","load","baseDir","configMiddleware","configService","configFile","LEVEL_COLORS","LogLevel","logColor","defineQuickFormat","level","qprop","logFormat","qwrap","chalkTemplateStderr","fun","q$","qLogDelay","qarg","qerror","EOL","VERBOSITY_LEVEL","loggerMiddleware","min","logLevel","logGateway","LogGateway","flow$","log","logDelay$","connect","toStderr","baseParser","yargs","hideBin","scriptName","demandCommand","recommendCommands","executeParser","commands","planParser"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { inject$, asyncScope$ } from '@kyrielle/injector';
|
|
2
|
+
import { withLabel } from '@kyrielle/logger';
|
|
3
|
+
import { var$ } from 'kyrielle';
|
|
4
|
+
import { L as LOGGER, b as CWD, d as ConfigService, p as planParser } from './parser.js';
|
|
5
|
+
import '@jujulego/tasks';
|
|
6
|
+
import 'node:path';
|
|
7
|
+
import 'glob';
|
|
8
|
+
import 'node:fs';
|
|
9
|
+
import 'normalize-package-data';
|
|
10
|
+
import 'semver';
|
|
11
|
+
import 'moo';
|
|
12
|
+
import 'node:child_process';
|
|
13
|
+
import 'node:process';
|
|
14
|
+
import 'chalk';
|
|
15
|
+
import 'slugify';
|
|
16
|
+
import 'yargs';
|
|
17
|
+
import 'yargs/helpers';
|
|
18
|
+
import 'path-scurry';
|
|
19
|
+
import '@jujulego/quick-tag';
|
|
20
|
+
import 'ajv';
|
|
21
|
+
import 'node:os';
|
|
22
|
+
import 'cosmiconfig';
|
|
23
|
+
import 'chalk-template';
|
|
24
|
+
|
|
25
|
+
class PlannerService {
|
|
26
|
+
// Attributes
|
|
27
|
+
_logger = inject$(LOGGER).child(withLabel('planner'));
|
|
28
|
+
// Methods
|
|
29
|
+
/**
|
|
30
|
+
* Returns a task set if any task should be run by given command.
|
|
31
|
+
* Tasks that do not execute tasks will return `null`
|
|
32
|
+
*/ async plan(args, cwd) {
|
|
33
|
+
this._logger.debug(`interpreting jill ${args.join(' ')}`);
|
|
34
|
+
const argv = args.map((arg)=>arg.replace(/^["'](.+)["']$/, '$1'));
|
|
35
|
+
const tasks = var$();
|
|
36
|
+
await asyncScope$(async ()=>{
|
|
37
|
+
asyncScope$().set(CWD, cwd);
|
|
38
|
+
asyncScope$().set(ConfigService, new ConfigService()); // <= injects an empty ConfigService, forcing config discovery
|
|
39
|
+
await planParser(tasks).parseAsync(argv);
|
|
40
|
+
});
|
|
41
|
+
return tasks.defer() ?? null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { PlannerService };
|
|
46
|
+
//# sourceMappingURL=planner.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.service.js","sources":["../src/cli/services/planner.service.ts"],"sourcesContent":["import type { TaskSet } from '@jujulego/tasks';\nimport { asyncScope$, inject$ } from '@kyrielle/injector';\nimport { withLabel } from '@kyrielle/logger';\nimport { var$ } from 'kyrielle';\nimport { ConfigService } from '../../config/config.service.js';\nimport { CWD, LOGGER } from '../../tokens.js';\nimport { planParser } from '../parser.js';\n\nexport class PlannerService {\n // Attributes\n private readonly _logger = inject$(LOGGER).child(withLabel('planner'));\n\n // Methods\n /**\n * Returns a task set if any task should be run by given command.\n * Tasks that do not execute tasks will return `null`\n */\n async plan(args: string[], cwd: string): Promise<TaskSet | null> {\n this._logger.debug(`interpreting jill ${args.join(' ')}`);\n\n const argv = args.map(arg => arg.replace(/^[\"'](.+)[\"']$/, '$1'));\n const tasks = var$<TaskSet>();\n\n await asyncScope$(async () => {\n asyncScope$().set(CWD, cwd);\n asyncScope$().set(ConfigService, new ConfigService()); // <= injects an empty ConfigService, forcing config discovery\n\n await planParser(tasks).parseAsync(argv);\n });\n\n return tasks.defer() ?? null;\n }\n}\n"],"names":["PlannerService","_logger","inject$","LOGGER","child","withLabel","plan","args","cwd","debug","join","argv","map","arg","replace","tasks","var$","asyncScope$","set","CWD","ConfigService","planParser","parseAsync","defer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAMA,cAAAA,CAAAA;;AAEMC,IAAAA,OAAAA,GAAUC,OAAAA,CAAQC,MAAAA,CAAAA,CAAQC,KAAK,CAACC,UAAU,SAAA,CAAA,CAAA;;AAG3D;;;AAGC,MACD,MAAMC,IAAAA,CAAKC,IAAc,EAAEC,GAAW,EAA2B;QAC/D,IAAI,CAACP,OAAO,CAACQ,KAAK,CAAC,CAAC,kBAAkB,EAAEF,IAAAA,CAAKG,IAAI,CAAC,GAAA,CAAA,CAAA,CAAM,CAAA;QAExD,MAAMC,IAAAA,GAAOJ,KAAKK,GAAG,CAACC,CAAAA,GAAAA,GAAOA,GAAAA,CAAIC,OAAO,CAAC,gBAAA,EAAkB,IAAA,CAAA,CAAA;AAC3D,QAAA,MAAMC,KAAAA,GAAQC,IAAAA,EAAAA;AAEd,QAAA,MAAMC,WAAAA,CAAY,UAAA;YAChBA,WAAAA,EAAAA,CAAcC,GAAG,CAACC,GAAAA,EAAKX,GAAAA,CAAAA;AACvBS,YAAAA,WAAAA,EAAAA,CAAcC,GAAG,CAACE,aAAAA,EAAe,IAAIA;YAErC,MAAMC,UAAAA,CAAWN,KAAAA,CAAAA,CAAOO,UAAU,CAACX,IAAAA,CAAAA;AACrC,QAAA,CAAA,CAAA;QAEA,OAAOI,KAAAA,CAAMQ,KAAK,EAAA,IAAM,IAAA;AAC1B,IAAA;AACF;;;;"}
|