@jujulego/jill 2.1.0-alpha.4 → 2.1.0-alpha.6
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/784.js +2 -0
- package/dist/784.js.map +1 -0
- package/dist/801.js +9 -0
- package/dist/{239.js.LICENSE.txt → 801.js.LICENSE.txt} +2 -0
- package/dist/801.js.map +1 -0
- package/dist/commands/each.d.ts +15 -0
- package/dist/commands/group.d.ts +8 -0
- package/dist/commands/index.d.ts +40 -0
- package/dist/commands/list.d.ts +23 -0
- package/dist/commands/run.d.ts +7 -0
- package/dist/commands/tree.d.ts +3 -0
- package/dist/filters/affected.filter.d.ts +11 -0
- package/dist/filters/pipeline.d.ts +11 -0
- package/dist/filters/private.filter.d.ts +7 -0
- package/dist/filters/scripts.filter.d.ts +7 -0
- package/dist/git.d.ts +16 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/middlewares/config-options.d.ts +5 -0
- package/dist/middlewares/load-project.d.ts +5 -0
- package/dist/middlewares/load-workspace.d.ts +3 -0
- package/dist/middlewares/setup-ink.d.ts +1 -0
- package/dist/project/project.d.ts +25 -0
- package/dist/project/workspace.d.ts +34 -0
- package/dist/services/ajv.config.d.ts +3 -0
- package/dist/services/config/explorer.d.ts +4 -0
- package/dist/services/config/loader.d.ts +4 -0
- package/dist/services/config/types.d.ts +5 -0
- package/dist/services/config/validator.d.ts +4 -0
- package/dist/services/inversify.config.d.ts +11 -0
- package/dist/services/logger.service.d.ts +6 -0
- package/dist/services/plugins/plugin-loader.service.d.ts +10 -0
- package/dist/services/plugins/types.d.ts +5 -0
- package/dist/services/plugins/utils.d.ts +3 -0
- package/dist/services/spinner.service.d.ts +16 -0
- package/dist/services/task-expr.service.d.ts +19 -0
- package/dist/services/task-manager.config.d.ts +3 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/ui/global-spinner.d.ts +2 -0
- package/dist/ui/group-task-spinner.d.ts +6 -0
- package/dist/ui/layout.d.ts +5 -0
- package/dist/ui/list.d.ts +6 -0
- package/dist/ui/static-logs.d.ts +1 -0
- package/dist/ui/task-manager-spinner.d.ts +6 -0
- package/dist/ui/task-name.d.ts +6 -0
- package/dist/ui/task-spinner.d.ts +6 -0
- package/dist/ui/workspace-tree.d.ts +8 -0
- package/dist/utils/import.d.ts +1 -0
- package/dist/utils/streams.d.ts +3 -0
- package/dist/utils/string.d.ts +1 -0
- package/dist/utils/yargs.d.ts +9 -0
- package/package.json +16 -12
- package/dist/239.js +0 -3
- package/dist/239.js.map +0 -1
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","mappings":"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","sources":["webpack://@jujulego/jill/./src/services/inversify.config.ts","webpack://@jujulego/jill/./src/services/logger.service.ts","webpack://@jujulego/jill/./src/services/task-expr.service.ts","webpack://@jujulego/jill/./src/services/spinner.service.ts","webpack://@jujulego/jill/./src/utils/streams.ts","webpack://@jujulego/jill/./src/services/task-manager.service.ts","webpack://@jujulego/jill/./src/git.ts","webpack://@jujulego/jill/./src/filters/affected.filter.ts","webpack://@jujulego/jill/./src/filters/pipeline.ts","webpack://@jujulego/jill/./src/filters/private.filter.ts","webpack://@jujulego/jill/./src/filters/scripts.filter.ts","webpack://@jujulego/jill/./src/utils/yargs.ts","webpack://@jujulego/jill/./src/middlewares/global-config.ts","webpack://@jujulego/jill/external node-commonjs \"node:fs/promises\"","webpack://@jujulego/jill/./src/project/workspace.ts","webpack://@jujulego/jill/./src/project/project.ts","webpack://@jujulego/jill/./src/middlewares/load-project.ts","webpack://@jujulego/jill/./src/middlewares/load-workspace.ts","webpack://@jujulego/jill/./src/ui/global-spinner.tsx","webpack://@jujulego/jill/./src/ui/static-logs.tsx","webpack://@jujulego/jill/./src/ui/layout.tsx","webpack://@jujulego/jill/./src/ui/list.tsx","webpack://@jujulego/jill/./src/utils/string.ts","webpack://@jujulego/jill/./src/ui/task-name.tsx","webpack://@jujulego/jill/./src/ui/task-spinner.tsx","webpack://@jujulego/jill/./src/ui/group-task-spinner.tsx","webpack://@jujulego/jill/./src/ui/task-manager-spinner.tsx","webpack://@jujulego/jill/./src/ui/workspace-tree.tsx","webpack://@jujulego/jill/./src/middlewares/setup-ink.tsx","webpack://@jujulego/jill/./src/commands/each.tsx","webpack://@jujulego/jill/./src/commands/group.tsx","webpack://@jujulego/jill/./src/commands/list.tsx","webpack://@jujulego/jill/./src/commands/run.tsx","webpack://@jujulego/jill/./src/commands/tree.tsx","webpack://@jujulego/jill/./src/commands/index.ts","webpack://@jujulego/jill/./src/main.ts","webpack://@jujulego/jill/external node-commonjs \"assert\"","webpack://@jujulego/jill/external node-commonjs \"buffer\"","webpack://@jujulego/jill/external node-commonjs \"child_process\"","webpack://@jujulego/jill/external node-commonjs \"events\"","webpack://@jujulego/jill/external node-commonjs \"fs\"","webpack://@jujulego/jill/external node-commonjs \"http\"","webpack://@jujulego/jill/external node-commonjs \"https\"","webpack://@jujulego/jill/external node-commonjs \"module\"","webpack://@jujulego/jill/external node-commonjs \"node:child_process\"","webpack://@jujulego/jill/external node-commonjs \"node:crypto\"","webpack://@jujulego/jill/external node-commonjs \"node:os\"","webpack://@jujulego/jill/external node-commonjs \"node:path\"","webpack://@jujulego/jill/external node-commonjs \"os\"","webpack://@jujulego/jill/external node-commonjs \"path\"","webpack://@jujulego/jill/external node-commonjs \"stream\"","webpack://@jujulego/jill/external node-commonjs \"string_decoder\"","webpack://@jujulego/jill/external node-commonjs \"tty\"","webpack://@jujulego/jill/external node-commonjs \"url\"","webpack://@jujulego/jill/external node-commonjs \"util\"","webpack://@jujulego/jill/external node-commonjs \"zlib\""],"sourcesContent":["import { Container } from 'inversify';\nimport getDecorators from 'inversify-inject-decorators';\n\nimport 'reflect-metadata';\n\n// Constants\nexport const INK_APP = Symbol.for('InkApp');\nexport const GLOBAL_CONFIG = Symbol.for('GlobalConfig');\nexport const CURRENT = Symbol.for('Current');\n\n// Types\nexport interface GlobalConfig {\n jobs?: number;\n verbose: number;\n}\n\n// Container\nexport const container = new Container({\n skipBaseClassChecks: true,\n});\n\n// Utilities\nexport const { lazyInject } = getDecorators(container);\n","import chalk from 'chalk';\nimport { injectable } from 'inversify';\nimport winston from 'winston';\n\nimport { type GlobalConfig, GLOBAL_CONFIG, container } from './inversify.config';\n\n// Constants\nconst VERBOSITY_LEVEL: Record<number, string> = {\n 1: 'verbose',\n 2: 'debug',\n};\n\n// Utils\nexport const consoleFormat = winston.format.combine(\n winston.format.errors(),\n winston.format.colorize({\n message: true,\n colors: { debug: 'grey', verbose: 'blue', info: 'white', error: 'red' }\n }),\n winston.format.printf(({ label, message }) => {\n const lines = message.split('\\n');\n\n // Format\n let spaces = '';\n let formatted = lines[0];\n\n if (label) {\n spaces = ' '.repeat(label.length + 3);\n formatted = `${chalk.grey(`[${label}]`)} ${lines[0]}`;\n }\n\n for (let i = 1; i < lines.length; ++i) {\n formatted += `\\n${spaces}${lines[i]}`;\n }\n\n return formatted;\n }),\n);\n\n// Service\n@injectable()\nexport class Logger {}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Logger extends winston.Logger {}\n\ncontainer.bind(Logger)\n .toDynamicValue((context) => {\n const config = context.container.get<GlobalConfig>(GLOBAL_CONFIG);\n\n return winston.createLogger({\n level: VERBOSITY_LEVEL[Math.min(config.verbose, 2)],\n format: winston.format.combine(\n winston.format.timestamp(),\n ),\n transports: [\n new winston.transports.Console({\n format: consoleFormat\n })\n ]\n });\n })\n .inSingletonScope();\n","import { GroupTask, ParallelGroup, SequenceGroup, Task } from '@jujulego/tasks';\nimport { injectable } from 'inversify';\nimport moo from 'moo';\n\nimport { container } from './inversify.config';\nimport { Logger } from './logger.service';\nimport { Workspace, WorkspaceRunOptions } from '../project';\n\n// Interfaces\nexport interface TaskNode {\n script: 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\n@injectable()\nexport class TaskExprService {\n // Statics\n static isTaskNode(node: TaskNode | GroupNode): node is TaskNode {\n return 'script' in node;\n }\n\n // Methods\n private _lexer(): moo.Lexer {\n return moo.states({\n task: {\n lparen: '(',\n whitespace: /[ \\t]+/,\n string: [\n // inline\n { match: /[:a-zA-Z0-9]+/, push: 'operator' },\n // single cotted\n {\n match: /'(?:\\\\['\\\\]|[^\\n'\\\\])+'/,\n push: 'operator',\n value: x => x.slice(1, -1).replace(/\\\\(['\\\\])/g, '$1')\n },\n // double cotted\n {\n match: /\"(?:\\\\[\"\\\\]|[^\\n\"\\\\])+\"/,\n push: 'operator',\n value: x => x.slice(1, -1).replace(/\\\\([\"\\\\])/g, '$1')\n }\n ],\n },\n operator: {\n whitespace: /[ \\t]+/,\n rparen: ')',\n operator: { match: ['->', '//'], pop: 1 },\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 operator\n if (token.type === 'operator') {\n const operator = token.value;\n\n if (!node) {\n throw new Error(lexer.formatError(token, 'Unexpected operator'));\n } else if (TaskExprService.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 === 'string') {\n child = { script: token.value };\n } else if (token.type === 'lparen') {\n const res = this._nextNode(lexer, i+1);\n\n if (!res) {\n throw new Error(lexer.formatError(token, 'Empty group found'));\n }\n\n child = res;\n } else {\n throw new Error(lexer.formatError(token, 'Unexpected token'));\n }\n\n if (!node) {\n node = child;\n } else if (TaskExprService.isTaskNode(node)) {\n throw new Error(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 // eslint-disable-next-line no-constant-condition\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 async buildTask(node: TaskNode | GroupNode, workspace: Workspace, opts: WorkspaceRunOptions = {}): Promise<Task> {\n if (TaskExprService.isTaskNode(node)) {\n return workspace.run(node.script, [], opts);\n } else {\n let group: GroupTask;\n\n if (node.operator === '//') {\n group = new ParallelGroup('In parallel', {}, {\n logger: container.get(Logger),\n });\n } else {\n group = new SequenceGroup('In sequence', {}, {\n logger: container.get(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\ncontainer.bind(TaskExprService)\n .toSelf();\n","import { EventSource } from '@jujulego/event-tree';\nimport { injectable } from 'inversify';\n\nimport { container } from './inversify.config';\n\n// Interface\nexport type SpinnerStatus = 'spin' | 'stop' | 'success' | 'failed';\nexport interface SpinnerState {\n status: SpinnerStatus;\n label: string;\n}\n\nexport type SpinnerEventMap = Record<`update.${SpinnerStatus}`, SpinnerState>;\n\n// Service\n@injectable()\nexport class SpinnerService extends EventSource<SpinnerEventMap> {\n // Attributes\n private _status: SpinnerStatus = 'stop';\n private _label = '';\n\n // Methods\n spin(label: string) {\n this._status = 'spin';\n this._label = label;\n\n this.emit('update.spin', this.state);\n }\n\n success(label: string) {\n this._status = 'success';\n this._label = label;\n\n this.emit('update.success', this.state);\n }\n\n failed(label: string) {\n this._status = 'failed';\n this._label = label;\n\n this.emit('update.failed', this.state);\n }\n\n stop() {\n if (this._status === 'spin') {\n this._status = 'stop';\n\n this.emit('update.stop', this.state);\n }\n }\n\n // Properties\n get state(): SpinnerState {\n return {\n status: this._status,\n label: this._label,\n };\n }\n}\n\ncontainer.bind(SpinnerService)\n .toSelf()\n .inSingletonScope();\n","import { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { streamEvents } from '@jujulego/event-tree';\n\n// Utils\nexport async function* combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T> {\n for (const gen of generators) {\n yield* gen;\n }\n}\n\nexport async function *streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string> {\n // Abort\n const ctrl = new AbortController();\n const reason = new Error('aborted');\n\n task.subscribe('completed', () => ctrl.abort(reason));\n\n // Stream\n let current = '';\n\n try {\n for await (const chunk of streamEvents(task, `stream.${stream}`, { signal: ctrl.signal })) {\n const data = current + chunk.data.toString('utf-8');\n const lines = data.split(/\\r?\\n/);\n\n current = lines.pop() ?? '';\n\n for (const line of lines) {\n yield line;\n }\n }\n } catch (err) {\n if (err !== reason) {\n throw err;\n }\n\n if (current) {\n yield current;\n }\n }\n}\n","import { TaskManager } from '@jujulego/tasks';\n\nimport { type GlobalConfig, GLOBAL_CONFIG, container } from './inversify.config';\nimport { Logger } from './logger.service';\n\n// Service\ncontainer.bind(TaskManager)\n .toDynamicValue((context) => {\n const config = context.container.get<GlobalConfig>(GLOBAL_CONFIG);\n const logger = context.container.get(Logger);\n\n return new TaskManager({ jobs: config.jobs, logger });\n })\n .inSingletonScope();\n","import { SpawnTask, SpawnTaskOptions, TaskContext, TaskManager } from '@jujulego/tasks';\n\nimport { lazyInject, Logger } from './services';\nimport { streamLines } from './utils';\n\n// Types\nexport interface GitContext extends TaskContext {\n command: string;\n}\n\n// Git commands\nexport class Git {\n // Services\n @lazyInject(TaskManager)\n static readonly manager: TaskManager;\n\n @lazyInject(Logger)\n static readonly logger: Logger;\n\n // commons\n static command(cmd: string, args: string[], options: SpawnTaskOptions = {}): SpawnTask<GitContext> {\n const opts = { logger: this.logger, ...options };\n\n // Create task\n const task = new SpawnTask('git', [cmd, ...args], { command: cmd }, opts);\n task.subscribe('stream', ({ data }) => opts.logger.debug(data.toString('utf-8')));\n\n this.manager.add(task);\n\n return task;\n }\n\n // commands\n static branch(args: string[], options?: SpawnTaskOptions): SpawnTask<GitContext> {\n return this.command('branch', args, options);\n }\n\n static diff(args: string[], options?: SpawnTaskOptions): SpawnTask<GitContext> {\n return this.command('diff', args, options);\n }\n\n static tag(args: string[], options?: SpawnTaskOptions): SpawnTask<GitContext> {\n return this.command('tag', args, options);\n }\n\n // high level\n static isAffected(reference: string, args: string[] = [], opts?: SpawnTaskOptions): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const task = this.diff(['--quiet', reference, ...args], opts);\n\n task.subscribe('status.done', () => resolve(false));\n task.subscribe('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 static async listBranches(args: string[] = [], opts?: SpawnTaskOptions): Promise<string[]> {\n const task = this.branch(['-l', ...args], opts);\n const result: string[] = [];\n\n for await (const line of streamLines(task, 'stdout')) {\n result.push(line.replace(/^[ *] /, ''));\n }\n\n return result;\n }\n\n static async listTags(args: string[] = [], opts?: SpawnTaskOptions): Promise<string[]> {\n const task = this.tag(['-l', ...args], opts);\n const result: string[] = [];\n\n for await (const line of streamLines(task, 'stdout')) {\n result.push(line);\n }\n\n return result;\n }\n}\n","import { Git } from '../git';\nimport { lazyInject, Logger } from '../services';\nimport { Workspace } from '../project';\n\nimport { PipelineFilter } from './pipeline';\n\n// Class\nexport class AffectedFilter implements PipelineFilter {\n // Properties\n @lazyInject(Logger)\n private readonly _logger: Logger;\n\n // Constructor\n constructor(\n readonly format: string,\n readonly fallback: string,\n readonly sort?: string,\n ) {}\n\n // Methods\n private async _formatRevision(wks: Workspace): Promise<string> {\n const logger = this._logger.child({ label: wks.name });\n\n // Format revision\n let result = this.format;\n result = result.replace(/(?<!\\\\)((?:\\\\\\\\)*)%name/g, `$1${wks.name}`);\n result = result.replace(/\\\\(.)/g, '$1');\n\n // Ask git to complete it\n const sortArgs = this.sort ? ['--sort', this.sort] : [];\n\n // - search in branches\n if (result.includes('*')) {\n const branches = await Git.listBranches([...sortArgs, result], { cwd: wks.cwd, 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: wks.cwd, logger: logger });\n\n if (tags.length > 0) {\n result = tags[tags.length - 1];\n }\n }\n\n if (result !== this.format) {\n logger.verbose(`Resolved ${this.format} into ${result}`);\n }\n\n if (result.includes('*')) {\n logger.warn(`No revision found matching ${result}, using fallback ${this.fallback}`);\n\n return this.fallback;\n }\n\n return result;\n }\n\n async test(workspace: Workspace): Promise<boolean> {\n const rev = await this._formatRevision(workspace);\n return await workspace.isAffected(rev);\n }\n}\n","import { Workspace } from '../project';\nimport { Awaitable } from '../types';\n\n// Interface\nexport interface PipelineFilter {\n // Methods\n test(workspace: Workspace): Awaitable<boolean>;\n}\n\n// Class\nexport class Pipeline {\n // Attributes\n private _filters: PipelineFilter[] = [];\n\n // Methods\n add(filter: PipelineFilter): void {\n this._filters.push(filter);\n }\n\n private async _test(workspace: Workspace): Promise<boolean> {\n for (const filter of this._filters) {\n const res = await filter.test(workspace);\n\n if (!res) {\n return false;\n }\n }\n\n return true;\n }\n\n async *filter(workspaces: Iterable<Workspace> | AsyncIterable<Workspace>): AsyncGenerator<Workspace> {\n for await (const wks of workspaces) {\n if (await this._test(wks)) {\n yield wks;\n }\n }\n }\n}\n","import { Workspace } from '../project';\n\nimport { PipelineFilter } from './pipeline';\n\n// Filter\nexport class PrivateFilter implements PipelineFilter {\n // Constructor\n constructor(readonly value: boolean) {}\n\n // Methods\n test(workspace: Workspace): boolean {\n return (workspace.manifest.private ?? false) === this.value;\n }\n}\n","import { Workspace } from '../project';\n\nimport { PipelineFilter } from './pipeline';\n\n// Filter\nexport class ScriptsFilter implements PipelineFilter {\n // Constructor\n constructor(readonly scripts: string[]) {}\n\n // Methods\n test(workspace: Workspace): boolean {\n const scripts = Object.keys(workspace.manifest.scripts || {});\n return this.scripts.some((scr) => scripts.includes(scr));\n }\n}\n","import { Arguments, Argv, CommandModule } from 'yargs';\n\nimport { Awaitable } from '../types';\n\n// Types\nexport interface Middleware<T = unknown, U = unknown> {\n builder?: (yargs: Argv<T>) => Argv<U>;\n handler(args: Arguments<U>): Awaitable<void>;\n}\n\n// Command utils\nexport function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U> {\n return command;\n}\n\n// Middleware utils\nexport function defineMiddleware<T, U>(middleware: Middleware<T, U>): Middleware<T, U> {\n return middleware;\n}\n\nexport function applyMiddlewares<T>(yargs: Argv<T>, middlewares: Middleware[]): Argv<T> {\n let tmp: Argv<unknown> = yargs;\n\n for (const middleware of middlewares) {\n if (middleware.builder) {\n tmp = middleware.builder(tmp);\n }\n\n tmp.middleware(middleware.handler);\n }\n\n return tmp as Argv<T>;\n}\n","import os from 'node:os';\n\nimport { container, GLOBAL_CONFIG } from '../services';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const globalConfig = defineMiddleware({\n builder: (yargs) => yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n default: os.cpus().length - 1,\n description: 'Set maximum parallel job number',\n }),\n handler(args) {\n container.bind(GLOBAL_CONFIG).toConstantValue({\n verbose: args.verbose,\n jobs: args.jobs,\n });\n }\n});\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node:fs/promises\");","import { SpawnTask, SpawnTaskOptions, SpawnTaskStream, TaskContext } from '@jujulego/tasks';\nimport path from 'node:path';\nimport { Package } from 'normalize-package-data';\nimport { satisfies } from 'semver';\nimport winston from 'winston';\n\nimport { Git } from '../git';\nimport { container, Logger } from '../services';\nimport { combine, streamLines } from '../utils';\nimport { Project } from './project';\n\n// Types\nexport type WorkspaceDepsMode = 'all' | 'prod' | 'none';\n\nexport interface WorkspaceContext extends TaskContext {\n workspace: Workspace;\n script: string;\n}\n\nexport interface WorkspaceRunOptions extends Omit<SpawnTaskOptions, 'cwd'> {\n buildDeps?: WorkspaceDepsMode;\n}\n\n// Class\nexport class Workspace {\n // Attributes\n private readonly _logger: winston.Logger;\n private readonly _affectedCache = new Map<string, Promise<boolean>>();\n private readonly _tasks = new Map<string, SpawnTask<WorkspaceContext>>();\n\n // Constructor\n constructor(\n private readonly _cwd: string,\n readonly manifest: Package,\n readonly project: Project\n ) {\n const logger = container.get(Logger);\n this._logger = logger.child({ label: this.manifest.name });\n }\n\n // Methods\n private _satisfies(from: Workspace, range: string): boolean {\n if (range.startsWith('file:')) {\n return path.resolve(from.cwd, range.substring(5)) === this.cwd;\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 private async _buildDependencies(task: SpawnTask, deps: WorkspaceDepsMode = 'all') {\n // Generators\n const generators: AsyncGenerator<Workspace, void>[] = [];\n\n switch (deps) {\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();\n\n if (build) {\n task.dependsOn(build);\n }\n }\n }\n\n private async _isAffected(reference: string): Promise<boolean> {\n const isAffected = await Git.isAffected(reference, ['--', this.cwd], {\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 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 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.verbose(`Ignoring ${kind} ${ws.reference} as it does not match requirement ${range}`);\n }\n }\n }\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 private async _streamLogs(task: SpawnTask<WorkspaceContext>, stream: SpawnTaskStream, level: string) {\n try {\n for await (const line of streamLines(task, stream)) {\n this._logger.log(level, line, { label: `${this.name}#${task.context.script}` });\n }\n } catch (err) {\n if (err) {\n this._logger.warn(`Error while streaming task ${stream}`, err, { label: `${this.name}#${task.context.script}` });\n }\n }\n }\n\n async run(script: string, args: string[] = [], opts: WorkspaceRunOptions = {}): Promise<SpawnTask<WorkspaceContext>> {\n let task = this._tasks.get(script);\n\n if (!task) {\n const pm = await this.project.packageManager();\n\n task = new SpawnTask(pm, ['run', script, ...args], { workspace: this, script }, {\n ...opts,\n cwd: this.cwd,\n logger: this._logger.child({ label: `${this.name}#${script}`}),\n env: {\n FORCE_COLOR: '1',\n ...opts.env\n }\n });\n\n this._streamLogs(task, 'stdout', 'info');\n this._streamLogs(task, 'stderr', 'info');\n\n await this._buildDependencies(task, opts.buildDeps);\n\n this._tasks.set(script, task);\n }\n\n return task;\n }\n\n async build(opts?: WorkspaceRunOptions): Promise<SpawnTask | null> {\n const { scripts = {} } = this.manifest;\n\n if (!scripts.build) {\n this._logger.warn('Will not be built (no build script)');\n return null;\n }\n\n return await this.run('build', [], opts);\n }\n\n // Properties\n get name(): string {\n return this.manifest.name;\n }\n\n get version(): string {\n return this.manifest.version;\n }\n\n get reference(): string {\n return this.version ? `${this.name}@${this.version}` : this.name;\n }\n\n get cwd(): string {\n return path.resolve(this.project.root, this._cwd);\n }\n}\n","import AsyncLock from 'async-lock';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport normalize, { Package } from 'normalize-package-data';\nimport glob from 'tiny-glob';\n\nimport { container, lazyInject, Logger } from '../services';\nimport { Workspace } from './workspace';\n\n// Types\nexport type PackageManager = 'npm' | 'yarn';\nexport interface ProjectOptions {\n packageManager?: PackageManager | undefined;\n}\n\n// Class\nexport class Project {\n // Attributes\n private _mainWorkspace?: Workspace;\n private readonly _names = new Map<string, Workspace>();\n private readonly _workspaces = new Map<string, Workspace>();\n\n private _packageManager?: PackageManager;\n private _isFullyLoaded = false;\n private _lock = new AsyncLock();\n\n @lazyInject(Logger)\n private readonly _logger: Logger;\n\n // Constructor\n constructor(\n private readonly _root: string,\n opts: ProjectOptions = {}\n ) {\n if (opts.packageManager) {\n this._logger.debug(`Forced use of ${opts.packageManager} in ${path.relative(process.cwd(), this.root) || '.'}`);\n this._packageManager = opts.packageManager;\n }\n }\n\n // Statics\n static async searchProjectRoot(dir: string): Promise<string> {\n const logger = container.get(Logger);\n\n // Will process directories from dir to root\n let found = false;\n let last = dir;\n dir = path.resolve(dir);\n\n do {\n const files = await fs.readdir(dir);\n\n if (files.includes('package.json')) {\n last = dir;\n found = true;\n }\n\n if (['package-lock.json', 'yarn.lock'].some(lock => files.includes(lock))) {\n logger.debug(`Project root found at ${path.relative(process.cwd(), dir) || '.'}`);\n return dir;\n }\n\n dir = path.dirname(dir);\n } while (dir !== path.dirname(dir));\n\n if (found) {\n logger.debug(`Project root found at ${path.relative(process.cwd(), last) || '.'}`);\n } else {\n logger.debug(`Project root not found, keeping ${path.relative(process.cwd(), last) || '.'}`);\n }\n\n return last;\n }\n\n // Methods\n private async _loadManifest(dir: string): Promise<Package> {\n const file = path.resolve(this.root, dir, 'package.json');\n const log = this._logger.child({ label: path.relative(this.root, path.dirname(file)) || '.' });\n log.verbose('Loading package.json ...');\n\n const data = await fs.readFile(file, 'utf-8');\n const mnf = JSON.parse(data);\n normalize(mnf, (msg) => log.verbose(msg));\n\n return mnf;\n }\n\n private async _loadWorkspace(dir: string): Promise<Workspace> {\n return await this._lock.acquire('workspaces', 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 packageManager(): Promise<PackageManager> {\n if (!this._packageManager) {\n const files = await fs.readdir(this.root);\n\n if (files.includes('yarn.lock')) {\n this._logger.debug(`Detected yarn in ${path.relative(process.cwd(), this.root) || '.'}`);\n this._packageManager = 'yarn';\n } else if (files.includes('package-lock.json')) {\n this._logger.debug(`Detected npm in ${path.relative(process.cwd(), this.root) || '.'}`);\n this._packageManager = 'npm';\n } else {\n this._logger.debug(`No package manager recognized in ${path.relative(process.cwd(), this.root) || '.'}, defaults to npm`);\n this._packageManager = 'npm';\n }\n }\n\n return this._packageManager;\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 currentWorkspace(cwd = process.cwd()): 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.cwd)) {\n workspace = wks;\n\n if (wks.cwd !== this.root) return wks;\n }\n }\n\n return workspace;\n }\n\n async* workspaces(): AsyncGenerator<Workspace, void> {\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 { workspaces = [] } = main.manifest;\n\n for (const pattern of workspaces) {\n for (const dir of await glob(pattern, { cwd: this.root })) {\n try {\n // Check if dir is a directory exists\n const file = path.resolve(this.root, dir);\n const stat = await fs.stat(file);\n\n if (stat.isDirectory()) {\n yield await this._loadWorkspace(dir);\n }\n\n } catch (error) {\n if (error.code === 'ENOENT') {\n continue;\n }\n\n throw error;\n }\n }\n }\n\n this._isFullyLoaded = true;\n }\n }\n\n async workspace(name?: string): Promise<Workspace | null> {\n // With current directory\n if (!name) {\n const dir = path.relative(this.root, process.cwd());\n return this._loadWorkspace(dir);\n }\n\n // Try name index\n const wks = this._names.get(name);\n if (wks) return wks;\n\n if (this._isFullyLoaded) {\n return null;\n }\n\n // Load workspaces\n for await (const ws of this.workspaces()) {\n if (ws.name === name) {\n return ws;\n }\n }\n\n this._isFullyLoaded = true;\n return null;\n }\n\n // Properties\n get root(): string {\n return path.resolve(this._root);\n }\n}\n","import { container, CURRENT, SpinnerService } from '../services';\nimport { Project } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadProject = defineMiddleware({\n builder: (yargs) => yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'] as const,\n type: 'string',\n description: 'Force package manager'\n }),\n async handler(args) {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(Project)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }))\n .whenTargetNamed(CURRENT);\n } finally {\n spinner.stop();\n }\n }\n});\n","import yargs from 'yargs';\n\nimport { container, CURRENT, SpinnerService } from '../services';\nimport { Project, Workspace } from '../project';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const loadWorkspace = defineMiddleware({\n builder: (yargs) => yargs\n .option('workspace', {\n alias: 'w',\n type: 'string',\n desc: 'Workspace to use'\n }),\n async handler(args): Promise<void> {\n const spinner = container.get(SpinnerService);\n const project = container.getNamed(Project, CURRENT);\n\n try {\n spinner.spin(`Loading \"${args.workspace || '.'}\" workspace ...`);\n const workspace = await project.workspace(args.workspace);\n\n if (!workspace) {\n spinner.failed(`Workspace \"${args.workspace || '.'}\" not found`);\n yargs.exit(1, new Error('Workspace not found'));\n } else {\n container.bind(Workspace)\n .toConstantValue(workspace)\n .whenTargetNamed(CURRENT);\n }\n } finally {\n spinner.stop();\n }\n }\n});\n","import { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { container, SpinnerService, SpinnerState } from '../services';\n\n// Components\nexport const GlobalSpinner: FC = () => {\n // State\n const [state, setState] = useState<SpinnerState>({ status: 'stop', label: '' });\n\n // Effect\n useLayoutEffect(() => {\n const spinner = container.get(SpinnerService);\n setState(spinner.state);\n\n return spinner.subscribe('update', setState);\n }, []);\n\n // Render\n switch (state.status) {\n case 'spin':\n return (\n <Text>\n <Spinner />{' ' + state.label}\n </Text>\n );\n\n case 'success':\n return (\n <Text color=\"green\">\n {symbols.success} {state.label}\n </Text>\n );\n\n case 'failed':\n return (\n <Text color=\"red\">\n {symbols.error} {state.label}\n </Text>\n );\n\n case 'stop':\n default:\n return null;\n }\n};\n","import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\nimport winston from 'winston';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n\n // Remove Console transport\n for (const transport of logger.transports) {\n if (transport instanceof winston.transports.Console) {\n logger.remove(transport);\n }\n }\n\n // Add custom transport\n const transport = new class extends Transport {\n // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\n\n next();\n }\n };\n\n logger.add(transport);\n\n return () => {\n logger.remove(transport);\n logger.add(new winston.transports.Console({\n format: consoleFormat\n }));\n };\n }, [write]);\n\n return null;\n};\n","import { FC } from 'react';\n\nimport { GlobalSpinner } from './global-spinner';\nimport { StaticLogs } from './static-logs';\n\n// Component\nexport const Layout: FC = ({ children }) => (\n <>\n <StaticLogs />\n <GlobalSpinner />\n { children }\n </>\n);\n","import { Box, Text } from 'ink';\n\nimport { capitalize } from '../utils';\n\n// Types\nexport interface ListProps<T extends Record<string, unknown>> {\n items: T[];\n headers?: boolean;\n}\n\n// Component\nexport function List<T extends Record<string, unknown>>({ items, headers }: ListProps<T>) {\n if (items.length === 0) {\n return null;\n }\n\n return (\n <Box>\n { Object.keys(items[0]).map((key) => (\n <Box key={key} flexDirection=\"column\" marginRight={2}>\n { headers && (\n <Text bold>{ capitalize(key) }</Text>\n ) }\n { items.map((item, idx) => (\n <Text key={idx}>{ item[key] || ' ' }</Text>\n )) }\n </Box>\n )) }\n </Box>\n );\n}\n","// Utils\nexport function capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n}\n","import { Task, TaskContext } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport { FC } from 'react';\n\nimport { WorkspaceContext } from '../project';\n\n// Types\nexport interface TaskNameProps {\n task: Task;\n}\n\n// Utils\nfunction isWorkspaceCtx(ctx: Readonly<TaskContext>): ctx is Readonly<WorkspaceContext> {\n return 'workspace' in ctx;\n}\n\n// Components\nexport const TaskName: FC<TaskNameProps> = ({ task }) => {\n if (isWorkspaceCtx(task.context)) {\n return (\n <Text>\n Running <Text bold>{ task.context.script }</Text> in { task.context.workspace.name }\n </Text>\n );\n } else {\n return <Text>{ task.name }</Text>;\n }\n};\n","import { Task } from '@jujulego/tasks';\nimport { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport symbols from 'log-symbols';\nimport ms from 'pretty-ms';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { TaskName } from './task-name';\n\n// Types\nexport interface TaskSpinnerProps {\n task: Task;\n}\n\n// Components\nexport const TaskSpinner: FC<TaskSpinnerProps> = ({ task }) => {\n // State\n const [status, setStatus] = useState(task.status);\n const [time, setTime] = useState(0);\n\n // Effects\n useLayoutEffect(() => {\n return task.subscribe('status', (event) => {\n setStatus(event.status);\n });\n }, [task]);\n\n useLayoutEffect(() => {\n return task.subscribe('completed', ({ duration }) => {\n setTime(duration);\n });\n }, [task]);\n\n // Render\n switch (status) {\n case 'blocked':\n case 'ready':\n return (\n <Text color=\"grey\">\n <Spinner type=\"line2\" />{' '}<TaskName task={task} />\n </Text>\n );\n\n case 'running':\n return (\n <Text>\n <Spinner />{' '}<TaskName task={task} />\n </Text>\n );\n\n case 'done':\n return (\n <Text>\n <Text color=\"green\">{ symbols.success }{' '}<TaskName task={task} /></Text>\n <Text color=\"magenta\">{' '}(took { ms(time) })</Text>\n </Text>\n );\n\n case 'failed':\n return (\n <Text>\n <Text color=\"red\">{ symbols.error }{' '}<TaskName task={task} /></Text>\n <Text color=\"magenta\">{' '}(took { ms(time) })</Text>\n </Text>\n );\n }\n};\n","import { GroupTask } from '@jujulego/tasks';\nimport { Box } from 'ink';\nimport { FC, Fragment, useLayoutEffect, useState } from 'react';\n\nimport { TaskSpinner } from './task-spinner';\n\n// Types\nexport interface GroupTaskSpinnerProps {\n group: GroupTask;\n}\n\n// Components\nexport const GroupTaskSpinner: FC<GroupTaskSpinnerProps> = ({ group }) => {\n const [tasks, setTasks] = useState([...group.tasks]);\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return group.subscribe('task.added', () => {\n if (!dirty) {\n dirty = true;\n\n queueMicrotask(() => {\n setTasks([...group.tasks]);\n dirty = false;\n });\n }\n });\n }, [group]);\n\n return (\n <>\n <TaskSpinner task={group} />\n <Box flexDirection=\"column\" marginLeft={2}>\n { tasks.map((task) => (\n <Fragment key={task.id}>\n { (task instanceof GroupTask) ? (\n <GroupTaskSpinner group={task} />\n ) : (\n <TaskSpinner task={task} />\n ) }\n </Fragment>\n )) }\n </Box>\n </>\n );\n};\n","import { GroupTask, TaskManager } from '@jujulego/tasks';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { TaskSpinner } from './task-spinner';\nimport { GroupTaskSpinner } from './group-task-spinner';\n\n// Types\nexport interface TasksSpinnerProps {\n manager: TaskManager;\n}\n\n// Components\nexport const TaskManagerSpinner: FC<TasksSpinnerProps> = ({ manager }) => {\n const [tasks, setTasks] = useState(manager.tasks.filter((tsk) => !tsk.context.groupTask));\n\n useLayoutEffect(() => {\n let dirty = false;\n\n return manager.subscribe('added', () => {\n if (!dirty) {\n dirty = true;\n\n queueMicrotask(() => {\n setTasks(manager.tasks.filter((tsk) => !tsk.context.groupTask));\n dirty = false;\n });\n }\n });\n }, [manager]);\n\n return (\n <>\n { tasks.map((task) =>\n (task instanceof GroupTask) ? (\n <GroupTaskSpinner key={task.id} group={task} />\n ) : (\n <TaskSpinner key={task.id} task={task} />\n )\n ) }\n </>\n );\n};\n","import { Newline, Text, TextProps } from 'ink';\nimport { FC, ReactElement, useEffect, useState } from 'react';\n\nimport { Workspace } from '../project';\n\n// Types\nexport interface WorkspaceTreeProps {\n workspace: Workspace;\n dev?: boolean;\n level?: ReactElement;\n}\n\n// Utils\nconst style = (dev: boolean): TextProps => ({ color: dev ? 'blue' : '' });\n\n// Component\nexport const WorkspaceTree: FC<WorkspaceTreeProps> = (props) => {\n const { workspace: wks, dev = false, level = '' } = props;\n\n // State\n const [deps, setDeps] = useState<[Workspace, boolean | null][]>([]);\n\n // Effects\n useEffect(() => void (async () => {\n const deps: [Workspace, boolean | null][] = [];\n\n for await (const dep of wks.dependencies()) {\n deps.push([dep, null]);\n }\n\n for await (const dep of wks.devDependencies()) {\n deps.push([dep, true]);\n }\n\n setDeps(deps);\n })(), [wks]);\n\n // Render\n return (\n <Text>\n <Text {...style(dev)}>{ wks.name }</Text>\n { wks.version && <Text color=\"grey\">@{ wks.version }</Text> }\n { (deps.length > 0) && <Newline /> }\n\n { deps.map(([dep, isDev], idx) => (\n <Text key={dep.name}>\n { level }<Text {...style(dev)}>{ idx === deps.length - 1 ? '└' : '├'}─{' '}</Text>\n <WorkspaceTree\n workspace={dep}\n dev={isDev ?? dev}\n level={<>{ level }<Text {...style(dev)}>{ idx === deps.length - 1 ? ' ' : '│' }{' '}</Text></>}\n />\n { (idx < deps.length - 1) && <Newline /> }\n </Text>\n )) }\n </Text>\n );\n};\n","import { render } from 'ink';\n\nimport { container, INK_APP } from '../services';\nimport { Layout } from '../ui';\nimport { defineMiddleware } from '../utils';\n\n// Middleware\nexport const setupInk = defineMiddleware({\n handler() {\n container.bind(INK_APP)\n .toConstantValue(render(<Layout/>, {\n stdout: process.stdout.isTTY ? process.stdout : process.stderr,\n }));\n }\n});\n","import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskManager, TaskSet } from '@jujulego/tasks';\nimport ink from 'ink';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, WorkspaceDepsMode } from '../project';\nimport { container, CURRENT, INK_APP, SpinnerService } from '../services';\nimport { Layout, TaskManagerSpinner } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'each <script>',\n describe: 'Run script on many workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Run options\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n }),\n async handler(args) {\n const app = container.get<ink.Instance>(INK_APP);\n const project = container.getNamed(Project, CURRENT);\n const manager = container.get(TaskManager);\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading workspaces ...');\n\n // Setup pipeline\n const pipeline = new Pipeline();\n pipeline.add(new ScriptsFilter([args.script]));\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'each') {\n rest.splice(0, 1);\n }\n\n // Create script tasks\n const tasks = new TaskSet(manager);\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n tasks.add(await wks.run(args.script, rest, {\n buildDeps: args.depsMode,\n }));\n }\n\n if (tasks.tasks.length === 0) {\n spinner.failed('No workspace found !');\n return process.exit(1);\n }\n\n spinner.stop();\n\n // Render\n app.rerender(\n <Layout>\n <TaskManagerSpinner manager={manager} />\n </Layout>\n );\n\n // Start and wait for result\n tasks.start();\n\n const result = await waitForEvent(tasks, 'finished');\n\n if (result.failed > 0) {\n return process.exit(1);\n }\n } finally {\n spinner.stop();\n }\n }\n});\n","import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskManager } from '@jujulego/tasks';\nimport ink from 'ink';\nimport yargs from 'yargs';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace, WorkspaceDepsMode } from '../project';\nimport { container, CURRENT, INK_APP, TaskExprService } from '../services';\nimport { Layout, TaskManagerSpinner } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'group <script..>',\n describe: 'Run many scripts inside a workspace',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ])\n .positional('script', {\n demandOption: true,\n coerce(expr: string[]) {\n const parser = container.get(TaskExprService);\n return parser.parse(expr.join(' ')).roots[0];\n }\n })\n .option('deps-mode', {\n choices: ['all', 'prod', 'none'] as const,\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n }),\n async handler(args) {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n const manager = container.get(TaskManager);\n const parser = container.get(TaskExprService);\n\n // Run script in workspace\n const group = await parser.buildTask(args.script, workspace, {\n buildDeps: args.depsMode,\n });\n\n manager.add(group);\n\n // Render\n app.rerender(\n <Layout>\n <TaskManagerSpinner manager={manager} />\n </Layout>\n );\n\n // Wait for result\n const result = await waitForEvent(group, 'completed');\n\n if (result.status === 'failed') {\n return yargs.exit(1, new Error('Task failed !'));\n }\n }\n});\n","import chalk from 'chalk';\nimport path from 'node:path';\nimport ink from 'ink';\nimport slugify from 'slugify';\n\nimport { AffectedFilter, Pipeline, PrivateFilter, ScriptsFilter } from '../filters';\nimport { loadProject, setupInk } from '../middlewares';\nimport { Project, Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, List } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ])\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\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\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'] as const,\n default: [],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.getNamed(Project, CURRENT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs as Attribute[];\n\n if (attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n process.stdout.write(JSON.stringify(data));\n }\n } else {\n const app = container.get<ink.Instance>(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) || '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n","import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskManager } from '@jujulego/tasks';\nimport ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace, WorkspaceDepsMode } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, TaskManagerSpinner } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'run <script>',\n describe: 'Run script inside workspace',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ])\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n }),\n async handler(args) {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n const manager = container.get(TaskManager);\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'run') {\n rest.splice(0, 1);\n }\n\n // Run script in workspace\n const task = await workspace.run(args.script, rest, {\n buildDeps: args.depsMode,\n });\n manager.add(task);\n\n // Render\n app.rerender(\n <Layout>\n <TaskManagerSpinner manager={manager} />\n </Layout>\n );\n\n // Wait for result\n const result = await waitForEvent(task, 'completed');\n\n if (result.status === 'failed') {\n return process.exit(1);\n }\n }\n});\n","import ink from 'ink';\n\nimport { loadProject, loadWorkspace, setupInk } from '../middlewares';\nimport { Workspace } from '../project';\nimport { container, CURRENT, INK_APP } from '../services';\nimport { Layout, WorkspaceTree } from '../ui';\nimport { applyMiddlewares, defineCommand } from '../utils';\n\n// Command\nexport default defineCommand({\n command: 'tree',\n describe: 'Print workspace dependency tree',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]),\n handler: () => {\n const app = container.get<ink.Instance>(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n\n app.rerender(\n <Layout>\n <WorkspaceTree workspace={workspace} />\n </Layout>\n );\n }\n});\n","import each from './each';\nimport group from './group';\nimport list from './list';\nimport run from './run';\nimport tree from './tree';\n\n// Commands\nexport const commands = [each, group, list, run, tree];\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport pkg from '../package.json';\nimport { commands } from './commands';\nimport { globalConfig } from './middlewares';\nimport { applyMiddlewares } from './utils';\n\n// Bootstrap\n(async () => {\n // Setup yargs\n const parser = yargs(hideBin(process.argv))\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\n // Middlewares\n applyMiddlewares(parser, [globalConfig]);\n\n // Parse !\n await parser\n .command(commands as any)\n .demandCommand()\n .recommendCommands()\n .strict()\n .parse();\n})();\n","module.exports = require(\"assert\");","module.exports = require(\"buffer\");","module.exports = require(\"child_process\");","module.exports = require(\"events\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"module\");","module.exports = require(\"node:child_process\");","module.exports = require(\"node:crypto\");","module.exports = require(\"node:os\");","module.exports = require(\"node:path\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"string_decoder\");","module.exports = require(\"tty\");","module.exports = require(\"url\");","module.exports = require(\"util\");","module.exports = require(\"zlib\");"],"names":["INK_APP","Symbol","for","GLOBAL_CONFIG","CURRENT","container","Container","skipBaseClassChecks","lazyInject","getDecorators","VERBOSITY_LEVEL","consoleFormat","winston","message","colors","debug","verbose","info","error","label","lines","split","spaces","formatted","repeat","length","chalk","i","Logger","injectable","toDynamicValue","context","config","get","level","Math","min","format","transports","inSingletonScope","TaskExprService","static","node","_lexer","moo","task","lparen","whitespace","string","match","push","value","x","slice","replace","operator","rparen","pop","_nextNode","lexer","token","type","isTaskNode","tasks","Error","formatError","child","script","res","this","parse","expr","reset","tree","roots","async","workspace","opts","run","group","ParallelGroup","logger","SequenceGroup","add","buildTask","toSelf","SpinnerService","EventSource","_status","_label","spin","emit","state","success","failed","stop","status","combine","generators","gen","streamLines","stream","ctrl","AbortController","reason","subscribe","abort","current","chunk","streamEvents","signal","data","toString","line","err","TaskManager","jobs","Git","cmd","args","options","SpawnTask","command","manager","reference","Promise","resolve","reject","diff","exitCode","name","branch","result","tag","AffectedFilter","constructor","fallback","sort","wks","_logger","sortArgs","includes","branches","listBranches","cwd","tags","listTags","warn","rev","_formatRevision","isAffected","Pipeline","_filters","filter","test","workspaces","_test","PrivateFilter","manifest","private","ScriptsFilter","scripts","Object","keys","some","scr","applyMiddlewares","yargs","middlewares","tmp","middleware","builder","handler","globalConfig","option","alias","description","default","os","toConstantValue","require","Workspace","_cwd","project","_affectedCache","Map","_tasks","_satisfies","from","range","startsWith","path","substring","version","satisfies","deps","unshift","devDependencies","dependencies","dep","build","dependsOn","root","proms","all","r","_isAffected","set","kind","entries","ws","_loadDependencies","log","pm","packageManager","env","FORCE_COLOR","_streamLogs","_buildDependencies","buildDeps","Project","_root","_names","_workspaces","_isFullyLoaded","_lock","AsyncLock","process","_packageManager","dir","found","last","files","fs","lock","file","mnf","JSON","normalize","msg","acquire","_loadManifest","_mainWorkspace","main","mainWorkspace","values","pattern","glob","isDirectory","_loadWorkspace","code","loadProject","choices","spinner","searchProjectRoot","whenTargetNamed","loadWorkspace","desc","GlobalSpinner","setState","useState","useLayoutEffect","Text","Spinner","color","symbols","MESSAGE","StaticLogs","write","useStderr","transport","remove","Transport","super","next","setTimeout","Layout","children","List","items","headers","Box","map","key","flexDirection","marginRight","bold","txt","charAt","toUpperCase","toLowerCase","item","idx","TaskName","TaskSpinner","setStatus","time","setTime","event","duration","ms","GroupTaskSpinner","setTasks","dirty","queueMicrotask","marginLeft","Fragment","GroupTask","id","TaskManagerSpinner","tsk","groupTask","style","dev","WorkspaceTree","props","setDeps","useEffect","Newline","isDev","setupInk","render","stdout","isTTY","stderr","describe","positional","demandOption","choice","coerce","app","pipeline","undefined","affected","affectedRevFallback","affectedRevSort","rest","_","arg","splice","TaskSet","depsMode","exit","rerender","start","waitForEvent","join","parser","LONG_ATTRIBUTES","JSON_ATTRIBUTES","DEFAULT_ATTRIBUTES","EXTRACTORS","json","slug","slugify","withScript","attrs","long","attr","buildExtractor","console","stringify","d","commands","each","list","hideBin","argv","scriptName","completion","help","pkg","wrap","columns","demandCommand","recommendCommands","strict","module","exports"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"main.js","mappings":"yMAWA,SAASA,IACL,GAAuB,oBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAUC,KAAM,OAAO,EACnC,GAAqB,mBAAVC,MAAsB,OAAO,EACxC,IAEI,OADAC,KAAKC,UAAUC,SAASC,KAAKP,QAAQC,UAAUG,KAAM,IAAI,WAAY,MAC9D,CAGX,CAFE,MAAOI,GACL,OAAO,CACX,CACJ,CACA,SAASC,EAAWC,EAAQC,EAAMC,GAe9B,OAbIH,EADAV,IACaC,QAAQC,UAER,SAAoBS,EAAQC,EAAMC,GAC3C,IAAIC,EAAI,CACJ,MAEJA,EAAEC,KAAKC,MAAMF,EAAGF,GAChB,IACIK,EAAW,IADGC,SAASC,KAAKH,MAAML,EAAQG,IAG9C,OADID,GAAOO,EAAgBH,EAAUJ,EAAMP,WACpCW,CACX,EAEGP,EAAWM,MAAM,KAAMK,UAClC,CACA,SAASC,EAAkBC,EAAQC,GAC/B,IAAI,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAI,CACjC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,EAClD,CACJ,CAMA,SAASO,EAAgBC,GAIrB,OAHAD,EAAkBH,OAAOK,eAAiBL,OAAOM,eAAiB,SAAyBF,GACvF,OAAOA,EAAEG,WAAaP,OAAOM,eAAeF,EAChD,EACOD,EAAgBC,EAC3B,CAiBA,SAASI,EAA2BC,EAAMhC,GACtC,OAAIA,GAA2B,WAAlBiC,EAAQjC,IAAsC,mBAATA,EA5EtD,SAAgCgC,GAC5B,QAAa,IAATA,EACA,MAAM,IAAIE,eAAe,6DAE7B,OAAOF,CACX,CA0EWG,CAAuBH,GAFnBhC,CAGf,CACA,SAASY,EAAgBe,EAAGS,GAKxB,OAJAxB,EAAkBW,OAAOK,gBAAkB,SAAyBD,EAAGS,GAEnE,OADAT,EAAEG,UAAYM,EACPT,CACX,EACOf,EAAgBe,EAAGS,EAC9B,CACA,IAAIH,EAAU,SAASI,GAEnB,OAAOA,GAAyB,oBAAXC,QAA0BD,EAAIE,cAAgBD,OAAS,gBAAkBD,CAClG,EACA,SAASG,EAAiBnC,GACtB,IAAIoC,EAAwB,mBAARC,IAAqB,IAAIA,SAAQC,EAuBrD,OAtBAH,EAAmB,SAA0BnC,GACzC,GAAc,OAAVA,IAvBeuC,EAuBsBvC,GAtBmB,IAAzDK,SAASX,SAASC,KAAK4C,GAAIC,QAAQ,kBAsBW,OAAOxC,EAvBhE,IAA2BuC,EAwBnB,GAAqB,mBAAVvC,EACP,MAAM,IAAIyC,UAAU,sDAExB,QAAsB,IAAXL,EAAwB,CAC/B,GAAIA,EAAOM,IAAI1C,GAAQ,OAAOoC,EAAOO,IAAI3C,GACzCoC,EAAOQ,IAAI5C,EAAO6C,EACtB,CACA,SAASA,IACL,OAAOhD,EAAWG,EAAOQ,UAAWa,EAAgByB,MAAMZ,YAC9D,CASA,OARAW,EAAQpD,UAAYyB,OAAO6B,OAAO/C,EAAMP,UAAW,CAC/CyC,YAAa,CACTc,MAAOH,EACP9B,YAAY,EACZE,UAAU,EACVD,cAAc,KAGfT,EAAgBsC,EAAS7C,EACpC,EACOmC,EAAiBnC,EAC5B,CA4BO,IAAIiD,EAAwB,SAASC,IAtF5C,SAAmBC,EAAUC,GACzB,GAA0B,mBAAfA,GAA4C,OAAfA,EACpC,MAAM,IAAIX,UAAU,sDAExBU,EAAS1D,UAAYyB,OAAO6B,OAAOK,GAAcA,EAAW3D,UAAW,CACnEyC,YAAa,CACTc,MAAOG,EACPlC,UAAU,EACVD,cAAc,KAGlBoC,GAAY7C,EAAgB4C,EAAUC,EAC9C,CA4EIC,CAAUJ,EAASC,GACnB,IAnBkBI,EACdC,EAkBAC,GAnBcF,EAmBQL,EAlBtBM,EAZR,WACI,GAAuB,oBAAZnE,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAUC,KAAM,OAAO,EACnC,GAAqB,mBAAVC,MAAsB,OAAO,EACxC,IAEI,OADAkE,QAAQhE,UAAUiE,QAAQ/D,KAAKP,QAAQC,UAAUoE,QAAS,IAAI,WAAY,MACnE,CAGX,CAFE,MAAO7D,GACL,OAAO,CACX,CACJ,CAEoC+D,GACzB,WACH,IAAsCC,EAAlCC,EAAQxC,EAAgBiC,GAC5B,GAAIC,EAA2B,CAC3B,IAAIO,EAAYzC,EAAgByB,MAAMZ,YACtC0B,EAASxE,QAAQC,UAAUwE,EAAOrD,UAAWsD,EACjD,MACIF,EAASC,EAAM1D,MAAM2C,KAAMtC,WAE/B,OAAOkB,EAA2BoB,KAAMc,EAC5C,GASA,SAASX,EAAQc,GAEb,IAAIC,EASJ,OA1JR,SAAyB5D,EAAU6D,GAC/B,KAAM7D,aAAoB6D,GACtB,MAAM,IAAIxB,UAAU,oCAE5B,CA4IQyB,CAAgBpB,KAAMG,IAEtBe,EAAQR,EAAO7D,KAAKmD,OACdiB,QAAUA,EAChBC,EAAMG,OAAS,IAAIC,IACnBJ,EAAMK,QAAU,UAChBL,EAAMM,SAAW,CACbC,QAAS,EACTC,OAAQ,GAELR,CACX,CACA,IAlHkBC,EAAaQ,EAkH3BC,EAASzB,EAAQxD,UA0FrB,OAxFAiF,EAAOC,gBAAkB,SAAyBC,EAAML,GACpDzB,KAAK+B,KAAK,YAAaD,GAEnBL,IACEzB,KAAKwB,SAASC,UAEdzB,KAAKwB,SAASE,OAEhB1B,KAAKwB,SAASC,QAAUzB,KAAKwB,SAASE,SAAW1B,KAAKqB,OAAOW,OAC7DhC,KAAKuB,QAAU,WACfvB,KAAK+B,KAAK,WAAY/B,KAAKwB,UAEnC,EACAI,EAAOK,IAAM,SAAaH,GACtB,IAAIZ,EAAQlB,KAEZ,IADA,OAAa8B,GACQ,YAAjB9B,KAAKuB,QACL,MAAMW,MAAM,0BAA0BC,OAAOnC,KAAKuB,QAAS,cAE3DvB,KAAKqB,OAAOzB,IAAIkC,KAIpBA,EAAKM,UAAU,UAAU,SAASC,GAC9B,IAAIC,EAASD,EAAMC,OACJ,YAAXA,EACApB,EAAMa,KAAK,UAAWD,GACJ,SAAXQ,GAAgC,WAAXA,GAC5BpB,EAAMW,gBAAgBC,EAAiB,SAAXQ,EAEpC,IAEAtC,KAAKqB,OAAOY,IAAIH,GACpB,EACAF,EAAOW,MAAQ,WACX,GAAqB,YAAjBvC,KAAKuB,QACL,MAAMW,MAAM,kBAAkBC,OAAOnC,KAAKuB,QAAS,cAEvD,GAAyB,IAArBvB,KAAKqB,OAAOW,KACZhC,KAAKuB,QAAU,WACfvB,KAAK+B,KAAK,WAAY/B,KAAKwB,cACxB,CAEHxB,KAAKuB,QAAU,UACf,IAAIiB,GAA4B,EAAMC,GAAoB,EAAOC,OAAiBlD,EAClF,IAEI,IAAI,IAAgDmD,EAA5CC,EAAY5C,KAAKqB,OAAOlC,OAAO0D,cAAsBL,GAA6BG,EAAQC,EAAUE,QAAQC,MAAOP,GAA4B,EAAK,CACxJ,IAAIQ,EAAIL,EAAMzC,MACdF,KAAKiB,QAAQgB,IAAIe,EACrB,CAcJ,CAbE,MAAOC,GACLR,GAAoB,EACpBC,EAAiBO,CACrB,CAAE,QACE,IACST,GAAiD,MAApBI,EAAUM,QACxCN,EAAUM,QAMlB,CAJE,QACE,GAAIT,EACA,MAAMC,CAEd,CACJ,CACJ,CACJ,EAtLkBvB,EAuLLhB,GAvLkBwB,EAuLT,CAClB,CACIrD,IAAK,SACLuB,IACA,WACI,OAAOG,KAAKuB,OAChB,GAEJ,CACIjD,IAAK,QACLuB,IAAK,WACD,OAAOsD,MAAMC,KAAKpD,KAAKqB,OAAOgC,SAClC,GAEJ,CACI/E,IAAK,UACLuB,IAAK,WACD,OAAOG,KAAKwB,QAChB,MAxMQ7D,EAAkBwD,EAAYxE,UAAWgF,GA2MlDxB,CACX,CA5GmC,CA4GjCd,EAAiB,M,uHC3OnB,SAAeiE,EAAAA,EAAAA,IAAc,CAC3BC,QAAS,gBACTC,SAAU,gCACVC,QAASC,MAAOC,UACPC,EAAAA,EAAAA,IAAiBD,EAAO,CAC7BE,EAAAA,EACAC,EAAAA,KAGDC,WAAW,SAAU,CAAEC,KAAM,SAAUC,cAAc,IACrDC,OAAO,YAAa,CACnBC,OAAQ,CAAC,MAAO,OAAQ,QACxBC,QAAS,MACTC,KAAM,qHAOPH,OAAO,UAAW,CACjBF,KAAM,UACNM,MAAO,WACPD,KAAM,kCAIPH,OAAO,WAAY,CAClBK,MAAO,IACPP,KAAM,SACNQ,OAASC,GAAwB,KAARA,EAAa,SAAWA,EACjDH,MAAO,YACPD,KAAM,yJAGPH,OAAO,oBAAqB,CAC3BF,KAAM,SACNM,MAAO,YACPD,KAAM,iDAEPH,OAAO,wBAAyB,CAC/BF,KAAM,SACNI,QAAS,SACTE,MAAO,YACPD,KAAM,8EAEVX,cAAczG,GACZ,MAAMyH,EAAMC,EAAAA,GAAAA,IAAcC,EAAAA,IACpBC,EAAUF,EAAAA,GAAAA,SAAmBG,EAAAA,EAASC,EAAAA,IACtC9D,EAAU0D,EAAAA,GAAAA,IAAcK,EAAAA,GACxBC,EAAUN,EAAAA,GAAAA,IAAcO,EAAAA,GAE9B,IACED,EAAQE,KAAK,0BAGb,MAAMC,EAAW,IAAIC,EAAAA,EACrBD,EAASnD,IAAI,IAAIqD,EAAAA,EAAc,CAACrI,EAAKsI,eAEhB/F,IAAjBvC,EAAKuI,SACPJ,EAASnD,IAAI,IAAIwD,EAAAA,EAAcxI,EAAKuI,eAGhBhG,IAAlBvC,EAAKyI,UACPN,EAASnD,IAAI,IAAI0D,EAAAA,EACf1I,EAAKyI,SACLzI,EAAK2I,oBACL3I,EAAK4I,kBAKT,MAAMC,EAAO7I,EAAK8I,EAAEC,KAAIC,GAAOA,EAAIrJ,aAEnB,SAAZkJ,EAAK,IACPA,EAAKI,OAAO,EAAG,GAIjB,MAAMC,EAAQ,IAAIhG,EAAQc,GAE1B,UAAW,MAAMmF,KAAOhB,EAASiB,OAAOxB,EAAQyB,cAC9CH,EAAMlE,UAAUmE,EAAIG,IAAItJ,EAAKsI,OAAQO,EAAM,CACzCU,UAAWvJ,EAAKwJ,YAIpB,GAA2B,IAAvBN,EAAMA,MAAMpI,OAEd,OADAkH,EAAQvD,OAAO,wBACRgF,QAAQC,KAAK,GAiBtB,GAdA1B,EAAQ2B,OAGRlC,EAAImC,UACF,SAACC,EAAAA,EAAMA,C,UACL,SAACC,EAAAA,EAAkBA,CAAC9F,QAASA,OAKjCkF,EAAM5D,eAEeyE,EAAAA,EAAAA,IAAab,EAAO,aAE9BzE,OAAS,EAClB,OAAOgF,QAAQC,KAAK,EAIxB,CAFE,QACA1B,EAAQ2B,MACV,CACF,I,kCCnHF,SAAetD,EAAAA,EAAAA,IAAc,CAC3BC,QAAS,mBACTC,SAAU,sCACVC,QAASC,MAAOC,UACPC,EAAAA,EAAAA,IAAiBD,EAAO,CAC7BE,EAAAA,EACAC,EAAAA,EACAmD,EAAAA,KAEClD,WAAW,SAAU,CACpBE,cAAc,EACdO,OAAO0C,GACUvC,EAAAA,GAAAA,IAAcwC,EAAAA,GACfC,MAAMF,EAAKG,KAAK,MAAMC,MAAM,KAG7CpD,OAAO,YAAa,CACnBqD,QAAS,CAAC,MAAO,OAAQ,QACzBnD,QAAS,MACTC,KAAM,qHAKZX,cAAczG,GACZ,MAAMyH,EAAMC,EAAAA,GAAAA,IAAcC,EAAAA,IACpB4C,EAAY7C,EAAAA,GAAAA,SAAmB8C,EAAAA,EAAW1C,EAAAA,IAC1C9D,EAAU0D,EAAAA,GAAAA,IAAcK,EAAAA,GACxB0C,EAAS/C,EAAAA,GAAAA,IAAcwC,EAAAA,GAGvB7C,QAAcoD,EAAOC,UAAU1K,EAAKsI,OAAQiC,EAAW,CAC3DhB,UAAWvJ,EAAKwJ,WAelB,GAZAxF,EAAQgB,IAAIqC,GAGZI,EAAImC,UACF,SAACC,EAAAA,EAAMA,C,UACL,SAACC,EAAAA,EAAkBA,CAAC9F,QAASA,OAOX,kBAFD+F,EAAAA,EAAAA,IAAa1C,EAAO,cAE9BhC,OACT,OAAOqB,EAAAA,EAAAA,KAAW,EAAG,IAAIzB,MAAM,iBAEnC,I,sECzCF,MAAM0F,EAA+B,CAAC,OAAQ,UAAW,QACnDC,EAA+B,CAAC,OAAQ,UAAW,OAAQ,QAC3DC,EAAkC,CAAC,QAEnCC,EAA+D,CACnEC,KAAM5B,GAAOA,EAAI4B,KACjBC,QAAS,CAAC7B,EAAK8B,IAAS9B,EAAI+B,SAASF,UAAYC,OAAO1I,EAAY4I,IAAAA,KAAW,UAC/EC,KAAMjC,GAAOA,EAAIkC,IACjBC,KAAMnC,GAAOoC,IAAQpC,EAAI4B,OAiB3B,GAAe1E,EAAAA,EAAAA,IAAc,CAC3BC,QAAS,CAAC,OAAQ,MAClBC,SAAU,kBACVC,QAASC,MAAOC,UACPC,EAAAA,EAAAA,IAAiBD,EAAO,CAC7BE,EAAAA,EACAC,EAAAA,KAGDI,OAAO,UAAW,CACjBF,KAAM,UACNM,MAAO,WACPD,KAAM,kCAEPH,OAAO,cAAe,CACrBF,KAAM,QACNyE,QAAQ,EACRnE,MAAO,WACPD,KAAM,kDAIPH,OAAO,WAAY,CAClBK,MAAO,IACPP,KAAM,SACNQ,OAASC,GAAwB,KAARA,EAAa,SAAWA,EACjDH,MAAO,YACPD,KAAM,yJAGPH,OAAO,oBAAqB,CAC3BF,KAAM,SACNM,MAAO,YACPD,KAAM,iDAEPH,OAAO,wBAAyB,CAC/BF,KAAM,SACNI,QAAS,SACTE,MAAO,YACPD,KAAM,8EAEPH,OAAO,QAAS,CACfF,KAAM,QACNuD,QAAS,CAAC,OAAQ,UAAW,OAAQ,QACrCnD,QAAS,GACTE,MAAO,UACPD,KAAM,8BAEPH,OAAO,UAAW,CACjBF,KAAM,UACNM,MAAO,UACPD,KAAM,2BAEPH,OAAO,OAAQ,CACdK,MAAO,IACPP,KAAM,UACNM,MAAO,UACPD,KAAM,oDAEPH,OAAO,OAAQ,CACdF,KAAM,UACNM,MAAO,UACPD,KAAM,gCAEVX,cAAczG,GAEZ,MAAMmI,EAAW,IAAIC,EAAAA,OAEA7F,IAAjBvC,EAAKuI,SACPJ,EAASnD,IAAI,IAAIwD,EAAAA,EAAcxI,EAAKuI,UAGlCvI,EAAKyL,YACPtD,EAASnD,IAAI,IAAIqD,EAAAA,EAAcrI,EAAKyL,kBAGhBlJ,IAAlBvC,EAAKyI,UACPN,EAASnD,IAAI,IAAI0D,EAAAA,EACf1I,EAAKyI,SACLzI,EAAK2I,oBACL3I,EAAK4I,kBAKT,MAAMhB,EAAUF,EAAAA,GAAAA,SAAmBG,EAAAA,EAASC,EAAAA,IACtCuB,EAA0B,GAEhC,UAAW,MAAMF,KAAOhB,EAASiB,OAAOxB,EAAQyB,cAC9CA,EAAWlJ,KAAKgJ,GAIlB,IAAIuC,EAAQ1L,EAAK0L,MAEI,IAAjBA,EAAM5K,SAEN4K,EADE1L,EAAK2L,KACChB,EACC3K,EAAKiL,KACNL,EAEAC,GAIZ,MAAMe,EAAOvC,EAAWN,KAAII,GAtHhC,SAAwBuC,GACtB,MAAO,CAACvC,EAAK8B,KACX,MAAMW,EAAa,CAAC,EAEpB,IAAK,MAAMC,KAAQH,EACjBE,EAAKC,GAAQf,EAAWe,GAAM1C,EAAK8B,GAGrC,OAAOW,CAAI,CAEf,CA4GuCE,CAAeJ,EAAfI,CAAsB3C,EAAKnJ,EAAKiL,OAAQ,KAG3E,GAAIjL,EAAKiL,KACHxB,QAAQsC,OAAOC,MACjBC,QAAQC,IAAIC,KAAKC,UAAUR,EAAM,KAAM,IAEvCnC,QAAQsC,OAAOM,MAAMF,KAAKC,UAAUR,QAEjC,CACL,MAAMnE,EAAMC,EAAAA,GAAAA,IAAcC,EAAAA,IAE1B,IAAK,MAAM2E,KAAKV,EACVU,EAAElB,OACJkB,EAAElB,KAAOmB,IAAAA,SAAc9C,QAAQ4B,MAAOiB,EAAElB,OAAS,KAIrD3D,EAAImC,UACF,SAACC,EAAAA,EAAMA,C,UACL,SAAC2C,EAAAA,EAAIA,CAACC,MAAOb,EAAMc,QAAS1M,EAAK0M,SAAYhB,EAAM5K,OAAS,MAGlE,CACF,ICrKF,GAAeuF,EAAAA,EAAAA,IAAc,CAC3BC,QAAS,eACTC,SAAU,8BACVC,QAASC,MAAOC,UACPC,EAAAA,EAAAA,IAAiBD,EAAO,CAC7BE,EAAAA,EACAC,EAAAA,EACAmD,EAAAA,KAEClD,WAAW,SAAU,CAAEC,KAAM,SAAUC,cAAc,IACrDC,OAAO,YAAa,CACnBC,OAAQ,CAAC,MAAO,OAAQ,QACxBC,QAAS,MACTC,KAAM,qHAKZX,cAAczG,GACZ,MAAMyH,EAAMC,EAAAA,GAAAA,IAAcC,EAAAA,IACpB4C,EAAY7C,EAAAA,GAAAA,SAAmB8C,EAAAA,EAAW1C,EAAAA,IAC1C9D,EAAU0D,EAAAA,GAAAA,IAAcK,EAAAA,GAGxBc,EAAO7I,EAAK8I,EAAEC,KAAIC,GAAOA,EAAIrJ,aAEnB,QAAZkJ,EAAK,IACPA,EAAKI,OAAO,EAAG,GAIjB,MAAMpE,QAAa0F,EAAUjB,IAAItJ,EAAKsI,OAAQO,EAAM,CAClDU,UAAWvJ,EAAKwJ,WAclB,GAZAxF,EAAQgB,IAAIH,GAGZ4C,EAAImC,UACF,SAACC,EAAAA,EAAMA,C,UACL,SAACC,EAAAA,EAAkBA,CAAC9F,QAASA,OAOX,kBAFD+F,EAAAA,EAAAA,IAAalF,EAAM,cAE7BQ,OACT,OAAOoE,QAAQC,KAAK,EAExB,I,cCpDF,SAAerD,EAAAA,EAAAA,IAAc,CAC3BC,QAAS,OACTC,SAAU,kCACVC,QAAUE,IACRC,EAAAA,EAAAA,IAAiBD,EAAO,CACtBE,EAAAA,EACAC,EAAAA,EACAmD,EAAAA,IAEJ2C,QAAS,KACP,MAAMlF,EAAMC,EAAAA,GAAAA,IAAcC,EAAAA,IACpB4C,EAAY7C,EAAAA,GAAAA,SAAmB8C,EAAAA,EAAW1C,EAAAA,IAEhDL,EAAImC,UACF,SAACC,EAAAA,EAAMA,C,UACL,SAAC+C,EAAAA,EAAaA,CAACrC,UAAWA,M,IClBrBsC,EAAW,CAACC,EAAMzF,EAAO0F,EAAMzD,EAAK0D,G,oCCCjD,MAAMC,GAA0C,CAC9C,EAAG,UACH,EAAG,SAIQC,IAAgBC,EAAAA,EAAAA,IAAiB,CAC5C3G,QAASC,MAAOC,GAAUA,EACvBO,OAAO,UAAW,CACjBK,MAAO,IACPP,KAAM,QACNqG,YAAa,wBAEdnG,OAAO,OAAQ,CACdK,MAAO,IACPP,KAAM,SACNI,eAAgBO,EAAAA,GAAAA,SAAmB2F,GAAAA,IAASC,MAASC,KAAAA,OAAUzM,OAAS,EACxEsM,YAAa,oCAEjBT,QAAQ3M,GACFA,EAAKwN,UACQ9F,EAAAA,GAAAA,IAAc+F,EAAAA,GACtBC,MAAQT,GAAgBU,KAAKC,IAAI5N,EAAKwN,QAAS,KAGxD9F,EAAAA,GAAAA,KAAemG,EAAAA,IAAiBC,gBAAgB,CAC9CR,KAAMtN,EAAKsN,MAEf,I,wCCrBD,WACC,IAEE,MAAM7C,GAAS/D,EAAAA,EAAAA,IAAMqH,EAAAA,EAAAA,GAAQtE,QAAQuE,OAClCC,WAAW,QACXC,WAAW,aAAc,mCACzBC,KAAK,OAAQ,2BACbnD,QAAQ,UAAW,eAAgBoD,GAAAA,IACnCC,KAAK5E,QAAQsC,OAAOuC,eAGjB3H,EAAAA,EAAAA,IAAiB8D,EAAQ,CAACyC,KAGhC,MAAMqB,QAAqB7G,EAAAA,GAAAA,SAAmB8G,EAAAA,SACxCD,EAAaE,YAAYhE,SAGzBA,EACHnE,QAAQuG,GACR6B,gBACAC,oBACAC,SACAzE,OAML,CALE,MAAOnE,GACQ0B,EAAAA,GAAAA,IAAc+F,EAAAA,GACtBoB,MAAM7I,GAEbyD,QAAQC,KAAK,EACf,CACD,EA9BA,E,kBCdC,IAAsBoF,IAYL,WACjB,IAAIC,EAAU5C,KAAKhC,MAAM,k2KACrB6E,EAAU7C,KAAKhC,MAAM,wmCAEzB,SAAS8E,EAASzD,EAAQ0D,GACxB,GAAsB,iBAAX1D,EACT,MAAM,IAAIvG,MAAM,qCAOlB,IAAIkK,EAASH,GAJbE,EAA8B,iBAAZA,EACd,CAACE,YAAaF,GACdA,GAAW,CAAC,GAEaC,SAAW,CAAC,EAErCC,OAAsC7M,IAAxB2M,EAAQE,YAA4B,IAAMF,EAAQE,YAEhEC,OAAwB9M,IAAjB2M,EAAQG,MAA4BH,EAAQG,KAEnD/D,EAAOE,EAAO8D,YAAYC,MAAM,IAEjCC,QAAO,SAAU3L,EAAQ4L,GACxB,IAAIC,EAAaP,EAAOM,IAAOV,EAAQU,IAAOA,EAI9C,OAHIC,IAAeN,IACjBM,EAAa,KAER7L,EAAS6L,EAEbT,QAAQC,EAAQS,QAAU,2BAA4B,GAC3D,GAAG,IAkBL,OAhBIT,EAAQN,SACVtD,EAAOA,EAAK2D,QAAQ,kBAAmB,KAGrCI,IACF/D,EAAOA,EAAK+D,QAKd/D,EAAOA,EAAK2D,QAAQ,OAAQG,GAExBF,EAAQU,QACVtE,EAAOA,EAAKuE,eAGPvE,CACT,CAMA,OAJA2D,EAAQa,OAAS,SAAUC,GACzB5O,OAAO6O,OAAOjB,EAASgB,EACzB,EAEOd,CACT,EAjEIgB,EAAOC,QAAUpB,IACjBmB,EAAOC,QAAP,QAA4BpB,G,wBCJhCmB,EAAOC,QAAUC,QAAQ,S,wBCAzBF,EAAOC,QAAUC,QAAQ,S,wBCAzBF,EAAOC,QAAUC,QAAQ,gB,wBCAzBF,EAAOC,QAAUC,QAAQ,S,wBCAzBF,EAAOC,QAAUC,QAAQ,K,wBCAzBF,EAAOC,QAAUC,QAAQ,O,wBCAzBF,EAAOC,QAAUC,QAAQ,Q,wBCAzBF,EAAOC,QAAUC,QAAQ,S,wBCAzBF,EAAOC,QAAUC,QAAQ,qB,wBCAzBF,EAAOC,QAAUC,QAAQ,c,wBCAzBF,EAAOC,QAAUC,QAAQ,mB,uBCAzBF,EAAOC,QAAUC,QAAQ,U,wBCAzBF,EAAOC,QAAUC,QAAQ,Y,wBCAzBF,EAAOC,QAAUC,QAAQ,K,wBCAzBF,EAAOC,QAAUC,QAAQ,O,wBCAzBF,EAAOC,QAAUC,QAAQ,S,wBCAzBF,EAAOC,QAAUC,QAAQ,iB,wBCAzBF,EAAOC,QAAUC,QAAQ,M,wBCAzBF,EAAOC,QAAUC,QAAQ,M,wBCAzBF,EAAOC,QAAUC,QAAQ,O,wBCAzBF,EAAOC,QAAUC,QAAQ,O","sources":["webpack://@jujulego/jill/./.yarn/cache/@jujulego-tasks-npm-1.1.2-6956b4f20d-4d5ee8283b.zip/node_modules/@jujulego/tasks/dist/esm/task-set.js","webpack://@jujulego/jill/./src/commands/each.tsx","webpack://@jujulego/jill/./src/commands/group.tsx","webpack://@jujulego/jill/./src/commands/list.tsx","webpack://@jujulego/jill/./src/commands/run.tsx","webpack://@jujulego/jill/./src/commands/tree.tsx","webpack://@jujulego/jill/./src/commands/index.ts","webpack://@jujulego/jill/./src/middlewares/config-options.ts","webpack://@jujulego/jill/./src/main.ts","webpack://@jujulego/jill/./.yarn/cache/slugify-npm-1.6.5-6db25d7016-a955a1b600.zip/node_modules/slugify/slugify.js","webpack://@jujulego/jill/external node-commonjs \"assert\"","webpack://@jujulego/jill/external node-commonjs \"buffer\"","webpack://@jujulego/jill/external node-commonjs \"child_process\"","webpack://@jujulego/jill/external node-commonjs \"events\"","webpack://@jujulego/jill/external node-commonjs \"fs\"","webpack://@jujulego/jill/external node-commonjs \"http\"","webpack://@jujulego/jill/external node-commonjs \"https\"","webpack://@jujulego/jill/external node-commonjs \"module\"","webpack://@jujulego/jill/external node-commonjs \"node:child_process\"","webpack://@jujulego/jill/external node-commonjs \"node:crypto\"","webpack://@jujulego/jill/external node-commonjs \"node:fs/promises\"","webpack://@jujulego/jill/external node-commonjs \"node:os\"","webpack://@jujulego/jill/external node-commonjs \"node:path\"","webpack://@jujulego/jill/external node-commonjs \"os\"","webpack://@jujulego/jill/external node-commonjs \"path\"","webpack://@jujulego/jill/external node-commonjs \"stream\"","webpack://@jujulego/jill/external node-commonjs \"string_decoder\"","webpack://@jujulego/jill/external node-commonjs \"tty\"","webpack://@jujulego/jill/external node-commonjs \"url\"","webpack://@jujulego/jill/external node-commonjs \"util\"","webpack://@jujulego/jill/external node-commonjs \"zlib\""],"sourcesContent":["function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [\n null\n ];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n return _assertThisInitialized(self);\n}\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\nvar _typeof = function(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n};\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n return _wrapNativeSuper(Class);\n}\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return _possibleConstructorReturn(this, result);\n };\n}\nimport { EventSource } from '@jujulego/event-tree';\nimport { assertIsTask } from './task';\n// Class\nexport var TaskSet = /*#__PURE__*/ function(EventSource) {\n \"use strict\";\n _inherits(TaskSet, EventSource);\n var _super = _createSuper(TaskSet);\n function TaskSet(manager) {\n _classCallCheck(this, TaskSet);\n var _this;\n _this = _super.call(this);\n _this.manager = manager;\n _this._tasks = new Set();\n _this._status = 'created';\n _this._results = {\n success: 0,\n failed: 0\n };\n return _this;\n }\n var _proto = TaskSet.prototype;\n // Methods\n _proto._handleComplete = function _handleComplete(task, success) {\n this.emit('completed', task);\n // Trigger finished\n if (success) {\n ++this._results.success;\n } else {\n ++this._results.failed;\n }\n if (this._results.success + this._results.failed === this._tasks.size) {\n this._status = 'finished';\n this.emit('finished', this._results);\n }\n };\n _proto.add = function add(task) {\n var _this = this;\n assertIsTask(task);\n if (this._status !== 'created') {\n throw Error(\"Cannot add a task to a \".concat(this._status, \" task set\"));\n }\n if (this._tasks.has(task)) {\n return;\n }\n // Listen to task's status\n task.subscribe('status', function(param) {\n var status = param.status;\n if (status === 'running') {\n _this.emit('started', task);\n } else if (status === 'done' || status === 'failed') {\n _this._handleComplete(task, status === 'done');\n }\n });\n // Add task\n this._tasks.add(task);\n };\n _proto.start = function start() {\n if (this._status !== 'created') {\n throw Error(\"Cannot start a \".concat(this._status, \" task set\"));\n }\n if (this._tasks.size === 0) {\n this._status = 'finished';\n this.emit('finished', this._results);\n } else {\n // Update status\n this._status = 'started';\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n // Add tasks to task manager\n for(var _iterator = this._tasks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var t = _step.value;\n this.manager.add(t);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n };\n _createClass(TaskSet, [\n {\n key: \"status\",\n get: // Properties\n function get() {\n return this._status;\n }\n },\n {\n key: \"tasks\",\n get: function get() {\n return Array.from(this._tasks.values());\n }\n },\n {\n key: \"results\",\n get: function get() {\n return this._results;\n }\n }\n ]);\n return TaskSet;\n}(_wrapNativeSuper(EventSource));\n\n//# sourceMappingURL=task-set.js.map\n","import { waitForEvent } from '@jujulego/event-tree';\nimport { TaskSet } from '@jujulego/tasks';\n\nimport { AffectedFilter } from '@/src/filters/affected.filter';\nimport { Pipeline } from '@/src/filters/pipeline';\nimport { PrivateFilter } from '@/src/filters/private.filter';\nimport { ScriptsFilter } from '@/src/filters/scripts.filter';\nimport { loadProject } from '@/src/middlewares/load-project';\nimport { setupInk } from '@/src/middlewares/setup-ink';\nimport { Project } from '@/src/project/project';\nimport { container, CURRENT, INK_APP } from '@/src/services/inversify.config';\nimport { SpinnerService } from '@/src/services/spinner.service';\nimport { TASK_MANAGER } from '@/src/services/task-manager.config';\nimport Layout from '@/src/ui/layout';\nimport TaskManagerSpinner from '@/src/ui/task-manager-spinner';\nimport { applyMiddlewares, defineCommand } from '@/src/utils/yargs';\n\n// Command\nexport default defineCommand({\n command: 'each <script>',\n describe: 'Run script on many workspaces',\n builder: async (yargs) =>\n (await applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ]))\n // Run options\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\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 // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n }),\n async handler(args) {\n const app = container.get(INK_APP);\n const project = container.getNamed(Project, CURRENT);\n const manager = container.get(TASK_MANAGER);\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading workspaces ...');\n\n // Setup pipeline\n const pipeline = new Pipeline();\n pipeline.add(new ScriptsFilter([args.script]));\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'each') {\n rest.splice(0, 1);\n }\n\n // Create script tasks\n const tasks = new TaskSet(manager);\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n tasks.add(await wks.run(args.script, rest, {\n buildDeps: args.depsMode,\n }));\n }\n\n if (tasks.tasks.length === 0) {\n spinner.failed('No workspace found !');\n return process.exit(1);\n }\n\n spinner.stop();\n\n // Render\n app.rerender(\n <Layout>\n <TaskManagerSpinner manager={manager} />\n </Layout>\n );\n\n // Start and wait for result\n tasks.start();\n\n const result = await waitForEvent(tasks, 'finished');\n\n if (result.failed > 0) {\n return process.exit(1);\n }\n } finally {\n spinner.stop();\n }\n }\n});\n","import { waitForEvent } from '@jujulego/event-tree';\nimport yargs from 'yargs';\n\nimport { loadProject } from '@/src/middlewares/load-project';\nimport { loadWorkspace } from '@/src/middlewares/load-workspace';\nimport { setupInk } from '@/src/middlewares/setup-ink';\nimport { Workspace, WorkspaceDepsMode } from '@/src/project/workspace';\nimport { container, CURRENT, INK_APP } from '@/src/services/inversify.config';\nimport { TaskExprService } from '@/src/services/task-expr.service';\nimport { TASK_MANAGER } from '@/src/services/task-manager.config';\nimport Layout from '@/src/ui/layout';\nimport TaskManagerSpinner from '@/src/ui/task-manager-spinner';\nimport { applyMiddlewares, defineCommand } from '@/src/utils/yargs';\n\n// Command\nexport default defineCommand({\n command: 'group <script..>',\n describe: 'Run many scripts inside a workspace',\n builder: async (yargs) =>\n (await applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]))\n .positional('script', {\n demandOption: true,\n coerce(expr: string[]) {\n const parser = container.get(TaskExprService);\n return parser.parse(expr.join(' ')).roots[0];\n }\n })\n .option('deps-mode', {\n choices: ['all', 'prod', 'none'] as const,\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n }),\n async handler(args) {\n const app = container.get(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n const manager = container.get(TASK_MANAGER);\n const parser = container.get(TaskExprService);\n\n // Run script in workspace\n const group = await parser.buildTask(args.script, workspace, {\n buildDeps: args.depsMode,\n });\n\n manager.add(group);\n\n // Render\n app.rerender(\n <Layout>\n <TaskManagerSpinner manager={manager} />\n </Layout>\n );\n\n // Wait for result\n const result = await waitForEvent(group, 'completed');\n\n if (result.status === 'failed') {\n return yargs.exit(1, new Error('Task failed !'));\n }\n }\n});\n","import chalk from 'chalk';\nimport path from 'node:path';\nimport slugify from 'slugify';\n\nimport { AffectedFilter } from '@/src/filters/affected.filter';\nimport { Pipeline } from '@/src/filters/pipeline';\nimport { PrivateFilter } from '@/src/filters/private.filter';\nimport { ScriptsFilter } from '@/src/filters/scripts.filter';\nimport { loadProject } from '@/src/middlewares/load-project';\nimport { setupInk } from '@/src/middlewares/setup-ink';\nimport { Project } from '@/src/project/project';\nimport { Workspace } from '@/src/project/workspace';\nimport { container, CURRENT, INK_APP } from '@/src/services/inversify.config';\nimport Layout from '@/src/ui/layout';\nimport List from '@/src/ui/list';\nimport { applyMiddlewares, defineCommand } from '@/src/utils/yargs';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Utils\nfunction buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n}\n\n// Command\nexport default defineCommand({\n command: ['list', 'ls'],\n describe: 'List workspaces',\n builder: async (yargs) =>\n (await applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n ]))\n // Filters\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\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\n // Affected filter\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'] as const,\n default: [],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }),\n async handler(args) {\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(new PrivateFilter(args.private));\n }\n\n if (args.withScript) {\n pipeline.add(new ScriptsFilter(args.withScript));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args.affectedRevFallback,\n args.affectedRevSort\n ));\n }\n\n // Load workspaces\n const project = container.getNamed(Project, CURRENT);\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(project.workspaces())) {\n workspaces.push(wks);\n }\n\n // Build data\n let attrs = args.attrs;\n\n if (attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => buildExtractor(attrs)(wks, args.json || false));\n\n // Print list\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n console.log(JSON.stringify(data, null, 2));\n } else {\n process.stdout.write(JSON.stringify(data));\n }\n } else {\n const app = container.get(INK_APP);\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) || '.';\n }\n }\n\n app.rerender(\n <Layout>\n <List items={data} headers={args.headers ?? (attrs.length > 1)} />\n </Layout>\n );\n }\n }\n});\n","import { waitForEvent } from '@jujulego/event-tree';\n\nimport { loadProject } from '@/src/middlewares/load-project';\nimport { loadWorkspace } from '@/src/middlewares/load-workspace';\nimport { setupInk } from '@/src/middlewares/setup-ink';\nimport { Workspace } from '@/src/project/workspace';\nimport { container, CURRENT, INK_APP } from '@/src/services/inversify.config';\nimport { TASK_MANAGER } from '@/src/services/task-manager.config';\nimport Layout from '@/src/ui/layout';\nimport TaskManagerSpinner from '@/src/ui/task-manager-spinner';\nimport { applyMiddlewares, defineCommand } from '@/src/utils/yargs';\n\n// Command\nexport default defineCommand({\n command: 'run <script>',\n describe: 'Run script inside workspace',\n builder: async (yargs) =>\n (await applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]))\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\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 async handler(args) {\n const app = container.get(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n const manager = container.get(TASK_MANAGER);\n\n // Extract arguments\n const rest = args._.map(arg => arg.toString());\n\n if (rest[0] === 'run') {\n rest.splice(0, 1);\n }\n\n // Run script in workspace\n const task = await workspace.run(args.script, rest, {\n buildDeps: args.depsMode,\n });\n manager.add(task);\n\n // Render\n app.rerender(\n <Layout>\n <TaskManagerSpinner manager={manager} />\n </Layout>\n );\n\n // Wait for result\n const result = await waitForEvent(task, 'completed');\n\n if (result.status === 'failed') {\n return process.exit(1);\n }\n }\n});\n","import { loadProject } from '@/src/middlewares/load-project';\nimport { loadWorkspace } from '@/src/middlewares/load-workspace';\nimport { setupInk } from '@/src/middlewares/setup-ink';\nimport { Workspace } from '@/src/project/workspace';\nimport { container, CURRENT, INK_APP } from '@/src/services/inversify.config';\nimport Layout from '@/src/ui/layout';\nimport WorkspaceTree from '@/src/ui/workspace-tree';\nimport { applyMiddlewares, defineCommand } from '@/src/utils/yargs';\n\n// Command\nexport default defineCommand({\n command: 'tree',\n describe: 'Print workspace dependency tree',\n builder: (yargs) =>\n applyMiddlewares(yargs, [\n setupInk,\n loadProject,\n loadWorkspace\n ]),\n handler: () => {\n const app = container.get(INK_APP);\n const workspace = container.getNamed(Workspace, CURRENT);\n\n app.rerender(\n <Layout>\n <WorkspaceTree workspace={workspace} />\n </Layout>\n );\n }\n});\n","import each from './each';\nimport group from './group';\nimport list from './list';\nimport run from './run';\nimport tree from './tree';\n\n// Commands\nexport const commands = [each, group, list, run, tree];\n","import os from 'node:os';\n\nimport { container, SERVICES_CONFIG } from '@/src/services/inversify.config';\nimport { CONFIG } from '@/src/services/config/loader';\nimport { Logger } from '@/src/services/logger.service';\nimport { defineMiddleware } from '@/src/utils/yargs';\n\n// Constants\nconst VERBOSITY_LEVEL: Record<number, string> = {\n 1: 'verbose',\n 2: 'debug',\n};\n\n// Middleware\nexport const configOptions = defineMiddleware({\n builder: async (yargs) => yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n default: (await container.getAsync(CONFIG)).jobs ?? (os.cpus().length - 1),\n description: 'Set maximum parallel job number',\n }),\n handler(args) {\n if (args.verbose) {\n const logger = container.get(Logger);\n logger.level = VERBOSITY_LEVEL[Math.min(args.verbose, 2)];\n }\n\n container.bind(SERVICES_CONFIG).toConstantValue({\n jobs: args.jobs,\n });\n }\n});\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { container } from '@/src/services/inversify.config';\nimport { Logger } from '@/src/services/logger.service';\nimport { PluginLoaderService } from '@/src/services/plugins/plugin-loader.service';\n\nimport { commands } from './commands';\nimport { configOptions } from './middlewares/config-options';\nimport { applyMiddlewares } from './utils/yargs';\n\n// @ts-ignore: Outside of typescript's rootDir in build\nimport pkg from '../package.json';\n\n// Bootstrap\n(async () => {\n try {\n // Setup yargs\n const parser = yargs(hideBin(process.argv))\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\n // Middlewares\n await applyMiddlewares(parser, [configOptions]);\n\n // Load plugins\n const pluginLoader = await container.getAsync(PluginLoaderService);\n await pluginLoader.loadPlugins(parser);\n\n // Commands\n await parser\n .command(commands as any)\n .demandCommand()\n .recommendCommands()\n .strict()\n .parse();\n } catch (err) {\n const logger = container.get(Logger);\n logger.error(err);\n\n process.exit(1);\n }\n})();\n","\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"¢\":\"cent\",\"£\":\"pound\",\"¤\":\"currency\",\"¥\":\"yen\",\"©\":\"(c)\",\"ª\":\"a\",\"®\":\"(r)\",\"º\":\"o\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"Æ\":\"AE\",\"Ç\":\"C\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"Ð\":\"D\",\"Ñ\":\"N\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"Ý\":\"Y\",\"Þ\":\"TH\",\"ß\":\"ss\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"æ\":\"ae\",\"ç\":\"c\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"ð\":\"d\",\"ñ\":\"n\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"ý\":\"y\",\"þ\":\"th\",\"ÿ\":\"y\",\"Ā\":\"A\",\"ā\":\"a\",\"Ă\":\"A\",\"ă\":\"a\",\"Ą\":\"A\",\"ą\":\"a\",\"Ć\":\"C\",\"ć\":\"c\",\"Č\":\"C\",\"č\":\"c\",\"Ď\":\"D\",\"ď\":\"d\",\"Đ\":\"DJ\",\"đ\":\"dj\",\"Ē\":\"E\",\"ē\":\"e\",\"Ė\":\"E\",\"ė\":\"e\",\"Ę\":\"e\",\"ę\":\"e\",\"Ě\":\"E\",\"ě\":\"e\",\"Ğ\":\"G\",\"ğ\":\"g\",\"Ģ\":\"G\",\"ģ\":\"g\",\"Ĩ\":\"I\",\"ĩ\":\"i\",\"Ī\":\"i\",\"ī\":\"i\",\"Į\":\"I\",\"į\":\"i\",\"İ\":\"I\",\"ı\":\"i\",\"Ķ\":\"k\",\"ķ\":\"k\",\"Ļ\":\"L\",\"ļ\":\"l\",\"Ľ\":\"L\",\"ľ\":\"l\",\"Ł\":\"L\",\"ł\":\"l\",\"Ń\":\"N\",\"ń\":\"n\",\"Ņ\":\"N\",\"ņ\":\"n\",\"Ň\":\"N\",\"ň\":\"n\",\"Ō\":\"O\",\"ō\":\"o\",\"Ő\":\"O\",\"ő\":\"o\",\"Œ\":\"OE\",\"œ\":\"oe\",\"Ŕ\":\"R\",\"ŕ\":\"r\",\"Ř\":\"R\",\"ř\":\"r\",\"Ś\":\"S\",\"ś\":\"s\",\"Ş\":\"S\",\"ş\":\"s\",\"Š\":\"S\",\"š\":\"s\",\"Ţ\":\"T\",\"ţ\":\"t\",\"Ť\":\"T\",\"ť\":\"t\",\"Ũ\":\"U\",\"ũ\":\"u\",\"Ū\":\"u\",\"ū\":\"u\",\"Ů\":\"U\",\"ů\":\"u\",\"Ű\":\"U\",\"ű\":\"u\",\"Ų\":\"U\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"ź\":\"z\",\"Ż\":\"Z\",\"ż\":\"z\",\"Ž\":\"Z\",\"ž\":\"z\",\"Ə\":\"E\",\"ƒ\":\"f\",\"Ơ\":\"O\",\"ơ\":\"o\",\"Ư\":\"U\",\"ư\":\"u\",\"Lj\":\"LJ\",\"lj\":\"lj\",\"Nj\":\"NJ\",\"nj\":\"nj\",\"Ș\":\"S\",\"ș\":\"s\",\"Ț\":\"T\",\"ț\":\"t\",\"ə\":\"e\",\"˚\":\"o\",\"Ά\":\"A\",\"Έ\":\"E\",\"Ή\":\"H\",\"Ί\":\"I\",\"Ό\":\"O\",\"Ύ\":\"Y\",\"Ώ\":\"W\",\"ΐ\":\"i\",\"Α\":\"A\",\"Β\":\"B\",\"Γ\":\"G\",\"Δ\":\"D\",\"Ε\":\"E\",\"Ζ\":\"Z\",\"Η\":\"H\",\"Θ\":\"8\",\"Ι\":\"I\",\"Κ\":\"K\",\"Λ\":\"L\",\"Μ\":\"M\",\"Ν\":\"N\",\"Ξ\":\"3\",\"Ο\":\"O\",\"Π\":\"P\",\"Ρ\":\"R\",\"Σ\":\"S\",\"Τ\":\"T\",\"Υ\":\"Y\",\"Φ\":\"F\",\"Χ\":\"X\",\"Ψ\":\"PS\",\"Ω\":\"W\",\"Ϊ\":\"I\",\"Ϋ\":\"Y\",\"ά\":\"a\",\"έ\":\"e\",\"ή\":\"h\",\"ί\":\"i\",\"ΰ\":\"y\",\"α\":\"a\",\"β\":\"b\",\"γ\":\"g\",\"δ\":\"d\",\"ε\":\"e\",\"ζ\":\"z\",\"η\":\"h\",\"θ\":\"8\",\"ι\":\"i\",\"κ\":\"k\",\"λ\":\"l\",\"μ\":\"m\",\"ν\":\"n\",\"ξ\":\"3\",\"ο\":\"o\",\"π\":\"p\",\"ρ\":\"r\",\"ς\":\"s\",\"σ\":\"s\",\"τ\":\"t\",\"υ\":\"y\",\"φ\":\"f\",\"χ\":\"x\",\"ψ\":\"ps\",\"ω\":\"w\",\"ϊ\":\"i\",\"ϋ\":\"y\",\"ό\":\"o\",\"ύ\":\"y\",\"ώ\":\"w\",\"Ё\":\"Yo\",\"Ђ\":\"DJ\",\"Є\":\"Ye\",\"І\":\"I\",\"Ї\":\"Yi\",\"Ј\":\"J\",\"Љ\":\"LJ\",\"Њ\":\"NJ\",\"Ћ\":\"C\",\"Џ\":\"DZ\",\"А\":\"A\",\"Б\":\"B\",\"В\":\"V\",\"Г\":\"G\",\"Д\":\"D\",\"Е\":\"E\",\"Ж\":\"Zh\",\"З\":\"Z\",\"И\":\"I\",\"Й\":\"J\",\"К\":\"K\",\"Л\":\"L\",\"М\":\"M\",\"Н\":\"N\",\"О\":\"O\",\"П\":\"P\",\"Р\":\"R\",\"С\":\"S\",\"Т\":\"T\",\"У\":\"U\",\"Ф\":\"F\",\"Х\":\"H\",\"Ц\":\"C\",\"Ч\":\"Ch\",\"Ш\":\"Sh\",\"Щ\":\"Sh\",\"Ъ\":\"U\",\"Ы\":\"Y\",\"Ь\":\"\",\"Э\":\"E\",\"Ю\":\"Yu\",\"Я\":\"Ya\",\"а\":\"a\",\"б\":\"b\",\"в\":\"v\",\"г\":\"g\",\"д\":\"d\",\"е\":\"e\",\"ж\":\"zh\",\"з\":\"z\",\"и\":\"i\",\"й\":\"j\",\"к\":\"k\",\"л\":\"l\",\"м\":\"m\",\"н\":\"n\",\"о\":\"o\",\"п\":\"p\",\"р\":\"r\",\"с\":\"s\",\"т\":\"t\",\"у\":\"u\",\"ф\":\"f\",\"х\":\"h\",\"ц\":\"c\",\"ч\":\"ch\",\"ш\":\"sh\",\"щ\":\"sh\",\"ъ\":\"u\",\"ы\":\"y\",\"ь\":\"\",\"э\":\"e\",\"ю\":\"yu\",\"я\":\"ya\",\"ё\":\"yo\",\"ђ\":\"dj\",\"є\":\"ye\",\"і\":\"i\",\"ї\":\"yi\",\"ј\":\"j\",\"љ\":\"lj\",\"њ\":\"nj\",\"ћ\":\"c\",\"ѝ\":\"u\",\"џ\":\"dz\",\"Ґ\":\"G\",\"ґ\":\"g\",\"Ғ\":\"GH\",\"ғ\":\"gh\",\"Қ\":\"KH\",\"қ\":\"kh\",\"Ң\":\"NG\",\"ң\":\"ng\",\"Ү\":\"UE\",\"ү\":\"ue\",\"Ұ\":\"U\",\"ұ\":\"u\",\"Һ\":\"H\",\"һ\":\"h\",\"Ә\":\"AE\",\"ә\":\"ae\",\"Ө\":\"OE\",\"ө\":\"oe\",\"Ա\":\"A\",\"Բ\":\"B\",\"Գ\":\"G\",\"Դ\":\"D\",\"Ե\":\"E\",\"Զ\":\"Z\",\"Է\":\"E\\'\",\"Ը\":\"Y\\'\",\"Թ\":\"T\\'\",\"Ժ\":\"JH\",\"Ի\":\"I\",\"Լ\":\"L\",\"Խ\":\"X\",\"Ծ\":\"C\\'\",\"Կ\":\"K\",\"Հ\":\"H\",\"Ձ\":\"D\\'\",\"Ղ\":\"GH\",\"Ճ\":\"TW\",\"Մ\":\"M\",\"Յ\":\"Y\",\"Ն\":\"N\",\"Շ\":\"SH\",\"Չ\":\"CH\",\"Պ\":\"P\",\"Ջ\":\"J\",\"Ռ\":\"R\\'\",\"Ս\":\"S\",\"Վ\":\"V\",\"Տ\":\"T\",\"Ր\":\"R\",\"Ց\":\"C\",\"Փ\":\"P\\'\",\"Ք\":\"Q\\'\",\"Օ\":\"O\\'\\'\",\"Ֆ\":\"F\",\"և\":\"EV\",\"ء\":\"a\",\"آ\":\"aa\",\"أ\":\"a\",\"ؤ\":\"u\",\"إ\":\"i\",\"ئ\":\"e\",\"ا\":\"a\",\"ب\":\"b\",\"ة\":\"h\",\"ت\":\"t\",\"ث\":\"th\",\"ج\":\"j\",\"ح\":\"h\",\"خ\":\"kh\",\"د\":\"d\",\"ذ\":\"th\",\"ر\":\"r\",\"ز\":\"z\",\"س\":\"s\",\"ش\":\"sh\",\"ص\":\"s\",\"ض\":\"dh\",\"ط\":\"t\",\"ظ\":\"z\",\"ع\":\"a\",\"غ\":\"gh\",\"ف\":\"f\",\"ق\":\"q\",\"ك\":\"k\",\"ل\":\"l\",\"م\":\"m\",\"ن\":\"n\",\"ه\":\"h\",\"و\":\"w\",\"ى\":\"a\",\"ي\":\"y\",\"ً\":\"an\",\"ٌ\":\"on\",\"ٍ\":\"en\",\"َ\":\"a\",\"ُ\":\"u\",\"ِ\":\"e\",\"ْ\":\"\",\"٠\":\"0\",\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"پ\":\"p\",\"چ\":\"ch\",\"ژ\":\"zh\",\"ک\":\"k\",\"گ\":\"g\",\"ی\":\"y\",\"۰\":\"0\",\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"฿\":\"baht\",\"ა\":\"a\",\"ბ\":\"b\",\"გ\":\"g\",\"დ\":\"d\",\"ე\":\"e\",\"ვ\":\"v\",\"ზ\":\"z\",\"თ\":\"t\",\"ი\":\"i\",\"კ\":\"k\",\"ლ\":\"l\",\"მ\":\"m\",\"ნ\":\"n\",\"ო\":\"o\",\"პ\":\"p\",\"ჟ\":\"zh\",\"რ\":\"r\",\"ს\":\"s\",\"ტ\":\"t\",\"უ\":\"u\",\"ფ\":\"f\",\"ქ\":\"k\",\"ღ\":\"gh\",\"ყ\":\"q\",\"შ\":\"sh\",\"ჩ\":\"ch\",\"ც\":\"ts\",\"ძ\":\"dz\",\"წ\":\"ts\",\"ჭ\":\"ch\",\"ხ\":\"kh\",\"ჯ\":\"j\",\"ჰ\":\"h\",\"Ṣ\":\"S\",\"ṣ\":\"s\",\"Ẁ\":\"W\",\"ẁ\":\"w\",\"Ẃ\":\"W\",\"ẃ\":\"w\",\"Ẅ\":\"W\",\"ẅ\":\"w\",\"ẞ\":\"SS\",\"Ạ\":\"A\",\"ạ\":\"a\",\"Ả\":\"A\",\"ả\":\"a\",\"Ấ\":\"A\",\"ấ\":\"a\",\"Ầ\":\"A\",\"ầ\":\"a\",\"Ẩ\":\"A\",\"ẩ\":\"a\",\"Ẫ\":\"A\",\"ẫ\":\"a\",\"Ậ\":\"A\",\"ậ\":\"a\",\"Ắ\":\"A\",\"ắ\":\"a\",\"Ằ\":\"A\",\"ằ\":\"a\",\"Ẳ\":\"A\",\"ẳ\":\"a\",\"Ẵ\":\"A\",\"ẵ\":\"a\",\"Ặ\":\"A\",\"ặ\":\"a\",\"Ẹ\":\"E\",\"ẹ\":\"e\",\"Ẻ\":\"E\",\"ẻ\":\"e\",\"Ẽ\":\"E\",\"ẽ\":\"e\",\"Ế\":\"E\",\"ế\":\"e\",\"Ề\":\"E\",\"ề\":\"e\",\"Ể\":\"E\",\"ể\":\"e\",\"Ễ\":\"E\",\"ễ\":\"e\",\"Ệ\":\"E\",\"ệ\":\"e\",\"Ỉ\":\"I\",\"ỉ\":\"i\",\"Ị\":\"I\",\"ị\":\"i\",\"Ọ\":\"O\",\"ọ\":\"o\",\"Ỏ\":\"O\",\"ỏ\":\"o\",\"Ố\":\"O\",\"ố\":\"o\",\"Ồ\":\"O\",\"ồ\":\"o\",\"Ổ\":\"O\",\"ổ\":\"o\",\"Ỗ\":\"O\",\"ỗ\":\"o\",\"Ộ\":\"O\",\"ộ\":\"o\",\"Ớ\":\"O\",\"ớ\":\"o\",\"Ờ\":\"O\",\"ờ\":\"o\",\"Ở\":\"O\",\"ở\":\"o\",\"Ỡ\":\"O\",\"ỡ\":\"o\",\"Ợ\":\"O\",\"ợ\":\"o\",\"Ụ\":\"U\",\"ụ\":\"u\",\"Ủ\":\"U\",\"ủ\":\"u\",\"Ứ\":\"U\",\"ứ\":\"u\",\"Ừ\":\"U\",\"ừ\":\"u\",\"Ử\":\"U\",\"ử\":\"u\",\"Ữ\":\"U\",\"ữ\":\"u\",\"Ự\":\"U\",\"ự\":\"u\",\"Ỳ\":\"Y\",\"ỳ\":\"y\",\"Ỵ\":\"Y\",\"ỵ\":\"y\",\"Ỷ\":\"Y\",\"ỷ\":\"y\",\"Ỹ\":\"Y\",\"ỹ\":\"y\",\"–\":\"-\",\"‘\":\"\\'\",\"’\":\"\\'\",\"“\":\"\\\\\\\"\",\"”\":\"\\\\\\\"\",\"„\":\"\\\\\\\"\",\"†\":\"+\",\"•\":\"*\",\"…\":\"...\",\"₠\":\"ecu\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"€\":\"euro\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"₸\":\"kazakhstani tenge\",\"₹\":\"indian rupee\",\"₺\":\"turkish lira\",\"₽\":\"russian ruble\",\"₿\":\"bitcoin\",\"℠\":\"sm\",\"™\":\"tm\",\"∂\":\"d\",\"∆\":\"delta\",\"∑\":\"sum\",\"∞\":\"infinity\",\"♥\":\"love\",\"元\":\"yuan\",\"円\":\"yen\",\"﷼\":\"rial\",\"ﻵ\":\"laa\",\"ﻷ\":\"laa\",\"ﻹ\":\"lai\",\"ﻻ\":\"la\"}')\n var locales = JSON.parse('{\"bg\":{\"Й\":\"Y\",\"Ц\":\"Ts\",\"Щ\":\"Sht\",\"Ъ\":\"A\",\"Ь\":\"Y\",\"й\":\"y\",\"ц\":\"ts\",\"щ\":\"sht\",\"ъ\":\"a\",\"ь\":\"y\"},\"de\":{\"Ä\":\"AE\",\"ä\":\"ae\",\"Ö\":\"OE\",\"ö\":\"oe\",\"Ü\":\"UE\",\"ü\":\"ue\",\"ß\":\"ss\",\"%\":\"prozent\",\"&\":\"und\",\"|\":\"oder\",\"∑\":\"summe\",\"∞\":\"unendlich\",\"♥\":\"liebe\"},\"es\":{\"%\":\"por ciento\",\"&\":\"y\",\"<\":\"menor que\",\">\":\"mayor que\",\"|\":\"o\",\"¢\":\"centavos\",\"£\":\"libras\",\"¤\":\"moneda\",\"₣\":\"francos\",\"∑\":\"suma\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"fr\":{\"%\":\"pourcent\",\"&\":\"et\",\"<\":\"plus petit\",\">\":\"plus grand\",\"|\":\"ou\",\"¢\":\"centime\",\"£\":\"livre\",\"¤\":\"devise\",\"₣\":\"franc\",\"∑\":\"somme\",\"∞\":\"infini\",\"♥\":\"amour\"},\"pt\":{\"%\":\"porcento\",\"&\":\"e\",\"<\":\"menor\",\">\":\"maior\",\"|\":\"ou\",\"¢\":\"centavo\",\"∑\":\"soma\",\"£\":\"libra\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"uk\":{\"И\":\"Y\",\"и\":\"y\",\"Й\":\"Y\",\"й\":\"y\",\"Ц\":\"Ts\",\"ц\":\"ts\",\"Х\":\"Kh\",\"х\":\"kh\",\"Щ\":\"Shch\",\"щ\":\"shch\",\"Г\":\"H\",\"г\":\"h\"},\"vi\":{\"Đ\":\"D\",\"đ\":\"d\"},\"da\":{\"Ø\":\"OE\",\"ø\":\"oe\",\"Å\":\"AA\",\"å\":\"aa\",\"%\":\"procent\",\"&\":\"og\",\"|\":\"eller\",\"$\":\"dollar\",\"<\":\"mindre end\",\">\":\"større end\"},\"nb\":{\"&\":\"og\",\"Å\":\"AA\",\"Æ\":\"AE\",\"Ø\":\"OE\",\"å\":\"aa\",\"æ\":\"ae\",\"ø\":\"oe\"},\"it\":{\"&\":\"e\"},\"nl\":{\"&\":\"en\"},\"sv\":{\"&\":\"och\",\"Å\":\"AA\",\"Ä\":\"AE\",\"Ö\":\"OE\",\"å\":\"aa\",\"ä\":\"ae\",\"ö\":\"oe\"}}')\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var locale = locales[options.locale] || {}\n\n var replacement = options.replacement === undefined ? '-' : options.replacement\n\n var trim = options.trim === undefined ? true : options.trim\n\n var slug = string.normalize().split('')\n // replace characters based on charMap\n .reduce(function (result, ch) {\n var appendChar = locale[ch] || charMap[ch] || ch;\n if (appendChar === replacement) {\n appendChar = ' ';\n }\n return result + appendChar\n // remove not allowed characters\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n }, '');\n\n if (options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '');\n }\n\n if (trim) {\n slug = slug.trim()\n }\n\n // Replace spaces with replacement character, treating multiple consecutive\n // spaces as a single space.\n slug = slug.replace(/\\s+/g, replacement);\n\n if (options.lower) {\n slug = slug.toLowerCase()\n }\n\n return slug\n }\n\n replace.extend = function (customMap) {\n Object.assign(charMap, customMap)\n }\n\n return replace\n}))\n","module.exports = require(\"assert\");","module.exports = require(\"buffer\");","module.exports = require(\"child_process\");","module.exports = require(\"events\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"module\");","module.exports = require(\"node:child_process\");","module.exports = require(\"node:crypto\");","module.exports = require(\"node:fs/promises\");","module.exports = require(\"node:os\");","module.exports = require(\"node:path\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"string_decoder\");","module.exports = require(\"tty\");","module.exports = require(\"url\");","module.exports = require(\"util\");","module.exports = require(\"zlib\");"],"names":["isNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","prototype","toString","call","e","_construct","Parent","args","Class","a","push","apply","instance","Function","bind","_setPrototypeOf","arguments","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_possibleConstructorReturn","self","_typeof","ReferenceError","_assertThisInitialized","p","obj","Symbol","constructor","_wrapNativeSuper","_cache","Map","undefined","fn","indexOf","TypeError","has","get","set","Wrapper","this","create","value","TaskSet","EventSource","subClass","superClass","_inherits","Derived","hasNativeReflectConstruct","_super","Boolean","valueOf","_isNativeReflectConstruct","result","Super","NewTarget","manager","_this","Constructor","_classCallCheck","_tasks","Set","_status","_results","success","failed","protoProps","_proto","_handleComplete","task","emit","size","add","Error","concat","subscribe","param","status","start","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","t","err","return","Array","from","values","defineCommand","command","describe","builder","async","yargs","applyMiddlewares","setupInk","loadProject","positional","type","demandOption","option","choice","default","desc","group","alias","coerce","rev","app","container","INK_APP","project","Project","CURRENT","TASK_MANAGER","spinner","SpinnerService","spin","pipeline","Pipeline","ScriptsFilter","script","private","PrivateFilter","affected","AffectedFilter","affectedRevFallback","affectedRevSort","rest","_","map","arg","splice","tasks","wks","filter","workspaces","run","buildDeps","depsMode","process","exit","stop","rerender","Layout","TaskManagerSpinner","waitForEvent","loadWorkspace","expr","TaskExprService","parse","join","roots","choices","workspace","Workspace","parser","buildTask","LONG_ATTRIBUTES","JSON_ATTRIBUTES","DEFAULT_ATTRIBUTES","EXTRACTORS","name","version","json","manifest","chalk","root","cwd","slug","slugify","string","withScript","attrs","long","data","attr","buildExtractor","stdout","isTTY","console","log","JSON","stringify","write","d","path","List","items","headers","handler","WorkspaceTree","commands","each","list","tree","VERBOSITY_LEVEL","configOptions","defineMiddleware","description","CONFIG","jobs","os","verbose","Logger","level","Math","min","SERVICES_CONFIG","toConstantValue","hideBin","argv","scriptName","completion","help","pkg","wrap","columns","pluginLoader","PluginLoaderService","loadPlugins","demandCommand","recommendCommands","strict","error","factory","charMap","locales","replace","options","locale","replacement","trim","normalize","split","reduce","ch","appendChar","remove","lower","toLowerCase","extend","customMap","assign","module","exports","require"],"sourceRoot":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const setupInk: import("@/src/utils/yargs").Middleware<unknown, unknown>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Workspace } from './workspace';
|
|
2
|
+
export type PackageManager = 'npm' | 'yarn';
|
|
3
|
+
export interface ProjectOptions {
|
|
4
|
+
packageManager?: PackageManager | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare class Project {
|
|
7
|
+
private readonly _root;
|
|
8
|
+
private _mainWorkspace?;
|
|
9
|
+
private readonly _names;
|
|
10
|
+
private readonly _workspaces;
|
|
11
|
+
private _packageManager?;
|
|
12
|
+
private _isFullyLoaded;
|
|
13
|
+
private _lock;
|
|
14
|
+
private readonly _logger;
|
|
15
|
+
constructor(_root: string, opts?: ProjectOptions);
|
|
16
|
+
static searchProjectRoot(dir: string): Promise<string>;
|
|
17
|
+
private _loadManifest;
|
|
18
|
+
private _loadWorkspace;
|
|
19
|
+
packageManager(): Promise<PackageManager>;
|
|
20
|
+
mainWorkspace(): Promise<Workspace>;
|
|
21
|
+
currentWorkspace(cwd?: string): Promise<Workspace | null>;
|
|
22
|
+
workspaces(): AsyncGenerator<Workspace, void>;
|
|
23
|
+
workspace(name?: string): Promise<Workspace | null>;
|
|
24
|
+
get root(): string;
|
|
25
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SpawnTask, SpawnTaskOptions, TaskContext } from '@jujulego/tasks';
|
|
2
|
+
import { type Package } from 'normalize-package-data';
|
|
3
|
+
import { Project } from './project';
|
|
4
|
+
export type WorkspaceDepsMode = 'all' | 'prod' | 'none';
|
|
5
|
+
export interface WorkspaceContext extends TaskContext {
|
|
6
|
+
workspace: Workspace;
|
|
7
|
+
script: string;
|
|
8
|
+
}
|
|
9
|
+
export interface WorkspaceRunOptions extends Omit<SpawnTaskOptions, 'cwd'> {
|
|
10
|
+
buildDeps?: WorkspaceDepsMode;
|
|
11
|
+
}
|
|
12
|
+
export declare class Workspace {
|
|
13
|
+
private readonly _cwd;
|
|
14
|
+
readonly manifest: Package;
|
|
15
|
+
readonly project: Project;
|
|
16
|
+
private readonly _logger;
|
|
17
|
+
private readonly _affectedCache;
|
|
18
|
+
private readonly _tasks;
|
|
19
|
+
constructor(_cwd: string, manifest: Package, project: Project);
|
|
20
|
+
private _satisfies;
|
|
21
|
+
private _buildDependencies;
|
|
22
|
+
private _isAffected;
|
|
23
|
+
isAffected(reference: string): Promise<boolean>;
|
|
24
|
+
private _loadDependencies;
|
|
25
|
+
dependencies(): AsyncGenerator<Workspace, void>;
|
|
26
|
+
devDependencies(): AsyncGenerator<Workspace, void>;
|
|
27
|
+
private _streamLogs;
|
|
28
|
+
run(script: string, args?: string[], opts?: WorkspaceRunOptions): Promise<SpawnTask<WorkspaceContext>>;
|
|
29
|
+
build(opts?: WorkspaceRunOptions): Promise<SpawnTask | null>;
|
|
30
|
+
get name(): string;
|
|
31
|
+
get version(): string;
|
|
32
|
+
get reference(): string;
|
|
33
|
+
get cwd(): string;
|
|
34
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ink from 'ink';
|
|
2
|
+
import { Container, interfaces } from 'inversify';
|
|
3
|
+
import 'reflect-metadata';
|
|
4
|
+
export declare const INK_APP: interfaces.ServiceIdentifier<ink.Instance>;
|
|
5
|
+
export declare const SERVICES_CONFIG: interfaces.ServiceIdentifier<ServicesConfig>;
|
|
6
|
+
export declare const CURRENT: unique symbol;
|
|
7
|
+
export interface ServicesConfig {
|
|
8
|
+
jobs?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const container: Container;
|
|
11
|
+
export declare const lazyInject: (serviceIdentifier: string | symbol | interfaces.Newable<any> | interfaces.Abstract<any>) => (proto: any, key: string) => void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Argv } from 'yargs';
|
|
2
|
+
import { type Config } from '@/src/services/config/types';
|
|
3
|
+
import { Logger } from '@/src/services/logger.service';
|
|
4
|
+
export declare class PluginLoaderService {
|
|
5
|
+
private readonly _config;
|
|
6
|
+
private readonly _logger;
|
|
7
|
+
constructor(_config: Config, logger: Logger);
|
|
8
|
+
private _importPlugin;
|
|
9
|
+
loadPlugins(parser: Argv): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EventSource } from '@jujulego/event-tree';
|
|
2
|
+
export type SpinnerStatus = 'spin' | 'stop' | 'success' | 'failed';
|
|
3
|
+
export interface SpinnerState {
|
|
4
|
+
status: SpinnerStatus;
|
|
5
|
+
label: string;
|
|
6
|
+
}
|
|
7
|
+
export type SpinnerEventMap = Record<`update.${SpinnerStatus}`, SpinnerState>;
|
|
8
|
+
export declare class SpinnerService extends EventSource<SpinnerEventMap> {
|
|
9
|
+
private _status;
|
|
10
|
+
private _label;
|
|
11
|
+
spin(label: string): void;
|
|
12
|
+
success(label: string): void;
|
|
13
|
+
failed(label: string): void;
|
|
14
|
+
stop(): void;
|
|
15
|
+
get state(): SpinnerState;
|
|
16
|
+
}
|