@art-work/cli 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/cjs/commands/checkouts/runCheckoutsRun.d.ts +1 -1
  2. package/dist/cjs/commands/checkouts/runCheckoutsRun.d.ts.map +1 -1
  3. package/dist/cjs/index.js +9 -8
  4. package/dist/cjs/index.js.map +2 -2
  5. package/dist/cjs/private/commands/checkouts/doCheckoutRun.d.ts +1 -1
  6. package/dist/cjs/private/commands/checkouts/doCheckoutRun.d.ts.map +1 -1
  7. package/dist/cjs/private/exec/runCommandInDirectory.d.ts +1 -1
  8. package/dist/cjs/private/exec/runCommandInDirectory.d.ts.map +1 -1
  9. package/dist/commands/checkouts/runCheckoutsRun.d.ts +1 -1
  10. package/dist/commands/checkouts/runCheckoutsRun.d.ts.map +1 -1
  11. package/dist/esm/commands/checkouts/runCheckoutRun.test.mjs +6 -17
  12. package/dist/esm/commands/checkouts/runCheckoutRun.test.mjs.map +2 -2
  13. package/dist/esm/commands/checkouts/runCheckoutsRun.d.ts +1 -1
  14. package/dist/esm/commands/checkouts/runCheckoutsRun.d.ts.map +1 -1
  15. package/dist/esm/commands/checkouts/runCheckoutsRun.mjs +1 -1
  16. package/dist/esm/commands/checkouts/runCheckoutsRun.mjs.map +2 -2
  17. package/dist/esm/index.mjs +1 -1
  18. package/dist/esm/index.mjs.map +2 -2
  19. package/dist/esm/private/commands/checkouts/doCheckoutRun.d.ts +1 -1
  20. package/dist/esm/private/commands/checkouts/doCheckoutRun.d.ts.map +1 -1
  21. package/dist/esm/private/commands/checkouts/doCheckoutRun.mjs +6 -4
  22. package/dist/esm/private/commands/checkouts/doCheckoutRun.mjs.map +2 -2
  23. package/dist/esm/private/exec/runCommandInDirectory.d.ts +1 -1
  24. package/dist/esm/private/exec/runCommandInDirectory.d.ts.map +1 -1
  25. package/dist/esm/private/exec/runCommandInDirectory.mjs +1 -2
  26. package/dist/esm/private/exec/runCommandInDirectory.mjs.map +2 -2
  27. package/dist/private/commands/checkouts/doCheckoutRun.d.ts +1 -1
  28. package/dist/private/commands/checkouts/doCheckoutRun.d.ts.map +1 -1
  29. package/dist/private/exec/runCommandInDirectory.d.ts +1 -1
  30. package/dist/private/exec/runCommandInDirectory.d.ts.map +1 -1
  31. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts", "../../src/private/git/createOrSwitchBranch.ts", "../../src/private/git/hasLocalBranch.ts", "../../src/private/operations/createOperationFailure.ts", "../../src/private/operations/createOperationSuccess.ts", "../../src/private/resources/checkout/saveCheckoutRecord.ts", "../../src/private/resources/checkout/private/makeCheckoutFilename.ts", "../../src/private/commands/operations/createBranchOperation.ts", "../../src/private/commands/checkouts/doBranchCheckout.ts", "../../src/private/operations/createGenericOperation.ts", "../../src/private/present/presentCheckoutReport.ts", "../../src/private/present/formatTable.ts", "../../src/private/present/private/truncateMiddle.ts", "../../src/private/present/makeOperationLogLine.ts", "../../src/private/present/presentOperationsReport.ts", "../../src/private/resources/checkout/loadCheckoutRecords.ts", "../../src/private/resources/checkout/readCheckoutRecord.ts", "../../src/private/resources/repository/loadRepositoryRecords.ts", "../../src/private/resources/repository/readRepositoryRecord.ts", "../../src/private/scan/scanCheckoutState.ts", "../../src/private/git/getBehindAheadCount.ts", "../../src/private/git/getCurrentBranch.ts", "../../src/private/git/getRemoteBranch.ts", "../../src/private/git/getRemoteUrl.ts", "../../src/private/git/hasMergeConflicts.ts", "../../src/private/git/hasRemote.ts", "../../src/private/git/isDetachedHead.ts", "../../src/private/git/isDirty.ts", "../../src/private/git/remoteFetch.ts", "../../src/private/scan/states/createCommittedState.ts", "../../src/private/scan/states/createExistsState.ts", "../../src/private/scan/states/createNoConflictsState.ts", "../../src/private/scan/states/createNoDetachedState.ts", "../../src/private/scan/states/createRemoteState.ts", "../../src/private/scan/states/createRepoState.ts", "../../src/private/scan/states/createSyncState.ts", "../../src/private/scan/states/createWrongRemoteState.ts", "../../src/private/scan/private/createStateAccessor.ts", "../../src/private/scan/private/createCheckoutScan.ts", "../../src/private/scan/private/createCheckoutNoClonedScan.ts", "../../src/private/store/createCheckout.ts", "../../src/private/store/safePath.ts", "../../src/private/store/hydrateStoreFromRecords.ts", "../../src/private/async/runWithConcurrency.ts", "../../src/private/store/scanAllCheckoutsStates.ts", "../../src/commands/branch/runBranch.ts", "../../src/private/exec/runCommandInDirectory.ts", "../../src/private/commands/operations/createCheckoutRunOperation.ts", "../../src/private/commands/checkouts/doCheckoutRun.ts", "../../src/commands/checkouts/runCheckoutsRun.ts", "../../src/private/git/cloneCheckout.ts", "../../src/private/commands/operations/createCloneOperation.ts", "../../src/private/commands/doClone.ts", "../../src/commands/clone/private/cloneIfMissing.ts", "../../src/commands/clone/cloneAll.ts", "../../src/commands/clone/cloneSpecific.ts", "../../src/private/store/createCheckoutLocation.ts", "../../src/commands/clone/cloneStatus.ts", "../../src/commands/clone/runClone.ts", "../../src/private/commands/operations/createLinkedOperation.ts", "../../src/commands/link/runLink.ts", "../../src/private/commands/operations/createPublishOperation.ts", "../../src/commands/publish/runPublish.ts", "../../src/private/git/pullCheckout.ts", "../../src/private/commands/operations/createPullOperation.ts", "../../src/private/commands/checkouts/doPullCheckout.ts", "../../src/private/commands/workspaces/doPullWorkspaceCheckout.ts", "../../src/private/commands/workspaces/scanWorkspaceCheckout.ts", "../../src/commands/pull/runPull.ts", "../../src/private/git/pushCheckout.ts", "../../src/private/commands/operations/createPushOperation.ts", "../../src/private/commands/checkouts/doPushCheckout.ts", "../../src/private/commands/workspaces/doPushWorkspaceCheckout.ts", "../../src/commands/push/runPush.ts", "../../src/private/present/presentCheckoutRepositoryState.ts", "../../src/private/present/presentPackageStateReport.ts", "../../src/private/repositories/createPackageStateRecord.ts", "../../src/private/repositories/scanPackageStateRecord.ts", "../../src/private/repositories/getRepositoryCheckoutPackages.ts", "../../src/private/resources/namespace/loadNamespaceRecords.ts", "../../src/private/resources/namespace/readNamespaceRecord.ts", "../../src/private/resources/package/loadPackageRecords.ts", "../../src/private/resources/package/readPackageRecord.ts", "../../src/private/resources/project/loadProjectRecords.ts", "../../src/private/resources/project/readProjectRecord.ts", "../../src/private/resources/projectGraph/consolidateProjectGraph.ts", "../../src/private/resources/projectGraph/loadProjectGraph.ts", "../../src/commands/repo/runRepo.ts", "../../src/private/present/presentExtraneousReport.ts", "../../src/private/present/presentWorkspaceReport.ts", "../../src/commands/sanity/private/scanExtraneousCheckouts.ts", "../../src/private/scan/private/createExtraneousCheckout.ts", "../../src/commands/sanity/private/syncCheckouts.ts", "../../src/commands/sanity/runSanity.ts", "../../src/private/commands/workspaces/syncWorkspaceCheckout.ts", "../../src/commands/sync/runSync.ts", "../../src/private/commands/operations/createUnlinkOperation.ts", "../../src/commands/unlink/runUnlink.ts", "../../src/config/loadWorkspaceConfig.ts", "../../src/config/private/normalizeRecordPaths.ts", "../../src/config/defineConfig.ts", "../../src/private/context/createWorkspaceContext.ts", "../../src/private/log/createOperationsLog.ts", "../../src/private/store/createCheckoutStore.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\nimport { Command } from 'commander';\n\nimport { runBranch } from './commands/branch/runBranch';\nimport { runCheckoutsRun } from './commands/checkouts/runCheckoutsRun';\nimport { runClone } from './commands/clone/runClone';\nimport { runLink } from './commands/link/runLink';\nimport { runPublish } from './commands/publish/runPublish';\nimport { runPull } from './commands/pull/runPull';\nimport { runPush } from './commands/push/runPush';\nimport { runRepo } from './commands/repo/runRepo';\nimport { runSanity } from './commands/sanity/runSanity';\nimport { runSync } from './commands/sync/runSync';\nimport { runUnlink } from './commands/unlink/runUnlink';\nimport { loadWorkspaceConfig } from './config/loadWorkspaceConfig';\nimport { createWorkspaceContext } from './private/context/createWorkspaceContext';\nimport { createOperationsLog } from './private/log/createOperationsLog';\nimport { createGenericOperation } from './private/operations/createGenericOperation';\nimport type { Operation } from './private/operations/types';\nimport { makeOperationLogLine } from './private/present/makeOperationLogLine';\nimport { createCheckoutStore } from './private/store/createCheckoutStore';\n\nexport { defineConfig, loadWorkspaceConfig } from './config';\nexport type { WorkspaceConfig } from './config';\n\nconst program = new Command();\n\nconst logger = (op: Operation) => {\n\tconsole.info(makeOperationLogLine(op, { standalone: true }).join(' | '));\n};\n\nprogram.name('art-workspace').description('Workspace orchestration CLI').version('0.0.18');\n\nprogram\n\t.command('sanity')\n\t.description('Check git status across all repos')\n\t.option('-a, --auto', 'push clean unpushed repos')\n\t.option('-r, --refetch', 'fetch ahead/behind data from remote')\n\t.action(async (options: { auto?: boolean; refetch?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tconst auto = options.auto ?? false;\n\t\tconst refetch = options.refetch ?? false;\n\t\tawait runSanity(ctx, { auto, refetch });\n\t});\n\nprogram\n\t.command('clone')\n\t.description('Clone repos from manifest')\n\t.option('-a, --all', 'clone all repos')\n\t.argument('[name]', 'repo name to clone')\n\t.argument('[target]', 'target location (relative to checkouts path)')\n\t.action(\n\t\tasync (\n\t\t\trepoName: string | undefined,\n\t\t\tcheckoutInput: string | undefined,\n\t\t\toptions: { all?: boolean },\n\t\t) => {\n\t\t\tconst root = process.cwd();\n\t\t\tlogger(createGenericOperation('boot'));\n\t\t\tconst config = await loadWorkspaceConfig(root);\n\t\t\tconst store = createCheckoutStore();\n\t\t\tconst log = createOperationsLog(logger);\n\t\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\t\tawait runClone(ctx, { all: options.all, repoName, checkoutInput });\n\t\t},\n\t);\n\nprogram\n\t.command('branch')\n\t.description('Branch across checkouts')\n\t.argument('<branch>', 'branch name to create or switch to')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (branch: string, options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runBranch(ctx, { branch, checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('pull')\n\t.description('Pull clean checkouts that are behind')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runPull(ctx, { checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('push')\n\t.description('Push clean checkouts that are ahead')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runPush(ctx, { checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('sync')\n\t.description('Pull and push clean checkouts')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runSync(ctx, { checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('checkouts')\n\t.description('Checkout operations')\n\t.command('run')\n\t.description('Run a command in selected checkouts')\n\t.argument('<command...>', 'command to run')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (command: string[], options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runCheckoutsRun(ctx, { command, checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('repo')\n\t.description('List checkout resources')\n\t.argument('[checkouts...]', 'checkout locations to list (default: all checkouts)')\n\t.action(async (locations: string[]) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runRepo(ctx, { locations });\n\t});\n\nprogram\n\t.command('link')\n\t.description('Link packages for local dev')\n\t.action(async () => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runLink(ctx, { root });\n\t});\n\nprogram\n\t.command('unlink')\n\t.description('Unlink packages')\n\t.action(async () => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runUnlink(ctx, { root });\n\t});\n\nprogram\n\t.command('publish')\n\t.description('Publish packages')\n\t.option('-a, --auto', 'auto-publish')\n\t.action(async (options: { auto?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runPublish(ctx, { root, auto: options.auto });\n\t});\n\nprogram.parse();\n", "import simpleGit from 'simple-git';\n\nimport { hasLocalBranch } from './hasLocalBranch';\n\nexport async function createOrSwitchBranch(\n\tdir: string,\n\tbranch: string,\n): Promise<'created' | 'switched'> {\n\tconst git = simpleGit(dir);\n\tif (await hasLocalBranch(dir, branch)) {\n\t\tawait git.checkout(branch);\n\t\treturn 'switched';\n\t}\n\tawait git.checkoutLocalBranch(branch);\n\treturn 'created';\n}\n", "import simpleGit from 'simple-git';\n\nexport async function hasLocalBranch(dir: string, branch: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst out = await git.raw(['rev-parse', '--verify', '--quiet', `refs/heads/${branch}`]);\n\t\treturn out.trim().length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import type { OperationFailure, OperationPending } from './types';\n\nfunction formatRawError(raw: string): string {\n\tconst lines = raw\n\t\t.split('\\n')\n\t\t.map(l => l.trim())\n\t\t.filter(l => l.length > 0);\n\treturn lines.map(l => ' ' + l).join('\\n');\n}\n\nfunction extractReason(raw: string): string {\n\tconst match = raw.match(/\\(([^)]+)\\)/);\n\treturn match ? match[1] : (raw.split('\\n')[0]?.trim() ?? 'unknown error');\n}\n\nconst errorLabels: Record<string, string> = {\n\tclone: 'CloneError',\n\tpush: 'PushError',\n\tpull: 'PullError',\n\tpublish: 'PublishError',\n\tbranch: 'BranchError',\n\tlinked: 'LinkedError',\n\tunlink: 'UnlinkError',\n\trun: 'CheckoutRunError',\n};\n\nexport function createOperationFailure<T extends OperationPending>(\n\tpending: T,\n\terror: unknown,\n): OperationFailure {\n\tconst rawError = error instanceof Error ? error.message : String(error);\n\tconst label = errorLabels[pending.operation] ?? 'OperationError';\n\n\treturn {\n\t\t...pending,\n\t\toutcome: 'failure',\n\t\tfinishedTs: new Date(),\n\t\terror: rawError,\n\t\tmessage() {\n\t\t\treturn extractReason(this.error);\n\t\t},\n\t\terrorSerialized() {\n\t\t\treturn `${label}: ${pending.checkout?.repo?.name} \u2014 ${this.message()}\\n\\n${formatRawError(this.error)}`;\n\t\t},\n\t};\n}\n", "import type { OperationPending, OperationSuccess } from './types';\n\nexport function createOperationSuccess<T extends OperationPending>(\n\tpending: T,\n\tmessage?: string,\n): OperationSuccess {\n\treturn {\n\t\t...pending,\n\t\toutcome: 'success',\n\t\tfinishedTs: new Date(),\n\t\tmessage: message ? () => message : pending.message,\n\t};\n}\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../../config/types';\nimport type { CheckoutRecord } from '../types';\n\nimport { makeCheckoutFilename } from './private/makeCheckoutFilename';\n\nconst HARDCODED_TEMPLATE = `# Module\n\n## Checkout: {{ name }}\n\n**Repository:** {{ repository }}\n\n**Location:** \\`{{ location }}\\`\n\n**Branch:** \\`{{ branch }}\\`\n`;\n\nexport async function saveCheckoutRecord(\n\tconfig: WorkspaceConfig,\n\tdata: CheckoutRecord,\n\tfilename?: string,\n): Promise<string> {\n\tlet template = HARDCODED_TEMPLATE;\n\tconst templatePath = join(config.root.path, config.checkouts.template);\n\tif (existsSync(templatePath)) {\n\t\ttemplate = readFileSync(templatePath, 'utf-8');\n\t}\n\n\tconst fileName = filename ?? makeCheckoutFilename(config, data);\n\n\tlet content = template\n\t\t.replace('{{ name }}', data.name)\n\t\t.replace('{{ repository }}', data.repository ?? '')\n\t\t.replace('{{ location }}', data.location)\n\t\t.replace('{{ branch }}', data.branch);\n\n\tif (!data.repository) {\n\t\tcontent = content.replace(/\\*\\*Repository:\\*\\*\\s*\\n\\n?/g, '');\n\t}\n\tmkdirSync(dirname(fileName), { recursive: true });\n\twriteFileSync(fileName, content);\n\n\treturn fileName;\n}\n", "import { join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../../../config/types';\nimport type { CheckoutRecord } from '../../types';\n\nexport function makeCheckoutFilename(config: WorkspaceConfig, data: CheckoutRecord): string {\n\tconst slug = data.name.toLowerCase().replace(/\\s+/g, '-');\n\treturn join(config.root.path, config.checkouts.path, `${slug}-checkout.art`);\n}\n", "import type { BranchPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createBranchOperation(checkout: Checkout, branch: string): BranchPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'branch',\n\t\tbranch,\n\t\tmessage() {\n\t\t\treturn `branch ${branch}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOrSwitchBranch } from '../../git/createOrSwitchBranch';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { saveCheckoutRecord } from '../../resources/checkout/saveCheckoutRecord';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createBranchOperation } from '../operations/createBranchOperation';\n\nexport async function doBranchCheckout(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n\tbranch: string,\n): Promise<Checkout | null> {\n\tconst pending = createBranchOperation(checkout, branch);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tconst outcome = await createOrSwitchBranch(checkout.path, branch);\n\t\tctx.log.log(\n\t\t\tcreateOperationSuccess(\n\t\t\t\tpending,\n\t\t\t\toutcome === 'created' ? `created ${branch}` : `switched to ${branch}`,\n\t\t\t),\n\t\t);\n\n\t\tconst updated = { ...checkout, record: { ...checkout.record, branch } };\n\t\tctx.store.updateCheckout(updated);\n\t\tawait saveCheckoutRecord(ctx.config, updated.record, updated.filename);\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(createBranchOperation(checkout, branch), error));\n\t\treturn null;\n\t}\n}\n", "import type { OperationPending } from './types';\n\nfunction formatData(data: unknown): string {\n\treturn data ? JSON.stringify(data) : '';\n}\n\nexport function createGenericOperation(operation: string, data?: unknown): OperationPending {\n\treturn {\n\t\tts: new Date(),\n\t\toutcome: 'pending',\n\t\toperation,\n\t\tdata,\n\t\tmessage() {\n\t\t\treturn formatData(data);\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../config/types';\nimport type { Checkout } from '../store/types';\n\nimport { formatTable } from './formatTable';\n\nexport function presentCheckoutReport(config: WorkspaceConfig, checkouts: Checkout[]): void {\n\tconst items = [...checkouts];\n\titems.sort((a, b) => {\n\t\tif (a.repo?.remote === '' && b.repo?.remote !== '') return 1;\n\t\tif (a.repo?.remote !== '' && b.repo?.remote === '') return -1;\n\t\treturn a.repo?.name.localeCompare(b.repo?.name || '') || -1;\n\t});\n\n\tconst headers = ['repo', 'location', 'branch', 'states'];\n\tconst rows = items.map(c => [\n\t\tc.repo?.name || '-',\n\t\tjoin(config.clone.path, c.record.location),\n\t\tc.scan?.state('remote').branch || c.record.branch,\n\t\tc.scan?.issues().join('; ') || '-',\n\t]);\n\n\tconsole.info('Checkouts:');\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "export function formatTable(rows: string[][], headers: string[]): string {\n\tconst allRows = [headers, ...rows];\n\tconst colWidths = headers.map((_, colIdx) =>\n\t\tMath.max(...allRows.map(row => String(row[colIdx]).length)),\n\t);\n\n\tconst lines = allRows.map(row =>\n\t\trow.map((cell, i) => String(cell).padEnd(colWidths[i])).join(' '),\n\t);\n\n\treturn lines.join('\\n');\n}\n", "export function truncateMiddle(str: string, limit: number): string {\n\tif (str.length <= limit) {\n\t\treturn str;\n\t}\n\tconst keep = limit - 3;\n\tconst left = Math.ceil(keep / 2);\n\tconst right = Math.floor(keep / 2);\n\treturn `${str.slice(0, left)}[...]${str.slice(str.length - right)}`;\n}\n", "import type { OperationBase } from '../operations/types';\n\nimport { truncateMiddle } from './private/truncateMiddle';\n\nexport function makeOperationLogLine(\n\top: OperationBase,\n\toptions: { standalone?: boolean } = {},\n): string[] {\n\tconst { standalone } = options;\n\n\tconst timing = standalone ? `(${op.timing()}ms)` : String(op.timing());\n\n\treturn [\n\t\top.outcome === 'pending' ? '\u23F3' : op.outcome === 'success' ? '\uD83D\uDFE2' : '\uD83D\uDD34',\n\t\top.checkout?.repo?.name,\n\t\top.checkout?.record.location,\n\t\top.operation,\n\t\ttruncateMiddle(op.message(), 50),\n\t\top.finishedTs ? timing : '',\n\t].filter(Boolean) as string[];\n}\n", "import type { OperationsLog } from '../log/createOperationsLog';\n\nimport { formatTable } from './formatTable';\nimport { makeOperationLogLine } from './makeOperationLogLine';\n\nexport function presentOperationsReport(log: OperationsLog): void {\n\tconst operations = log.all();\n\tif (operations.length === 0) {\n\t\treturn;\n\t}\n\n\tconst headers = ['', 'repo', 'checkout', 'operation', 'message', 'ms'];\n\tconst rows = operations.map(op => makeOperationLogLine(op));\n\n\tconsole.info('Operations Report:');\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createGenericOperation } from '../../operations/createGenericOperation';\nimport type { RepositoryCheckoutRecord, RepositoryRecord } from '../types';\n\nimport { readCheckoutRecord } from './readCheckoutRecord';\n\nexport async function loadCheckoutRecords(\n\tctx: WorkspaceContext,\n\trepos: RepositoryRecord[],\n): Promise<RepositoryCheckoutRecord[]> {\n\tconst searchPath = ctx.config.root.path;\n\tctx.log.log(createGenericOperation('load-checkout-records', searchPath));\n\n\tconst recordFiles = await findRecordFiles(ctx.config.records, searchPath, ['Checkout']);\n\tconst checkouts = await Promise.all(\n\t\trecordFiles.map(async file => {\n\t\t\tconst record = await readCheckoutRecord(file);\n\t\t\tif (!record) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!record.name) {\n\t\t\t\tconsole.warn('checkout record with empty name, skipped');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst repo = repos.find(r => r.name === record.repository);\n\t\t\tif (repo) {\n\t\t\t\treturn {\n\t\t\t\t\trepo,\n\t\t\t\t\tcheckout: record,\n\t\t\t\t\tfilename: file.filename,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcheckout: record,\n\t\t\t\tfilename: file.filename,\n\t\t\t};\n\t\t}),\n\t);\n\treturn checkouts.filter((checkout): checkout is RepositoryCheckoutRecord => checkout !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { CheckoutRecord } from '../types';\n\nexport async function readCheckoutRecord(file: FSRecordFile): Promise<CheckoutRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Checkout:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\treturn null;\n\t}\n\n\tconst repositoryMatch = content.match(/\\*\\*Repository:\\*\\*\\s*(.+)/);\n\tconst locationMatch = content.match(/\\*\\*Location:\\*\\*\\s*`([^`]+)`/);\n\tconst branchMatch = content.match(/\\*\\*Branch:\\*\\*\\s*`([^`]+)`/);\n\n\tif (!locationMatch) {\n\t\tconsole.warn(`checkout record ${file.filename}: missing location, using default`);\n\t}\n\tif (!branchMatch) {\n\t\tconsole.warn(`checkout record ${file.filename}: missing branch, using default`);\n\t}\n\n\treturn {\n\t\tname: nameMatch[1]?.trim() ?? '',\n\t\trepository: repositoryMatch?.[1]?.trim(),\n\t\tlocation: locationMatch?.[1]?.trim() ?? '',\n\t\tbranch: branchMatch?.[1]?.trim() ?? 'main',\n\t};\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createGenericOperation } from '../../operations/createGenericOperation';\nimport type { RepositoryRecord } from '../types';\n\nimport { readRepositoryRecord } from './readRepositoryRecord';\n\nexport async function loadRepositoryRecords(ctx: WorkspaceContext): Promise<RepositoryRecord[]> {\n\tconst searchPath = ctx.config.root.path;\n\tctx.log.log(createGenericOperation('load-repository-records', searchPath));\n\n\tconst recordFiles = await findRecordFiles(ctx.config.records, searchPath, ['Repository']);\n\tconst records = await Promise.all(recordFiles.map(file => readRepositoryRecord(file)));\n\treturn records.filter((record): record is RepositoryRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { RepositoryRecord } from '../types';\n\nexport async function readRepositoryRecord(file: FSRecordFile): Promise<RepositoryRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Repository:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\treturn null;\n\t}\n\n\tconst remoteMatch = content.match(/\\*\\*Remote:\\*\\*\\s*`([^`]+)`/);\n\tconst purposeMatch = content.match(/\\*\\*Purpose:\\*\\*\\s*(.+)/);\n\tconst descriptionMatch = content.match(/\\*\\*Description:\\*\\*\\s*(.+)/);\n\tconst consumersMatch = content.match(/\\*\\*Consumers:\\*\\*\\s*(.+)/);\n\n\tif (!remoteMatch) {\n\t\tconsole.warn(`repository record ${file.filename}: missing remote, using default`);\n\t}\n\n\treturn {\n\t\tname: nameMatch[1]?.trim() ?? '',\n\t\tremote: remoteMatch?.[1]?.trim() ?? '',\n\t\t...(purposeMatch ? { purpose: purposeMatch[1].trim() } : {}),\n\t\t...(descriptionMatch ? { description: descriptionMatch[1].trim() } : {}),\n\t\t...(consumersMatch ? { consumers: consumersMatch[1].trim() } : {}),\n\t};\n}\n", "import { access } from 'node:fs/promises';\n\nimport type { WorkspaceContext } from '../context/createWorkspaceContext';\nimport { getBehindAheadCount } from '../git/getBehindAheadCount';\nimport { getCurrentBranch } from '../git/getCurrentBranch';\nimport { getRemoteBranch } from '../git/getRemoteBranch';\nimport { getRemoteUrl } from '../git/getRemoteUrl';\nimport { hasMergeConflicts } from '../git/hasMergeConflicts';\nimport { hasRemote } from '../git/hasRemote';\nimport { isDetachedHead } from '../git/isDetachedHead';\nimport { isDirty } from '../git/isDirty';\nimport { remoteFetch } from '../git/remoteFetch';\nimport { createGenericOperation } from '../operations/createGenericOperation';\nimport { createOperationFailure } from '../operations/createOperationFailure';\nimport type { Checkout } from '../store/types';\n\nimport {\n\tcreateCheckoutNoClonedScan,\n\tcreateCheckoutScan,\n\tcreateCommittedState,\n\tcreateExistsState,\n\tcreateNoConflictsState,\n\tcreateNoDetachedState,\n\tcreateRemoteState,\n\tcreateRepoState,\n\tcreateSyncState,\n\tcreateWrongRemoteState,\n} from './types';\n\nexport async function scanCheckoutState(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n\trefetch = false,\n): Promise<Checkout> {\n\ttry {\n\t\tawait access(checkout.path);\n\t} catch {\n\t\treturn { ...checkout, scan: createCheckoutNoClonedScan(Boolean(checkout.repo)) };\n\t}\n\n\tctx.log.log(createGenericOperation('scan-checkout-state', checkout.record.location));\n\n\tlet branch: string | null = null;\n\tlet remoteBranch: string | null = null;\n\tlet remote = false;\n\tlet dirty = false;\n\tlet conflicts = false;\n\tlet detached = false;\n\tlet ahead = 0;\n\tlet behind = 0;\n\tlet wrongRemote = false;\n\ttry {\n\t\tbranch = await getCurrentBranch(checkout.path);\n\t\tremote = await hasRemote(checkout.path);\n\t\tdetached = await isDetachedHead(checkout.path);\n\t\tconflicts = await hasMergeConflicts(checkout.path);\n\t\tdirty = await isDirty(checkout.path);\n\t\tif (remote && branch !== '-' && branch !== 'HEAD') {\n\t\t\tremoteBranch = await getRemoteBranch(checkout.path);\n\t\t\tif (refetch) await remoteFetch(checkout.path);\n\t\t\tconst { ahead: aheadCount, behind: behindCount } = await getBehindAheadCount(\n\t\t\t\tcheckout.path,\n\t\t\t\tremoteBranch,\n\t\t\t);\n\t\t\tahead = aheadCount;\n\t\t\tbehind = behindCount;\n\t\t}\n\t\tif (remote && checkout.repo?.remote) {\n\t\t\tconst actualUrl = await getRemoteUrl(checkout.path);\n\t\t\tif (actualUrl && actualUrl !== checkout.repo.remote) {\n\t\t\t\twrongRemote = true;\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tctx.log.log(\n\t\t\tcreateOperationFailure(\n\t\t\t\tcreateGenericOperation('scan-checkout-state', checkout.record.location),\n\t\t\t\terror,\n\t\t\t),\n\t\t);\n\t}\n\n\tconst remoteState = createRemoteState(branch, checkout.record.branch, remote);\n\tconst scan = createCheckoutScan([\n\t\tcreateRepoState(Boolean(checkout.repo)),\n\t\tcreateExistsState(true),\n\t\tremoteState,\n\t\tcreateSyncState(ahead - behind, ahead, behind),\n\t\tcreateCommittedState(!dirty),\n\t\tcreateNoConflictsState(!conflicts),\n\t\tcreateNoDetachedState(!detached),\n\t\tcreateWrongRemoteState(wrongRemote),\n\t]);\n\treturn { ...checkout, scan };\n}\n", "import simpleGit from 'simple-git';\n\nexport interface AheadBehind {\n\tahead: number;\n\tbehind: number;\n}\n\nexport async function getBehindAheadCount(\n\tdir: string,\n\tremoteBranch: string | null,\n): Promise<AheadBehind> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tif (!remoteBranch) {\n\t\t\tconst ahead = await git.raw(['rev-list', '--count', 'HEAD', '--not', '--remotes=origin']);\n\t\t\treturn { ahead: Number.parseInt(ahead.trim(), 10) || 0, behind: 0 };\n\t\t}\n\t\tconst counts = await git.raw(['rev-list', '--left-right', '--count', `${remoteBranch}...HEAD`]);\n\t\tconst [behind, ahead] = counts.trim().split(/\\s+/).map(Number);\n\t\treturn { ahead, behind };\n\t} catch {\n\t\treturn { ahead: 0, behind: 0 };\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function getCurrentBranch(dir: string): Promise<string> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\tconst branch = status.current ?? 'HEAD';\n\t\tif (!status.current || status.current === 'HEAD') {\n\t\t\ttry {\n\t\t\t\tconst refOutput = await git.raw(['symbolic-ref', '-q', 'HEAD']);\n\t\t\t\tif (!refOutput.trim()) {\n\t\t\t\t\treturn 'HEAD';\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn 'HEAD';\n\t\t\t}\n\t\t}\n\t\treturn branch;\n\t} catch {\n\t\treturn '-';\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function getRemoteBranch(dir: string): Promise<string | null> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst branches = await git.branch();\n\t\tconst current = branches.current;\n\t\tif (!current || current === 'HEAD') {\n\t\t\treturn null;\n\t\t}\n\t\tconst tracking = branches.all.find(\n\t\t\tb => b === `origin/${current}` || b === `remotes/origin/${current}`,\n\t\t);\n\t\treturn tracking ? tracking.replace(/^remotes\\//, '') : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function getRemoteUrl(dir: string): Promise<string | null> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst config = await git.listConfig();\n\t\tconst url = config.all['remote.origin.url'];\n\t\tif (typeof url === 'string') return url;\n\t\tif (Array.isArray(url) && url.length > 0) return url[0];\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function hasMergeConflicts(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\treturn status.conflicted.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function hasRemote(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst remotes = await git.getRemotes(false);\n\t\treturn remotes.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function isDetachedHead(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\tif (status.current && status.current !== 'HEAD') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\tconst refOutput = await git.raw(['symbolic-ref', '-q', 'HEAD']);\n\t\t\treturn !refOutput.trim();\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function isDirty(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\treturn status.files.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function remoteFetch(dir: string): Promise<void> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tawait git.fetch('origin');\n\t} catch {\n\t\t// Remote unreachable: swallow so the cheap count still reflects last-known state.\n\t}\n}\n", "import type { CheckoutStateCommitted } from '../types';\n\nexport const createCommittedState = (clean: boolean): CheckoutStateCommitted => ({\n\ttype: 'committed',\n\tclean,\n});\n", "import type { CheckoutStateExists } from '../types';\n\nexport const createExistsState = (exists: boolean): CheckoutStateExists => ({\n\ttype: 'exists',\n\texists,\n});\n", "import type { CheckoutStateNoConflicts } from '../types';\n\nexport const createNoConflictsState = (clear: boolean): CheckoutStateNoConflicts => ({\n\ttype: 'no-conflicts',\n\tclear,\n});\n", "import type { CheckoutStateNoDetached } from '../types';\n\nexport const createNoDetachedState = (attached: boolean): CheckoutStateNoDetached => ({\n\ttype: 'no-detached',\n\tattached,\n});\n", "import type { CheckoutStateRemote } from '../types';\n\nexport const createRemoteState = (\n\tbranch: string | null,\n\texpectedBranch: string,\n\thasRemote: boolean,\n): CheckoutStateRemote => ({ type: 'remote', branch, expectedBranch, hasRemote });\n", "import type { CheckoutStateRepo } from '../types';\n\nexport const createRepoState = (known: boolean): CheckoutStateRepo => ({ type: 'repo', known });\n", "import type { CheckoutStateSync } from '../types';\n\nexport const createSyncState = (\n\tdelta: number,\n\tahead = Math.max(delta, 0),\n\tbehind = Math.max(-delta, 0),\n): CheckoutStateSync => ({\n\ttype: 'sync',\n\tdelta,\n\tahead,\n\tbehind,\n});\n", "import type { CheckoutStateWrongRemote } from '../types';\n\nexport const createWrongRemoteState = (wrong: boolean): CheckoutStateWrongRemote => ({\n\ttype: 'wrong-remote',\n\twrong,\n});\n", "import type { CheckoutScan, CheckoutState, CheckoutStateOf, CheckoutStateType } from '../types';\n\nexport function createStateAccessor(states: CheckoutState[]): CheckoutScan['state'] {\n\treturn <T extends CheckoutStateType>(type: T): CheckoutStateOf<T> => {\n\t\tconst state = states.find(item => item.type === type);\n\t\tif (!state) throw new Error(`missing checkout state: ${type}`);\n\t\treturn state as CheckoutStateOf<T>;\n\t};\n}\n", "import type { CheckoutOp } from '../../operations/types';\nimport type { CheckoutScan, CheckoutState } from '../types';\n\nimport { createStateAccessor } from './createStateAccessor';\n\nexport function createCheckoutScan(states: CheckoutState[]): CheckoutScan {\n\tconst state = createStateAccessor(states);\n\n\tconst issues = (): string[] => {\n\t\tconst result: string[] = [];\n\t\tconst repo = state('repo');\n\t\tconst exists = state('exists');\n\t\tconst remote = state('remote');\n\t\tconst sync = state('sync');\n\t\tif (!repo.known) result.push('unknown project');\n\t\tif (!exists.exists) return [...result, 'not cloned'];\n\t\tif (!state('no-detached').attached) result.push('detached HEAD');\n\t\tif (\n\t\t\tremote.expectedBranch !== '' &&\n\t\t\tremote.branch !== remote.expectedBranch &&\n\t\t\tstate('no-detached').attached\n\t\t) {\n\t\t\tresult.push('wrong branch');\n\t\t}\n\t\tif (!state('no-conflicts').clear) result.push('merge conflicts');\n\t\tif (!remote.hasRemote) result.push('no remote');\n\t\tif (remote.hasRemote && state('wrong-remote').wrong) result.push('wrong remote');\n\t\tif (!state('committed').clean) result.push('uncommitted files');\n\t\tif (sync.ahead > 0) result.push(`${sync.ahead} commit${sync.ahead === 1 ? '' : 's'} ahead`);\n\t\tif (sync.behind > 0) {\n\t\t\tconst count = sync.behind;\n\t\t\tresult.push(`${count} commit${count === 1 ? '' : 's'} behind`);\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn {\n\t\tstates,\n\t\tstate,\n\t\tissues,\n\t\tcan: (op: CheckoutOp) => {\n\t\t\tif (op === 'clone') return !state('exists').exists;\n\t\t\tif (op === 'branch') return state('exists').exists && state('no-detached').attached;\n\t\t\tconst exists = state('exists');\n\t\t\tconst remote = state('remote');\n\t\t\treturn (\n\t\t\t\texists.exists &&\n\t\t\t\tremote.branch === remote.expectedBranch &&\n\t\t\t\tstate('committed').clean &&\n\t\t\t\tstate('no-conflicts').clear &&\n\t\t\t\tstate('no-detached').attached &&\n\t\t\t\tremote.hasRemote\n\t\t\t);\n\t\t},\n\t\tshould: (op: CheckoutOp) => {\n\t\t\tif (op === 'clone') return !state('exists').exists;\n\t\t\tif (op === 'pull') return state('sync').behind > 0;\n\t\t\tif (op === 'push') return state('sync').ahead > 0;\n\t\t\treturn false;\n\t\t},\n\t};\n}\n", "import { createCommittedState } from '../states/createCommittedState';\nimport { createExistsState } from '../states/createExistsState';\nimport { createNoConflictsState } from '../states/createNoConflictsState';\nimport { createNoDetachedState } from '../states/createNoDetachedState';\nimport { createRemoteState } from '../states/createRemoteState';\nimport { createRepoState } from '../states/createRepoState';\nimport { createSyncState } from '../states/createSyncState';\nimport type { CheckoutScan } from '../types';\n\nimport { createCheckoutScan } from './createCheckoutScan';\n\nexport function createCheckoutNoClonedScan(known: boolean): CheckoutScan {\n\treturn createCheckoutScan([\n\t\tcreateRepoState(known),\n\t\tcreateExistsState(false),\n\t\tcreateRemoteState(null, '', false),\n\t\tcreateSyncState(0),\n\t\tcreateCommittedState(true),\n\t\tcreateNoConflictsState(true),\n\t\tcreateNoDetachedState(true),\n\t]);\n}\n", "import path, { join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../config';\nimport type { RepositoryRecord } from '../resources/types';\n\nimport { safePath } from './safePath';\nimport type { Checkout } from './types';\n\nexport type { Checkout } from './types';\n\nexport function createCheckout(\n\tconfig: WorkspaceConfig,\n\ttarget: string,\n\trepo?: RepositoryRecord,\n\tbranch?: string,\n\tname?: string,\n): Checkout {\n\tconst basePath = join(config.root.path, config.clone.path);\n\tconst l = safePath(target);\n\tconst r = repo;\n\tconst b = branch ?? 'main';\n\tconst n = name || (r?.name ? r?.name + ' @ ' + target : target);\n\n\treturn {\n\t\trepo: r,\n\t\trecord: { name: n, location: l, branch: b, repository: r?.name },\n\t\tpath: path.join(basePath, l),\n\t};\n}\n", "export function safePath(pathStr: string): string {\n\treturn pathStr\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z-]/g, '-')\n\t\t.replace(/-+/g, '-');\n}\n", "import type { WorkspaceConfig } from '../../config/types';\nimport type { RepositoryCheckoutRecord } from '../resources/types';\n\nimport { createCheckout } from './createCheckout';\nimport type { CheckoutStore } from './createCheckoutStore';\n\nexport function hydrateStoreFromRecords(\n\tconfig: WorkspaceConfig,\n\tstore: CheckoutStore,\n\trecords: RepositoryCheckoutRecord[],\n): void {\n\tfor (const record of records) {\n\t\tconst checkout = createCheckout(\n\t\t\tconfig,\n\t\t\trecord.checkout.location,\n\t\t\trecord.repo,\n\t\t\trecord.checkout.branch,\n\t\t\trecord.checkout.name,\n\t\t);\n\t\tstore.addCheckout({ ...checkout, filename: record.filename });\n\t}\n}\n", "export async function runWithConcurrency<T>(\n\titems: readonly T[],\n\tlimit: number,\n\ttask: (item: T) => Promise<void>,\n): Promise<void> {\n\tlet index = 0;\n\tconst workers = Array.from({ length: Math.min(limit, items.length) }, async () => {\n\t\twhile (index < items.length) {\n\t\t\tconst i = index++;\n\t\t\tawait task(items[i]);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n}\n", "import { runWithConcurrency } from '../async/runWithConcurrency';\nimport type { WorkspaceContext } from '../context/createWorkspaceContext';\nimport { createGenericOperation } from '../operations/createGenericOperation';\nimport { scanCheckoutState } from '../scan/scanCheckoutState';\n\nexport async function scanAllCheckoutsStates(\n\tctx: WorkspaceContext,\n\trefetch = false,\n): Promise<void> {\n\tctx.log.log(createGenericOperation('scan-all-checkouts'));\n\tawait runWithConcurrency(ctx.store.getAllCheckouts(), 4, async checkout => {\n\t\tconst updated = await scanCheckoutState(ctx, checkout, refetch);\n\t\tctx.store.updateCheckout(updated);\n\t});\n}\n", "import { doBranchCheckout } from '../../private/commands/checkouts/doBranchCheckout';\nimport { createBranchOperation } from '../../private/commands/operations/createBranchOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { createOperationFailure } from '../../private/operations/createOperationFailure';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { scanCheckoutState } from '../../private/scan/scanCheckoutState';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runBranch(\n\tctx: WorkspaceContext,\n\toptions: { branch: string; checkouts?: string[]; all?: boolean },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['branch', options.branch, options.checkouts]));\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace branch [options] -c <pattern>\\` or \\`art-workspace branch [options] --all\\` if you want to apply the branch to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst { branch, checkouts } = options;\n\tconst resolvedCheckouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(checkouts ?? []);\n\n\tfor (const checkout of resolvedCheckouts) {\n\t\tconst scanned = await scanCheckoutState(ctx, checkout);\n\t\tctx.store.updateCheckout(scanned);\n\n\t\tif (!scanned.scan?.can?.('branch')) {\n\t\t\tctx.log.log(\n\t\t\t\tcreateOperationFailure(createBranchOperation(scanned, branch), 'checkout not cloned'),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tawait doBranchCheckout(ctx, scanned, branch);\n\t}\n\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentOperationsReport(ctx.log);\n}\n", "import { spawn } from 'node:child_process';\n\nexport interface RunCommandOutcome {\n\tcode: number | null;\n\toutput: string;\n\terror: string;\n}\n\nexport function runCommandInDirectory(dir: string, command: string[]): Promise<RunCommandOutcome> {\n\treturn new Promise(resolve => {\n\t\tconst [cmd, ...args] = command.length === 1 ? command[0].split(/\\s+/) : command;\n\t\tconst child = spawn(cmd, args, { cwd: dir });\n\t\tlet output = '';\n\t\tlet error = '';\n\t\tchild.stdout?.on('data', chunk => (output += chunk));\n\t\tchild.stderr?.on('data', chunk => (error += chunk));\n\t\tchild.on('error', err => resolve({ code: null, output, error: err.message }));\n\t\tchild.on('exit', code => resolve({ code, output, error }));\n\t});\n}\n", "import type { CheckoutRunPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createCheckoutRunOperation(\n\tcheckout: Checkout,\n\tcommand: string,\n): CheckoutRunPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'run',\n\t\tcommand,\n\t\tmessage() {\n\t\t\treturn command;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { runCommandInDirectory } from '../../exec/runCommandInDirectory';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createCheckoutRunOperation } from '../operations/createCheckoutRunOperation';\n\nexport async function doCheckoutRun(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n\tcommand: string[],\n): Promise<Checkout | null> {\n\tconst commandLine = command.join(' ');\n\n\tif (!checkout.scan?.state('exists').exists) {\n\t\tconst op = createOperationFailure(\n\t\t\tcreateCheckoutRunOperation(checkout, commandLine),\n\t\t\tnew Error('checkout not cloned'),\n\t\t);\n\t\tctx.log.log(op);\n\t\treturn null;\n\t}\n\n\tconst pending = createCheckoutRunOperation(checkout, commandLine);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tconst runOutcome = await runCommandInDirectory(checkout.path, command);\n\t\tif (runOutcome.code === 0) {\n\t\t\tctx.log.log(createOperationSuccess(pending));\n\t\t} else {\n\t\t\tctx.log.log(createOperationFailure(pending, new Error(`Exit code: ${runOutcome.code}`)));\n\t\t}\n\t\tif (!runOutcome.output.trim() && !runOutcome.error.trim()) {\n\t\t\tconsole.info('\\n--- [No output]\\n');\n\t\t} else {\n\t\t\tif (runOutcome.output) {\n\t\t\t\tconsole.info('\\n--- Output:\\n');\n\t\t\t\tconsole.info(runOutcome.output);\n\t\t\t\tconsole.info('');\n\t\t\t}\n\t\t\tif (runOutcome.error) {\n\t\t\t\tconsole.error('\\n--- Error:\\n');\n\t\t\t\tconsole.error(runOutcome.error);\n\t\t\t\tconsole.error('');\n\t\t\t}\n\t\t}\n\t\treturn checkout;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doCheckoutRun } from '../../private/commands/checkouts/doCheckoutRun';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runCheckoutsRun(\n\tctx: WorkspaceContext,\n\toptions: { command: string[]; checkouts?: string[]; all?: boolean },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['checkouts', 'run', options.command]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace checkouts run [options] -c <pattern>\\` or \\`art-workspace checkouts run [options] --all\\` if you want to run the command in all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tawait doCheckoutRun(ctx, checkout, options.command);\n\t});\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import simpleGit from 'simple-git';\n\nimport type { Checkout } from '../store/types';\n\nexport async function cloneCheckout(checkout: Checkout): Promise<void> {\n\tconst recordedBranch = checkout.record.branch;\n\tconst git = simpleGit('');\n\tif (!checkout.repo?.remote) {\n\t\tthrow new Error(``);\n\t}\n\tawait git.clone(checkout.repo.remote, checkout.path);\n\n\tif (recordedBranch) {\n\t\ttry {\n\t\t\tconst repoGit = simpleGit(checkout.path);\n\t\t\tawait repoGit.checkout(recordedBranch);\n\t\t} catch {\n\t\t\t// recorded branch not on remote \u2014 stay on default branch\n\t\t}\n\t}\n}\n", "import type { ClonePending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createCloneOperation(checkout: Checkout | undefined): ClonePending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'clone',\n\t\tlocation: checkout?.record.location ?? 'unknown',\n\t\tmessage() {\n\t\t\treturn checkout ? `to ${checkout.record.location}` : 'clone';\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../context/createWorkspaceContext';\nimport { cloneCheckout } from '../git/cloneCheckout';\nimport { getCurrentBranch } from '../git/getCurrentBranch';\nimport { createOperationFailure } from '../operations/createOperationFailure';\nimport { createOperationSuccess } from '../operations/createOperationSuccess';\nimport { saveCheckoutRecord } from '../resources/checkout/saveCheckoutRecord';\nimport { scanCheckoutState } from '../scan/scanCheckoutState';\nimport type { Checkout } from '../store/createCheckout';\n\nimport { createCloneOperation } from './operations/createCloneOperation';\n\nexport async function doClone(ctx: WorkspaceContext, checkout: Checkout): Promise<Checkout | null> {\n\tif (!checkout.repo) return null;\n\n\tconst pending = createCloneOperation(checkout);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait cloneCheckout(checkout);\n\t\tconst rescan = await scanCheckoutState(ctx, checkout);\n\t\tctx.store.updateCheckout(rescan);\n\t\tctx.log.log(createOperationSuccess(createCloneOperation(rescan)));\n\n\t\tconst actualBranch = await getCurrentBranch(checkout.path);\n\t\tawait saveCheckoutRecord(ctx.config, {\n\t\t\tname: rescan.record.name,\n\t\t\trepository: rescan.repo?.name,\n\t\t\tlocation: rescan.record.location,\n\t\t\tbranch: actualBranch || rescan.record.branch || 'main',\n\t\t});\n\n\t\treturn rescan;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import { doClone } from '../../../private/commands/doClone';\nimport type { WorkspaceContext } from '../../../private/context/createWorkspaceContext';\nimport { scanCheckoutState } from '../../../private/scan/scanCheckoutState';\nimport type { Checkout } from '../../../private/store/createCheckout';\n\nexport async function cloneIfMissing(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n): Promise<Checkout | null> {\n\tconst scanned = await scanCheckoutState(ctx, checkout);\n\tif (!scanned.scan?.should?.('clone')) {\n\t\treturn scanned;\n\t}\n\n\tif (!scanned.repo) {\n\t\treturn null;\n\t}\n\n\treturn doClone(ctx, scanned);\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport type { RepositoryRecord } from '../../private/resources/types';\nimport { createCheckout } from '../../private/store/createCheckout';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nimport { cloneIfMissing } from './private/cloneIfMissing';\n\nexport async function cloneAll(ctx: WorkspaceContext, repos: RepositoryRecord[]): Promise<void> {\n\tfor (const repo of repos) {\n\t\tif (!ctx.store.getCheckoutOfRepo(repo.name)) {\n\t\t\tconst checkout = createCheckout(ctx.config, repo.name, repo);\n\t\t\tctx.store.addCheckout(checkout);\n\t\t}\n\t}\n\n\tfor (const checkout of ctx.store.getAllCheckouts()) {\n\t\tawait cloneIfMissing(ctx, checkout);\n\t}\n\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentOperationsReport(ctx.log);\n}\n", "import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { createCloneOperation } from '../../private/commands/operations/createCloneOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createOperationFailure } from '../../private/operations/createOperationFailure';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { saveCheckoutRecord } from '../../private/resources/checkout/saveCheckoutRecord';\nimport type { RepositoryRecord } from '../../private/resources/types';\nimport { createCheckout } from '../../private/store/createCheckout';\nimport { createCheckoutLocation } from '../../private/store/createCheckoutLocation';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nimport { cloneIfMissing } from './private/cloneIfMissing';\n\nexport async function cloneSpecific(\n\tctx: WorkspaceContext,\n\trepos: RepositoryRecord[],\n\trepoName: string,\n\tcheckoutInput?: string,\n): Promise<void> {\n\tconst canonical = repoName.startsWith('@') ? repoName.split('/')[1] : repoName;\n\tconst repo = repos.find(r => r.name.toLowerCase() === canonical.toLowerCase());\n\n\tif (!repo) {\n\t\tctx.log.log(\n\t\t\tcreateOperationFailure(createCloneOperation(undefined), `unknown repo \"${repoName}\"`),\n\t\t);\n\t\tpresentOperationsReport(ctx.log);\n\t\treturn;\n\t}\n\n\tconst location = createCheckoutLocation(repo, checkoutInput);\n\n\tconst existing = ctx.store.getCheckoutForLocation(location);\n\tif (existing && existing.repo?.name !== repo.name) {\n\t\tconst msg = `location ${location} is already used by checkout '${existing.record.name}'.`;\n\t\tctx.log.log(createOperationFailure(createCloneOperation(existing), msg));\n\t\tpresentOperationsReport(ctx.log);\n\t\treturn;\n\t}\n\n\tif (existing) {\n\t\tawait cloneIfMissing(ctx, existing);\n\t} else {\n\t\tconst targetDir = join(ctx.config.root.path, ctx.config.clone.path, location);\n\t\tif (existsSync(targetDir)) {\n\t\t\tconst msg = `directory already exists at ${targetDir}`;\n\t\t\tctx.log.log(createOperationFailure(createCloneOperation(undefined), msg));\n\t\t\tpresentOperationsReport(ctx.log);\n\t\t\treturn;\n\t\t}\n\n\t\tconst checkoutName = checkoutInput ? `${repo.name} @ ${checkoutInput}` : repo.name;\n\t\tconst created = createCheckout(ctx.config, location, repo, 'main', checkoutName);\n\n\t\tctx.store.addCheckout(created);\n\t\tawait saveCheckoutRecord(ctx.config, created.record);\n\n\t\tawait cloneIfMissing(ctx, created);\n\t}\n\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentOperationsReport(ctx.log);\n}\n", "import type { RepositoryRecord } from '../resources/types';\n\nimport { safePath } from './safePath';\n\nexport function createCheckoutLocation(repo: RepositoryRecord, target?: string): string {\n\treturn safePath(target ? repo.name + ' ' + target : repo.name);\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function cloneStatus(ctx: WorkspaceContext): Promise<void> {\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\n\nimport { cloneAll } from './cloneAll';\nimport { cloneSpecific } from './cloneSpecific';\nimport { cloneStatus } from './cloneStatus';\n\ninterface CloneOptions {\n\tall?: boolean;\n\trepoName?: string;\n\tcheckoutInput?: string;\n}\n\nexport async function runClone(\n\tctx: WorkspaceContext,\n\t{ all, repoName, checkoutInput }: CloneOptions,\n): Promise<WorkspaceContext> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['clone', { all, repoName, checkoutInput }]));\n\n\tif (all) {\n\t\tawait cloneAll(ctx, repos);\n\t} else if (repoName) {\n\t\tawait cloneSpecific(ctx, repos, repoName, checkoutInput);\n\t} else {\n\t\tawait cloneStatus(ctx);\n\t}\n\n\treturn ctx;\n}\n", "import type { LinkedPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createLinkedOperation(\n\tcheckout: Checkout | undefined,\n\tpkg: string,\n\ttarget: string,\n): LinkedPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'linked',\n\t\tpackage: pkg,\n\t\ttarget,\n\t\tmessage() {\n\t\t\treturn `linking ${pkg}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { createLinkedOperation } from '../../private/commands/operations/createLinkedOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport async function runLink(ctx: WorkspaceContext, _options: { root: string }): Promise<void> {\n\tctx.log.log(createGenericOperation('command', ['link']));\n\tctx.log.log(createLinkedOperation(ctx.workspace, '', ''));\n\t// TODO: implement link command\n\tconsole.info('link command - TODO');\n}\n", "import type { PublishPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createPublishOperation(\n\tcheckout: Checkout | undefined,\n\tpkg: string,\n\tversion: string,\n): PublishPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'publish',\n\t\tpackage: pkg,\n\t\tversion,\n\t\tmessage() {\n\t\t\treturn `publishing ${pkg}@${version}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { createPublishOperation } from '../../private/commands/operations/createPublishOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport async function runPublish(\n\tctx: WorkspaceContext,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t_options: { root: string; auto?: boolean },\n): Promise<void> {\n\tctx.log.log(createGenericOperation('command', ['publish', _options.auto]));\n\tctx.log.log(createPublishOperation(ctx.workspace, '', ''));\n\t// TODO: implement publish command\n\tconsole.info('publish command - TODO');\n}\n", "import simpleGit from 'simple-git';\n\nimport type { Checkout } from '../store/types';\n\nexport async function pullCheckout(checkout: Checkout): Promise<void> {\n\tconst git = simpleGit(checkout.path);\n\tawait git.pull('origin', checkout.record.branch);\n}\n", "import type { PullPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createPullOperation(checkout: Checkout, branch: string): PullPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'pull',\n\t\tbranch,\n\t\tmessage() {\n\t\t\treturn `from origin/${branch}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { pullCheckout } from '../../git/pullCheckout';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPullOperation } from '../operations/createPullOperation';\n\nexport async function doPullCheckout(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n): Promise<Checkout | null> {\n\tconst pending = createPullOperation(checkout, checkout.record.branch);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait pullCheckout(checkout);\n\t\tconst updated = await scanCheckoutState(ctx, checkout, true);\n\t\tctx.store.updateCheckout(updated);\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPullOperation } from '../operations/createPullOperation';\n\nexport async function doPullWorkspaceCheckout(ctx: WorkspaceContext): Promise<Checkout | null> {\n\tconst workspace = ctx.workspace;\n\tif (!workspace) return null;\n\tif (!workspace.scan?.can?.('pull') || !workspace.scan.should?.('pull')) return null;\n\n\tconst pending = createPullOperation(workspace, workspace.record.branch);\n\tconst git = simpleGit(workspace.path);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait git.pull('origin', workspace.record.branch);\n\t\tconst updated = await scanCheckoutState(ctx, workspace, true);\n\t\tctx.workspace = updated;\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(\n\t\t\tcreateOperationFailure(createPullOperation(workspace, workspace.record.branch), error),\n\t\t);\n\t\treturn null;\n\t}\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createCheckout } from '../../store/createCheckout';\n\nexport async function scanWorkspaceCheckout(\n\tctx: WorkspaceContext,\n\trefetch = false,\n): Promise<Checkout | null> {\n\tconst workspaceCheckout = {\n\t\t...createCheckout(ctx.config, '.', undefined, 'main', 'Workspace'),\n\t\tpath: ctx.config.root.path,\n\t};\n\tconst workspace = await scanCheckoutState(ctx, workspaceCheckout, refetch);\n\tctx.workspace = workspace;\n\treturn workspace;\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doPullCheckout } from '../../private/commands/checkouts/doPullCheckout';\nimport { doPullWorkspaceCheckout } from '../../private/commands/workspaces/doPullWorkspaceCheckout';\nimport { scanWorkspaceCheckout } from '../../private/commands/workspaces/scanWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runPull(\n\tctx: WorkspaceContext,\n\toptions: { checkouts?: string[]; all?: boolean } = {},\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['pull', options.checkouts]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace pull [options] -c <pattern>\\` or \\`art-workspace pull [options] --all\\` if you want to apply the pull to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tif (checkout.scan?.can?.('pull') && checkout.scan.should?.('pull')) {\n\t\t\tawait doPullCheckout(ctx, checkout);\n\t\t}\n\t});\n\n\tawait scanWorkspaceCheckout(ctx);\n\tawait doPullWorkspaceCheckout(ctx);\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import simpleGit from 'simple-git';\n\nimport type { Checkout } from '../store/types';\n\nexport async function pushCheckout(checkout: Checkout): Promise<void> {\n\tconst git = simpleGit(checkout.path);\n\tawait git.push('origin', checkout.record.branch);\n}\n", "import type { PushPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createPushOperation(checkout: Checkout, branch: string): PushPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'push',\n\t\tbranch,\n\t\tmessage() {\n\t\t\treturn `to origin/${branch}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { pushCheckout } from '../../git/pushCheckout';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPushOperation } from '../operations/createPushOperation';\n\nexport async function doPushCheckout(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n): Promise<Checkout | null> {\n\tconst pending = createPushOperation(checkout, checkout.record.branch);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait pushCheckout(checkout);\n\t\tconst updated = await scanCheckoutState(ctx, checkout, true);\n\t\tctx.store.updateCheckout(updated);\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPushOperation } from '../operations/createPushOperation';\n\nexport async function doPushWorkspaceCheckout(ctx: WorkspaceContext): Promise<Checkout | null> {\n\tconst workspace = ctx.workspace;\n\tif (!workspace) return null;\n\tif (!workspace.scan?.can?.('push') || !workspace.scan.should?.('push')) return null;\n\n\tconst pending = createPushOperation(workspace, workspace.record.branch);\n\tconst git = simpleGit(workspace.path);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait git.push('origin', workspace.record.branch);\n\t\tconst updated = await scanCheckoutState(ctx, workspace, true);\n\t\tctx.workspace = updated;\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doPushCheckout } from '../../private/commands/checkouts/doPushCheckout';\nimport { doPushWorkspaceCheckout } from '../../private/commands/workspaces/doPushWorkspaceCheckout';\nimport { scanWorkspaceCheckout } from '../../private/commands/workspaces/scanWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runPush(\n\tctx: WorkspaceContext,\n\toptions: { checkouts?: string[]; all?: boolean } = {},\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['push', options.checkouts]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace push [options] -c <pattern>\\` or \\`art-workspace push [options] --all\\` if you want to apply the push to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tif (checkout.scan?.can?.('push') && checkout.scan.should?.('push')) {\n\t\t\tawait doPushCheckout(ctx, checkout);\n\t\t}\n\t});\n\n\tawait scanWorkspaceCheckout(ctx);\n\tawait doPushWorkspaceCheckout(ctx);\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import type { CheckoutRepositoryState } from '../../commands/repo/runRepo';\n\nexport function presentCheckoutRepositoryState(state: CheckoutRepositoryState): void {\n\tconsole.info(`Repository:`);\n\tconsole.info(` name: ${state.target.repo?.name || '(unknown)'}`);\n\tconsole.info(` name: ${state.target.repo?.remote || '(unknown)'}`);\n\tif (state.issues.length > 0) {\n\t\tconsole.info(` issues: ${state.issues.join('; ')}`);\n\t}\n\tconsole.info('');\n\n\tconsole.info(`Checkout:`);\n\tconsole.info(` record: ${state.target.filename || '(unknown)'}`);\n\tconsole.info(` location: ${state.target.record.location || '(unknown)'}`);\n\tconsole.info(` branch: ${state.branch || state.target.record.branch}`);\n\tif (state.target.scan && state.target.scan.issues().length > 0) {\n\t\tconsole.info(` states: ${state.target.scan.issues().join('; ')}`);\n\t}\n\tconsole.info('');\n}\n", "import type { PackageStateRecord } from '../resources/types';\nimport type { Checkout } from '../store/createCheckout';\n\nimport { formatTable } from './formatTable';\n\nexport function presentPackageStateReport(\n\tcheckout: Checkout,\n\tpackageStates: PackageStateRecord[],\n): void {\n\tif (packageStates.length === 0) {\n\t\treturn;\n\t}\n\n\tconst headers = ['package', 'version', 'published', 'states'];\n\tconst rows = packageStates.map(ps => [\n\t\tps.canonicalName,\n\t\tps.version ?? '-',\n\t\tps.publishedVersion ?? '-',\n\t\tps.states.join('; ') || '-',\n\t]);\n\n\tconsole.info(`Packages for ${checkout.record.name}:`);\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "import { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport type { PackageRecord, PackageStateRecord } from '../resources/types';\n\nexport function createPackageStateRecord(\n\tcheckoutPath: string,\n\tprojectPath: string,\n\tnsPath: string,\n\tpkg: PackageRecord,\n): { pkgPath: string; record: PackageStateRecord } {\n\tlet pkgPath = join(checkoutPath, projectPath, nsPath, pkg.path);\n\tlet pkgJsonPath = join(pkgPath, 'package.json');\n\n\tif (!existsSync(pkgJsonPath)) {\n\t\tconst altPath = join(checkoutPath, projectPath, pkg.path);\n\t\tconst altPkgJsonPath = join(altPath, 'package.json');\n\t\tif (existsSync(altPkgJsonPath)) {\n\t\t\tpkgPath = altPath;\n\t\t\tpkgJsonPath = altPkgJsonPath;\n\t\t}\n\t}\n\n\tconst record: PackageStateRecord = {\n\t\tcanonicalName: pkg.canonicalName,\n\t\tversion: null,\n\t\tpublishedVersion: null,\n\t\tdirectory: pkgPath,\n\t\tstates: [],\n\t};\n\n\tif (existsSync(pkgJsonPath)) {\n\t\ttry {\n\t\t\tconst pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));\n\t\t\trecord.version = pkgJson.version ?? null;\n\t\t} catch {\n\t\t\trecord.states.push('no package.json');\n\t\t}\n\t} else {\n\t\trecord.states.push('no package.json');\n\t}\n\n\treturn { pkgPath, record };\n}\n", "import { execSync } from 'node:child_process';\n\nimport type { PackageRecord, PackageStateRecord } from '../resources/types';\n\nexport function scanPackageStateRecord(pkg: PackageRecord, record: PackageStateRecord): void {\n\tif (record.version !== null && record.version !== '0.0.0') {\n\t\ttry {\n\t\t\tconst output = execSync(`npm info ${pkg.canonicalName} version`, {\n\t\t\t\tencoding: 'utf-8',\n\t\t\t\ttimeout: 10000,\n\t\t\t\tstdio: ['pipe', 'pipe', 'ignore'],\n\t\t\t});\n\t\t\trecord.publishedVersion = output.trim() || null;\n\t\t} catch {\n\t\t\trecord.publishedVersion = 'unknown';\n\t\t}\n\t}\n}\n", "import type { PackageStateRecord, ProjectGraph } from '../resources/types';\n\nimport { createPackageStateRecord } from './createPackageStateRecord';\nimport { scanPackageStateRecord } from './scanPackageStateRecord';\n\nexport function getRepositoryCheckoutPackages(\n\tcheckoutPath: string,\n\tgraph: ProjectGraph,\n): PackageStateRecord[] {\n\tconst packageStates: PackageStateRecord[] = [];\n\n\tfor (const project of graph.projects) {\n\t\tfor (const nsName of project.namespaceNames) {\n\t\t\tconst ns = graph.namespaces.get(nsName);\n\t\t\tif (!ns) continue;\n\t\t\tfor (const pkgName of ns.packageNames) {\n\t\t\t\tconst pkg = graph.packages.get(pkgName);\n\t\t\t\tif (!pkg) continue;\n\n\t\t\t\tconst { record } = createPackageStateRecord(checkoutPath, project.path, ns.path, pkg);\n\t\t\t\tscanPackageStateRecord(pkg, record);\n\t\t\t\tpackageStates.push(record);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn packageStates;\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceConfig } from '../../../config';\nimport type { NamespaceRecord } from '../types';\n\nimport { readNamespaceRecord } from './readNamespaceRecord';\n\nexport async function loadNamespaceRecords(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<NamespaceRecord[]> {\n\tconst recordFiles = await findRecordFiles(config.records, checkoutPath, ['Namespace']);\n\tconst records = await Promise.all(recordFiles.map(file => readNamespaceRecord(file)));\n\treturn records.filter((record): record is NamespaceRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { NamespaceRecord } from '../types';\n\nexport async function readNamespaceRecord(file: FSRecordFile): Promise<NamespaceRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Namespace:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\tconsole.warn(`namespace record ${file.filename}: missing name, skipped`);\n\t\treturn null;\n\t}\n\n\tconst pathMatch = content.match(/\\*\\*Path:\\*\\*\\s*`([^`]+)`/);\n\tconst packagesMatch = content.match(/\\*\\*Packages:\\*\\*\\s*([\\s\\S]*?)(?=\\n\\n|\\n\\*\\*|$)/);\n\n\tlet packageNames: string[] = [];\n\tif (packagesMatch) {\n\t\tpackageNames = packagesMatch[1]\n\t\t\t.split('\\n')\n\t\t\t.map(line => line.replace(/^-\\s*Package:\\s*/, '').trim())\n\t\t\t.filter(Boolean);\n\t}\n\n\treturn {\n\t\tkind: 'namespace',\n\t\tname: nameMatch[1].trim(),\n\t\tpath: pathMatch?.[1]?.trim() ?? '.',\n\t\tpackageNames,\n\t};\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceConfig } from '../../../config';\nimport type { PackageRecord } from '../types';\n\nimport { readPackageRecord } from './readPackageRecord';\n\nexport async function loadPackageRecords(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<PackageRecord[]> {\n\tconst recordFiles = await findRecordFiles(config.records, checkoutPath, ['Package']);\n\tconst records = await Promise.all(recordFiles.map(file => readPackageRecord(file)));\n\treturn records.filter((record): record is PackageRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { PackageRecord } from '../types';\n\nexport async function readPackageRecord(file: FSRecordFile): Promise<PackageRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Package:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\tconsole.warn(`package record ${file.filename}: missing name, skipped`);\n\t\treturn null;\n\t}\n\n\tconst canonicalNameMatch = content.match(/\\*\\*Canonical Name:\\*\\*\\s*`([^`]+)`/);\n\tconst pathMatch = content.match(/\\*\\*Path:\\*\\*\\s*`([^`]+)`/);\n\n\treturn {\n\t\tkind: 'package',\n\t\tname: nameMatch[1].trim(),\n\t\tcanonicalName: canonicalNameMatch?.[1]?.trim() ?? '',\n\t\tpath: pathMatch?.[1]?.trim() ?? '',\n\t};\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceConfig } from '../../../config';\nimport type { ProjectRecord } from '../types';\n\nimport { readProjectRecord } from './readProjectRecord';\n\nexport async function loadProjectRecords(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<ProjectRecord[]> {\n\tconst recordFiles = await findRecordFiles(config.records, checkoutPath, ['Project']);\n\n\tconst records = await Promise.all(recordFiles.map(file => readProjectRecord(file)));\n\treturn records.filter((record): record is ProjectRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { ProjectRecord } from '../types';\n\nexport async function readProjectRecord(file: FSRecordFile): Promise<ProjectRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Project:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\tconsole.warn(`project record ${file.filename}: missing name, skipped`);\n\t\treturn null;\n\t}\n\n\tconst pathMatch = content.match(/\\*\\*Path:\\*\\*\\s*`([^`]+)`/);\n\tconst namespacesMatch = content.match(/\\*\\*Namespaces:\\*\\*\\s*([\\s\\S]*?)(?=\\n\\n|\\n\\*\\*|$)/);\n\n\tlet namespaceNames: string[] = [];\n\tif (namespacesMatch) {\n\t\tnamespaceNames = namespacesMatch[1]\n\t\t\t.split('\\n')\n\t\t\t.map(line => line.replace(/^-\\s*Namespace:\\s*/, '').trim())\n\t\t\t.filter(Boolean);\n\t}\n\n\treturn {\n\t\tkind: 'project',\n\t\tname: nameMatch[1].trim(),\n\t\tpath: pathMatch?.[1]?.trim() ?? '.',\n\t\tnamespaceNames,\n\t};\n}\n", "import type { NamespaceRecord, PackageRecord, ProjectGraph, ProjectRecord } from '../types';\n\nexport function consolidateProjectGraph(\n\tprojects: ProjectRecord[],\n\tnamespaces: NamespaceRecord[],\n\tpackages: PackageRecord[],\n): ProjectGraph {\n\tconst warnings: string[] = [];\n\tconst nsMap = new Map<string, NamespaceRecord>();\n\tconst pkgMap = new Map<string, PackageRecord>();\n\n\tfor (const ns of namespaces) {\n\t\tnsMap.set(ns.name, ns);\n\t}\n\tfor (const pkg of packages) {\n\t\tpkgMap.set(pkg.name, pkg);\n\t}\n\n\tfor (const project of projects) {\n\t\tfor (const nsName of project.namespaceNames) {\n\t\t\tif (!nsMap.has(nsName)) {\n\t\t\t\twarnings.push(`unknown namespace: ${nsName}`);\n\t\t\t}\n\t\t}\n\t\tfor (const ns of namespaces) {\n\t\t\tif (!project.namespaceNames.includes(ns.name)) continue;\n\t\t\tfor (const pkgName of ns.packageNames) {\n\t\t\t\tif (!pkgMap.has(pkgName)) {\n\t\t\t\t\twarnings.push(`unknown package: ${pkgName}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { projects, namespaces: nsMap, packages: pkgMap, warnings };\n}\n", "import type { WorkspaceConfig } from '../../../config';\nimport { loadNamespaceRecords } from '../namespace/loadNamespaceRecords';\nimport { loadPackageRecords } from '../package/loadPackageRecords';\nimport { loadProjectRecords } from '../project/loadProjectRecords';\nimport type { ProjectGraph } from '../types';\n\nimport { consolidateProjectGraph } from './consolidateProjectGraph';\n\nexport async function loadProjectGraph(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<ProjectGraph> {\n\tconst [projects, namespaces, packages] = await Promise.all([\n\t\tloadProjectRecords(config, checkoutPath),\n\t\tloadNamespaceRecords(config, checkoutPath),\n\t\tloadPackageRecords(config, checkoutPath),\n\t]);\n\treturn consolidateProjectGraph(projects, namespaces, packages);\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutRepositoryState } from '../../private/present/presentCheckoutRepositoryState';\nimport { presentPackageStateReport } from '../../private/present/presentPackageStateReport';\nimport { getRepositoryCheckoutPackages } from '../../private/repositories/getRepositoryCheckoutPackages';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadProjectGraph } from '../../private/resources/projectGraph/loadProjectGraph';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport type { PackageStateRecord, ProjectGraph } from '../../private/resources/types';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\nimport type { Checkout } from '../../private/store/types';\n\nexport interface CheckoutRepositoryState {\n\ttarget: import('../../private/store/types').Checkout;\n\tbranch: string | null;\n\tissues: string[];\n\tgraph: ProjectGraph;\n}\n\nexport async function runRepo(\n\tctx: WorkspaceContext,\n\toptions: { locations?: string[] },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['repo', options.locations]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tconst { locations = [] } = options;\n\n\tconst checkouts: Map<string, Checkout> = new Map();\n\tif (locations.length === 0) {\n\t\tconst all = ctx.store.getAllCheckouts();\n\t\tall.forEach(checkout => checkouts.set(checkout.record.location, checkout));\n\t} else {\n\t\tfor (const name of locations) {\n\t\t\tconst checkout = ctx.store.getCheckoutByName(name) ?? ctx.store.getCheckoutForLocation(name);\n\t\t\tif (!checkout) {\n\t\t\t\tconsole.warn(`unknown checkout: ${name}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcheckouts.set(checkout.record.location, checkout);\n\t\t}\n\t}\n\n\tconst repositoryCheckoutStates = new Map<string, CheckoutRepositoryState>();\n\tconst repositoryCheckoutPackages = new Map<string, PackageStateRecord[]>();\n\n\tfor (const [location, checkout] of checkouts) {\n\t\tconst graph = await loadProjectGraph(ctx.config, checkout.path);\n\t\tconst repositoryState: CheckoutRepositoryState = {\n\t\t\ttarget: checkout,\n\t\t\tbranch: checkout.scan?.state('remote').branch ?? checkout.record.branch,\n\t\t\tissues: [],\n\t\t\tgraph,\n\t\t};\n\t\trepositoryCheckoutStates.set(location, repositoryState);\n\n\t\tfor (const w of graph.warnings) {\n\t\t\tconsole.warn(w);\n\t\t}\n\n\t\tif (graph.projects.length === 0) {\n\t\t\trepositoryState.issues.push('no project records');\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst packageStates = getRepositoryCheckoutPackages(checkout.path, graph);\n\t\trepositoryCheckoutPackages.set(location, packageStates);\n\t}\n\n\tfor (const [location, state] of repositoryCheckoutStates) {\n\t\tpresentCheckoutRepositoryState(state);\n\t\tconst packageStates = repositoryCheckoutPackages.get(location) ?? [];\n\t\tpresentPackageStateReport(state.target, packageStates);\n\t}\n}\n", "import type { Checkout } from '../store/types';\n\nimport { formatTable } from './formatTable';\n\nexport function presentExtraneousReport(extraneous: Checkout[]): void {\n\tif (extraneous.length === 0) {\n\t\treturn;\n\t}\n\n\tconst headers = ['directory', 'branch', 'states'];\n\tconst rows = extraneous.map(c => [\n\t\tc.record.location,\n\t\tc.scan?.state('remote').branch || c.record.branch,\n\t\tc.scan?.issues().join('; ') || 'clean',\n\t]);\n\n\tconsole.info('Untracked:');\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "import type { Checkout } from '../store/types';\n\nexport function presentWorkspaceReport(workspace?: Checkout): void {\n\tif (!workspace) {\n\t\treturn;\n\t}\n\n\tconst remote = workspace.scan?.state('remote').hasRemote\n\t\t? workspace.scan.state('remote').branch || workspace.record.branch\n\t\t: undefined;\n\tconst issues = workspace.scan?.issues().join('; ');\n\tconst branch = workspace.scan?.state('remote').branch || workspace.record.branch;\n\n\tconsole.info('Workspace:');\n\tconsole.info(` remote: ${remote ?? 'none'}`);\n\tconsole.info(` path: ${workspace.path}`);\n\tconsole.info(` branch: ${branch}`);\n\tconsole.info(` issues: ${issues || '-'}`);\n\tconsole.info('');\n}\n", "import { readdir } from 'node:fs/promises';\nimport { join, relative } from 'node:path';\n\nimport type { WorkspaceContext } from '../../../private/context/createWorkspaceContext';\nimport { createExtraneousCheckout } from '../../../private/scan/private/createExtraneousCheckout';\nimport { scanCheckoutState } from '../../../private/scan/scanCheckoutState';\nimport type { CheckoutStore } from '../../../private/store/createCheckoutStore';\nimport type { Checkout } from '../../../private/store/types';\n\nexport async function scanExtraneousCheckouts(\n\tctx: WorkspaceContext,\n\tstore: CheckoutStore,\n): Promise<Checkout[]> {\n\tconst checkoutsPath = join(ctx.config.root.path, ctx.config.clone.path);\n\tconst result: Checkout[] = [];\n\n\ttry {\n\t\tconst entries = await readdir(checkoutsPath, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.isDirectory()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst dir = join(checkoutsPath, entry.name);\n\t\t\tconst location = relative(checkoutsPath, dir);\n\n\t\t\t// Skip known checkouts already in the store\n\t\t\tconst known = store.getCheckoutForLocation(location);\n\t\t\tif (known) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst checkout = { ...createExtraneousCheckout(ctx.config, location), path: dir };\n\t\t\tconst scanned = await scanCheckoutState(ctx, checkout);\n\t\t\tresult.push(scanned);\n\t\t}\n\t} catch {\n\t\t// checkouts path doesn't exist or can't be read\n\t}\n\n\treturn result;\n}\n", "import type { WorkspaceConfig } from '../../../config/types';\nimport { createCheckout } from '../../store/createCheckout';\nimport type { Checkout } from '../../store/types';\n\nexport function createExtraneousCheckout(config: WorkspaceConfig, location: string): Checkout {\n\treturn createCheckout(config, location, undefined, '', location);\n}\n", "import { runWithConcurrency } from '../../../private/async/runWithConcurrency';\nimport { doPushCheckout } from '../../../private/commands/checkouts/doPushCheckout';\nimport type { WorkspaceContext } from '../../../private/context/createWorkspaceContext';\n\nexport async function syncCheckouts(ctx: WorkspaceContext): Promise<void> {\n\tawait runWithConcurrency(ctx.store.getAllCheckouts(), 4, async checkout => {\n\t\tif (!checkout.scan?.can?.('push') || !checkout.scan.should?.('push')) return;\n\t\tawait doPushCheckout(ctx, checkout);\n\t});\n}\n", "import { doPullWorkspaceCheckout } from '../../private/commands/workspaces/doPullWorkspaceCheckout';\nimport { scanWorkspaceCheckout } from '../../private/commands/workspaces/scanWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentExtraneousReport } from '../../private/present/presentExtraneousReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { presentWorkspaceReport } from '../../private/present/presentWorkspaceReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nimport { scanExtraneousCheckouts } from './private/scanExtraneousCheckouts';\nimport { syncCheckouts } from './private/syncCheckouts';\n\nexport async function runSanity(\n\tctx: WorkspaceContext,\n\toptions: { auto: boolean; refetch?: boolean },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['sanity', options.auto]));\n\n\tawait scanWorkspaceCheckout(ctx, options.refetch);\n\n\tawait scanAllCheckoutsStates(ctx, options.refetch);\n\tif (options.auto) {\n\t\tawait doPullWorkspaceCheckout(ctx);\n\t\tawait syncCheckouts(ctx);\n\t}\n\n\tconst extraneous = await scanExtraneousCheckouts(ctx, ctx.store);\n\n\tconst workspaceIssues = ctx.workspace?.scan\n\t\t? ctx.workspace.scan\n\t\t\t\t.issues()\n\t\t\t\t.filter(i => i !== 'unknown project' && i !== 'no remote' && i !== 'wrong remote')\n\t\t: [];\n\tconst filteredWorkspace = ctx.workspace\n\t\t? {\n\t\t\t\t...ctx.workspace,\n\t\t\t\tscan: ctx.workspace.scan\n\t\t\t\t\t? { ...ctx.workspace.scan, issues: () => workspaceIssues }\n\t\t\t\t\t: undefined,\n\t\t\t}\n\t\t: undefined;\n\n\tpresentWorkspaceReport(filteredWorkspace);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentExtraneousReport(extraneous);\n\tpresentOperationsReport(ctx.log);\n}\n", "import simpleGit from 'simple-git';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createCheckout } from '../../store/createCheckout';\nimport { createPullOperation } from '../operations/createPullOperation';\nimport { createPushOperation } from '../operations/createPushOperation';\n\nexport async function syncWorkspaceCheckout(ctx: WorkspaceContext): Promise<Checkout | null> {\n\tlet workspace = ctx.workspace;\n\tif (!workspace) {\n\t\tworkspace = {\n\t\t\t...createCheckout(ctx.config, '.', undefined, 'main', 'Workspace'),\n\t\t\tpath: ctx.config.root.path,\n\t\t};\n\t\tconst scanned = await scanCheckoutState(ctx, workspace, true);\n\t\tctx.workspace = scanned;\n\t\tworkspace = scanned;\n\t}\n\n\tconst git = simpleGit(workspace.path);\n\n\t// Pull\n\tif (workspace.scan?.can?.('pull')) {\n\t\tconst pending = createPullOperation(workspace, workspace.record.branch);\n\t\ttry {\n\t\t\tctx.log.log(pending);\n\t\t\tawait git.pull('origin', workspace.record.branch);\n\t\t\tctx.log.log(createOperationSuccess(pending));\n\t\t} catch (error) {\n\t\t\tconst op = createOperationFailure(pending, error);\n\t\t\tctx.log.log(op);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Push\n\tif (workspace.scan?.can?.('push')) {\n\t\tconst pending = createPushOperation(workspace, workspace.record.branch);\n\t\ttry {\n\t\t\tctx.log.log(pending);\n\t\t\tawait git.push('origin', workspace.record.branch);\n\t\t\tctx.log.log(createOperationSuccess(pending));\n\t\t} catch (error) {\n\t\t\tconst op = createOperationFailure(pending, error);\n\t\t\tctx.log.log(op);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Re-scan with refetch\n\tconst updated = await scanCheckoutState(ctx, workspace, true);\n\tctx.workspace = updated;\n\treturn updated;\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doPullCheckout } from '../../private/commands/checkouts/doPullCheckout';\nimport { doPushCheckout } from '../../private/commands/checkouts/doPushCheckout';\nimport { syncWorkspaceCheckout } from '../../private/commands/workspaces/syncWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runSync(\n\tctx: WorkspaceContext,\n\toptions: { checkouts?: string[]; all?: boolean } = {},\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['sync', options.checkouts]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace sync [options] -c <pattern>\\` or \\`art-workspace sync [options] --all\\` if you want to apply the sync to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tif (checkout.scan?.can?.('pull')) {\n\t\t\tconst pulled = checkout.scan.should?.('pull')\n\t\t\t\t? await doPullCheckout(ctx, checkout)\n\t\t\t\t: checkout;\n\t\t\tif (pulled?.scan?.can?.('push') && pulled.scan.should?.('push')) {\n\t\t\t\tawait doPushCheckout(ctx, pulled);\n\t\t\t}\n\t\t}\n\t});\n\n\tawait syncWorkspaceCheckout(ctx);\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import type { UnlinkPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createUnlinkOperation(\n\tcheckout: Checkout | undefined,\n\tpkg: string,\n\tsource: string,\n): UnlinkPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'unlink',\n\t\tpackage: pkg,\n\t\tsource,\n\t\tmessage() {\n\t\t\treturn `unlinking ${pkg}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { createUnlinkOperation } from '../../private/commands/operations/createUnlinkOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport async function runUnlink(ctx: WorkspaceContext, _options: { root: string }): Promise<void> {\n\tctx.log.log(createGenericOperation('command', ['unlink']));\n\tctx.log.log(createUnlinkOperation(ctx.workspace, '', ''));\n\t// TODO: implement unlink command\n\tconsole.info('unlink command - TODO');\n}\n", "import { existsSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport { build } from 'esbuild';\n\nimport { defineConfig } from './defineConfig';\nimport type { PartialWorkspaceConfig, WorkspaceConfig } from './types';\n\nconst MANIFEST_FILE = '.art-workspace.mts';\nconst TEMP_FILE = '.art-workspace-bundle.mjs';\n\nconst DEFAULT_CONFIG: PartialWorkspaceConfig = {\n\tclone: { path: 'checkouts' },\n\tcheckouts: {\n\t\tpath: '_records/',\n\t\ttemplate: '.agents/domains/workspace/templates/checkout.art.njk',\n\t},\n\trecords: {\n\t\tbase: '.',\n\t\tpattern: '*.art',\n\t\tignored: ['node_modules/', '.git/', 'dist/'],\n\t\texcluded: [],\n\t\tgitignore: true,\n\t},\n};\n\nfunction formatError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport async function loadWorkspaceConfig(rootPath: string): Promise<WorkspaceConfig> {\n\tconst manifestPath = join(rootPath, MANIFEST_FILE);\n\n\tif (!existsSync(manifestPath)) {\n\t\tconsole.warn(`${MANIFEST_FILE} not found at ${rootPath}; Using default config.`);\n\t\treturn defineConfig({ ...DEFAULT_CONFIG, root: { path: rootPath } });\n\t}\n\n\tlet output;\n\ttry {\n\t\toutput = await build({\n\t\t\tentryPoints: [manifestPath],\n\t\t\tbundle: true,\n\t\t\twrite: false,\n\t\t\tformat: 'esm',\n\t\t\tplatform: 'node',\n\t\t\texternal: [\n\t\t\t\t'node:fs',\n\t\t\t\t'node:os',\n\t\t\t\t'node:path',\n\t\t\t\t'node:url',\n\t\t\t\t'fs',\n\t\t\t\t'os',\n\t\t\t\t'path',\n\t\t\t\t'url',\n\t\t\t\t'esbuild',\n\t\t\t\t'simple-git',\n\t\t\t],\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Failed to bundle workspace manifest at ${manifestPath}: ${formatError(error)}`,\n\t\t);\n\t}\n\n\tconst tempFile = join(rootPath, TEMP_FILE);\n\twriteFileSync(tempFile, output.outputFiles[0].text);\n\n\ttry {\n\t\tconst loaded = await import(pathToFileURL(tempFile).href);\n\t\tconst config = loaded.default as PartialWorkspaceConfig;\n\t\treturn defineConfig({ ...config, root: { path: rootPath } });\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load workspace manifest at ${manifestPath}: ${formatError(error)}`);\n\t}\n}\n", "import type { FSRecordsPath } from '@art-lib/fs-records';\n\nimport type { PartialWorkspaceConfig } from '../types';\n\nconst DEFAULTS: FSRecordsPath = {\n\tbase: '.',\n\tpattern: '*.art',\n\tignored: ['node_modules/', '.git/', 'dist/'],\n\texcluded: [],\n\tgitignore: true,\n};\n\nexport function normalizeRecordPaths(records: PartialWorkspaceConfig['records']): FSRecordsPath[] {\n\tconst paths = records?.paths;\n\n\tif (!paths || paths.length === 0) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tbase: records?.base ?? DEFAULTS.base,\n\t\t\t\tpattern: records?.pattern ?? DEFAULTS.pattern,\n\t\t\t\tignored: records?.ignored ?? DEFAULTS.ignored,\n\t\t\t\texcluded: records?.excluded ?? DEFAULTS.excluded,\n\t\t\t\tgitignore: records?.gitignore ?? DEFAULTS.gitignore,\n\t\t\t},\n\t\t];\n\t}\n\n\treturn paths.map(p => ({\n\t\tbase: p.base ?? records?.base ?? DEFAULTS.base,\n\t\tpattern: p.pattern ?? records?.pattern ?? DEFAULTS.pattern,\n\t\tignored: p.ignored ?? records?.ignored ?? DEFAULTS.ignored,\n\t\texcluded: [...(p.excluded ?? []), ...(records?.excluded ?? [])],\n\t\tgitignore: p.gitignore ?? records?.gitignore ?? DEFAULTS.gitignore,\n\t}));\n}\n", "import { normalizeRecordPaths } from './private/normalizeRecordPaths';\nimport type { PartialWorkspaceConfig, WorkspaceConfig } from './types';\n\nexport function defineConfig(config: PartialWorkspaceConfig): WorkspaceConfig {\n\tconst clonePath = config.clone?.path || 'checkouts';\n\tconst rootPath = config.root?.path || process.cwd();\n\tconst checkoutsPath = config.checkouts?.path || '_records/';\n\tconst checkoutTemplatePath =\n\t\tconfig.checkouts?.template || '.agents/domains/workspace/templates/checkout.art.njk';\n\tconst recordsPaths = normalizeRecordPaths(config.records);\n\n\treturn {\n\t\tclone: {\n\t\t\tpath: clonePath,\n\t\t},\n\t\troot: {\n\t\t\tpath: rootPath,\n\t\t},\n\t\tcheckouts: {\n\t\t\tpath: checkoutsPath,\n\t\t\ttemplate: checkoutTemplatePath,\n\t\t},\n\t\trecords: {\n\t\t\tpaths: recordsPaths,\n\t\t},\n\t};\n}\n", "import type { WorkspaceConfig } from '../../config/types';\nimport type { OperationsLog } from '../log/createOperationsLog';\nimport type { Checkout } from '../store/createCheckout';\nimport type { CheckoutStore } from '../store/createCheckoutStore';\n\nexport interface WorkspaceContext {\n\tconfig: WorkspaceConfig;\n\tstore: CheckoutStore;\n\tlog: OperationsLog; // WIP Rename to `ops`\n\tworkspace?: Checkout;\n}\n\nexport function createWorkspaceContext(\n\tconfig: WorkspaceConfig,\n\tstore: CheckoutStore,\n\tlog: OperationsLog,\n\tworkspace?: Checkout,\n): WorkspaceContext {\n\treturn { config, store, log, workspace };\n}\n", "import type { Operation } from '../operations/types';\n\nexport interface OperationsLog {\n\tlog(operation: Operation): void;\n\tall(): Operation[];\n\tsince(ts: Date): Operation[];\n\tlatest(n: number): Operation[];\n}\n\nexport function createOperationsLog(logger: (op: Operation) => void = () => {}): OperationsLog {\n\tconst operations: Operation[] = [];\n\n\treturn {\n\t\tlog(operation: Operation): void {\n\t\t\tlogger(operation);\n\n\t\t\tif (operation.outcome !== 'pending') {\n\t\t\t\toperations.push(operation);\n\t\t\t}\n\t\t},\n\n\t\tall(): Operation[] {\n\t\t\treturn [...operations];\n\t\t},\n\n\t\tsince(ts: Date): Operation[] {\n\t\t\treturn operations.filter(op => op.ts > ts);\n\t\t},\n\n\t\tlatest(n: number): Operation[] {\n\t\t\treturn operations.slice(-n);\n\t\t},\n\t};\n}\n", "import type { Checkout } from './types';\n\nexport interface CheckoutStore {\n\taddCheckout: (checkout: Checkout) => void;\n\tgetCheckoutForLocation: (location: string) => Checkout | undefined;\n\tgetCheckoutOfRepo: (name: string) => Checkout | undefined;\n\tgetCheckoutByName: (name: string) => Checkout | undefined;\n\tgetCheckoutsByPattern: (patterns: string[]) => Checkout[];\n\tupdateCheckout: (checkout: Checkout) => void;\n\tgetAllCheckouts: () => Checkout[];\n}\n\nfunction matchCheckoutByName(checkouts: Map<string, Checkout>, name: string): Checkout | undefined {\n\tconst n = name.toLowerCase();\n\treturn Array.from(checkouts.values()).find(checkout => checkout.record.name.toLowerCase() === n);\n}\n\nfunction matchCheckoutByLocation(\n\tcheckouts: Map<string, Checkout>,\n\tlocation: string,\n): Checkout | undefined {\n\treturn checkouts.get(location);\n}\n\nfunction patternToRegex(pattern: string): RegExp {\n\tconst escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\tconst globbed = escaped.replace(/\\*/g, '.*');\n\treturn new RegExp(`^${globbed}$`, 'i');\n}\n\nfunction isWildcardPattern(pattern: string): boolean {\n\treturn pattern.includes('*');\n}\n\nexport function createCheckoutStore(): CheckoutStore {\n\tconst checkouts = new Map<string, Checkout>();\n\n\tfunction addCheckout(checkout: Checkout) {\n\t\tconst existing = checkouts.get(checkout.record.location);\n\t\tif (existing) {\n\t\t\tconst msg = `Duplicate location: \"${checkout.record.location}\", existing: \"${existing.record.name}\" duplicate: \"${checkout.record.name}\".`;\n\t\t\tconsole.error(msg);\n\t\t} else {\n\t\t\tcheckouts.set(checkout.record.location, checkout);\n\t\t}\n\t}\n\n\treturn {\n\t\taddCheckout,\n\n\t\tgetCheckoutForLocation(location: string): Checkout | undefined {\n\t\t\treturn matchCheckoutByLocation(checkouts, location);\n\t\t},\n\n\t\tgetCheckoutOfRepo(name: string): Checkout | undefined {\n\t\t\tconst n = name.toLowerCase();\n\t\t\treturn Array.from(checkouts.values()).find(\n\t\t\t\tcheckout => checkout.repo?.name.toLowerCase() === n,\n\t\t\t);\n\t\t},\n\n\t\tgetCheckoutByName(name: string): Checkout | undefined {\n\t\t\treturn matchCheckoutByName(checkouts, name);\n\t\t},\n\n\t\tgetCheckoutsByPattern(patterns: string[]): Checkout[] {\n\t\t\tconst matched = new Map<string, Checkout>(); // keyed by record.location for dedup\n\n\t\t\tfor (const pattern of patterns) {\n\t\t\t\tlet patternMatched = false;\n\n\t\t\t\tfor (const checkout of checkouts.values()) {\n\t\t\t\t\tlet nameMatch = false;\n\t\t\t\t\tlet locationMatch = false;\n\n\t\t\t\t\tif (isWildcardPattern(pattern)) {\n\t\t\t\t\t\t// Wildcard mode: regex match against name and location\n\t\t\t\t\t\tconst regex = patternToRegex(pattern);\n\t\t\t\t\t\tnameMatch = regex.test(checkout.record.name);\n\t\t\t\t\t\tlocationMatch = regex.test(checkout.record.location);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Exact mode: only exact match, no fallback\n\t\t\t\t\t\tnameMatch = matchCheckoutByName(checkouts, pattern) === checkout;\n\t\t\t\t\t\tlocationMatch = matchCheckoutByLocation(checkouts, pattern) === checkout;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nameMatch || locationMatch) {\n\t\t\t\t\t\tmatched.set(checkout.record.location, checkout);\n\t\t\t\t\t\tpatternMatched = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!patternMatched) {\n\t\t\t\t\tconsole.warn(`no checkout matches pattern: \"${pattern}\"`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.from(matched.values());\n\t\t},\n\n\t\tupdateCheckout(checkout: Checkout): void {\n\t\t\tcheckouts.set(checkout.record.location, checkout);\n\t\t},\n\n\t\tgetAllCheckouts(): Checkout[] {\n\t\t\treturn Array.from(checkouts.values());\n\t\t},\n\t};\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,uBAAwB;;;ACFxB,IAAAA,qBAAsB;;;ACAtB,wBAAsB;AAEtB,eAAsB,eAAe,KAAa,QAAkC;AACnF,QAAM,UAAM,kBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,YAAY,WAAW,cAAc,MAAM,EAAE,CAAC;AACtF,WAAO,IAAI,KAAK,EAAE,SAAS;AAAA,EAC5B,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;ADNA,eAAsB,qBACrB,KACA,QACkC;AAClC,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI,MAAM,eAAe,KAAK,MAAM,GAAG;AACtC,UAAM,IAAI,SAAS,MAAM;AACzB,WAAO;AAAA,EACR;AACA,QAAM,IAAI,oBAAoB,MAAM;AACpC,SAAO;AACR;;;AEbA,SAAS,eAAe,KAAqB;AAC5C,QAAM,QAAQ,IACZ,MAAM,IAAI,EACV,IAAI,OAAK,EAAE,KAAK,CAAC,EACjB,OAAO,OAAK,EAAE,SAAS,CAAC;AAC1B,SAAO,MAAM,IAAI,OAAK,OAAO,CAAC,EAAE,KAAK,IAAI;AAC1C;AAEA,SAAS,cAAc,KAAqB;AAC3C,QAAM,QAAQ,IAAI,MAAM,aAAa;AACrC,SAAO,QAAQ,MAAM,CAAC,IAAK,IAAI,MAAM,IAAI,EAAE,CAAC,GAAG,KAAK,KAAK;AAC1D;AAEA,IAAM,cAAsC;AAAA,EAC3C,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,KAAK;AACN;AAEO,SAAS,uBACf,SACA,OACmB;AACnB,QAAM,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACtE,QAAM,QAAQ,YAAY,QAAQ,SAAS,KAAK;AAEhD,SAAO;AAAA,IACN,GAAG;AAAA,IACH,SAAS;AAAA,IACT,YAAY,oBAAI,KAAK;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AACT,aAAO,cAAc,KAAK,KAAK;AAAA,IAChC;AAAA,IACA,kBAAkB;AACjB,aAAO,GAAG,KAAK,KAAK,QAAQ,UAAU,MAAM,IAAI,WAAM,KAAK,QAAQ,CAAC;AAAA;AAAA,EAAO,eAAe,KAAK,KAAK,CAAC;AAAA,IACtG;AAAA,EACD;AACD;;;AC3CO,SAAS,uBACf,SACA,SACmB;AACnB,SAAO;AAAA,IACN,GAAG;AAAA,IACH,SAAS;AAAA,IACT,YAAY,oBAAI,KAAK;AAAA,IACrB,SAAS,UAAU,MAAM,UAAU,QAAQ;AAAA,EAC5C;AACD;;;ACZA,qBAAmE;AACnE,IAAAC,oBAA8B;;;ACD9B,uBAAqB;AAKd,SAAS,qBAAqB,QAAyB,MAA8B;AAC3F,QAAM,OAAO,KAAK,KAAK,YAAY,EAAE,QAAQ,QAAQ,GAAG;AACxD,aAAO,uBAAK,OAAO,KAAK,MAAM,OAAO,UAAU,MAAM,GAAG,IAAI,eAAe;AAC5E;;;ADAA,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW3B,eAAsB,mBACrB,QACA,MACA,UACkB;AAClB,MAAI,WAAW;AACf,QAAM,mBAAe,wBAAK,OAAO,KAAK,MAAM,OAAO,UAAU,QAAQ;AACrE,UAAI,2BAAW,YAAY,GAAG;AAC7B,mBAAW,6BAAa,cAAc,OAAO;AAAA,EAC9C;AAEA,QAAM,WAAW,YAAY,qBAAqB,QAAQ,IAAI;AAE9D,MAAI,UAAU,SACZ,QAAQ,cAAc,KAAK,IAAI,EAC/B,QAAQ,oBAAoB,KAAK,cAAc,EAAE,EACjD,QAAQ,kBAAkB,KAAK,QAAQ,EACvC,QAAQ,gBAAgB,KAAK,MAAM;AAErC,MAAI,CAAC,KAAK,YAAY;AACrB,cAAU,QAAQ,QAAQ,gCAAgC,EAAE;AAAA,EAC7D;AACA,oCAAU,2BAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAChD,oCAAc,UAAU,OAAO;AAE/B,SAAO;AACR;;;AE1CO,SAAS,sBAAsB,UAAoB,QAA+B;AACxF,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AACT,aAAO,UAAU,MAAM;AAAA,IACxB;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACTA,eAAsB,iBACrB,KACA,UACA,QAC2B;AAC3B,QAAM,UAAU,sBAAsB,UAAU,MAAM;AACtD,MAAI;AACH,QAAI,IAAI,IAAI,OAAO;AACnB,UAAM,UAAU,MAAM,qBAAqB,SAAS,MAAM,MAAM;AAChE,QAAI,IAAI;AAAA,MACP;AAAA,QACC;AAAA,QACA,YAAY,YAAY,WAAW,MAAM,KAAK,eAAe,MAAM;AAAA,MACpE;AAAA,IACD;AAEA,UAAM,UAAU,EAAE,GAAG,UAAU,QAAQ,EAAE,GAAG,SAAS,QAAQ,OAAO,EAAE;AACtE,QAAI,MAAM,eAAe,OAAO;AAChC,UAAM,mBAAmB,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ;AACrE,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAI,IAAI,IAAI,uBAAuB,sBAAsB,UAAU,MAAM,GAAG,KAAK,CAAC;AAClF,WAAO;AAAA,EACR;AACD;;;AC9BA,SAAS,WAAW,MAAuB;AAC1C,SAAO,OAAO,KAAK,UAAU,IAAI,IAAI;AACtC;AAEO,SAAS,uBAAuB,WAAmB,MAAkC;AAC3F,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,UAAU;AACT,aAAO,WAAW,IAAI;AAAA,IACvB;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACnBA,IAAAC,oBAAqB;;;ACAd,SAAS,YAAY,MAAkB,SAA2B;AACxE,QAAM,UAAU,CAAC,SAAS,GAAG,IAAI;AACjC,QAAM,YAAY,QAAQ;AAAA,IAAI,CAAC,GAAG,WACjC,KAAK,IAAI,GAAG,QAAQ,IAAI,SAAO,OAAO,IAAI,MAAM,CAAC,EAAE,MAAM,CAAC;AAAA,EAC3D;AAEA,QAAM,QAAQ,QAAQ;AAAA,IAAI,SACzB,IAAI,IAAI,CAAC,MAAM,MAAM,OAAO,IAAI,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EAClE;AAEA,SAAO,MAAM,KAAK,IAAI;AACvB;;;ADJO,SAAS,sBAAsB,QAAyB,WAA6B;AAC3F,QAAM,QAAQ,CAAC,GAAG,SAAS;AAC3B,QAAM,KAAK,CAAC,GAAG,MAAM;AACpB,QAAI,EAAE,MAAM,WAAW,MAAM,EAAE,MAAM,WAAW,GAAI,QAAO;AAC3D,QAAI,EAAE,MAAM,WAAW,MAAM,EAAE,MAAM,WAAW,GAAI,QAAO;AAC3D,WAAO,EAAE,MAAM,KAAK,cAAc,EAAE,MAAM,QAAQ,EAAE,KAAK;AAAA,EAC1D,CAAC;AAED,QAAM,UAAU,CAAC,QAAQ,YAAY,UAAU,QAAQ;AACvD,QAAM,OAAO,MAAM,IAAI,OAAK;AAAA,IAC3B,EAAE,MAAM,QAAQ;AAAA,QAChB,wBAAK,OAAO,MAAM,MAAM,EAAE,OAAO,QAAQ;AAAA,IACzC,EAAE,MAAM,MAAM,QAAQ,EAAE,UAAU,EAAE,OAAO;AAAA,IAC3C,EAAE,MAAM,OAAO,EAAE,KAAK,IAAI,KAAK;AAAA,EAChC,CAAC;AAED,UAAQ,KAAK,YAAY;AACzB,UAAQ,KAAK,YAAY,MAAM,OAAO,CAAC;AACvC,UAAQ,KAAK,EAAE;AAChB;;;AE1BO,SAAS,eAAe,KAAa,OAAuB;AAClE,MAAI,IAAI,UAAU,OAAO;AACxB,WAAO;AAAA,EACR;AACA,QAAM,OAAO,QAAQ;AACrB,QAAM,OAAO,KAAK,KAAK,OAAO,CAAC;AAC/B,QAAM,QAAQ,KAAK,MAAM,OAAO,CAAC;AACjC,SAAO,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,SAAS,KAAK,CAAC;AAClE;;;ACJO,SAAS,qBACf,IACA,UAAoC,CAAC,GAC1B;AACX,QAAM,EAAE,WAAW,IAAI;AAEvB,QAAM,SAAS,aAAa,IAAI,GAAG,OAAO,CAAC,QAAQ,OAAO,GAAG,OAAO,CAAC;AAErE,SAAO;AAAA,IACN,GAAG,YAAY,YAAY,WAAM,GAAG,YAAY,YAAY,cAAO;AAAA,IACnE,GAAG,UAAU,MAAM;AAAA,IACnB,GAAG,UAAU,OAAO;AAAA,IACpB,GAAG;AAAA,IACH,eAAe,GAAG,QAAQ,GAAG,EAAE;AAAA,IAC/B,GAAG,aAAa,SAAS;AAAA,EAC1B,EAAE,OAAO,OAAO;AACjB;;;ACfO,SAAS,wBAAwB,KAA0B;AACjE,QAAM,aAAa,IAAI,IAAI;AAC3B,MAAI,WAAW,WAAW,GAAG;AAC5B;AAAA,EACD;AAEA,QAAM,UAAU,CAAC,IAAI,QAAQ,YAAY,aAAa,WAAW,IAAI;AACrE,QAAM,OAAO,WAAW,IAAI,QAAM,qBAAqB,EAAE,CAAC;AAE1D,UAAQ,KAAK,oBAAoB;AACjC,UAAQ,KAAK,YAAY,MAAM,OAAO,CAAC;AACvC,UAAQ,KAAK,EAAE;AAChB;;;ACjBA,IAAAC,qBAAgC;;;ACAhC,wBAAyD;AAIzD,eAAsB,mBAAmB,MAAoD;AAC5F,QAAM,mBAAmB,KAAK,UAAU,OAAO,UAAM,yCAAsB,IAAI;AAC/E,MAAI,CAAC,iBAAiB,SAAS;AAC9B,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,iBAAiB;AAEjC,QAAM,YAAY,QAAQ,MAAM,qBAAqB;AACrD,MAAI,CAAC,WAAW;AACf,WAAO;AAAA,EACR;AAEA,QAAM,kBAAkB,QAAQ,MAAM,4BAA4B;AAClE,QAAM,gBAAgB,QAAQ,MAAM,+BAA+B;AACnE,QAAM,cAAc,QAAQ,MAAM,6BAA6B;AAE/D,MAAI,CAAC,eAAe;AACnB,YAAQ,KAAK,mBAAmB,KAAK,QAAQ,mCAAmC;AAAA,EACjF;AACA,MAAI,CAAC,aAAa;AACjB,YAAQ,KAAK,mBAAmB,KAAK,QAAQ,iCAAiC;AAAA,EAC/E;AAEA,SAAO;AAAA,IACN,MAAM,UAAU,CAAC,GAAG,KAAK,KAAK;AAAA,IAC9B,YAAY,kBAAkB,CAAC,GAAG,KAAK;AAAA,IACvC,UAAU,gBAAgB,CAAC,GAAG,KAAK,KAAK;AAAA,IACxC,QAAQ,cAAc,CAAC,GAAG,KAAK,KAAK;AAAA,EACrC;AACD;;;AD1BA,eAAsB,oBACrB,KACA,OACsC;AACtC,QAAM,aAAa,IAAI,OAAO,KAAK;AACnC,MAAI,IAAI,IAAI,uBAAuB,yBAAyB,UAAU,CAAC;AAEvE,QAAM,cAAc,UAAM,oCAAgB,IAAI,OAAO,SAAS,YAAY,CAAC,UAAU,CAAC;AACtF,QAAM,YAAY,MAAM,QAAQ;AAAA,IAC/B,YAAY,IAAI,OAAM,SAAQ;AAC7B,YAAM,SAAS,MAAM,mBAAmB,IAAI;AAC5C,UAAI,CAAC,QAAQ;AACZ,eAAO;AAAA,MACR;AACA,UAAI,CAAC,OAAO,MAAM;AACjB,gBAAQ,KAAK,0CAA0C;AACvD,eAAO;AAAA,MACR;AACA,YAAM,OAAO,MAAM,KAAK,OAAK,EAAE,SAAS,OAAO,UAAU;AACzD,UAAI,MAAM;AACT,eAAO;AAAA,UACN;AAAA,UACA,UAAU;AAAA,UACV,UAAU,KAAK;AAAA,QAChB;AAAA,MACD;AACA,aAAO;AAAA,QACN,UAAU;AAAA,QACV,UAAU,KAAK;AAAA,MAChB;AAAA,IACD,CAAC;AAAA,EACF;AACA,SAAO,UAAU,OAAO,CAAC,aAAmD,aAAa,IAAI;AAC9F;;;AEzCA,IAAAC,qBAAgC;;;ACAhC,IAAAC,qBAAyD;AAIzD,eAAsB,qBAAqB,MAAsD;AAChG,QAAM,mBAAmB,KAAK,UAAU,OAAO,UAAM,0CAAsB,IAAI;AAC/E,MAAI,CAAC,iBAAiB,SAAS;AAC9B,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,iBAAiB;AAEjC,QAAM,YAAY,QAAQ,MAAM,uBAAuB;AACvD,MAAI,CAAC,WAAW;AACf,WAAO;AAAA,EACR;AAEA,QAAM,cAAc,QAAQ,MAAM,6BAA6B;AAC/D,QAAM,eAAe,QAAQ,MAAM,yBAAyB;AAC5D,QAAM,mBAAmB,QAAQ,MAAM,6BAA6B;AACpE,QAAM,iBAAiB,QAAQ,MAAM,2BAA2B;AAEhE,MAAI,CAAC,aAAa;AACjB,YAAQ,KAAK,qBAAqB,KAAK,QAAQ,iCAAiC;AAAA,EACjF;AAEA,SAAO;AAAA,IACN,MAAM,UAAU,CAAC,GAAG,KAAK,KAAK;AAAA,IAC9B,QAAQ,cAAc,CAAC,GAAG,KAAK,KAAK;AAAA,IACpC,GAAI,eAAe,EAAE,SAAS,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,IAC1D,GAAI,mBAAmB,EAAE,aAAa,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,IACtE,GAAI,iBAAiB,EAAE,WAAW,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,EACjE;AACD;;;ADzBA,eAAsB,sBAAsB,KAAoD;AAC/F,QAAM,aAAa,IAAI,OAAO,KAAK;AACnC,MAAI,IAAI,IAAI,uBAAuB,2BAA2B,UAAU,CAAC;AAEzE,QAAM,cAAc,UAAM,oCAAgB,IAAI,OAAO,SAAS,YAAY,CAAC,YAAY,CAAC;AACxF,QAAM,UAAU,MAAM,QAAQ,IAAI,YAAY,IAAI,UAAQ,qBAAqB,IAAI,CAAC,CAAC;AACrF,SAAO,QAAQ,OAAO,CAAC,WAAuC,WAAW,IAAI;AAC9E;;;AEfA,sBAAuB;;;ACAvB,IAAAC,qBAAsB;AAOtB,eAAsB,oBACrB,KACA,cACuB;AACvB,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,QAAI,CAAC,cAAc;AAClB,YAAMC,SAAQ,MAAM,IAAI,IAAI,CAAC,YAAY,WAAW,QAAQ,SAAS,kBAAkB,CAAC;AACxF,aAAO,EAAE,OAAO,OAAO,SAASA,OAAM,KAAK,GAAG,EAAE,KAAK,GAAG,QAAQ,EAAE;AAAA,IACnE;AACA,UAAM,SAAS,MAAM,IAAI,IAAI,CAAC,YAAY,gBAAgB,WAAW,GAAG,YAAY,SAAS,CAAC;AAC9F,UAAM,CAAC,QAAQ,KAAK,IAAI,OAAO,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM;AAC7D,WAAO,EAAE,OAAO,OAAO;AAAA,EACxB,QAAQ;AACP,WAAO,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,EAC9B;AACD;;;ACvBA,IAAAC,qBAAsB;AAEtB,eAAsB,iBAAiB,KAA8B;AACpE,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,SAAS,MAAM,IAAI,OAAO;AAChC,UAAM,SAAS,OAAO,WAAW;AACjC,QAAI,CAAC,OAAO,WAAW,OAAO,YAAY,QAAQ;AACjD,UAAI;AACH,cAAM,YAAY,MAAM,IAAI,IAAI,CAAC,gBAAgB,MAAM,MAAM,CAAC;AAC9D,YAAI,CAAC,UAAU,KAAK,GAAG;AACtB,iBAAO;AAAA,QACR;AAAA,MACD,QAAQ;AACP,eAAO;AAAA,MACR;AAAA,IACD;AACA,WAAO;AAAA,EACR,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;ACrBA,IAAAC,qBAAsB;AAEtB,eAAsB,gBAAgB,KAAqC;AAC1E,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,WAAW,MAAM,IAAI,OAAO;AAClC,UAAM,UAAU,SAAS;AACzB,QAAI,CAAC,WAAW,YAAY,QAAQ;AACnC,aAAO;AAAA,IACR;AACA,UAAM,WAAW,SAAS,IAAI;AAAA,MAC7B,OAAK,MAAM,UAAU,OAAO,MAAM,MAAM,kBAAkB,OAAO;AAAA,IAClE;AACA,WAAO,WAAW,SAAS,QAAQ,cAAc,EAAE,IAAI;AAAA,EACxD,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;ACjBA,IAAAC,qBAAsB;AAEtB,eAAsB,aAAa,KAAqC;AACvE,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,SAAS,MAAM,IAAI,WAAW;AACpC,UAAM,MAAM,OAAO,IAAI,mBAAmB;AAC1C,QAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,SAAS,EAAG,QAAO,IAAI,CAAC;AACtD,WAAO;AAAA,EACR,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;ACbA,IAAAC,qBAAsB;AAEtB,eAAsB,kBAAkB,KAA+B;AACtE,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,SAAS,MAAM,IAAI,OAAO;AAChC,WAAO,OAAO,WAAW,SAAS;AAAA,EACnC,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;ACVA,IAAAC,qBAAsB;AAEtB,eAAsB,UAAU,KAA+B;AAC9D,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,UAAU,MAAM,IAAI,WAAW,KAAK;AAC1C,WAAO,QAAQ,SAAS;AAAA,EACzB,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;ACVA,IAAAC,qBAAsB;AAEtB,eAAsB,eAAe,KAA+B;AACnE,QAAM,UAAM,mBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,SAAS,MAAM,IAAI,OAAO;AAChC,QAAI,OAAO,WAAW,OAAO,YAAY,QAAQ;AAChD,aAAO;AAAA,IACR;AACA,QAAI;AACH,YAAM,YAAY,MAAM,IAAI,IAAI,CAAC,gBAAgB,MAAM,MAAM,CAAC;AAC9D,aAAO,CAAC,UAAU,KAAK;AAAA,IACxB,QAAQ;AACP,aAAO;AAAA,IACR;AAAA,EACD,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;AClBA,IAAAC,sBAAsB;AAEtB,eAAsB,QAAQ,KAA+B;AAC5D,QAAM,UAAM,oBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,SAAS,MAAM,IAAI,OAAO;AAChC,WAAO,OAAO,MAAM,SAAS;AAAA,EAC9B,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;ACVA,IAAAC,sBAAsB;AAEtB,eAAsB,YAAY,KAA4B;AAC7D,QAAM,UAAM,oBAAAC,SAAU,GAAG;AACzB,MAAI;AACH,UAAM,IAAI,MAAM,QAAQ;AAAA,EACzB,QAAQ;AAAA,EAER;AACD;;;ACPO,IAAM,uBAAuB,CAAC,WAA4C;AAAA,EAChF,MAAM;AAAA,EACN;AACD;;;ACHO,IAAM,oBAAoB,CAAC,YAA0C;AAAA,EAC3E,MAAM;AAAA,EACN;AACD;;;ACHO,IAAM,yBAAyB,CAAC,WAA8C;AAAA,EACpF,MAAM;AAAA,EACN;AACD;;;ACHO,IAAM,wBAAwB,CAAC,cAAgD;AAAA,EACrF,MAAM;AAAA,EACN;AACD;;;ACHO,IAAM,oBAAoB,CAChC,QACA,gBACAC,gBAC0B,EAAE,MAAM,UAAU,QAAQ,gBAAgB,WAAAA,WAAU;;;ACJxE,IAAM,kBAAkB,CAAC,WAAuC,EAAE,MAAM,QAAQ,MAAM;;;ACAtF,IAAM,kBAAkB,CAC9B,OACA,QAAQ,KAAK,IAAI,OAAO,CAAC,GACzB,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,OACH;AAAA,EACxB,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AACD;;;ACTO,IAAM,yBAAyB,CAAC,WAA8C;AAAA,EACpF,MAAM;AAAA,EACN;AACD;;;ACHO,SAAS,oBAAoB,QAAgD;AACnF,SAAO,CAA8B,SAAgC;AACpE,UAAM,QAAQ,OAAO,KAAK,UAAQ,KAAK,SAAS,IAAI;AACpD,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,2BAA2B,IAAI,EAAE;AAC7D,WAAO;AAAA,EACR;AACD;;;ACHO,SAAS,mBAAmB,QAAuC;AACzE,QAAM,QAAQ,oBAAoB,MAAM;AAExC,QAAM,SAAS,MAAgB;AAC9B,UAAM,SAAmB,CAAC;AAC1B,UAAM,OAAO,MAAM,MAAM;AACzB,UAAM,SAAS,MAAM,QAAQ;AAC7B,UAAM,SAAS,MAAM,QAAQ;AAC7B,UAAM,OAAO,MAAM,MAAM;AACzB,QAAI,CAAC,KAAK,MAAO,QAAO,KAAK,iBAAiB;AAC9C,QAAI,CAAC,OAAO,OAAQ,QAAO,CAAC,GAAG,QAAQ,YAAY;AACnD,QAAI,CAAC,MAAM,aAAa,EAAE,SAAU,QAAO,KAAK,eAAe;AAC/D,QACC,OAAO,mBAAmB,MAC1B,OAAO,WAAW,OAAO,kBACzB,MAAM,aAAa,EAAE,UACpB;AACD,aAAO,KAAK,cAAc;AAAA,IAC3B;AACA,QAAI,CAAC,MAAM,cAAc,EAAE,MAAO,QAAO,KAAK,iBAAiB;AAC/D,QAAI,CAAC,OAAO,UAAW,QAAO,KAAK,WAAW;AAC9C,QAAI,OAAO,aAAa,MAAM,cAAc,EAAE,MAAO,QAAO,KAAK,cAAc;AAC/E,QAAI,CAAC,MAAM,WAAW,EAAE,MAAO,QAAO,KAAK,mBAAmB;AAC9D,QAAI,KAAK,QAAQ,EAAG,QAAO,KAAK,GAAG,KAAK,KAAK,UAAU,KAAK,UAAU,IAAI,KAAK,GAAG,QAAQ;AAC1F,QAAI,KAAK,SAAS,GAAG;AACpB,YAAM,QAAQ,KAAK;AACnB,aAAO,KAAK,GAAG,KAAK,UAAU,UAAU,IAAI,KAAK,GAAG,SAAS;AAAA,IAC9D;AACA,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,CAAC,OAAmB;AACxB,UAAI,OAAO,QAAS,QAAO,CAAC,MAAM,QAAQ,EAAE;AAC5C,UAAI,OAAO,SAAU,QAAO,MAAM,QAAQ,EAAE,UAAU,MAAM,aAAa,EAAE;AAC3E,YAAM,SAAS,MAAM,QAAQ;AAC7B,YAAM,SAAS,MAAM,QAAQ;AAC7B,aACC,OAAO,UACP,OAAO,WAAW,OAAO,kBACzB,MAAM,WAAW,EAAE,SACnB,MAAM,cAAc,EAAE,SACtB,MAAM,aAAa,EAAE,YACrB,OAAO;AAAA,IAET;AAAA,IACA,QAAQ,CAAC,OAAmB;AAC3B,UAAI,OAAO,QAAS,QAAO,CAAC,MAAM,QAAQ,EAAE;AAC5C,UAAI,OAAO,OAAQ,QAAO,MAAM,MAAM,EAAE,SAAS;AACjD,UAAI,OAAO,OAAQ,QAAO,MAAM,MAAM,EAAE,QAAQ;AAChD,aAAO;AAAA,IACR;AAAA,EACD;AACD;;;AClDO,SAAS,2BAA2B,OAA8B;AACxE,SAAO,mBAAmB;AAAA,IACzB,gBAAgB,KAAK;AAAA,IACrB,kBAAkB,KAAK;AAAA,IACvB,kBAAkB,MAAM,IAAI,KAAK;AAAA,IACjC,gBAAgB,CAAC;AAAA,IACjB,qBAAqB,IAAI;AAAA,IACzB,uBAAuB,IAAI;AAAA,IAC3B,sBAAsB,IAAI;AAAA,EAC3B,CAAC;AACF;;;ApBQA,eAAsB,kBACrB,KACA,UACA,UAAU,OACU;AACpB,MAAI;AACH,cAAM,wBAAO,SAAS,IAAI;AAAA,EAC3B,QAAQ;AACP,WAAO,EAAE,GAAG,UAAU,MAAM,2BAA2B,QAAQ,SAAS,IAAI,CAAC,EAAE;AAAA,EAChF;AAEA,MAAI,IAAI,IAAI,uBAAuB,uBAAuB,SAAS,OAAO,QAAQ,CAAC;AAEnF,MAAI,SAAwB;AAC5B,MAAI,eAA8B;AAClC,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,MAAI,YAAY;AAChB,MAAI,WAAW;AACf,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,MAAI,cAAc;AAClB,MAAI;AACH,aAAS,MAAM,iBAAiB,SAAS,IAAI;AAC7C,aAAS,MAAM,UAAU,SAAS,IAAI;AACtC,eAAW,MAAM,eAAe,SAAS,IAAI;AAC7C,gBAAY,MAAM,kBAAkB,SAAS,IAAI;AACjD,YAAQ,MAAM,QAAQ,SAAS,IAAI;AACnC,QAAI,UAAU,WAAW,OAAO,WAAW,QAAQ;AAClD,qBAAe,MAAM,gBAAgB,SAAS,IAAI;AAClD,UAAI,QAAS,OAAM,YAAY,SAAS,IAAI;AAC5C,YAAM,EAAE,OAAO,YAAY,QAAQ,YAAY,IAAI,MAAM;AAAA,QACxD,SAAS;AAAA,QACT;AAAA,MACD;AACA,cAAQ;AACR,eAAS;AAAA,IACV;AACA,QAAI,UAAU,SAAS,MAAM,QAAQ;AACpC,YAAM,YAAY,MAAM,aAAa,SAAS,IAAI;AAClD,UAAI,aAAa,cAAc,SAAS,KAAK,QAAQ;AACpD,sBAAc;AAAA,MACf;AAAA,IACD;AAAA,EACD,SAAS,OAAO;AACf,QAAI,IAAI;AAAA,MACP;AAAA,QACC,uBAAuB,uBAAuB,SAAS,OAAO,QAAQ;AAAA,QACtE;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,QAAM,cAAc,kBAAkB,QAAQ,SAAS,OAAO,QAAQ,MAAM;AAC5E,QAAM,OAAO,mBAAmB;AAAA,IAC/B,gBAAgB,QAAQ,SAAS,IAAI,CAAC;AAAA,IACtC,kBAAkB,IAAI;AAAA,IACtB;AAAA,IACA,gBAAgB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7C,qBAAqB,CAAC,KAAK;AAAA,IAC3B,uBAAuB,CAAC,SAAS;AAAA,IACjC,sBAAsB,CAAC,QAAQ;AAAA,IAC/B,uBAAuB,WAAW;AAAA,EACnC,CAAC;AACD,SAAO,EAAE,GAAG,UAAU,KAAK;AAC5B;;;AqB9FA,IAAAC,oBAA2B;;;ACApB,SAAS,SAAS,SAAyB;AACjD,SAAO,QACL,YAAY,EACZ,QAAQ,YAAY,GAAG,EACvB,QAAQ,OAAO,GAAG;AACrB;;;ADKO,SAAS,eACf,QACA,QACA,MACA,QACA,MACW;AACX,QAAM,eAAW,wBAAK,OAAO,KAAK,MAAM,OAAO,MAAM,IAAI;AACzD,QAAM,IAAI,SAAS,MAAM;AACzB,QAAM,IAAI;AACV,QAAM,IAAI,UAAU;AACpB,QAAM,IAAI,SAAS,GAAG,OAAO,GAAG,OAAO,QAAQ,SAAS;AAExD,SAAO;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,KAAK;AAAA,IAC/D,MAAM,kBAAAC,QAAK,KAAK,UAAU,CAAC;AAAA,EAC5B;AACD;;;AEtBO,SAAS,wBACf,QACA,OACA,SACO;AACP,aAAW,UAAU,SAAS;AAC7B,UAAM,WAAW;AAAA,MAChB;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,OAAO;AAAA,MACP,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,IACjB;AACA,UAAM,YAAY,EAAE,GAAG,UAAU,UAAU,OAAO,SAAS,CAAC;AAAA,EAC7D;AACD;;;ACrBA,eAAsB,mBACrB,OACA,OACA,MACgB;AAChB,MAAI,QAAQ;AACZ,QAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,OAAO,MAAM,MAAM,EAAE,GAAG,YAAY;AACjF,WAAO,QAAQ,MAAM,QAAQ;AAC5B,YAAM,IAAI;AACV,YAAM,KAAK,MAAM,CAAC,CAAC;AAAA,IACpB;AAAA,EACD,CAAC;AACD,QAAM,QAAQ,IAAI,OAAO;AAC1B;;;ACRA,eAAsB,uBACrB,KACA,UAAU,OACM;AAChB,MAAI,IAAI,IAAI,uBAAuB,oBAAoB,CAAC;AACxD,QAAM,mBAAmB,IAAI,MAAM,gBAAgB,GAAG,GAAG,OAAM,aAAY;AAC1E,UAAM,UAAU,MAAM,kBAAkB,KAAK,UAAU,OAAO;AAC9D,QAAI,MAAM,eAAe,OAAO;AAAA,EACjC,CAAC;AACF;;;ACDA,eAAsB,UACrB,KACA,SACgB;AAChB,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,UAAU,QAAQ,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAE5F,MAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,aAAa,QAAQ,UAAU,WAAW,IAAI;AAC3E,YAAQ,MAAM,uBAAuB;AACrC,YAAQ;AAAA,MACP;AAAA,IACD;AACA;AAAA,EACD;AAEA,QAAM,EAAE,QAAQ,UAAU,IAAI;AAC9B,QAAM,oBAAoB,QAAQ,MAC/B,IAAI,MAAM,gBAAgB,IAC1B,IAAI,MAAM,sBAAsB,aAAa,CAAC,CAAC;AAElD,aAAW,YAAY,mBAAmB;AACzC,UAAM,UAAU,MAAM,kBAAkB,KAAK,QAAQ;AACrD,QAAI,MAAM,eAAe,OAAO;AAEhC,QAAI,CAAC,QAAQ,MAAM,MAAM,QAAQ,GAAG;AACnC,UAAI,IAAI;AAAA,QACP,uBAAuB,sBAAsB,SAAS,MAAM,GAAG,qBAAqB;AAAA,MACrF;AACA;AAAA,IACD;AAEA,UAAM,iBAAiB,KAAK,SAAS,MAAM;AAAA,EAC5C;AAEA,QAAM,uBAAuB,GAAG;AAChC,wBAAsB,IAAI,QAAQ,IAAI,MAAM,gBAAgB,CAAC;AAC7D,0BAAwB,IAAI,GAAG;AAChC;;;ACrDA,gCAAsB;AAQf,SAAS,sBAAsB,KAAa,SAA+C;AACjG,SAAO,IAAI,QAAQ,aAAW;AAC7B,UAAM,CAAC,KAAK,GAAG,IAAI,IAAI,QAAQ,WAAW,IAAI,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;AACxE,UAAM,YAAQ,iCAAM,KAAK,MAAM,EAAE,KAAK,IAAI,CAAC;AAC3C,QAAI,SAAS;AACb,QAAI,QAAQ;AACZ,UAAM,QAAQ,GAAG,QAAQ,WAAU,UAAU,KAAM;AACnD,UAAM,QAAQ,GAAG,QAAQ,WAAU,SAAS,KAAM;AAClD,UAAM,GAAG,SAAS,SAAO,QAAQ,EAAE,MAAM,MAAM,QAAQ,OAAO,IAAI,QAAQ,CAAC,CAAC;AAC5E,UAAM,GAAG,QAAQ,UAAQ,QAAQ,EAAE,MAAM,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC1D,CAAC;AACF;;;AChBO,SAAS,2BACf,UACA,SACqB;AACrB,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AACT,aAAO;AAAA,IACR;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACbA,eAAsB,cACrB,KACA,UACA,SAC2B;AAC3B,QAAM,cAAc,QAAQ,KAAK,GAAG;AAEpC,MAAI,CAAC,SAAS,MAAM,MAAM,QAAQ,EAAE,QAAQ;AAC3C,UAAM,KAAK;AAAA,MACV,2BAA2B,UAAU,WAAW;AAAA,MAChD,IAAI,MAAM,qBAAqB;AAAA,IAChC;AACA,QAAI,IAAI,IAAI,EAAE;AACd,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,2BAA2B,UAAU,WAAW;AAChE,MAAI;AACH,QAAI,IAAI,IAAI,OAAO;AACnB,UAAM,aAAa,MAAM,sBAAsB,SAAS,MAAM,OAAO;AACrE,QAAI,WAAW,SAAS,GAAG;AAC1B,UAAI,IAAI,IAAI,uBAAuB,OAAO,CAAC;AAAA,IAC5C,OAAO;AACN,UAAI,IAAI,IAAI,uBAAuB,SAAS,IAAI,MAAM,cAAc,WAAW,IAAI,EAAE,CAAC,CAAC;AAAA,IACxF;AACA,QAAI,CAAC,WAAW,OAAO,KAAK,KAAK,CAAC,WAAW,MAAM,KAAK,GAAG;AAC1D,cAAQ,KAAK,qBAAqB;AAAA,IACnC,OAAO;AACN,UAAI,WAAW,QAAQ;AACtB,gBAAQ,KAAK,iBAAiB;AAC9B,gBAAQ,KAAK,WAAW,MAAM;AAC9B,gBAAQ,KAAK,EAAE;AAAA,MAChB;AACA,UAAI,WAAW,OAAO;AACrB,gBAAQ,MAAM,gBAAgB;AAC9B,gBAAQ,MAAM,WAAW,KAAK;AAC9B,gBAAQ,MAAM,EAAE;AAAA,MACjB;AAAA,IACD;AACA,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAI,IAAI,IAAI,uBAAuB,SAAS,KAAK,CAAC;AAClD,WAAO;AAAA,EACR;AACD;;;ACxCA,eAAsB,gBACrB,KACA,SACgB;AAChB,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,aAAa,OAAO,QAAQ,OAAO,CAAC,CAAC;AAEpF,QAAM,uBAAuB,GAAG;AAEhC,MAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,aAAa,QAAQ,UAAU,WAAW,IAAI;AAC3E,YAAQ,MAAM,uBAAuB;AACrC,YAAQ;AAAA,MACP;AAAA,IACD;AACA;AAAA,EACD;AAEA,QAAM,YAAY,QAAQ,MACvB,IAAI,MAAM,gBAAgB,IAC1B,IAAI,MAAM,sBAAsB,QAAQ,aAAa,CAAC,CAAC;AAE1D,QAAM,mBAAmB,WAAW,GAAG,OAAM,aAAY;AACxD,UAAM,cAAc,KAAK,UAAU,QAAQ,OAAO;AAAA,EACnD,CAAC;AAED,wBAAsB,IAAI,QAAQ,SAAS;AAC3C,0BAAwB,IAAI,GAAG;AAChC;;;ACzCA,IAAAC,sBAAsB;AAItB,eAAsB,cAAc,UAAmC;AACtE,QAAM,iBAAiB,SAAS,OAAO;AACvC,QAAM,UAAM,oBAAAC,SAAU,EAAE;AACxB,MAAI,CAAC,SAAS,MAAM,QAAQ;AAC3B,UAAM,IAAI,MAAM,EAAE;AAAA,EACnB;AACA,QAAM,IAAI,MAAM,SAAS,KAAK,QAAQ,SAAS,IAAI;AAEnD,MAAI,gBAAgB;AACnB,QAAI;AACH,YAAM,cAAU,oBAAAA,SAAU,SAAS,IAAI;AACvC,YAAM,QAAQ,SAAS,cAAc;AAAA,IACtC,QAAQ;AAAA,IAER;AAAA,EACD;AACD;;;ACjBO,SAAS,qBAAqB,UAA8C;AAClF,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU,UAAU,OAAO,YAAY;AAAA,IACvC,UAAU;AACT,aAAO,WAAW,MAAM,SAAS,OAAO,QAAQ,KAAK;AAAA,IACtD;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACNA,eAAsB,QAAQ,KAAuB,UAA8C;AAClG,MAAI,CAAC,SAAS,KAAM,QAAO;AAE3B,QAAM,UAAU,qBAAqB,QAAQ;AAC7C,MAAI;AACH,QAAI,IAAI,IAAI,OAAO;AACnB,UAAM,cAAc,QAAQ;AAC5B,UAAM,SAAS,MAAM,kBAAkB,KAAK,QAAQ;AACpD,QAAI,MAAM,eAAe,MAAM;AAC/B,QAAI,IAAI,IAAI,uBAAuB,qBAAqB,MAAM,CAAC,CAAC;AAEhE,UAAM,eAAe,MAAM,iBAAiB,SAAS,IAAI;AACzD,UAAM,mBAAmB,IAAI,QAAQ;AAAA,MACpC,MAAM,OAAO,OAAO;AAAA,MACpB,YAAY,OAAO,MAAM;AAAA,MACzB,UAAU,OAAO,OAAO;AAAA,MACxB,QAAQ,gBAAgB,OAAO,OAAO,UAAU;AAAA,IACjD,CAAC;AAED,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAI,IAAI,IAAI,uBAAuB,SAAS,KAAK,CAAC;AAClD,WAAO;AAAA,EACR;AACD;;;AC9BA,eAAsB,eACrB,KACA,UAC2B;AAC3B,QAAM,UAAU,MAAM,kBAAkB,KAAK,QAAQ;AACrD,MAAI,CAAC,QAAQ,MAAM,SAAS,OAAO,GAAG;AACrC,WAAO;AAAA,EACR;AAEA,MAAI,CAAC,QAAQ,MAAM;AAClB,WAAO;AAAA,EACR;AAEA,SAAO,QAAQ,KAAK,OAAO;AAC5B;;;ACVA,eAAsB,SAAS,KAAuB,OAA0C;AAC/F,aAAW,QAAQ,OAAO;AACzB,QAAI,CAAC,IAAI,MAAM,kBAAkB,KAAK,IAAI,GAAG;AAC5C,YAAM,WAAW,eAAe,IAAI,QAAQ,KAAK,MAAM,IAAI;AAC3D,UAAI,MAAM,YAAY,QAAQ;AAAA,IAC/B;AAAA,EACD;AAEA,aAAW,YAAY,IAAI,MAAM,gBAAgB,GAAG;AACnD,UAAM,eAAe,KAAK,QAAQ;AAAA,EACnC;AAEA,QAAM,uBAAuB,GAAG;AAChC,wBAAsB,IAAI,QAAQ,IAAI,MAAM,gBAAgB,CAAC;AAC7D,0BAAwB,IAAI,GAAG;AAChC;;;ACxBA,IAAAC,kBAA2B;AAC3B,IAAAC,oBAAqB;;;ACGd,SAAS,uBAAuB,MAAwB,QAAyB;AACvF,SAAO,SAAS,SAAS,KAAK,OAAO,MAAM,SAAS,KAAK,IAAI;AAC9D;;;ADUA,eAAsB,cACrB,KACA,OACA,UACA,eACgB;AAChB,QAAM,YAAY,SAAS,WAAW,GAAG,IAAI,SAAS,MAAM,GAAG,EAAE,CAAC,IAAI;AACtE,QAAM,OAAO,MAAM,KAAK,OAAK,EAAE,KAAK,YAAY,MAAM,UAAU,YAAY,CAAC;AAE7E,MAAI,CAAC,MAAM;AACV,QAAI,IAAI;AAAA,MACP,uBAAuB,qBAAqB,MAAS,GAAG,iBAAiB,QAAQ,GAAG;AAAA,IACrF;AACA,4BAAwB,IAAI,GAAG;AAC/B;AAAA,EACD;AAEA,QAAM,WAAW,uBAAuB,MAAM,aAAa;AAE3D,QAAM,WAAW,IAAI,MAAM,uBAAuB,QAAQ;AAC1D,MAAI,YAAY,SAAS,MAAM,SAAS,KAAK,MAAM;AAClD,UAAM,MAAM,YAAY,QAAQ,iCAAiC,SAAS,OAAO,IAAI;AACrF,QAAI,IAAI,IAAI,uBAAuB,qBAAqB,QAAQ,GAAG,GAAG,CAAC;AACvE,4BAAwB,IAAI,GAAG;AAC/B;AAAA,EACD;AAEA,MAAI,UAAU;AACb,UAAM,eAAe,KAAK,QAAQ;AAAA,EACnC,OAAO;AACN,UAAM,gBAAY,wBAAK,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,MAAM,MAAM,QAAQ;AAC5E,YAAI,4BAAW,SAAS,GAAG;AAC1B,YAAM,MAAM,+BAA+B,SAAS;AACpD,UAAI,IAAI,IAAI,uBAAuB,qBAAqB,MAAS,GAAG,GAAG,CAAC;AACxE,8BAAwB,IAAI,GAAG;AAC/B;AAAA,IACD;AAEA,UAAM,eAAe,gBAAgB,GAAG,KAAK,IAAI,MAAM,aAAa,KAAK,KAAK;AAC9E,UAAM,UAAU,eAAe,IAAI,QAAQ,UAAU,MAAM,QAAQ,YAAY;AAE/E,QAAI,MAAM,YAAY,OAAO;AAC7B,UAAM,mBAAmB,IAAI,QAAQ,QAAQ,MAAM;AAEnD,UAAM,eAAe,KAAK,OAAO;AAAA,EAClC;AAEA,QAAM,uBAAuB,GAAG;AAChC,wBAAsB,IAAI,QAAQ,IAAI,MAAM,gBAAgB,CAAC;AAC7D,0BAAwB,IAAI,GAAG;AAChC;;;AE9DA,eAAsB,YAAY,KAAsC;AACvE,QAAM,uBAAuB,GAAG;AAChC,wBAAsB,IAAI,QAAQ,IAAI,MAAM,gBAAgB,CAAC;AAC9D;;;ACSA,eAAsB,SACrB,KACA,EAAE,KAAK,UAAU,cAAc,GACH;AAC5B,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,SAAS,EAAE,KAAK,UAAU,cAAc,CAAC,CAAC,CAAC;AAE1F,MAAI,KAAK;AACR,UAAM,SAAS,KAAK,KAAK;AAAA,EAC1B,WAAW,UAAU;AACpB,UAAM,cAAc,KAAK,OAAO,UAAU,aAAa;AAAA,EACxD,OAAO;AACN,UAAM,YAAY,GAAG;AAAA,EACtB;AAEA,SAAO;AACR;;;AChCO,SAAS,sBACf,UACA,KACA,QACgB;AAChB,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,UAAU;AACT,aAAO,WAAW,GAAG;AAAA,IACtB;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACjBA,eAAsB,QAAQ,KAAuB,UAA2C;AAC/F,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,MAAM,CAAC,CAAC;AACvD,MAAI,IAAI,IAAI,sBAAsB,IAAI,WAAW,IAAI,EAAE,CAAC;AAExD,UAAQ,KAAK,qBAAqB;AACnC;;;ACPO,SAAS,uBACf,UACA,KACA,SACiB;AACjB,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,UAAU;AACT,aAAO,cAAc,GAAG,IAAI,OAAO;AAAA,IACpC;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACjBA,eAAsB,WACrB,KAEA,UACgB;AAChB,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,WAAW,SAAS,IAAI,CAAC,CAAC;AACzE,MAAI,IAAI,IAAI,uBAAuB,IAAI,WAAW,IAAI,EAAE,CAAC;AAEzD,UAAQ,KAAK,wBAAwB;AACtC;;;ACdA,IAAAC,sBAAsB;AAItB,eAAsB,aAAa,UAAmC;AACrE,QAAM,UAAM,oBAAAC,SAAU,SAAS,IAAI;AACnC,QAAM,IAAI,KAAK,UAAU,SAAS,OAAO,MAAM;AAChD;;;ACJO,SAAS,oBAAoB,UAAoB,QAA6B;AACpF,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AACT,aAAO,eAAe,MAAM;AAAA,IAC7B;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACTA,eAAsB,eACrB,KACA,UAC2B;AAC3B,QAAM,UAAU,oBAAoB,UAAU,SAAS,OAAO,MAAM;AACpE,MAAI;AACH,QAAI,IAAI,IAAI,OAAO;AACnB,UAAM,aAAa,QAAQ;AAC3B,UAAM,UAAU,MAAM,kBAAkB,KAAK,UAAU,IAAI;AAC3D,QAAI,MAAM,eAAe,OAAO;AAChC,QAAI,IAAI,IAAI,uBAAuB,OAAO,CAAC;AAC3C,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAI,IAAI,IAAI,uBAAuB,SAAS,KAAK,CAAC;AAClD,WAAO;AAAA,EACR;AACD;;;ACxBA,IAAAC,sBAAsB;AAStB,eAAsB,wBAAwB,KAAiD;AAC9F,QAAM,YAAY,IAAI;AACtB,MAAI,CAAC,UAAW,QAAO;AACvB,MAAI,CAAC,UAAU,MAAM,MAAM,MAAM,KAAK,CAAC,UAAU,KAAK,SAAS,MAAM,EAAG,QAAO;AAE/E,QAAM,UAAU,oBAAoB,WAAW,UAAU,OAAO,MAAM;AACtE,QAAM,UAAM,oBAAAC,SAAU,UAAU,IAAI;AACpC,MAAI;AACH,QAAI,IAAI,IAAI,OAAO;AACnB,UAAM,IAAI,KAAK,UAAU,UAAU,OAAO,MAAM;AAChD,UAAM,UAAU,MAAM,kBAAkB,KAAK,WAAW,IAAI;AAC5D,QAAI,YAAY;AAChB,QAAI,IAAI,IAAI,uBAAuB,OAAO,CAAC;AAC3C,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAI,IAAI;AAAA,MACP,uBAAuB,oBAAoB,WAAW,UAAU,OAAO,MAAM,GAAG,KAAK;AAAA,IACtF;AACA,WAAO;AAAA,EACR;AACD;;;ACxBA,eAAsB,sBACrB,KACA,UAAU,OACiB;AAC3B,QAAM,oBAAoB;AAAA,IACzB,GAAG,eAAe,IAAI,QAAQ,KAAK,QAAW,QAAQ,WAAW;AAAA,IACjE,MAAM,IAAI,OAAO,KAAK;AAAA,EACvB;AACA,QAAM,YAAY,MAAM,kBAAkB,KAAK,mBAAmB,OAAO;AACzE,MAAI,YAAY;AAChB,SAAO;AACR;;;ACHA,eAAsB,QACrB,KACA,UAAmD,CAAC,GACpC;AAChB,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAE1E,QAAM,uBAAuB,GAAG;AAEhC,MAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,aAAa,QAAQ,UAAU,WAAW,IAAI;AAC3E,YAAQ,MAAM,uBAAuB;AACrC,YAAQ;AAAA,MACP;AAAA,IACD;AACA;AAAA,EACD;AAEA,QAAM,YAAY,QAAQ,MACvB,IAAI,MAAM,gBAAgB,IAC1B,IAAI,MAAM,sBAAsB,QAAQ,aAAa,CAAC,CAAC;AAE1D,QAAM,mBAAmB,WAAW,GAAG,OAAM,aAAY;AACxD,QAAI,SAAS,MAAM,MAAM,MAAM,KAAK,SAAS,KAAK,SAAS,MAAM,GAAG;AACnE,YAAM,eAAe,KAAK,QAAQ;AAAA,IACnC;AAAA,EACD,CAAC;AAED,QAAM,sBAAsB,GAAG;AAC/B,QAAM,wBAAwB,GAAG;AAEjC,wBAAsB,IAAI,QAAQ,SAAS;AAC3C,0BAAwB,IAAI,GAAG;AAChC;;;AChDA,IAAAC,sBAAsB;AAItB,eAAsB,aAAa,UAAmC;AACrE,QAAM,UAAM,oBAAAC,SAAU,SAAS,IAAI;AACnC,QAAM,IAAI,KAAK,UAAU,SAAS,OAAO,MAAM;AAChD;;;ACJO,SAAS,oBAAoB,UAAoB,QAA6B;AACpF,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AACT,aAAO,aAAa,MAAM;AAAA,IAC3B;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACTA,eAAsB,eACrB,KACA,UAC2B;AAC3B,QAAM,UAAU,oBAAoB,UAAU,SAAS,OAAO,MAAM;AACpE,MAAI;AACH,QAAI,IAAI,IAAI,OAAO;AACnB,UAAM,aAAa,QAAQ;AAC3B,UAAM,UAAU,MAAM,kBAAkB,KAAK,UAAU,IAAI;AAC3D,QAAI,MAAM,eAAe,OAAO;AAChC,QAAI,IAAI,IAAI,uBAAuB,OAAO,CAAC;AAC3C,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAI,IAAI,IAAI,uBAAuB,SAAS,KAAK,CAAC;AAClD,WAAO;AAAA,EACR;AACD;;;ACxBA,IAAAC,sBAAsB;AAStB,eAAsB,wBAAwB,KAAiD;AAC9F,QAAM,YAAY,IAAI;AACtB,MAAI,CAAC,UAAW,QAAO;AACvB,MAAI,CAAC,UAAU,MAAM,MAAM,MAAM,KAAK,CAAC,UAAU,KAAK,SAAS,MAAM,EAAG,QAAO;AAE/E,QAAM,UAAU,oBAAoB,WAAW,UAAU,OAAO,MAAM;AACtE,QAAM,UAAM,oBAAAC,SAAU,UAAU,IAAI;AACpC,MAAI;AACH,QAAI,IAAI,IAAI,OAAO;AACnB,UAAM,IAAI,KAAK,UAAU,UAAU,OAAO,MAAM;AAChD,UAAM,UAAU,MAAM,kBAAkB,KAAK,WAAW,IAAI;AAC5D,QAAI,YAAY;AAChB,QAAI,IAAI,IAAI,uBAAuB,OAAO,CAAC;AAC3C,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAI,IAAI,IAAI,uBAAuB,SAAS,KAAK,CAAC;AAClD,WAAO;AAAA,EACR;AACD;;;ACdA,eAAsB,QACrB,KACA,UAAmD,CAAC,GACpC;AAChB,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAE1E,QAAM,uBAAuB,GAAG;AAEhC,MAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,aAAa,QAAQ,UAAU,WAAW,IAAI;AAC3E,YAAQ,MAAM,uBAAuB;AACrC,YAAQ;AAAA,MACP;AAAA,IACD;AACA;AAAA,EACD;AAEA,QAAM,YAAY,QAAQ,MACvB,IAAI,MAAM,gBAAgB,IAC1B,IAAI,MAAM,sBAAsB,QAAQ,aAAa,CAAC,CAAC;AAE1D,QAAM,mBAAmB,WAAW,GAAG,OAAM,aAAY;AACxD,QAAI,SAAS,MAAM,MAAM,MAAM,KAAK,SAAS,KAAK,SAAS,MAAM,GAAG;AACnE,YAAM,eAAe,KAAK,QAAQ;AAAA,IACnC;AAAA,EACD,CAAC;AAED,QAAM,sBAAsB,GAAG;AAC/B,QAAM,wBAAwB,GAAG;AAEjC,wBAAsB,IAAI,QAAQ,SAAS;AAC3C,0BAAwB,IAAI,GAAG;AAChC;;;AC9CO,SAAS,+BAA+B,OAAsC;AACpF,UAAQ,KAAK,aAAa;AAC1B,UAAQ,KAAK,WAAW,MAAM,OAAO,MAAM,QAAQ,WAAW,EAAE;AAChE,UAAQ,KAAK,WAAW,MAAM,OAAO,MAAM,UAAU,WAAW,EAAE;AAClE,MAAI,MAAM,OAAO,SAAS,GAAG;AAC5B,YAAQ,KAAK,aAAa,MAAM,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,EACpD;AACA,UAAQ,KAAK,EAAE;AAEf,UAAQ,KAAK,WAAW;AACxB,UAAQ,KAAK,aAAa,MAAM,OAAO,YAAY,WAAW,EAAE;AAChE,UAAQ,KAAK,eAAe,MAAM,OAAO,OAAO,YAAY,WAAW,EAAE;AACzE,UAAQ,KAAK,aAAa,MAAM,UAAU,MAAM,OAAO,OAAO,MAAM,EAAE;AACtE,MAAI,MAAM,OAAO,QAAQ,MAAM,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AAC/D,YAAQ,KAAK,aAAa,MAAM,OAAO,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EAClE;AACA,UAAQ,KAAK,EAAE;AAChB;;;ACdO,SAAS,0BACf,UACA,eACO;AACP,MAAI,cAAc,WAAW,GAAG;AAC/B;AAAA,EACD;AAEA,QAAM,UAAU,CAAC,WAAW,WAAW,aAAa,QAAQ;AAC5D,QAAM,OAAO,cAAc,IAAI,QAAM;AAAA,IACpC,GAAG;AAAA,IACH,GAAG,WAAW;AAAA,IACd,GAAG,oBAAoB;AAAA,IACvB,GAAG,OAAO,KAAK,IAAI,KAAK;AAAA,EACzB,CAAC;AAED,UAAQ,KAAK,gBAAgB,SAAS,OAAO,IAAI,GAAG;AACpD,UAAQ,KAAK,YAAY,MAAM,OAAO,CAAC;AACvC,UAAQ,KAAK,EAAE;AAChB;;;ACxBA,IAAAC,kBAAyC;AACzC,IAAAC,oBAAqB;AAId,SAAS,yBACf,cACA,aACA,QACA,KACkD;AAClD,MAAI,cAAU,wBAAK,cAAc,aAAa,QAAQ,IAAI,IAAI;AAC9D,MAAI,kBAAc,wBAAK,SAAS,cAAc;AAE9C,MAAI,KAAC,4BAAW,WAAW,GAAG;AAC7B,UAAM,cAAU,wBAAK,cAAc,aAAa,IAAI,IAAI;AACxD,UAAM,qBAAiB,wBAAK,SAAS,cAAc;AACnD,YAAI,4BAAW,cAAc,GAAG;AAC/B,gBAAU;AACV,oBAAc;AAAA,IACf;AAAA,EACD;AAEA,QAAM,SAA6B;AAAA,IAClC,eAAe,IAAI;AAAA,IACnB,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,CAAC;AAAA,EACV;AAEA,UAAI,4BAAW,WAAW,GAAG;AAC5B,QAAI;AACH,YAAM,UAAU,KAAK,UAAM,8BAAa,aAAa,OAAO,CAAC;AAC7D,aAAO,UAAU,QAAQ,WAAW;AAAA,IACrC,QAAQ;AACP,aAAO,OAAO,KAAK,iBAAiB;AAAA,IACrC;AAAA,EACD,OAAO;AACN,WAAO,OAAO,KAAK,iBAAiB;AAAA,EACrC;AAEA,SAAO,EAAE,SAAS,OAAO;AAC1B;;;AC3CA,IAAAC,6BAAyB;AAIlB,SAAS,uBAAuB,KAAoB,QAAkC;AAC5F,MAAI,OAAO,YAAY,QAAQ,OAAO,YAAY,SAAS;AAC1D,QAAI;AACH,YAAM,aAAS,qCAAS,YAAY,IAAI,aAAa,YAAY;AAAA,QAChE,UAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAO,CAAC,QAAQ,QAAQ,QAAQ;AAAA,MACjC,CAAC;AACD,aAAO,mBAAmB,OAAO,KAAK,KAAK;AAAA,IAC5C,QAAQ;AACP,aAAO,mBAAmB;AAAA,IAC3B;AAAA,EACD;AACD;;;ACZO,SAAS,8BACf,cACA,OACuB;AACvB,QAAM,gBAAsC,CAAC;AAE7C,aAAW,WAAW,MAAM,UAAU;AACrC,eAAW,UAAU,QAAQ,gBAAgB;AAC5C,YAAM,KAAK,MAAM,WAAW,IAAI,MAAM;AACtC,UAAI,CAAC,GAAI;AACT,iBAAW,WAAW,GAAG,cAAc;AACtC,cAAM,MAAM,MAAM,SAAS,IAAI,OAAO;AACtC,YAAI,CAAC,IAAK;AAEV,cAAM,EAAE,OAAO,IAAI,yBAAyB,cAAc,QAAQ,MAAM,GAAG,MAAM,GAAG;AACpF,+BAAuB,KAAK,MAAM;AAClC,sBAAc,KAAK,MAAM;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;;;AC3BA,IAAAC,qBAAgC;;;ACAhC,IAAAC,qBAAyD;AAIzD,eAAsB,oBAAoB,MAAqD;AAC9F,QAAM,mBAAmB,KAAK,UAAU,OAAO,UAAM,0CAAsB,IAAI;AAC/E,MAAI,CAAC,iBAAiB,SAAS;AAC9B,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,iBAAiB;AAEjC,QAAM,YAAY,QAAQ,MAAM,sBAAsB;AACtD,MAAI,CAAC,WAAW;AACf,YAAQ,KAAK,oBAAoB,KAAK,QAAQ,yBAAyB;AACvE,WAAO;AAAA,EACR;AAEA,QAAM,YAAY,QAAQ,MAAM,2BAA2B;AAC3D,QAAM,gBAAgB,QAAQ,MAAM,iDAAiD;AAErF,MAAI,eAAyB,CAAC;AAC9B,MAAI,eAAe;AAClB,mBAAe,cAAc,CAAC,EAC5B,MAAM,IAAI,EACV,IAAI,UAAQ,KAAK,QAAQ,oBAAoB,EAAE,EAAE,KAAK,CAAC,EACvD,OAAO,OAAO;AAAA,EACjB;AAEA,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM,UAAU,CAAC,EAAE,KAAK;AAAA,IACxB,MAAM,YAAY,CAAC,GAAG,KAAK,KAAK;AAAA,IAChC;AAAA,EACD;AACD;;;AD5BA,eAAsB,qBACrB,QACA,cAC6B;AAC7B,QAAM,cAAc,UAAM,oCAAgB,OAAO,SAAS,cAAc,CAAC,WAAW,CAAC;AACrF,QAAM,UAAU,MAAM,QAAQ,IAAI,YAAY,IAAI,UAAQ,oBAAoB,IAAI,CAAC,CAAC;AACpF,SAAO,QAAQ,OAAO,CAAC,WAAsC,WAAW,IAAI;AAC7E;;;AEdA,IAAAC,qBAAgC;;;ACAhC,IAAAC,qBAAyD;AAIzD,eAAsB,kBAAkB,MAAmD;AAC1F,QAAM,mBAAmB,KAAK,UAAU,OAAO,UAAM,0CAAsB,IAAI;AAC/E,MAAI,CAAC,iBAAiB,SAAS;AAC9B,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,iBAAiB;AAEjC,QAAM,YAAY,QAAQ,MAAM,oBAAoB;AACpD,MAAI,CAAC,WAAW;AACf,YAAQ,KAAK,kBAAkB,KAAK,QAAQ,yBAAyB;AACrE,WAAO;AAAA,EACR;AAEA,QAAM,qBAAqB,QAAQ,MAAM,qCAAqC;AAC9E,QAAM,YAAY,QAAQ,MAAM,2BAA2B;AAE3D,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM,UAAU,CAAC,EAAE,KAAK;AAAA,IACxB,eAAe,qBAAqB,CAAC,GAAG,KAAK,KAAK;AAAA,IAClD,MAAM,YAAY,CAAC,GAAG,KAAK,KAAK;AAAA,EACjC;AACD;;;ADpBA,eAAsB,mBACrB,QACA,cAC2B;AAC3B,QAAM,cAAc,UAAM,oCAAgB,OAAO,SAAS,cAAc,CAAC,SAAS,CAAC;AACnF,QAAM,UAAU,MAAM,QAAQ,IAAI,YAAY,IAAI,UAAQ,kBAAkB,IAAI,CAAC,CAAC;AAClF,SAAO,QAAQ,OAAO,CAAC,WAAoC,WAAW,IAAI;AAC3E;;;AEdA,IAAAC,sBAAgC;;;ACAhC,IAAAC,qBAAyD;AAIzD,eAAsB,kBAAkB,MAAmD;AAC1F,QAAM,mBAAmB,KAAK,UAAU,OAAO,UAAM,0CAAsB,IAAI;AAC/E,MAAI,CAAC,iBAAiB,SAAS;AAC9B,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,iBAAiB;AAEjC,QAAM,YAAY,QAAQ,MAAM,oBAAoB;AACpD,MAAI,CAAC,WAAW;AACf,YAAQ,KAAK,kBAAkB,KAAK,QAAQ,yBAAyB;AACrE,WAAO;AAAA,EACR;AAEA,QAAM,YAAY,QAAQ,MAAM,2BAA2B;AAC3D,QAAM,kBAAkB,QAAQ,MAAM,mDAAmD;AAEzF,MAAI,iBAA2B,CAAC;AAChC,MAAI,iBAAiB;AACpB,qBAAiB,gBAAgB,CAAC,EAChC,MAAM,IAAI,EACV,IAAI,UAAQ,KAAK,QAAQ,sBAAsB,EAAE,EAAE,KAAK,CAAC,EACzD,OAAO,OAAO;AAAA,EACjB;AAEA,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM,UAAU,CAAC,EAAE,KAAK;AAAA,IACxB,MAAM,YAAY,CAAC,GAAG,KAAK,KAAK;AAAA,IAChC;AAAA,EACD;AACD;;;AD5BA,eAAsB,mBACrB,QACA,cAC2B;AAC3B,QAAM,cAAc,UAAM,qCAAgB,OAAO,SAAS,cAAc,CAAC,SAAS,CAAC;AAEnF,QAAM,UAAU,MAAM,QAAQ,IAAI,YAAY,IAAI,UAAQ,kBAAkB,IAAI,CAAC,CAAC;AAClF,SAAO,QAAQ,OAAO,CAAC,WAAoC,WAAW,IAAI;AAC3E;;;AEbO,SAAS,wBACf,UACA,YACA,UACe;AACf,QAAM,WAAqB,CAAC;AAC5B,QAAM,QAAQ,oBAAI,IAA6B;AAC/C,QAAM,SAAS,oBAAI,IAA2B;AAE9C,aAAW,MAAM,YAAY;AAC5B,UAAM,IAAI,GAAG,MAAM,EAAE;AAAA,EACtB;AACA,aAAW,OAAO,UAAU;AAC3B,WAAO,IAAI,IAAI,MAAM,GAAG;AAAA,EACzB;AAEA,aAAW,WAAW,UAAU;AAC/B,eAAW,UAAU,QAAQ,gBAAgB;AAC5C,UAAI,CAAC,MAAM,IAAI,MAAM,GAAG;AACvB,iBAAS,KAAK,sBAAsB,MAAM,EAAE;AAAA,MAC7C;AAAA,IACD;AACA,eAAW,MAAM,YAAY;AAC5B,UAAI,CAAC,QAAQ,eAAe,SAAS,GAAG,IAAI,EAAG;AAC/C,iBAAW,WAAW,GAAG,cAAc;AACtC,YAAI,CAAC,OAAO,IAAI,OAAO,GAAG;AACzB,mBAAS,KAAK,oBAAoB,OAAO,EAAE;AAAA,QAC5C;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO,EAAE,UAAU,YAAY,OAAO,UAAU,QAAQ,SAAS;AAClE;;;AC3BA,eAAsB,iBACrB,QACA,cACwB;AACxB,QAAM,CAAC,UAAU,YAAY,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC1D,mBAAmB,QAAQ,YAAY;AAAA,IACvC,qBAAqB,QAAQ,YAAY;AAAA,IACzC,mBAAmB,QAAQ,YAAY;AAAA,EACxC,CAAC;AACD,SAAO,wBAAwB,UAAU,YAAY,QAAQ;AAC9D;;;ACEA,eAAsB,QACrB,KACA,SACgB;AAChB,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAE1E,QAAM,uBAAuB,GAAG;AAEhC,QAAM,EAAE,YAAY,CAAC,EAAE,IAAI;AAE3B,QAAM,YAAmC,oBAAI,IAAI;AACjD,MAAI,UAAU,WAAW,GAAG;AAC3B,UAAM,MAAM,IAAI,MAAM,gBAAgB;AACtC,QAAI,QAAQ,cAAY,UAAU,IAAI,SAAS,OAAO,UAAU,QAAQ,CAAC;AAAA,EAC1E,OAAO;AACN,eAAW,QAAQ,WAAW;AAC7B,YAAM,WAAW,IAAI,MAAM,kBAAkB,IAAI,KAAK,IAAI,MAAM,uBAAuB,IAAI;AAC3F,UAAI,CAAC,UAAU;AACd,gBAAQ,KAAK,qBAAqB,IAAI,EAAE;AACxC;AAAA,MACD;AACA,gBAAU,IAAI,SAAS,OAAO,UAAU,QAAQ;AAAA,IACjD;AAAA,EACD;AAEA,QAAM,2BAA2B,oBAAI,IAAqC;AAC1E,QAAM,6BAA6B,oBAAI,IAAkC;AAEzE,aAAW,CAAC,UAAU,QAAQ,KAAK,WAAW;AAC7C,UAAM,QAAQ,MAAM,iBAAiB,IAAI,QAAQ,SAAS,IAAI;AAC9D,UAAM,kBAA2C;AAAA,MAChD,QAAQ;AAAA,MACR,QAAQ,SAAS,MAAM,MAAM,QAAQ,EAAE,UAAU,SAAS,OAAO;AAAA,MACjE,QAAQ,CAAC;AAAA,MACT;AAAA,IACD;AACA,6BAAyB,IAAI,UAAU,eAAe;AAEtD,eAAW,KAAK,MAAM,UAAU;AAC/B,cAAQ,KAAK,CAAC;AAAA,IACf;AAEA,QAAI,MAAM,SAAS,WAAW,GAAG;AAChC,sBAAgB,OAAO,KAAK,oBAAoB;AAChD;AAAA,IACD;AAEA,UAAM,gBAAgB,8BAA8B,SAAS,MAAM,KAAK;AACxE,+BAA2B,IAAI,UAAU,aAAa;AAAA,EACvD;AAEA,aAAW,CAAC,UAAU,KAAK,KAAK,0BAA0B;AACzD,mCAA+B,KAAK;AACpC,UAAM,gBAAgB,2BAA2B,IAAI,QAAQ,KAAK,CAAC;AACnE,8BAA0B,MAAM,QAAQ,aAAa;AAAA,EACtD;AACD;;;AC5EO,SAAS,wBAAwB,YAA8B;AACrE,MAAI,WAAW,WAAW,GAAG;AAC5B;AAAA,EACD;AAEA,QAAM,UAAU,CAAC,aAAa,UAAU,QAAQ;AAChD,QAAM,OAAO,WAAW,IAAI,OAAK;AAAA,IAChC,EAAE,OAAO;AAAA,IACT,EAAE,MAAM,MAAM,QAAQ,EAAE,UAAU,EAAE,OAAO;AAAA,IAC3C,EAAE,MAAM,OAAO,EAAE,KAAK,IAAI,KAAK;AAAA,EAChC,CAAC;AAED,UAAQ,KAAK,YAAY;AACzB,UAAQ,KAAK,YAAY,MAAM,OAAO,CAAC;AACvC,UAAQ,KAAK,EAAE;AAChB;;;ACjBO,SAAS,uBAAuB,WAA4B;AAClE,MAAI,CAAC,WAAW;AACf;AAAA,EACD;AAEA,QAAM,SAAS,UAAU,MAAM,MAAM,QAAQ,EAAE,YAC5C,UAAU,KAAK,MAAM,QAAQ,EAAE,UAAU,UAAU,OAAO,SAC1D;AACH,QAAM,SAAS,UAAU,MAAM,OAAO,EAAE,KAAK,IAAI;AACjD,QAAM,SAAS,UAAU,MAAM,MAAM,QAAQ,EAAE,UAAU,UAAU,OAAO;AAE1E,UAAQ,KAAK,YAAY;AACzB,UAAQ,KAAK,aAAa,UAAU,MAAM,EAAE;AAC5C,UAAQ,KAAK,aAAa,UAAU,IAAI,EAAE;AAC1C,UAAQ,KAAK,aAAa,MAAM,EAAE;AAClC,UAAQ,KAAK,aAAa,UAAU,GAAG,EAAE;AACzC,UAAQ,KAAK,EAAE;AAChB;;;ACnBA,IAAAC,mBAAwB;AACxB,IAAAC,oBAA+B;;;ACGxB,SAAS,yBAAyB,QAAyB,UAA4B;AAC7F,SAAO,eAAe,QAAQ,UAAU,QAAW,IAAI,QAAQ;AAChE;;;ADGA,eAAsB,wBACrB,KACA,OACsB;AACtB,QAAM,oBAAgB,wBAAK,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,MAAM,IAAI;AACtE,QAAM,SAAqB,CAAC;AAE5B,MAAI;AACH,UAAM,UAAU,UAAM,0BAAQ,eAAe,EAAE,eAAe,KAAK,CAAC;AACpE,eAAW,SAAS,SAAS;AAC5B,UAAI,CAAC,MAAM,YAAY,GAAG;AACzB;AAAA,MACD;AACA,YAAM,UAAM,wBAAK,eAAe,MAAM,IAAI;AAC1C,YAAM,eAAW,4BAAS,eAAe,GAAG;AAG5C,YAAM,QAAQ,MAAM,uBAAuB,QAAQ;AACnD,UAAI,OAAO;AACV;AAAA,MACD;AAEA,YAAM,WAAW,EAAE,GAAG,yBAAyB,IAAI,QAAQ,QAAQ,GAAG,MAAM,IAAI;AAChF,YAAM,UAAU,MAAM,kBAAkB,KAAK,QAAQ;AACrD,aAAO,KAAK,OAAO;AAAA,IACpB;AAAA,EACD,QAAQ;AAAA,EAER;AAEA,SAAO;AACR;;;AEpCA,eAAsB,cAAc,KAAsC;AACzE,QAAM,mBAAmB,IAAI,MAAM,gBAAgB,GAAG,GAAG,OAAM,aAAY;AAC1E,QAAI,CAAC,SAAS,MAAM,MAAM,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,MAAM,EAAG;AACtE,UAAM,eAAe,KAAK,QAAQ;AAAA,EACnC,CAAC;AACF;;;ACOA,eAAsB,UACrB,KACA,SACgB;AAChB,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,UAAU,QAAQ,IAAI,CAAC,CAAC;AAEvE,QAAM,sBAAsB,KAAK,QAAQ,OAAO;AAEhD,QAAM,uBAAuB,KAAK,QAAQ,OAAO;AACjD,MAAI,QAAQ,MAAM;AACjB,UAAM,wBAAwB,GAAG;AACjC,UAAM,cAAc,GAAG;AAAA,EACxB;AAEA,QAAM,aAAa,MAAM,wBAAwB,KAAK,IAAI,KAAK;AAE/D,QAAM,kBAAkB,IAAI,WAAW,OACpC,IAAI,UAAU,KACb,OAAO,EACP,OAAO,OAAK,MAAM,qBAAqB,MAAM,eAAe,MAAM,cAAc,IACjF,CAAC;AACJ,QAAM,oBAAoB,IAAI,YAC3B;AAAA,IACA,GAAG,IAAI;AAAA,IACP,MAAM,IAAI,UAAU,OACjB,EAAE,GAAG,IAAI,UAAU,MAAM,QAAQ,MAAM,gBAAgB,IACvD;AAAA,EACJ,IACC;AAEH,yBAAuB,iBAAiB;AACxC,wBAAsB,IAAI,QAAQ,IAAI,MAAM,gBAAgB,CAAC;AAC7D,0BAAwB,UAAU;AAClC,0BAAwB,IAAI,GAAG;AAChC;;;ACtDA,IAAAC,sBAAsB;AAWtB,eAAsB,sBAAsB,KAAiD;AAC5F,MAAI,YAAY,IAAI;AACpB,MAAI,CAAC,WAAW;AACf,gBAAY;AAAA,MACX,GAAG,eAAe,IAAI,QAAQ,KAAK,QAAW,QAAQ,WAAW;AAAA,MACjE,MAAM,IAAI,OAAO,KAAK;AAAA,IACvB;AACA,UAAM,UAAU,MAAM,kBAAkB,KAAK,WAAW,IAAI;AAC5D,QAAI,YAAY;AAChB,gBAAY;AAAA,EACb;AAEA,QAAM,UAAM,oBAAAC,SAAU,UAAU,IAAI;AAGpC,MAAI,UAAU,MAAM,MAAM,MAAM,GAAG;AAClC,UAAM,UAAU,oBAAoB,WAAW,UAAU,OAAO,MAAM;AACtE,QAAI;AACH,UAAI,IAAI,IAAI,OAAO;AACnB,YAAM,IAAI,KAAK,UAAU,UAAU,OAAO,MAAM;AAChD,UAAI,IAAI,IAAI,uBAAuB,OAAO,CAAC;AAAA,IAC5C,SAAS,OAAO;AACf,YAAM,KAAK,uBAAuB,SAAS,KAAK;AAChD,UAAI,IAAI,IAAI,EAAE;AACd,aAAO;AAAA,IACR;AAAA,EACD;AAGA,MAAI,UAAU,MAAM,MAAM,MAAM,GAAG;AAClC,UAAM,UAAU,oBAAoB,WAAW,UAAU,OAAO,MAAM;AACtE,QAAI;AACH,UAAI,IAAI,IAAI,OAAO;AACnB,YAAM,IAAI,KAAK,UAAU,UAAU,OAAO,MAAM;AAChD,UAAI,IAAI,IAAI,uBAAuB,OAAO,CAAC;AAAA,IAC5C,SAAS,OAAO;AACf,YAAM,KAAK,uBAAuB,SAAS,KAAK;AAChD,UAAI,IAAI,IAAI,EAAE;AACd,aAAO;AAAA,IACR;AAAA,EACD;AAGA,QAAM,UAAU,MAAM,kBAAkB,KAAK,WAAW,IAAI;AAC5D,MAAI,YAAY;AAChB,SAAO;AACR;;;AC5CA,eAAsB,QACrB,KACA,UAAmD,CAAC,GACpC;AAChB,QAAM,QAAQ,MAAM,sBAAsB,GAAG;AAC7C,QAAM,UAAU,MAAM,oBAAoB,KAAK,KAAK;AACpD,0BAAwB,IAAI,QAAQ,IAAI,OAAO,OAAO;AAEtD,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAE1E,QAAM,uBAAuB,GAAG;AAEhC,MAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,aAAa,QAAQ,UAAU,WAAW,IAAI;AAC3E,YAAQ,MAAM,uBAAuB;AACrC,YAAQ;AAAA,MACP;AAAA,IACD;AACA;AAAA,EACD;AAEA,QAAM,YAAY,QAAQ,MACvB,IAAI,MAAM,gBAAgB,IAC1B,IAAI,MAAM,sBAAsB,QAAQ,aAAa,CAAC,CAAC;AAE1D,QAAM,mBAAmB,WAAW,GAAG,OAAM,aAAY;AACxD,QAAI,SAAS,MAAM,MAAM,MAAM,GAAG;AACjC,YAAM,SAAS,SAAS,KAAK,SAAS,MAAM,IACzC,MAAM,eAAe,KAAK,QAAQ,IAClC;AACH,UAAI,QAAQ,MAAM,MAAM,MAAM,KAAK,OAAO,KAAK,SAAS,MAAM,GAAG;AAChE,cAAM,eAAe,KAAK,MAAM;AAAA,MACjC;AAAA,IACD;AAAA,EACD,CAAC;AAED,QAAM,sBAAsB,GAAG;AAE/B,wBAAsB,IAAI,QAAQ,SAAS;AAC3C,0BAAwB,IAAI,GAAG;AAChC;;;ACjDO,SAAS,sBACf,UACA,KACA,QACgB;AAChB,SAAO;AAAA,IACN,IAAI,oBAAI,KAAK;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,UAAU;AACT,aAAO,aAAa,GAAG;AAAA,IACxB;AAAA,IACA,SAAS;AACR,aAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,IAAI,KAAK,GAAG,QAAQ,IAAI;AAAA,IAC1E;AAAA,EACD;AACD;;;ACjBA,eAAsB,UAAU,KAAuB,UAA2C;AACjG,MAAI,IAAI,IAAI,uBAAuB,WAAW,CAAC,QAAQ,CAAC,CAAC;AACzD,MAAI,IAAI,IAAI,sBAAsB,IAAI,WAAW,IAAI,EAAE,CAAC;AAExD,UAAQ,KAAK,uBAAuB;AACrC;;;ACVA,IAAAC,kBAA0C;AAC1C,IAAAC,oBAAqB;AACrB,sBAA8B;AAE9B,qBAAsB;;;ACAtB,IAAM,WAA0B;AAAA,EAC/B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,iBAAiB,SAAS,OAAO;AAAA,EAC3C,UAAU,CAAC;AAAA,EACX,WAAW;AACZ;AAEO,SAAS,qBAAqB,SAA6D;AACjG,QAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AACjC,WAAO;AAAA,MACN;AAAA,QACC,MAAM,SAAS,QAAQ,SAAS;AAAA,QAChC,SAAS,SAAS,WAAW,SAAS;AAAA,QACtC,SAAS,SAAS,WAAW,SAAS;AAAA,QACtC,UAAU,SAAS,YAAY,SAAS;AAAA,QACxC,WAAW,SAAS,aAAa,SAAS;AAAA,MAC3C;AAAA,IACD;AAAA,EACD;AAEA,SAAO,MAAM,IAAI,QAAM;AAAA,IACtB,MAAM,EAAE,QAAQ,SAAS,QAAQ,SAAS;AAAA,IAC1C,SAAS,EAAE,WAAW,SAAS,WAAW,SAAS;AAAA,IACnD,SAAS,EAAE,WAAW,SAAS,WAAW,SAAS;AAAA,IACnD,UAAU,CAAC,GAAI,EAAE,YAAY,CAAC,GAAI,GAAI,SAAS,YAAY,CAAC,CAAE;AAAA,IAC9D,WAAW,EAAE,aAAa,SAAS,aAAa,SAAS;AAAA,EAC1D,EAAE;AACH;;;AC/BO,SAAS,aAAa,QAAiD;AAC7E,QAAM,YAAY,OAAO,OAAO,QAAQ;AACxC,QAAM,WAAW,OAAO,MAAM,QAAQ,QAAQ,IAAI;AAClD,QAAM,gBAAgB,OAAO,WAAW,QAAQ;AAChD,QAAM,uBACL,OAAO,WAAW,YAAY;AAC/B,QAAM,eAAe,qBAAqB,OAAO,OAAO;AAExD,SAAO;AAAA,IACN,OAAO;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACA,MAAM;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACA,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACR,OAAO;AAAA,IACR;AAAA,EACD;AACD;;;AFjBA,IAAM,gBAAgB;AACtB,IAAM,YAAY;AAElB,IAAM,iBAAyC;AAAA,EAC9C,OAAO,EAAE,MAAM,YAAY;AAAA,EAC3B,WAAW;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,CAAC,iBAAiB,SAAS,OAAO;AAAA,IAC3C,UAAU,CAAC;AAAA,IACX,WAAW;AAAA,EACZ;AACD;AAEA,SAAS,YAAY,OAAwB;AAC5C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC7D;AAEA,eAAsB,oBAAoB,UAA4C;AACrF,QAAM,mBAAe,wBAAK,UAAU,aAAa;AAEjD,MAAI,KAAC,4BAAW,YAAY,GAAG;AAC9B,YAAQ,KAAK,GAAG,aAAa,iBAAiB,QAAQ,yBAAyB;AAC/E,WAAO,aAAa,EAAE,GAAG,gBAAgB,MAAM,EAAE,MAAM,SAAS,EAAE,CAAC;AAAA,EACpE;AAEA,MAAI;AACJ,MAAI;AACH,aAAS,UAAM,sBAAM;AAAA,MACpB,aAAa,CAAC,YAAY;AAAA,MAC1B,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF,SAAS,OAAO;AACf,UAAM,IAAI;AAAA,MACT,0CAA0C,YAAY,KAAK,YAAY,KAAK,CAAC;AAAA,IAC9E;AAAA,EACD;AAEA,QAAM,eAAW,wBAAK,UAAU,SAAS;AACzC,qCAAc,UAAU,OAAO,YAAY,CAAC,EAAE,IAAI;AAElD,MAAI;AACH,UAAM,SAAS,MAAM,WAAO,+BAAc,QAAQ,EAAE;AACpD,UAAM,SAAS,OAAO;AACtB,WAAO,aAAa,EAAE,GAAG,QAAQ,MAAM,EAAE,MAAM,SAAS,EAAE,CAAC;AAAA,EAC5D,SAAS,OAAO;AACf,UAAM,IAAI,MAAM,wCAAwC,YAAY,KAAK,YAAY,KAAK,CAAC,EAAE;AAAA,EAC9F;AACD;;;AGhEO,SAAS,uBACf,QACA,OACA,KACA,WACmB;AACnB,SAAO,EAAE,QAAQ,OAAO,KAAK,UAAU;AACxC;;;ACVO,SAAS,oBAAoBC,UAAkC,MAAM;AAAC,GAAkB;AAC9F,QAAM,aAA0B,CAAC;AAEjC,SAAO;AAAA,IACN,IAAI,WAA4B;AAC/B,MAAAA,QAAO,SAAS;AAEhB,UAAI,UAAU,YAAY,WAAW;AACpC,mBAAW,KAAK,SAAS;AAAA,MAC1B;AAAA,IACD;AAAA,IAEA,MAAmB;AAClB,aAAO,CAAC,GAAG,UAAU;AAAA,IACtB;AAAA,IAEA,MAAM,IAAuB;AAC5B,aAAO,WAAW,OAAO,QAAM,GAAG,KAAK,EAAE;AAAA,IAC1C;AAAA,IAEA,OAAO,GAAwB;AAC9B,aAAO,WAAW,MAAM,CAAC,CAAC;AAAA,IAC3B;AAAA,EACD;AACD;;;ACrBA,SAAS,oBAAoB,WAAkC,MAAoC;AAClG,QAAM,IAAI,KAAK,YAAY;AAC3B,SAAO,MAAM,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,cAAY,SAAS,OAAO,KAAK,YAAY,MAAM,CAAC;AAChG;AAEA,SAAS,wBACR,WACA,UACuB;AACvB,SAAO,UAAU,IAAI,QAAQ;AAC9B;AAEA,SAAS,eAAe,SAAyB;AAChD,QAAM,UAAU,QAAQ,QAAQ,sBAAsB,MAAM;AAC5D,QAAM,UAAU,QAAQ,QAAQ,OAAO,IAAI;AAC3C,SAAO,IAAI,OAAO,IAAI,OAAO,KAAK,GAAG;AACtC;AAEA,SAAS,kBAAkB,SAA0B;AACpD,SAAO,QAAQ,SAAS,GAAG;AAC5B;AAEO,SAAS,sBAAqC;AACpD,QAAM,YAAY,oBAAI,IAAsB;AAE5C,WAAS,YAAY,UAAoB;AACxC,UAAM,WAAW,UAAU,IAAI,SAAS,OAAO,QAAQ;AACvD,QAAI,UAAU;AACb,YAAM,MAAM,wBAAwB,SAAS,OAAO,QAAQ,iBAAiB,SAAS,OAAO,IAAI,iBAAiB,SAAS,OAAO,IAAI;AACtI,cAAQ,MAAM,GAAG;AAAA,IAClB,OAAO;AACN,gBAAU,IAAI,SAAS,OAAO,UAAU,QAAQ;AAAA,IACjD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IAEA,uBAAuB,UAAwC;AAC9D,aAAO,wBAAwB,WAAW,QAAQ;AAAA,IACnD;AAAA,IAEA,kBAAkB,MAAoC;AACrD,YAAM,IAAI,KAAK,YAAY;AAC3B,aAAO,MAAM,KAAK,UAAU,OAAO,CAAC,EAAE;AAAA,QACrC,cAAY,SAAS,MAAM,KAAK,YAAY,MAAM;AAAA,MACnD;AAAA,IACD;AAAA,IAEA,kBAAkB,MAAoC;AACrD,aAAO,oBAAoB,WAAW,IAAI;AAAA,IAC3C;AAAA,IAEA,sBAAsB,UAAgC;AACrD,YAAM,UAAU,oBAAI,IAAsB;AAE1C,iBAAW,WAAW,UAAU;AAC/B,YAAI,iBAAiB;AAErB,mBAAW,YAAY,UAAU,OAAO,GAAG;AAC1C,cAAI,YAAY;AAChB,cAAI,gBAAgB;AAEpB,cAAI,kBAAkB,OAAO,GAAG;AAE/B,kBAAM,QAAQ,eAAe,OAAO;AACpC,wBAAY,MAAM,KAAK,SAAS,OAAO,IAAI;AAC3C,4BAAgB,MAAM,KAAK,SAAS,OAAO,QAAQ;AAAA,UACpD,OAAO;AAEN,wBAAY,oBAAoB,WAAW,OAAO,MAAM;AACxD,4BAAgB,wBAAwB,WAAW,OAAO,MAAM;AAAA,UACjE;AAEA,cAAI,aAAa,eAAe;AAC/B,oBAAQ,IAAI,SAAS,OAAO,UAAU,QAAQ;AAC9C,6BAAiB;AAAA,UAClB;AAAA,QACD;AAEA,YAAI,CAAC,gBAAgB;AACpB,kBAAQ,KAAK,iCAAiC,OAAO,GAAG;AAAA,QACzD;AAAA,MACD;AAEA,aAAO,MAAM,KAAK,QAAQ,OAAO,CAAC;AAAA,IACnC;AAAA,IAEA,eAAe,UAA0B;AACxC,gBAAU,IAAI,SAAS,OAAO,UAAU,QAAQ;AAAA,IACjD;AAAA,IAEA,kBAA8B;AAC7B,aAAO,MAAM,KAAK,UAAU,OAAO,CAAC;AAAA,IACrC;AAAA,EACD;AACD;;;AvGlFA,IAAM,UAAU,IAAI,yBAAQ;AAE5B,IAAM,SAAS,CAAC,OAAkB;AACjC,UAAQ,KAAK,qBAAqB,IAAI,EAAE,YAAY,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC;AACxE;AAEA,QAAQ,KAAK,eAAe,EAAE,YAAY,6BAA6B,EAAE,QAAQ,QAAQ;AAEzF,QACE,QAAQ,QAAQ,EAChB,YAAY,mCAAmC,EAC/C,OAAO,cAAc,2BAA2B,EAChD,OAAO,iBAAiB,qCAAqC,EAC7D,OAAO,OAAO,YAAmD;AACjE,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,UAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,CAAC;AAEF,QACE,QAAQ,OAAO,EACf,YAAY,2BAA2B,EACvC,OAAO,aAAa,iBAAiB,EACrC,SAAS,UAAU,oBAAoB,EACvC,SAAS,YAAY,8CAA8C,EACnE;AAAA,EACA,OACC,UACA,eACA,YACI;AACJ,UAAM,OAAO,QAAQ,IAAI;AACzB,WAAO,uBAAuB,MAAM,CAAC;AACrC,UAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,UAAM,QAAQ,oBAAoB;AAClC,UAAM,MAAM,oBAAoB,MAAM;AACtC,UAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,UAAM,SAAS,KAAK,EAAE,KAAK,QAAQ,KAAK,UAAU,cAAc,CAAC;AAAA,EAClE;AACD;AAED,QACE,QAAQ,QAAQ,EAChB,YAAY,yBAAyB,EACrC,SAAS,YAAY,oCAAoC,EACzD;AAAA,EACA;AAAA,EACA;AACD,EACC,OAAO,aAAa,wBAAwB,EAC5C,OAAO,OAAO,QAAgB,YAAqD;AACnF,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,UAAU,KAAK,EAAE,QAAQ,WAAW,QAAQ,WAAW,KAAK,QAAQ,IAAI,CAAC;AAChF,CAAC;AAEF,QACE,QAAQ,MAAM,EACd,YAAY,sCAAsC,EAClD;AAAA,EACA;AAAA,EACA;AACD,EACC,OAAO,aAAa,wBAAwB,EAC5C,OAAO,OAAO,YAAqD;AACnE,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,QAAQ,KAAK,EAAE,WAAW,QAAQ,WAAW,KAAK,QAAQ,IAAI,CAAC;AACtE,CAAC;AAEF,QACE,QAAQ,MAAM,EACd,YAAY,qCAAqC,EACjD;AAAA,EACA;AAAA,EACA;AACD,EACC,OAAO,aAAa,wBAAwB,EAC5C,OAAO,OAAO,YAAqD;AACnE,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,QAAQ,KAAK,EAAE,WAAW,QAAQ,WAAW,KAAK,QAAQ,IAAI,CAAC;AACtE,CAAC;AAEF,QACE,QAAQ,MAAM,EACd,YAAY,+BAA+B,EAC3C;AAAA,EACA;AAAA,EACA;AACD,EACC,OAAO,aAAa,wBAAwB,EAC5C,OAAO,OAAO,YAAqD;AACnE,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,QAAQ,KAAK,EAAE,WAAW,QAAQ,WAAW,KAAK,QAAQ,IAAI,CAAC;AACtE,CAAC;AAEF,QACE,QAAQ,WAAW,EACnB,YAAY,qBAAqB,EACjC,QAAQ,KAAK,EACb,YAAY,qCAAqC,EACjD,SAAS,gBAAgB,gBAAgB,EACzC;AAAA,EACA;AAAA,EACA;AACD,EACC,OAAO,aAAa,wBAAwB,EAC5C,OAAO,OAAO,SAAmB,YAAqD;AACtF,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,gBAAgB,KAAK,EAAE,SAAS,WAAW,QAAQ,WAAW,KAAK,QAAQ,IAAI,CAAC;AACvF,CAAC;AAEF,QACE,QAAQ,MAAM,EACd,YAAY,yBAAyB,EACrC,SAAS,kBAAkB,qDAAqD,EAChF,OAAO,OAAO,cAAwB;AACtC,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,QAAQ,KAAK,EAAE,UAAU,CAAC;AACjC,CAAC;AAEF,QACE,QAAQ,MAAM,EACd,YAAY,6BAA6B,EACzC,OAAO,YAAY;AACnB,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,QAAQ,KAAK,EAAE,KAAK,CAAC;AAC5B,CAAC;AAEF,QACE,QAAQ,QAAQ,EAChB,YAAY,iBAAiB,EAC7B,OAAO,YAAY;AACnB,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,UAAU,KAAK,EAAE,KAAK,CAAC;AAC9B,CAAC;AAEF,QACE,QAAQ,SAAS,EACjB,YAAY,kBAAkB,EAC9B,OAAO,cAAc,cAAc,EACnC,OAAO,OAAO,YAAgC;AAC9C,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,CAAC;AACrC,QAAM,SAAS,MAAM,oBAAoB,IAAI;AAC7C,QAAM,QAAQ,oBAAoB;AAClC,QAAM,MAAM,oBAAoB,MAAM;AACtC,QAAM,MAAM,uBAAuB,QAAQ,OAAO,GAAG;AAErD,QAAM,WAAW,KAAK,EAAE,MAAM,MAAM,QAAQ,KAAK,CAAC;AACnD,CAAC;AAEF,QAAQ,MAAM;",
4
+ "sourcesContent": ["#!/usr/bin/env node\n\nimport { Command } from 'commander';\n\nimport { runBranch } from './commands/branch/runBranch';\nimport { runCheckoutsRun } from './commands/checkouts/runCheckoutsRun';\nimport { runClone } from './commands/clone/runClone';\nimport { runLink } from './commands/link/runLink';\nimport { runPublish } from './commands/publish/runPublish';\nimport { runPull } from './commands/pull/runPull';\nimport { runPush } from './commands/push/runPush';\nimport { runRepo } from './commands/repo/runRepo';\nimport { runSanity } from './commands/sanity/runSanity';\nimport { runSync } from './commands/sync/runSync';\nimport { runUnlink } from './commands/unlink/runUnlink';\nimport { loadWorkspaceConfig } from './config/loadWorkspaceConfig';\nimport { createWorkspaceContext } from './private/context/createWorkspaceContext';\nimport { createOperationsLog } from './private/log/createOperationsLog';\nimport { createGenericOperation } from './private/operations/createGenericOperation';\nimport type { Operation } from './private/operations/types';\nimport { makeOperationLogLine } from './private/present/makeOperationLogLine';\nimport { createCheckoutStore } from './private/store/createCheckoutStore';\n\nexport { defineConfig, loadWorkspaceConfig } from './config';\nexport type { WorkspaceConfig } from './config';\n\nconst program = new Command();\n\nconst logger = (op: Operation) => {\n\tconsole.info(makeOperationLogLine(op, { standalone: true }).join(' | '));\n};\n\nprogram.name('art-workspace').description('Workspace orchestration CLI').version('0.0.18');\n\nprogram\n\t.command('sanity')\n\t.description('Check git status across all repos')\n\t.option('-a, --auto', 'push clean unpushed repos')\n\t.option('-r, --refetch', 'fetch ahead/behind data from remote')\n\t.action(async (options: { auto?: boolean; refetch?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tconst auto = options.auto ?? false;\n\t\tconst refetch = options.refetch ?? false;\n\t\tawait runSanity(ctx, { auto, refetch });\n\t});\n\nprogram\n\t.command('clone')\n\t.description('Clone repos from manifest')\n\t.option('-a, --all', 'clone all repos')\n\t.argument('[name]', 'repo name to clone')\n\t.argument('[target]', 'target location (relative to checkouts path)')\n\t.action(\n\t\tasync (\n\t\t\trepoName: string | undefined,\n\t\t\tcheckoutInput: string | undefined,\n\t\t\toptions: { all?: boolean },\n\t\t) => {\n\t\t\tconst root = process.cwd();\n\t\t\tlogger(createGenericOperation('boot'));\n\t\t\tconst config = await loadWorkspaceConfig(root);\n\t\t\tconst store = createCheckoutStore();\n\t\t\tconst log = createOperationsLog(logger);\n\t\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\t\tawait runClone(ctx, { all: options.all, repoName, checkoutInput });\n\t\t},\n\t);\n\nprogram\n\t.command('branch')\n\t.description('Branch across checkouts')\n\t.argument('<branch>', 'branch name to create or switch to')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (branch: string, options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runBranch(ctx, { branch, checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('pull')\n\t.description('Pull clean checkouts that are behind')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runPull(ctx, { checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('push')\n\t.description('Push clean checkouts that are ahead')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runPush(ctx, { checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('sync')\n\t.description('Pull and push clean checkouts')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runSync(ctx, { checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('checkouts')\n\t.description('Checkout operations')\n\t.command('run')\n\t.description('Run a command in selected checkouts')\n\t.argument('<command>', 'command to run')\n\t.option(\n\t\t'-c, --checkouts <PATTERN...>',\n\t\t'One or more. Matches checkout name and location. Wildcard asterisk * supported. Example: -c \"* @ refactor\" \"lib-*\"',\n\t)\n\t.option('-A, --all', 'Apply to all checkouts')\n\t.action(async (command: string, options: { checkouts?: string[]; all?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runCheckoutsRun(ctx, { command, checkouts: options.checkouts, all: options.all });\n\t});\n\nprogram\n\t.command('repo')\n\t.description('List checkout resources')\n\t.argument('[checkouts...]', 'checkout locations to list (default: all checkouts)')\n\t.action(async (locations: string[]) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runRepo(ctx, { locations });\n\t});\n\nprogram\n\t.command('link')\n\t.description('Link packages for local dev')\n\t.action(async () => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runLink(ctx, { root });\n\t});\n\nprogram\n\t.command('unlink')\n\t.description('Unlink packages')\n\t.action(async () => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runUnlink(ctx, { root });\n\t});\n\nprogram\n\t.command('publish')\n\t.description('Publish packages')\n\t.option('-a, --auto', 'auto-publish')\n\t.action(async (options: { auto?: boolean }) => {\n\t\tconst root = process.cwd();\n\t\tlogger(createGenericOperation('boot'));\n\t\tconst config = await loadWorkspaceConfig(root);\n\t\tconst store = createCheckoutStore();\n\t\tconst log = createOperationsLog(logger);\n\t\tconst ctx = createWorkspaceContext(config, store, log);\n\n\t\tawait runPublish(ctx, { root, auto: options.auto });\n\t});\n\nprogram.parse();\n", "import simpleGit from 'simple-git';\n\nimport { hasLocalBranch } from './hasLocalBranch';\n\nexport async function createOrSwitchBranch(\n\tdir: string,\n\tbranch: string,\n): Promise<'created' | 'switched'> {\n\tconst git = simpleGit(dir);\n\tif (await hasLocalBranch(dir, branch)) {\n\t\tawait git.checkout(branch);\n\t\treturn 'switched';\n\t}\n\tawait git.checkoutLocalBranch(branch);\n\treturn 'created';\n}\n", "import simpleGit from 'simple-git';\n\nexport async function hasLocalBranch(dir: string, branch: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst out = await git.raw(['rev-parse', '--verify', '--quiet', `refs/heads/${branch}`]);\n\t\treturn out.trim().length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import type { OperationFailure, OperationPending } from './types';\n\nfunction formatRawError(raw: string): string {\n\tconst lines = raw\n\t\t.split('\\n')\n\t\t.map(l => l.trim())\n\t\t.filter(l => l.length > 0);\n\treturn lines.map(l => ' ' + l).join('\\n');\n}\n\nfunction extractReason(raw: string): string {\n\tconst match = raw.match(/\\(([^)]+)\\)/);\n\treturn match ? match[1] : (raw.split('\\n')[0]?.trim() ?? 'unknown error');\n}\n\nconst errorLabels: Record<string, string> = {\n\tclone: 'CloneError',\n\tpush: 'PushError',\n\tpull: 'PullError',\n\tpublish: 'PublishError',\n\tbranch: 'BranchError',\n\tlinked: 'LinkedError',\n\tunlink: 'UnlinkError',\n\trun: 'CheckoutRunError',\n};\n\nexport function createOperationFailure<T extends OperationPending>(\n\tpending: T,\n\terror: unknown,\n): OperationFailure {\n\tconst rawError = error instanceof Error ? error.message : String(error);\n\tconst label = errorLabels[pending.operation] ?? 'OperationError';\n\n\treturn {\n\t\t...pending,\n\t\toutcome: 'failure',\n\t\tfinishedTs: new Date(),\n\t\terror: rawError,\n\t\tmessage() {\n\t\t\treturn extractReason(this.error);\n\t\t},\n\t\terrorSerialized() {\n\t\t\treturn `${label}: ${pending.checkout?.repo?.name} \u2014 ${this.message()}\\n\\n${formatRawError(this.error)}`;\n\t\t},\n\t};\n}\n", "import type { OperationPending, OperationSuccess } from './types';\n\nexport function createOperationSuccess<T extends OperationPending>(\n\tpending: T,\n\tmessage?: string,\n): OperationSuccess {\n\treturn {\n\t\t...pending,\n\t\toutcome: 'success',\n\t\tfinishedTs: new Date(),\n\t\tmessage: message ? () => message : pending.message,\n\t};\n}\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../../config/types';\nimport type { CheckoutRecord } from '../types';\n\nimport { makeCheckoutFilename } from './private/makeCheckoutFilename';\n\nconst HARDCODED_TEMPLATE = `# Module\n\n## Checkout: {{ name }}\n\n**Repository:** {{ repository }}\n\n**Location:** \\`{{ location }}\\`\n\n**Branch:** \\`{{ branch }}\\`\n`;\n\nexport async function saveCheckoutRecord(\n\tconfig: WorkspaceConfig,\n\tdata: CheckoutRecord,\n\tfilename?: string,\n): Promise<string> {\n\tlet template = HARDCODED_TEMPLATE;\n\tconst templatePath = join(config.root.path, config.checkouts.template);\n\tif (existsSync(templatePath)) {\n\t\ttemplate = readFileSync(templatePath, 'utf-8');\n\t}\n\n\tconst fileName = filename ?? makeCheckoutFilename(config, data);\n\n\tlet content = template\n\t\t.replace('{{ name }}', data.name)\n\t\t.replace('{{ repository }}', data.repository ?? '')\n\t\t.replace('{{ location }}', data.location)\n\t\t.replace('{{ branch }}', data.branch);\n\n\tif (!data.repository) {\n\t\tcontent = content.replace(/\\*\\*Repository:\\*\\*\\s*\\n\\n?/g, '');\n\t}\n\tmkdirSync(dirname(fileName), { recursive: true });\n\twriteFileSync(fileName, content);\n\n\treturn fileName;\n}\n", "import { join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../../../config/types';\nimport type { CheckoutRecord } from '../../types';\n\nexport function makeCheckoutFilename(config: WorkspaceConfig, data: CheckoutRecord): string {\n\tconst slug = data.name.toLowerCase().replace(/\\s+/g, '-');\n\treturn join(config.root.path, config.checkouts.path, `${slug}-checkout.art`);\n}\n", "import type { BranchPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createBranchOperation(checkout: Checkout, branch: string): BranchPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'branch',\n\t\tbranch,\n\t\tmessage() {\n\t\t\treturn `branch ${branch}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOrSwitchBranch } from '../../git/createOrSwitchBranch';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { saveCheckoutRecord } from '../../resources/checkout/saveCheckoutRecord';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createBranchOperation } from '../operations/createBranchOperation';\n\nexport async function doBranchCheckout(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n\tbranch: string,\n): Promise<Checkout | null> {\n\tconst pending = createBranchOperation(checkout, branch);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tconst outcome = await createOrSwitchBranch(checkout.path, branch);\n\t\tctx.log.log(\n\t\t\tcreateOperationSuccess(\n\t\t\t\tpending,\n\t\t\t\toutcome === 'created' ? `created ${branch}` : `switched to ${branch}`,\n\t\t\t),\n\t\t);\n\n\t\tconst updated = { ...checkout, record: { ...checkout.record, branch } };\n\t\tctx.store.updateCheckout(updated);\n\t\tawait saveCheckoutRecord(ctx.config, updated.record, updated.filename);\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(createBranchOperation(checkout, branch), error));\n\t\treturn null;\n\t}\n}\n", "import type { OperationPending } from './types';\n\nfunction formatData(data: unknown): string {\n\treturn data ? JSON.stringify(data) : '';\n}\n\nexport function createGenericOperation(operation: string, data?: unknown): OperationPending {\n\treturn {\n\t\tts: new Date(),\n\t\toutcome: 'pending',\n\t\toperation,\n\t\tdata,\n\t\tmessage() {\n\t\t\treturn formatData(data);\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../config/types';\nimport type { Checkout } from '../store/types';\n\nimport { formatTable } from './formatTable';\n\nexport function presentCheckoutReport(config: WorkspaceConfig, checkouts: Checkout[]): void {\n\tconst items = [...checkouts];\n\titems.sort((a, b) => {\n\t\tif (a.repo?.remote === '' && b.repo?.remote !== '') return 1;\n\t\tif (a.repo?.remote !== '' && b.repo?.remote === '') return -1;\n\t\treturn a.repo?.name.localeCompare(b.repo?.name || '') || -1;\n\t});\n\n\tconst headers = ['repo', 'location', 'branch', 'states'];\n\tconst rows = items.map(c => [\n\t\tc.repo?.name || '-',\n\t\tjoin(config.clone.path, c.record.location),\n\t\tc.scan?.state('remote').branch || c.record.branch,\n\t\tc.scan?.issues().join('; ') || '-',\n\t]);\n\n\tconsole.info('Checkouts:');\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "export function formatTable(rows: string[][], headers: string[]): string {\n\tconst allRows = [headers, ...rows];\n\tconst colWidths = headers.map((_, colIdx) =>\n\t\tMath.max(...allRows.map(row => String(row[colIdx]).length)),\n\t);\n\n\tconst lines = allRows.map(row =>\n\t\trow.map((cell, i) => String(cell).padEnd(colWidths[i])).join(' '),\n\t);\n\n\treturn lines.join('\\n');\n}\n", "export function truncateMiddle(str: string, limit: number): string {\n\tif (str.length <= limit) {\n\t\treturn str;\n\t}\n\tconst keep = limit - 3;\n\tconst left = Math.ceil(keep / 2);\n\tconst right = Math.floor(keep / 2);\n\treturn `${str.slice(0, left)}[...]${str.slice(str.length - right)}`;\n}\n", "import type { OperationBase } from '../operations/types';\n\nimport { truncateMiddle } from './private/truncateMiddle';\n\nexport function makeOperationLogLine(\n\top: OperationBase,\n\toptions: { standalone?: boolean } = {},\n): string[] {\n\tconst { standalone } = options;\n\n\tconst timing = standalone ? `(${op.timing()}ms)` : String(op.timing());\n\n\treturn [\n\t\top.outcome === 'pending' ? '\u23F3' : op.outcome === 'success' ? '\uD83D\uDFE2' : '\uD83D\uDD34',\n\t\top.checkout?.repo?.name,\n\t\top.checkout?.record.location,\n\t\top.operation,\n\t\ttruncateMiddle(op.message(), 50),\n\t\top.finishedTs ? timing : '',\n\t].filter(Boolean) as string[];\n}\n", "import type { OperationsLog } from '../log/createOperationsLog';\n\nimport { formatTable } from './formatTable';\nimport { makeOperationLogLine } from './makeOperationLogLine';\n\nexport function presentOperationsReport(log: OperationsLog): void {\n\tconst operations = log.all();\n\tif (operations.length === 0) {\n\t\treturn;\n\t}\n\n\tconst headers = ['', 'repo', 'checkout', 'operation', 'message', 'ms'];\n\tconst rows = operations.map(op => makeOperationLogLine(op));\n\n\tconsole.info('Operations Report:');\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createGenericOperation } from '../../operations/createGenericOperation';\nimport type { RepositoryCheckoutRecord, RepositoryRecord } from '../types';\n\nimport { readCheckoutRecord } from './readCheckoutRecord';\n\nexport async function loadCheckoutRecords(\n\tctx: WorkspaceContext,\n\trepos: RepositoryRecord[],\n): Promise<RepositoryCheckoutRecord[]> {\n\tconst searchPath = ctx.config.root.path;\n\tctx.log.log(createGenericOperation('load-checkout-records', searchPath));\n\n\tconst recordFiles = await findRecordFiles(ctx.config.records, searchPath, ['Checkout']);\n\tconst checkouts = await Promise.all(\n\t\trecordFiles.map(async file => {\n\t\t\tconst record = await readCheckoutRecord(file);\n\t\t\tif (!record) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!record.name) {\n\t\t\t\tconsole.warn('checkout record with empty name, skipped');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst repo = repos.find(r => r.name === record.repository);\n\t\t\tif (repo) {\n\t\t\t\treturn {\n\t\t\t\t\trepo,\n\t\t\t\t\tcheckout: record,\n\t\t\t\t\tfilename: file.filename,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcheckout: record,\n\t\t\t\tfilename: file.filename,\n\t\t\t};\n\t\t}),\n\t);\n\treturn checkouts.filter((checkout): checkout is RepositoryCheckoutRecord => checkout !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { CheckoutRecord } from '../types';\n\nexport async function readCheckoutRecord(file: FSRecordFile): Promise<CheckoutRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Checkout:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\treturn null;\n\t}\n\n\tconst repositoryMatch = content.match(/\\*\\*Repository:\\*\\*\\s*(.+)/);\n\tconst locationMatch = content.match(/\\*\\*Location:\\*\\*\\s*`([^`]+)`/);\n\tconst branchMatch = content.match(/\\*\\*Branch:\\*\\*\\s*`([^`]+)`/);\n\n\tif (!locationMatch) {\n\t\tconsole.warn(`checkout record ${file.filename}: missing location, using default`);\n\t}\n\tif (!branchMatch) {\n\t\tconsole.warn(`checkout record ${file.filename}: missing branch, using default`);\n\t}\n\n\treturn {\n\t\tname: nameMatch[1]?.trim() ?? '',\n\t\trepository: repositoryMatch?.[1]?.trim(),\n\t\tlocation: locationMatch?.[1]?.trim() ?? '',\n\t\tbranch: branchMatch?.[1]?.trim() ?? 'main',\n\t};\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createGenericOperation } from '../../operations/createGenericOperation';\nimport type { RepositoryRecord } from '../types';\n\nimport { readRepositoryRecord } from './readRepositoryRecord';\n\nexport async function loadRepositoryRecords(ctx: WorkspaceContext): Promise<RepositoryRecord[]> {\n\tconst searchPath = ctx.config.root.path;\n\tctx.log.log(createGenericOperation('load-repository-records', searchPath));\n\n\tconst recordFiles = await findRecordFiles(ctx.config.records, searchPath, ['Repository']);\n\tconst records = await Promise.all(recordFiles.map(file => readRepositoryRecord(file)));\n\treturn records.filter((record): record is RepositoryRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { RepositoryRecord } from '../types';\n\nexport async function readRepositoryRecord(file: FSRecordFile): Promise<RepositoryRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Repository:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\treturn null;\n\t}\n\n\tconst remoteMatch = content.match(/\\*\\*Remote:\\*\\*\\s*`([^`]+)`/);\n\tconst purposeMatch = content.match(/\\*\\*Purpose:\\*\\*\\s*(.+)/);\n\tconst descriptionMatch = content.match(/\\*\\*Description:\\*\\*\\s*(.+)/);\n\tconst consumersMatch = content.match(/\\*\\*Consumers:\\*\\*\\s*(.+)/);\n\n\tif (!remoteMatch) {\n\t\tconsole.warn(`repository record ${file.filename}: missing remote, using default`);\n\t}\n\n\treturn {\n\t\tname: nameMatch[1]?.trim() ?? '',\n\t\tremote: remoteMatch?.[1]?.trim() ?? '',\n\t\t...(purposeMatch ? { purpose: purposeMatch[1].trim() } : {}),\n\t\t...(descriptionMatch ? { description: descriptionMatch[1].trim() } : {}),\n\t\t...(consumersMatch ? { consumers: consumersMatch[1].trim() } : {}),\n\t};\n}\n", "import { access } from 'node:fs/promises';\n\nimport type { WorkspaceContext } from '../context/createWorkspaceContext';\nimport { getBehindAheadCount } from '../git/getBehindAheadCount';\nimport { getCurrentBranch } from '../git/getCurrentBranch';\nimport { getRemoteBranch } from '../git/getRemoteBranch';\nimport { getRemoteUrl } from '../git/getRemoteUrl';\nimport { hasMergeConflicts } from '../git/hasMergeConflicts';\nimport { hasRemote } from '../git/hasRemote';\nimport { isDetachedHead } from '../git/isDetachedHead';\nimport { isDirty } from '../git/isDirty';\nimport { remoteFetch } from '../git/remoteFetch';\nimport { createGenericOperation } from '../operations/createGenericOperation';\nimport { createOperationFailure } from '../operations/createOperationFailure';\nimport type { Checkout } from '../store/types';\n\nimport {\n\tcreateCheckoutNoClonedScan,\n\tcreateCheckoutScan,\n\tcreateCommittedState,\n\tcreateExistsState,\n\tcreateNoConflictsState,\n\tcreateNoDetachedState,\n\tcreateRemoteState,\n\tcreateRepoState,\n\tcreateSyncState,\n\tcreateWrongRemoteState,\n} from './types';\n\nexport async function scanCheckoutState(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n\trefetch = false,\n): Promise<Checkout> {\n\ttry {\n\t\tawait access(checkout.path);\n\t} catch {\n\t\treturn { ...checkout, scan: createCheckoutNoClonedScan(Boolean(checkout.repo)) };\n\t}\n\n\tctx.log.log(createGenericOperation('scan-checkout-state', checkout.record.location));\n\n\tlet branch: string | null = null;\n\tlet remoteBranch: string | null = null;\n\tlet remote = false;\n\tlet dirty = false;\n\tlet conflicts = false;\n\tlet detached = false;\n\tlet ahead = 0;\n\tlet behind = 0;\n\tlet wrongRemote = false;\n\ttry {\n\t\tbranch = await getCurrentBranch(checkout.path);\n\t\tremote = await hasRemote(checkout.path);\n\t\tdetached = await isDetachedHead(checkout.path);\n\t\tconflicts = await hasMergeConflicts(checkout.path);\n\t\tdirty = await isDirty(checkout.path);\n\t\tif (remote && branch !== '-' && branch !== 'HEAD') {\n\t\t\tremoteBranch = await getRemoteBranch(checkout.path);\n\t\t\tif (refetch) await remoteFetch(checkout.path);\n\t\t\tconst { ahead: aheadCount, behind: behindCount } = await getBehindAheadCount(\n\t\t\t\tcheckout.path,\n\t\t\t\tremoteBranch,\n\t\t\t);\n\t\t\tahead = aheadCount;\n\t\t\tbehind = behindCount;\n\t\t}\n\t\tif (remote && checkout.repo?.remote) {\n\t\t\tconst actualUrl = await getRemoteUrl(checkout.path);\n\t\t\tif (actualUrl && actualUrl !== checkout.repo.remote) {\n\t\t\t\twrongRemote = true;\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tctx.log.log(\n\t\t\tcreateOperationFailure(\n\t\t\t\tcreateGenericOperation('scan-checkout-state', checkout.record.location),\n\t\t\t\terror,\n\t\t\t),\n\t\t);\n\t}\n\n\tconst remoteState = createRemoteState(branch, checkout.record.branch, remote);\n\tconst scan = createCheckoutScan([\n\t\tcreateRepoState(Boolean(checkout.repo)),\n\t\tcreateExistsState(true),\n\t\tremoteState,\n\t\tcreateSyncState(ahead - behind, ahead, behind),\n\t\tcreateCommittedState(!dirty),\n\t\tcreateNoConflictsState(!conflicts),\n\t\tcreateNoDetachedState(!detached),\n\t\tcreateWrongRemoteState(wrongRemote),\n\t]);\n\treturn { ...checkout, scan };\n}\n", "import simpleGit from 'simple-git';\n\nexport interface AheadBehind {\n\tahead: number;\n\tbehind: number;\n}\n\nexport async function getBehindAheadCount(\n\tdir: string,\n\tremoteBranch: string | null,\n): Promise<AheadBehind> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tif (!remoteBranch) {\n\t\t\tconst ahead = await git.raw(['rev-list', '--count', 'HEAD', '--not', '--remotes=origin']);\n\t\t\treturn { ahead: Number.parseInt(ahead.trim(), 10) || 0, behind: 0 };\n\t\t}\n\t\tconst counts = await git.raw(['rev-list', '--left-right', '--count', `${remoteBranch}...HEAD`]);\n\t\tconst [behind, ahead] = counts.trim().split(/\\s+/).map(Number);\n\t\treturn { ahead, behind };\n\t} catch {\n\t\treturn { ahead: 0, behind: 0 };\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function getCurrentBranch(dir: string): Promise<string> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\tconst branch = status.current ?? 'HEAD';\n\t\tif (!status.current || status.current === 'HEAD') {\n\t\t\ttry {\n\t\t\t\tconst refOutput = await git.raw(['symbolic-ref', '-q', 'HEAD']);\n\t\t\t\tif (!refOutput.trim()) {\n\t\t\t\t\treturn 'HEAD';\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn 'HEAD';\n\t\t\t}\n\t\t}\n\t\treturn branch;\n\t} catch {\n\t\treturn '-';\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function getRemoteBranch(dir: string): Promise<string | null> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst branches = await git.branch();\n\t\tconst current = branches.current;\n\t\tif (!current || current === 'HEAD') {\n\t\t\treturn null;\n\t\t}\n\t\tconst tracking = branches.all.find(\n\t\t\tb => b === `origin/${current}` || b === `remotes/origin/${current}`,\n\t\t);\n\t\treturn tracking ? tracking.replace(/^remotes\\//, '') : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function getRemoteUrl(dir: string): Promise<string | null> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst config = await git.listConfig();\n\t\tconst url = config.all['remote.origin.url'];\n\t\tif (typeof url === 'string') return url;\n\t\tif (Array.isArray(url) && url.length > 0) return url[0];\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function hasMergeConflicts(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\treturn status.conflicted.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function hasRemote(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst remotes = await git.getRemotes(false);\n\t\treturn remotes.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function isDetachedHead(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\tif (status.current && status.current !== 'HEAD') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\tconst refOutput = await git.raw(['symbolic-ref', '-q', 'HEAD']);\n\t\t\treturn !refOutput.trim();\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function isDirty(dir: string): Promise<boolean> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tconst status = await git.status();\n\t\treturn status.files.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nexport async function remoteFetch(dir: string): Promise<void> {\n\tconst git = simpleGit(dir);\n\ttry {\n\t\tawait git.fetch('origin');\n\t} catch {\n\t\t// Remote unreachable: swallow so the cheap count still reflects last-known state.\n\t}\n}\n", "import type { CheckoutStateCommitted } from '../types';\n\nexport const createCommittedState = (clean: boolean): CheckoutStateCommitted => ({\n\ttype: 'committed',\n\tclean,\n});\n", "import type { CheckoutStateExists } from '../types';\n\nexport const createExistsState = (exists: boolean): CheckoutStateExists => ({\n\ttype: 'exists',\n\texists,\n});\n", "import type { CheckoutStateNoConflicts } from '../types';\n\nexport const createNoConflictsState = (clear: boolean): CheckoutStateNoConflicts => ({\n\ttype: 'no-conflicts',\n\tclear,\n});\n", "import type { CheckoutStateNoDetached } from '../types';\n\nexport const createNoDetachedState = (attached: boolean): CheckoutStateNoDetached => ({\n\ttype: 'no-detached',\n\tattached,\n});\n", "import type { CheckoutStateRemote } from '../types';\n\nexport const createRemoteState = (\n\tbranch: string | null,\n\texpectedBranch: string,\n\thasRemote: boolean,\n): CheckoutStateRemote => ({ type: 'remote', branch, expectedBranch, hasRemote });\n", "import type { CheckoutStateRepo } from '../types';\n\nexport const createRepoState = (known: boolean): CheckoutStateRepo => ({ type: 'repo', known });\n", "import type { CheckoutStateSync } from '../types';\n\nexport const createSyncState = (\n\tdelta: number,\n\tahead = Math.max(delta, 0),\n\tbehind = Math.max(-delta, 0),\n): CheckoutStateSync => ({\n\ttype: 'sync',\n\tdelta,\n\tahead,\n\tbehind,\n});\n", "import type { CheckoutStateWrongRemote } from '../types';\n\nexport const createWrongRemoteState = (wrong: boolean): CheckoutStateWrongRemote => ({\n\ttype: 'wrong-remote',\n\twrong,\n});\n", "import type { CheckoutScan, CheckoutState, CheckoutStateOf, CheckoutStateType } from '../types';\n\nexport function createStateAccessor(states: CheckoutState[]): CheckoutScan['state'] {\n\treturn <T extends CheckoutStateType>(type: T): CheckoutStateOf<T> => {\n\t\tconst state = states.find(item => item.type === type);\n\t\tif (!state) throw new Error(`missing checkout state: ${type}`);\n\t\treturn state as CheckoutStateOf<T>;\n\t};\n}\n", "import type { CheckoutOp } from '../../operations/types';\nimport type { CheckoutScan, CheckoutState } from '../types';\n\nimport { createStateAccessor } from './createStateAccessor';\n\nexport function createCheckoutScan(states: CheckoutState[]): CheckoutScan {\n\tconst state = createStateAccessor(states);\n\n\tconst issues = (): string[] => {\n\t\tconst result: string[] = [];\n\t\tconst repo = state('repo');\n\t\tconst exists = state('exists');\n\t\tconst remote = state('remote');\n\t\tconst sync = state('sync');\n\t\tif (!repo.known) result.push('unknown project');\n\t\tif (!exists.exists) return [...result, 'not cloned'];\n\t\tif (!state('no-detached').attached) result.push('detached HEAD');\n\t\tif (\n\t\t\tremote.expectedBranch !== '' &&\n\t\t\tremote.branch !== remote.expectedBranch &&\n\t\t\tstate('no-detached').attached\n\t\t) {\n\t\t\tresult.push('wrong branch');\n\t\t}\n\t\tif (!state('no-conflicts').clear) result.push('merge conflicts');\n\t\tif (!remote.hasRemote) result.push('no remote');\n\t\tif (remote.hasRemote && state('wrong-remote').wrong) result.push('wrong remote');\n\t\tif (!state('committed').clean) result.push('uncommitted files');\n\t\tif (sync.ahead > 0) result.push(`${sync.ahead} commit${sync.ahead === 1 ? '' : 's'} ahead`);\n\t\tif (sync.behind > 0) {\n\t\t\tconst count = sync.behind;\n\t\t\tresult.push(`${count} commit${count === 1 ? '' : 's'} behind`);\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn {\n\t\tstates,\n\t\tstate,\n\t\tissues,\n\t\tcan: (op: CheckoutOp) => {\n\t\t\tif (op === 'clone') return !state('exists').exists;\n\t\t\tif (op === 'branch') return state('exists').exists && state('no-detached').attached;\n\t\t\tconst exists = state('exists');\n\t\t\tconst remote = state('remote');\n\t\t\treturn (\n\t\t\t\texists.exists &&\n\t\t\t\tremote.branch === remote.expectedBranch &&\n\t\t\t\tstate('committed').clean &&\n\t\t\t\tstate('no-conflicts').clear &&\n\t\t\t\tstate('no-detached').attached &&\n\t\t\t\tremote.hasRemote\n\t\t\t);\n\t\t},\n\t\tshould: (op: CheckoutOp) => {\n\t\t\tif (op === 'clone') return !state('exists').exists;\n\t\t\tif (op === 'pull') return state('sync').behind > 0;\n\t\t\tif (op === 'push') return state('sync').ahead > 0;\n\t\t\treturn false;\n\t\t},\n\t};\n}\n", "import { createCommittedState } from '../states/createCommittedState';\nimport { createExistsState } from '../states/createExistsState';\nimport { createNoConflictsState } from '../states/createNoConflictsState';\nimport { createNoDetachedState } from '../states/createNoDetachedState';\nimport { createRemoteState } from '../states/createRemoteState';\nimport { createRepoState } from '../states/createRepoState';\nimport { createSyncState } from '../states/createSyncState';\nimport type { CheckoutScan } from '../types';\n\nimport { createCheckoutScan } from './createCheckoutScan';\n\nexport function createCheckoutNoClonedScan(known: boolean): CheckoutScan {\n\treturn createCheckoutScan([\n\t\tcreateRepoState(known),\n\t\tcreateExistsState(false),\n\t\tcreateRemoteState(null, '', false),\n\t\tcreateSyncState(0),\n\t\tcreateCommittedState(true),\n\t\tcreateNoConflictsState(true),\n\t\tcreateNoDetachedState(true),\n\t]);\n}\n", "import path, { join } from 'node:path';\n\nimport type { WorkspaceConfig } from '../../config';\nimport type { RepositoryRecord } from '../resources/types';\n\nimport { safePath } from './safePath';\nimport type { Checkout } from './types';\n\nexport type { Checkout } from './types';\n\nexport function createCheckout(\n\tconfig: WorkspaceConfig,\n\ttarget: string,\n\trepo?: RepositoryRecord,\n\tbranch?: string,\n\tname?: string,\n): Checkout {\n\tconst basePath = join(config.root.path, config.clone.path);\n\tconst l = safePath(target);\n\tconst r = repo;\n\tconst b = branch ?? 'main';\n\tconst n = name || (r?.name ? r?.name + ' @ ' + target : target);\n\n\treturn {\n\t\trepo: r,\n\t\trecord: { name: n, location: l, branch: b, repository: r?.name },\n\t\tpath: path.join(basePath, l),\n\t};\n}\n", "export function safePath(pathStr: string): string {\n\treturn pathStr\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z-]/g, '-')\n\t\t.replace(/-+/g, '-');\n}\n", "import type { WorkspaceConfig } from '../../config/types';\nimport type { RepositoryCheckoutRecord } from '../resources/types';\n\nimport { createCheckout } from './createCheckout';\nimport type { CheckoutStore } from './createCheckoutStore';\n\nexport function hydrateStoreFromRecords(\n\tconfig: WorkspaceConfig,\n\tstore: CheckoutStore,\n\trecords: RepositoryCheckoutRecord[],\n): void {\n\tfor (const record of records) {\n\t\tconst checkout = createCheckout(\n\t\t\tconfig,\n\t\t\trecord.checkout.location,\n\t\t\trecord.repo,\n\t\t\trecord.checkout.branch,\n\t\t\trecord.checkout.name,\n\t\t);\n\t\tstore.addCheckout({ ...checkout, filename: record.filename });\n\t}\n}\n", "export async function runWithConcurrency<T>(\n\titems: readonly T[],\n\tlimit: number,\n\ttask: (item: T) => Promise<void>,\n): Promise<void> {\n\tlet index = 0;\n\tconst workers = Array.from({ length: Math.min(limit, items.length) }, async () => {\n\t\twhile (index < items.length) {\n\t\t\tconst i = index++;\n\t\t\tawait task(items[i]);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n}\n", "import { runWithConcurrency } from '../async/runWithConcurrency';\nimport type { WorkspaceContext } from '../context/createWorkspaceContext';\nimport { createGenericOperation } from '../operations/createGenericOperation';\nimport { scanCheckoutState } from '../scan/scanCheckoutState';\n\nexport async function scanAllCheckoutsStates(\n\tctx: WorkspaceContext,\n\trefetch = false,\n): Promise<void> {\n\tctx.log.log(createGenericOperation('scan-all-checkouts'));\n\tawait runWithConcurrency(ctx.store.getAllCheckouts(), 4, async checkout => {\n\t\tconst updated = await scanCheckoutState(ctx, checkout, refetch);\n\t\tctx.store.updateCheckout(updated);\n\t});\n}\n", "import { doBranchCheckout } from '../../private/commands/checkouts/doBranchCheckout';\nimport { createBranchOperation } from '../../private/commands/operations/createBranchOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { createOperationFailure } from '../../private/operations/createOperationFailure';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { scanCheckoutState } from '../../private/scan/scanCheckoutState';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runBranch(\n\tctx: WorkspaceContext,\n\toptions: { branch: string; checkouts?: string[]; all?: boolean },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['branch', options.branch, options.checkouts]));\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace branch [options] -c <pattern>\\` or \\`art-workspace branch [options] --all\\` if you want to apply the branch to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst { branch, checkouts } = options;\n\tconst resolvedCheckouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(checkouts ?? []);\n\n\tfor (const checkout of resolvedCheckouts) {\n\t\tconst scanned = await scanCheckoutState(ctx, checkout);\n\t\tctx.store.updateCheckout(scanned);\n\n\t\tif (!scanned.scan?.can?.('branch')) {\n\t\t\tctx.log.log(\n\t\t\t\tcreateOperationFailure(createBranchOperation(scanned, branch), 'checkout not cloned'),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tawait doBranchCheckout(ctx, scanned, branch);\n\t}\n\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentOperationsReport(ctx.log);\n}\n", "import { spawn } from 'node:child_process';\n\nexport interface RunCommandOutcome {\n\tcode: number | null;\n\toutput: string;\n\terror: string;\n}\n\nexport function runCommandInDirectory(dir: string, command: string): Promise<RunCommandOutcome> {\n\treturn new Promise(resolve => {\n\t\tconst child = spawn(command, { cwd: dir, shell: true });\n\t\tlet output = '';\n\t\tlet error = '';\n\t\tchild.stdout?.on('data', chunk => (output += chunk));\n\t\tchild.stderr?.on('data', chunk => (error += chunk));\n\t\tchild.on('error', err => resolve({ code: null, output, error: err.message }));\n\t\tchild.on('exit', code => resolve({ code, output, error }));\n\t});\n}\n", "import type { CheckoutRunPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createCheckoutRunOperation(\n\tcheckout: Checkout,\n\tcommand: string,\n): CheckoutRunPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'run',\n\t\tcommand,\n\t\tmessage() {\n\t\t\treturn command;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { runCommandInDirectory } from '../../exec/runCommandInDirectory';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createCheckoutRunOperation } from '../operations/createCheckoutRunOperation';\n\nexport async function doCheckoutRun(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n\tcommand: string,\n): Promise<Checkout | null> {\n\tif (!checkout.scan?.state('exists').exists) {\n\t\tconst op = createOperationFailure(\n\t\t\tcreateCheckoutRunOperation(checkout, command),\n\t\t\tnew Error('checkout not cloned'),\n\t\t);\n\t\tctx.log.log(op);\n\t\treturn null;\n\t}\n\n\tconst pending = createCheckoutRunOperation(checkout, command);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tconst runOutcome = await runCommandInDirectory(checkout.path, command);\n\t\tif (runOutcome.code === 0) {\n\t\t\tctx.log.log(createOperationSuccess(pending));\n\t\t} else {\n\t\t\tctx.log.log(createOperationFailure(pending, new Error(`Exit code: ${runOutcome.code}`)));\n\t\t}\n\t\tif (!runOutcome.output.trim() && !runOutcome.error.trim()) {\n\t\t\tconsole.info('\\n--- [No output]\\n');\n\t\t} else {\n\t\t\tif (runOutcome.output) {\n\t\t\t\tconsole.info('\\n--- Output:\\n');\n\t\t\t\tconsole.info(runOutcome.output);\n\t\t\t\tconsole.info('');\n\t\t\t}\n\t\t\tif (runOutcome.error) {\n\t\t\t\tconst maybeErrorLabel = runOutcome.code === 0 ? '' : ' Error:';\n\t\t\t\tconsole.error(`\\n---${maybeErrorLabel}\\n`);\n\t\t\t\tconsole.error(runOutcome.error);\n\t\t\t\tconsole.error('');\n\t\t\t}\n\t\t}\n\t\treturn checkout;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doCheckoutRun } from '../../private/commands/checkouts/doCheckoutRun';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runCheckoutsRun(\n\tctx: WorkspaceContext,\n\toptions: { command: string; checkouts?: string[]; all?: boolean },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['checkouts', 'run', options.command]));\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace checkouts run [options] -c <pattern>\\` or \\`art-workspace checkouts run [options] --all\\` if you want to run the command in all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tawait doCheckoutRun(ctx, checkout, options.command);\n\t});\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import simpleGit from 'simple-git';\n\nimport type { Checkout } from '../store/types';\n\nexport async function cloneCheckout(checkout: Checkout): Promise<void> {\n\tconst recordedBranch = checkout.record.branch;\n\tconst git = simpleGit('');\n\tif (!checkout.repo?.remote) {\n\t\tthrow new Error(``);\n\t}\n\tawait git.clone(checkout.repo.remote, checkout.path);\n\n\tif (recordedBranch) {\n\t\ttry {\n\t\t\tconst repoGit = simpleGit(checkout.path);\n\t\t\tawait repoGit.checkout(recordedBranch);\n\t\t} catch {\n\t\t\t// recorded branch not on remote \u2014 stay on default branch\n\t\t}\n\t}\n}\n", "import type { ClonePending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createCloneOperation(checkout: Checkout | undefined): ClonePending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'clone',\n\t\tlocation: checkout?.record.location ?? 'unknown',\n\t\tmessage() {\n\t\t\treturn checkout ? `to ${checkout.record.location}` : 'clone';\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../context/createWorkspaceContext';\nimport { cloneCheckout } from '../git/cloneCheckout';\nimport { getCurrentBranch } from '../git/getCurrentBranch';\nimport { createOperationFailure } from '../operations/createOperationFailure';\nimport { createOperationSuccess } from '../operations/createOperationSuccess';\nimport { saveCheckoutRecord } from '../resources/checkout/saveCheckoutRecord';\nimport { scanCheckoutState } from '../scan/scanCheckoutState';\nimport type { Checkout } from '../store/createCheckout';\n\nimport { createCloneOperation } from './operations/createCloneOperation';\n\nexport async function doClone(ctx: WorkspaceContext, checkout: Checkout): Promise<Checkout | null> {\n\tif (!checkout.repo) return null;\n\n\tconst pending = createCloneOperation(checkout);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait cloneCheckout(checkout);\n\t\tconst rescan = await scanCheckoutState(ctx, checkout);\n\t\tctx.store.updateCheckout(rescan);\n\t\tctx.log.log(createOperationSuccess(createCloneOperation(rescan)));\n\n\t\tconst actualBranch = await getCurrentBranch(checkout.path);\n\t\tawait saveCheckoutRecord(ctx.config, {\n\t\t\tname: rescan.record.name,\n\t\t\trepository: rescan.repo?.name,\n\t\t\tlocation: rescan.record.location,\n\t\t\tbranch: actualBranch || rescan.record.branch || 'main',\n\t\t});\n\n\t\treturn rescan;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import { doClone } from '../../../private/commands/doClone';\nimport type { WorkspaceContext } from '../../../private/context/createWorkspaceContext';\nimport { scanCheckoutState } from '../../../private/scan/scanCheckoutState';\nimport type { Checkout } from '../../../private/store/createCheckout';\n\nexport async function cloneIfMissing(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n): Promise<Checkout | null> {\n\tconst scanned = await scanCheckoutState(ctx, checkout);\n\tif (!scanned.scan?.should?.('clone')) {\n\t\treturn scanned;\n\t}\n\n\tif (!scanned.repo) {\n\t\treturn null;\n\t}\n\n\treturn doClone(ctx, scanned);\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport type { RepositoryRecord } from '../../private/resources/types';\nimport { createCheckout } from '../../private/store/createCheckout';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nimport { cloneIfMissing } from './private/cloneIfMissing';\n\nexport async function cloneAll(ctx: WorkspaceContext, repos: RepositoryRecord[]): Promise<void> {\n\tfor (const repo of repos) {\n\t\tif (!ctx.store.getCheckoutOfRepo(repo.name)) {\n\t\t\tconst checkout = createCheckout(ctx.config, repo.name, repo);\n\t\t\tctx.store.addCheckout(checkout);\n\t\t}\n\t}\n\n\tfor (const checkout of ctx.store.getAllCheckouts()) {\n\t\tawait cloneIfMissing(ctx, checkout);\n\t}\n\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentOperationsReport(ctx.log);\n}\n", "import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { createCloneOperation } from '../../private/commands/operations/createCloneOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createOperationFailure } from '../../private/operations/createOperationFailure';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { saveCheckoutRecord } from '../../private/resources/checkout/saveCheckoutRecord';\nimport type { RepositoryRecord } from '../../private/resources/types';\nimport { createCheckout } from '../../private/store/createCheckout';\nimport { createCheckoutLocation } from '../../private/store/createCheckoutLocation';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nimport { cloneIfMissing } from './private/cloneIfMissing';\n\nexport async function cloneSpecific(\n\tctx: WorkspaceContext,\n\trepos: RepositoryRecord[],\n\trepoName: string,\n\tcheckoutInput?: string,\n): Promise<void> {\n\tconst canonical = repoName.startsWith('@') ? repoName.split('/')[1] : repoName;\n\tconst repo = repos.find(r => r.name.toLowerCase() === canonical.toLowerCase());\n\n\tif (!repo) {\n\t\tctx.log.log(\n\t\t\tcreateOperationFailure(createCloneOperation(undefined), `unknown repo \"${repoName}\"`),\n\t\t);\n\t\tpresentOperationsReport(ctx.log);\n\t\treturn;\n\t}\n\n\tconst location = createCheckoutLocation(repo, checkoutInput);\n\n\tconst existing = ctx.store.getCheckoutForLocation(location);\n\tif (existing && existing.repo?.name !== repo.name) {\n\t\tconst msg = `location ${location} is already used by checkout '${existing.record.name}'.`;\n\t\tctx.log.log(createOperationFailure(createCloneOperation(existing), msg));\n\t\tpresentOperationsReport(ctx.log);\n\t\treturn;\n\t}\n\n\tif (existing) {\n\t\tawait cloneIfMissing(ctx, existing);\n\t} else {\n\t\tconst targetDir = join(ctx.config.root.path, ctx.config.clone.path, location);\n\t\tif (existsSync(targetDir)) {\n\t\t\tconst msg = `directory already exists at ${targetDir}`;\n\t\t\tctx.log.log(createOperationFailure(createCloneOperation(undefined), msg));\n\t\t\tpresentOperationsReport(ctx.log);\n\t\t\treturn;\n\t\t}\n\n\t\tconst checkoutName = checkoutInput ? `${repo.name} @ ${checkoutInput}` : repo.name;\n\t\tconst created = createCheckout(ctx.config, location, repo, 'main', checkoutName);\n\n\t\tctx.store.addCheckout(created);\n\t\tawait saveCheckoutRecord(ctx.config, created.record);\n\n\t\tawait cloneIfMissing(ctx, created);\n\t}\n\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentOperationsReport(ctx.log);\n}\n", "import type { RepositoryRecord } from '../resources/types';\n\nimport { safePath } from './safePath';\n\nexport function createCheckoutLocation(repo: RepositoryRecord, target?: string): string {\n\treturn safePath(target ? repo.name + ' ' + target : repo.name);\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function cloneStatus(ctx: WorkspaceContext): Promise<void> {\n\tawait scanAllCheckoutsStates(ctx);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\n\nimport { cloneAll } from './cloneAll';\nimport { cloneSpecific } from './cloneSpecific';\nimport { cloneStatus } from './cloneStatus';\n\ninterface CloneOptions {\n\tall?: boolean;\n\trepoName?: string;\n\tcheckoutInput?: string;\n}\n\nexport async function runClone(\n\tctx: WorkspaceContext,\n\t{ all, repoName, checkoutInput }: CloneOptions,\n): Promise<WorkspaceContext> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['clone', { all, repoName, checkoutInput }]));\n\n\tif (all) {\n\t\tawait cloneAll(ctx, repos);\n\t} else if (repoName) {\n\t\tawait cloneSpecific(ctx, repos, repoName, checkoutInput);\n\t} else {\n\t\tawait cloneStatus(ctx);\n\t}\n\n\treturn ctx;\n}\n", "import type { LinkedPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createLinkedOperation(\n\tcheckout: Checkout | undefined,\n\tpkg: string,\n\ttarget: string,\n): LinkedPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'linked',\n\t\tpackage: pkg,\n\t\ttarget,\n\t\tmessage() {\n\t\t\treturn `linking ${pkg}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { createLinkedOperation } from '../../private/commands/operations/createLinkedOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport async function runLink(ctx: WorkspaceContext, _options: { root: string }): Promise<void> {\n\tctx.log.log(createGenericOperation('command', ['link']));\n\tctx.log.log(createLinkedOperation(ctx.workspace, '', ''));\n\t// TODO: implement link command\n\tconsole.info('link command - TODO');\n}\n", "import type { PublishPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createPublishOperation(\n\tcheckout: Checkout | undefined,\n\tpkg: string,\n\tversion: string,\n): PublishPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'publish',\n\t\tpackage: pkg,\n\t\tversion,\n\t\tmessage() {\n\t\t\treturn `publishing ${pkg}@${version}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { createPublishOperation } from '../../private/commands/operations/createPublishOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport async function runPublish(\n\tctx: WorkspaceContext,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t_options: { root: string; auto?: boolean },\n): Promise<void> {\n\tctx.log.log(createGenericOperation('command', ['publish', _options.auto]));\n\tctx.log.log(createPublishOperation(ctx.workspace, '', ''));\n\t// TODO: implement publish command\n\tconsole.info('publish command - TODO');\n}\n", "import simpleGit from 'simple-git';\n\nimport type { Checkout } from '../store/types';\n\nexport async function pullCheckout(checkout: Checkout): Promise<void> {\n\tconst git = simpleGit(checkout.path);\n\tawait git.pull('origin', checkout.record.branch);\n}\n", "import type { PullPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createPullOperation(checkout: Checkout, branch: string): PullPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'pull',\n\t\tbranch,\n\t\tmessage() {\n\t\t\treturn `from origin/${branch}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { pullCheckout } from '../../git/pullCheckout';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPullOperation } from '../operations/createPullOperation';\n\nexport async function doPullCheckout(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n): Promise<Checkout | null> {\n\tconst pending = createPullOperation(checkout, checkout.record.branch);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait pullCheckout(checkout);\n\t\tconst updated = await scanCheckoutState(ctx, checkout, true);\n\t\tctx.store.updateCheckout(updated);\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPullOperation } from '../operations/createPullOperation';\n\nexport async function doPullWorkspaceCheckout(ctx: WorkspaceContext): Promise<Checkout | null> {\n\tconst workspace = ctx.workspace;\n\tif (!workspace) return null;\n\tif (!workspace.scan?.can?.('pull') || !workspace.scan.should?.('pull')) return null;\n\n\tconst pending = createPullOperation(workspace, workspace.record.branch);\n\tconst git = simpleGit(workspace.path);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait git.pull('origin', workspace.record.branch);\n\t\tconst updated = await scanCheckoutState(ctx, workspace, true);\n\t\tctx.workspace = updated;\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(\n\t\t\tcreateOperationFailure(createPullOperation(workspace, workspace.record.branch), error),\n\t\t);\n\t\treturn null;\n\t}\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createCheckout } from '../../store/createCheckout';\n\nexport async function scanWorkspaceCheckout(\n\tctx: WorkspaceContext,\n\trefetch = false,\n): Promise<Checkout | null> {\n\tconst workspaceCheckout = {\n\t\t...createCheckout(ctx.config, '.', undefined, 'main', 'Workspace'),\n\t\tpath: ctx.config.root.path,\n\t};\n\tconst workspace = await scanCheckoutState(ctx, workspaceCheckout, refetch);\n\tctx.workspace = workspace;\n\treturn workspace;\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doPullCheckout } from '../../private/commands/checkouts/doPullCheckout';\nimport { doPullWorkspaceCheckout } from '../../private/commands/workspaces/doPullWorkspaceCheckout';\nimport { scanWorkspaceCheckout } from '../../private/commands/workspaces/scanWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runPull(\n\tctx: WorkspaceContext,\n\toptions: { checkouts?: string[]; all?: boolean } = {},\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['pull', options.checkouts]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace pull [options] -c <pattern>\\` or \\`art-workspace pull [options] --all\\` if you want to apply the pull to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tif (checkout.scan?.can?.('pull') && checkout.scan.should?.('pull')) {\n\t\t\tawait doPullCheckout(ctx, checkout);\n\t\t}\n\t});\n\n\tawait scanWorkspaceCheckout(ctx);\n\tawait doPullWorkspaceCheckout(ctx);\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import simpleGit from 'simple-git';\n\nimport type { Checkout } from '../store/types';\n\nexport async function pushCheckout(checkout: Checkout): Promise<void> {\n\tconst git = simpleGit(checkout.path);\n\tawait git.push('origin', checkout.record.branch);\n}\n", "import type { PushPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createPushOperation(checkout: Checkout, branch: string): PushPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'push',\n\t\tbranch,\n\t\tmessage() {\n\t\t\treturn `to origin/${branch}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { pushCheckout } from '../../git/pushCheckout';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPushOperation } from '../operations/createPushOperation';\n\nexport async function doPushCheckout(\n\tctx: WorkspaceContext,\n\tcheckout: Checkout,\n): Promise<Checkout | null> {\n\tconst pending = createPushOperation(checkout, checkout.record.branch);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait pushCheckout(checkout);\n\t\tconst updated = await scanCheckoutState(ctx, checkout, true);\n\t\tctx.store.updateCheckout(updated);\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import simpleGit from 'simple-git';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createPushOperation } from '../operations/createPushOperation';\n\nexport async function doPushWorkspaceCheckout(ctx: WorkspaceContext): Promise<Checkout | null> {\n\tconst workspace = ctx.workspace;\n\tif (!workspace) return null;\n\tif (!workspace.scan?.can?.('push') || !workspace.scan.should?.('push')) return null;\n\n\tconst pending = createPushOperation(workspace, workspace.record.branch);\n\tconst git = simpleGit(workspace.path);\n\ttry {\n\t\tctx.log.log(pending);\n\t\tawait git.push('origin', workspace.record.branch);\n\t\tconst updated = await scanCheckoutState(ctx, workspace, true);\n\t\tctx.workspace = updated;\n\t\tctx.log.log(createOperationSuccess(pending));\n\t\treturn updated;\n\t} catch (error) {\n\t\tctx.log.log(createOperationFailure(pending, error));\n\t\treturn null;\n\t}\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doPushCheckout } from '../../private/commands/checkouts/doPushCheckout';\nimport { doPushWorkspaceCheckout } from '../../private/commands/workspaces/doPushWorkspaceCheckout';\nimport { scanWorkspaceCheckout } from '../../private/commands/workspaces/scanWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runPush(\n\tctx: WorkspaceContext,\n\toptions: { checkouts?: string[]; all?: boolean } = {},\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['push', options.checkouts]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace push [options] -c <pattern>\\` or \\`art-workspace push [options] --all\\` if you want to apply the push to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tif (checkout.scan?.can?.('push') && checkout.scan.should?.('push')) {\n\t\t\tawait doPushCheckout(ctx, checkout);\n\t\t}\n\t});\n\n\tawait scanWorkspaceCheckout(ctx);\n\tawait doPushWorkspaceCheckout(ctx);\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import type { CheckoutRepositoryState } from '../../commands/repo/runRepo';\n\nexport function presentCheckoutRepositoryState(state: CheckoutRepositoryState): void {\n\tconsole.info(`Repository:`);\n\tconsole.info(` name: ${state.target.repo?.name || '(unknown)'}`);\n\tconsole.info(` name: ${state.target.repo?.remote || '(unknown)'}`);\n\tif (state.issues.length > 0) {\n\t\tconsole.info(` issues: ${state.issues.join('; ')}`);\n\t}\n\tconsole.info('');\n\n\tconsole.info(`Checkout:`);\n\tconsole.info(` record: ${state.target.filename || '(unknown)'}`);\n\tconsole.info(` location: ${state.target.record.location || '(unknown)'}`);\n\tconsole.info(` branch: ${state.branch || state.target.record.branch}`);\n\tif (state.target.scan && state.target.scan.issues().length > 0) {\n\t\tconsole.info(` states: ${state.target.scan.issues().join('; ')}`);\n\t}\n\tconsole.info('');\n}\n", "import type { PackageStateRecord } from '../resources/types';\nimport type { Checkout } from '../store/createCheckout';\n\nimport { formatTable } from './formatTable';\n\nexport function presentPackageStateReport(\n\tcheckout: Checkout,\n\tpackageStates: PackageStateRecord[],\n): void {\n\tif (packageStates.length === 0) {\n\t\treturn;\n\t}\n\n\tconst headers = ['package', 'version', 'published', 'states'];\n\tconst rows = packageStates.map(ps => [\n\t\tps.canonicalName,\n\t\tps.version ?? '-',\n\t\tps.publishedVersion ?? '-',\n\t\tps.states.join('; ') || '-',\n\t]);\n\n\tconsole.info(`Packages for ${checkout.record.name}:`);\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "import { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport type { PackageRecord, PackageStateRecord } from '../resources/types';\n\nexport function createPackageStateRecord(\n\tcheckoutPath: string,\n\tprojectPath: string,\n\tnsPath: string,\n\tpkg: PackageRecord,\n): { pkgPath: string; record: PackageStateRecord } {\n\tlet pkgPath = join(checkoutPath, projectPath, nsPath, pkg.path);\n\tlet pkgJsonPath = join(pkgPath, 'package.json');\n\n\tif (!existsSync(pkgJsonPath)) {\n\t\tconst altPath = join(checkoutPath, projectPath, pkg.path);\n\t\tconst altPkgJsonPath = join(altPath, 'package.json');\n\t\tif (existsSync(altPkgJsonPath)) {\n\t\t\tpkgPath = altPath;\n\t\t\tpkgJsonPath = altPkgJsonPath;\n\t\t}\n\t}\n\n\tconst record: PackageStateRecord = {\n\t\tcanonicalName: pkg.canonicalName,\n\t\tversion: null,\n\t\tpublishedVersion: null,\n\t\tdirectory: pkgPath,\n\t\tstates: [],\n\t};\n\n\tif (existsSync(pkgJsonPath)) {\n\t\ttry {\n\t\t\tconst pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));\n\t\t\trecord.version = pkgJson.version ?? null;\n\t\t} catch {\n\t\t\trecord.states.push('no package.json');\n\t\t}\n\t} else {\n\t\trecord.states.push('no package.json');\n\t}\n\n\treturn { pkgPath, record };\n}\n", "import { execSync } from 'node:child_process';\n\nimport type { PackageRecord, PackageStateRecord } from '../resources/types';\n\nexport function scanPackageStateRecord(pkg: PackageRecord, record: PackageStateRecord): void {\n\tif (record.version !== null && record.version !== '0.0.0') {\n\t\ttry {\n\t\t\tconst output = execSync(`npm info ${pkg.canonicalName} version`, {\n\t\t\t\tencoding: 'utf-8',\n\t\t\t\ttimeout: 10000,\n\t\t\t\tstdio: ['pipe', 'pipe', 'ignore'],\n\t\t\t});\n\t\t\trecord.publishedVersion = output.trim() || null;\n\t\t} catch {\n\t\t\trecord.publishedVersion = 'unknown';\n\t\t}\n\t}\n}\n", "import type { PackageStateRecord, ProjectGraph } from '../resources/types';\n\nimport { createPackageStateRecord } from './createPackageStateRecord';\nimport { scanPackageStateRecord } from './scanPackageStateRecord';\n\nexport function getRepositoryCheckoutPackages(\n\tcheckoutPath: string,\n\tgraph: ProjectGraph,\n): PackageStateRecord[] {\n\tconst packageStates: PackageStateRecord[] = [];\n\n\tfor (const project of graph.projects) {\n\t\tfor (const nsName of project.namespaceNames) {\n\t\t\tconst ns = graph.namespaces.get(nsName);\n\t\t\tif (!ns) continue;\n\t\t\tfor (const pkgName of ns.packageNames) {\n\t\t\t\tconst pkg = graph.packages.get(pkgName);\n\t\t\t\tif (!pkg) continue;\n\n\t\t\t\tconst { record } = createPackageStateRecord(checkoutPath, project.path, ns.path, pkg);\n\t\t\t\tscanPackageStateRecord(pkg, record);\n\t\t\t\tpackageStates.push(record);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn packageStates;\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceConfig } from '../../../config';\nimport type { NamespaceRecord } from '../types';\n\nimport { readNamespaceRecord } from './readNamespaceRecord';\n\nexport async function loadNamespaceRecords(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<NamespaceRecord[]> {\n\tconst recordFiles = await findRecordFiles(config.records, checkoutPath, ['Namespace']);\n\tconst records = await Promise.all(recordFiles.map(file => readNamespaceRecord(file)));\n\treturn records.filter((record): record is NamespaceRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { NamespaceRecord } from '../types';\n\nexport async function readNamespaceRecord(file: FSRecordFile): Promise<NamespaceRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Namespace:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\tconsole.warn(`namespace record ${file.filename}: missing name, skipped`);\n\t\treturn null;\n\t}\n\n\tconst pathMatch = content.match(/\\*\\*Path:\\*\\*\\s*`([^`]+)`/);\n\tconst packagesMatch = content.match(/\\*\\*Packages:\\*\\*\\s*([\\s\\S]*?)(?=\\n\\n|\\n\\*\\*|$)/);\n\n\tlet packageNames: string[] = [];\n\tif (packagesMatch) {\n\t\tpackageNames = packagesMatch[1]\n\t\t\t.split('\\n')\n\t\t\t.map(line => line.replace(/^-\\s*Package:\\s*/, '').trim())\n\t\t\t.filter(Boolean);\n\t}\n\n\treturn {\n\t\tkind: 'namespace',\n\t\tname: nameMatch[1].trim(),\n\t\tpath: pathMatch?.[1]?.trim() ?? '.',\n\t\tpackageNames,\n\t};\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceConfig } from '../../../config';\nimport type { PackageRecord } from '../types';\n\nimport { readPackageRecord } from './readPackageRecord';\n\nexport async function loadPackageRecords(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<PackageRecord[]> {\n\tconst recordFiles = await findRecordFiles(config.records, checkoutPath, ['Package']);\n\tconst records = await Promise.all(recordFiles.map(file => readPackageRecord(file)));\n\treturn records.filter((record): record is PackageRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { PackageRecord } from '../types';\n\nexport async function readPackageRecord(file: FSRecordFile): Promise<PackageRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Package:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\tconsole.warn(`package record ${file.filename}: missing name, skipped`);\n\t\treturn null;\n\t}\n\n\tconst canonicalNameMatch = content.match(/\\*\\*Canonical Name:\\*\\*\\s*`([^`]+)`/);\n\tconst pathMatch = content.match(/\\*\\*Path:\\*\\*\\s*`([^`]+)`/);\n\n\treturn {\n\t\tkind: 'package',\n\t\tname: nameMatch[1].trim(),\n\t\tcanonicalName: canonicalNameMatch?.[1]?.trim() ?? '',\n\t\tpath: pathMatch?.[1]?.trim() ?? '',\n\t};\n}\n", "import { findRecordFiles } from '@art-lib/fs-records';\n\nimport type { WorkspaceConfig } from '../../../config';\nimport type { ProjectRecord } from '../types';\n\nimport { readProjectRecord } from './readProjectRecord';\n\nexport async function loadProjectRecords(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<ProjectRecord[]> {\n\tconst recordFiles = await findRecordFiles(config.records, checkoutPath, ['Project']);\n\n\tconst records = await Promise.all(recordFiles.map(file => readProjectRecord(file)));\n\treturn records.filter((record): record is ProjectRecord => record !== null);\n}\n", "import { type FSRecordFile, readRecordFileContent } from '@art-lib/fs-records';\n\nimport type { ProjectRecord } from '../types';\n\nexport async function readProjectRecord(file: FSRecordFile): Promise<ProjectRecord | null> {\n\tconst fileWithContents = file.content ? file : await readRecordFileContent(file);\n\tif (!fileWithContents.content) {\n\t\treturn null;\n\t}\n\n\tconst content = fileWithContents.content;\n\n\tconst nameMatch = content.match(/## Project:\\s*(.+)/);\n\tif (!nameMatch) {\n\t\tconsole.warn(`project record ${file.filename}: missing name, skipped`);\n\t\treturn null;\n\t}\n\n\tconst pathMatch = content.match(/\\*\\*Path:\\*\\*\\s*`([^`]+)`/);\n\tconst namespacesMatch = content.match(/\\*\\*Namespaces:\\*\\*\\s*([\\s\\S]*?)(?=\\n\\n|\\n\\*\\*|$)/);\n\n\tlet namespaceNames: string[] = [];\n\tif (namespacesMatch) {\n\t\tnamespaceNames = namespacesMatch[1]\n\t\t\t.split('\\n')\n\t\t\t.map(line => line.replace(/^-\\s*Namespace:\\s*/, '').trim())\n\t\t\t.filter(Boolean);\n\t}\n\n\treturn {\n\t\tkind: 'project',\n\t\tname: nameMatch[1].trim(),\n\t\tpath: pathMatch?.[1]?.trim() ?? '.',\n\t\tnamespaceNames,\n\t};\n}\n", "import type { NamespaceRecord, PackageRecord, ProjectGraph, ProjectRecord } from '../types';\n\nexport function consolidateProjectGraph(\n\tprojects: ProjectRecord[],\n\tnamespaces: NamespaceRecord[],\n\tpackages: PackageRecord[],\n): ProjectGraph {\n\tconst warnings: string[] = [];\n\tconst nsMap = new Map<string, NamespaceRecord>();\n\tconst pkgMap = new Map<string, PackageRecord>();\n\n\tfor (const ns of namespaces) {\n\t\tnsMap.set(ns.name, ns);\n\t}\n\tfor (const pkg of packages) {\n\t\tpkgMap.set(pkg.name, pkg);\n\t}\n\n\tfor (const project of projects) {\n\t\tfor (const nsName of project.namespaceNames) {\n\t\t\tif (!nsMap.has(nsName)) {\n\t\t\t\twarnings.push(`unknown namespace: ${nsName}`);\n\t\t\t}\n\t\t}\n\t\tfor (const ns of namespaces) {\n\t\t\tif (!project.namespaceNames.includes(ns.name)) continue;\n\t\t\tfor (const pkgName of ns.packageNames) {\n\t\t\t\tif (!pkgMap.has(pkgName)) {\n\t\t\t\t\twarnings.push(`unknown package: ${pkgName}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { projects, namespaces: nsMap, packages: pkgMap, warnings };\n}\n", "import type { WorkspaceConfig } from '../../../config';\nimport { loadNamespaceRecords } from '../namespace/loadNamespaceRecords';\nimport { loadPackageRecords } from '../package/loadPackageRecords';\nimport { loadProjectRecords } from '../project/loadProjectRecords';\nimport type { ProjectGraph } from '../types';\n\nimport { consolidateProjectGraph } from './consolidateProjectGraph';\n\nexport async function loadProjectGraph(\n\tconfig: WorkspaceConfig,\n\tcheckoutPath: string,\n): Promise<ProjectGraph> {\n\tconst [projects, namespaces, packages] = await Promise.all([\n\t\tloadProjectRecords(config, checkoutPath),\n\t\tloadNamespaceRecords(config, checkoutPath),\n\t\tloadPackageRecords(config, checkoutPath),\n\t]);\n\treturn consolidateProjectGraph(projects, namespaces, packages);\n}\n", "import type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutRepositoryState } from '../../private/present/presentCheckoutRepositoryState';\nimport { presentPackageStateReport } from '../../private/present/presentPackageStateReport';\nimport { getRepositoryCheckoutPackages } from '../../private/repositories/getRepositoryCheckoutPackages';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadProjectGraph } from '../../private/resources/projectGraph/loadProjectGraph';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport type { PackageStateRecord, ProjectGraph } from '../../private/resources/types';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\nimport type { Checkout } from '../../private/store/types';\n\nexport interface CheckoutRepositoryState {\n\ttarget: import('../../private/store/types').Checkout;\n\tbranch: string | null;\n\tissues: string[];\n\tgraph: ProjectGraph;\n}\n\nexport async function runRepo(\n\tctx: WorkspaceContext,\n\toptions: { locations?: string[] },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['repo', options.locations]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tconst { locations = [] } = options;\n\n\tconst checkouts: Map<string, Checkout> = new Map();\n\tif (locations.length === 0) {\n\t\tconst all = ctx.store.getAllCheckouts();\n\t\tall.forEach(checkout => checkouts.set(checkout.record.location, checkout));\n\t} else {\n\t\tfor (const name of locations) {\n\t\t\tconst checkout = ctx.store.getCheckoutByName(name) ?? ctx.store.getCheckoutForLocation(name);\n\t\t\tif (!checkout) {\n\t\t\t\tconsole.warn(`unknown checkout: ${name}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcheckouts.set(checkout.record.location, checkout);\n\t\t}\n\t}\n\n\tconst repositoryCheckoutStates = new Map<string, CheckoutRepositoryState>();\n\tconst repositoryCheckoutPackages = new Map<string, PackageStateRecord[]>();\n\n\tfor (const [location, checkout] of checkouts) {\n\t\tconst graph = await loadProjectGraph(ctx.config, checkout.path);\n\t\tconst repositoryState: CheckoutRepositoryState = {\n\t\t\ttarget: checkout,\n\t\t\tbranch: checkout.scan?.state('remote').branch ?? checkout.record.branch,\n\t\t\tissues: [],\n\t\t\tgraph,\n\t\t};\n\t\trepositoryCheckoutStates.set(location, repositoryState);\n\n\t\tfor (const w of graph.warnings) {\n\t\t\tconsole.warn(w);\n\t\t}\n\n\t\tif (graph.projects.length === 0) {\n\t\t\trepositoryState.issues.push('no project records');\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst packageStates = getRepositoryCheckoutPackages(checkout.path, graph);\n\t\trepositoryCheckoutPackages.set(location, packageStates);\n\t}\n\n\tfor (const [location, state] of repositoryCheckoutStates) {\n\t\tpresentCheckoutRepositoryState(state);\n\t\tconst packageStates = repositoryCheckoutPackages.get(location) ?? [];\n\t\tpresentPackageStateReport(state.target, packageStates);\n\t}\n}\n", "import type { Checkout } from '../store/types';\n\nimport { formatTable } from './formatTable';\n\nexport function presentExtraneousReport(extraneous: Checkout[]): void {\n\tif (extraneous.length === 0) {\n\t\treturn;\n\t}\n\n\tconst headers = ['directory', 'branch', 'states'];\n\tconst rows = extraneous.map(c => [\n\t\tc.record.location,\n\t\tc.scan?.state('remote').branch || c.record.branch,\n\t\tc.scan?.issues().join('; ') || 'clean',\n\t]);\n\n\tconsole.info('Untracked:');\n\tconsole.info(formatTable(rows, headers));\n\tconsole.info('');\n}\n", "import type { Checkout } from '../store/types';\n\nexport function presentWorkspaceReport(workspace?: Checkout): void {\n\tif (!workspace) {\n\t\treturn;\n\t}\n\n\tconst remote = workspace.scan?.state('remote').hasRemote\n\t\t? workspace.scan.state('remote').branch || workspace.record.branch\n\t\t: undefined;\n\tconst issues = workspace.scan?.issues().join('; ');\n\tconst branch = workspace.scan?.state('remote').branch || workspace.record.branch;\n\n\tconsole.info('Workspace:');\n\tconsole.info(` remote: ${remote ?? 'none'}`);\n\tconsole.info(` path: ${workspace.path}`);\n\tconsole.info(` branch: ${branch}`);\n\tconsole.info(` issues: ${issues || '-'}`);\n\tconsole.info('');\n}\n", "import { readdir } from 'node:fs/promises';\nimport { join, relative } from 'node:path';\n\nimport type { WorkspaceContext } from '../../../private/context/createWorkspaceContext';\nimport { createExtraneousCheckout } from '../../../private/scan/private/createExtraneousCheckout';\nimport { scanCheckoutState } from '../../../private/scan/scanCheckoutState';\nimport type { CheckoutStore } from '../../../private/store/createCheckoutStore';\nimport type { Checkout } from '../../../private/store/types';\n\nexport async function scanExtraneousCheckouts(\n\tctx: WorkspaceContext,\n\tstore: CheckoutStore,\n): Promise<Checkout[]> {\n\tconst checkoutsPath = join(ctx.config.root.path, ctx.config.clone.path);\n\tconst result: Checkout[] = [];\n\n\ttry {\n\t\tconst entries = await readdir(checkoutsPath, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.isDirectory()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst dir = join(checkoutsPath, entry.name);\n\t\t\tconst location = relative(checkoutsPath, dir);\n\n\t\t\t// Skip known checkouts already in the store\n\t\t\tconst known = store.getCheckoutForLocation(location);\n\t\t\tif (known) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst checkout = { ...createExtraneousCheckout(ctx.config, location), path: dir };\n\t\t\tconst scanned = await scanCheckoutState(ctx, checkout);\n\t\t\tresult.push(scanned);\n\t\t}\n\t} catch {\n\t\t// checkouts path doesn't exist or can't be read\n\t}\n\n\treturn result;\n}\n", "import type { WorkspaceConfig } from '../../../config/types';\nimport { createCheckout } from '../../store/createCheckout';\nimport type { Checkout } from '../../store/types';\n\nexport function createExtraneousCheckout(config: WorkspaceConfig, location: string): Checkout {\n\treturn createCheckout(config, location, undefined, '', location);\n}\n", "import { runWithConcurrency } from '../../../private/async/runWithConcurrency';\nimport { doPushCheckout } from '../../../private/commands/checkouts/doPushCheckout';\nimport type { WorkspaceContext } from '../../../private/context/createWorkspaceContext';\n\nexport async function syncCheckouts(ctx: WorkspaceContext): Promise<void> {\n\tawait runWithConcurrency(ctx.store.getAllCheckouts(), 4, async checkout => {\n\t\tif (!checkout.scan?.can?.('push') || !checkout.scan.should?.('push')) return;\n\t\tawait doPushCheckout(ctx, checkout);\n\t});\n}\n", "import { doPullWorkspaceCheckout } from '../../private/commands/workspaces/doPullWorkspaceCheckout';\nimport { scanWorkspaceCheckout } from '../../private/commands/workspaces/scanWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentExtraneousReport } from '../../private/present/presentExtraneousReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { presentWorkspaceReport } from '../../private/present/presentWorkspaceReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nimport { scanExtraneousCheckouts } from './private/scanExtraneousCheckouts';\nimport { syncCheckouts } from './private/syncCheckouts';\n\nexport async function runSanity(\n\tctx: WorkspaceContext,\n\toptions: { auto: boolean; refetch?: boolean },\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['sanity', options.auto]));\n\n\tawait scanWorkspaceCheckout(ctx, options.refetch);\n\n\tawait scanAllCheckoutsStates(ctx, options.refetch);\n\tif (options.auto) {\n\t\tawait doPullWorkspaceCheckout(ctx);\n\t\tawait syncCheckouts(ctx);\n\t}\n\n\tconst extraneous = await scanExtraneousCheckouts(ctx, ctx.store);\n\n\tconst workspaceIssues = ctx.workspace?.scan\n\t\t? ctx.workspace.scan\n\t\t\t\t.issues()\n\t\t\t\t.filter(i => i !== 'unknown project' && i !== 'no remote' && i !== 'wrong remote')\n\t\t: [];\n\tconst filteredWorkspace = ctx.workspace\n\t\t? {\n\t\t\t\t...ctx.workspace,\n\t\t\t\tscan: ctx.workspace.scan\n\t\t\t\t\t? { ...ctx.workspace.scan, issues: () => workspaceIssues }\n\t\t\t\t\t: undefined,\n\t\t\t}\n\t\t: undefined;\n\n\tpresentWorkspaceReport(filteredWorkspace);\n\tpresentCheckoutReport(ctx.config, ctx.store.getAllCheckouts());\n\tpresentExtraneousReport(extraneous);\n\tpresentOperationsReport(ctx.log);\n}\n", "import simpleGit from 'simple-git';\n\nimport type { WorkspaceContext } from '../../context/createWorkspaceContext';\nimport { createOperationFailure } from '../../operations/createOperationFailure';\nimport { createOperationSuccess } from '../../operations/createOperationSuccess';\nimport { scanCheckoutState } from '../../scan/scanCheckoutState';\nimport type { Checkout } from '../../store/createCheckout';\nimport { createCheckout } from '../../store/createCheckout';\nimport { createPullOperation } from '../operations/createPullOperation';\nimport { createPushOperation } from '../operations/createPushOperation';\n\nexport async function syncWorkspaceCheckout(ctx: WorkspaceContext): Promise<Checkout | null> {\n\tlet workspace = ctx.workspace;\n\tif (!workspace) {\n\t\tworkspace = {\n\t\t\t...createCheckout(ctx.config, '.', undefined, 'main', 'Workspace'),\n\t\t\tpath: ctx.config.root.path,\n\t\t};\n\t\tconst scanned = await scanCheckoutState(ctx, workspace, true);\n\t\tctx.workspace = scanned;\n\t\tworkspace = scanned;\n\t}\n\n\tconst git = simpleGit(workspace.path);\n\n\t// Pull\n\tif (workspace.scan?.can?.('pull')) {\n\t\tconst pending = createPullOperation(workspace, workspace.record.branch);\n\t\ttry {\n\t\t\tctx.log.log(pending);\n\t\t\tawait git.pull('origin', workspace.record.branch);\n\t\t\tctx.log.log(createOperationSuccess(pending));\n\t\t} catch (error) {\n\t\t\tconst op = createOperationFailure(pending, error);\n\t\t\tctx.log.log(op);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Push\n\tif (workspace.scan?.can?.('push')) {\n\t\tconst pending = createPushOperation(workspace, workspace.record.branch);\n\t\ttry {\n\t\t\tctx.log.log(pending);\n\t\t\tawait git.push('origin', workspace.record.branch);\n\t\t\tctx.log.log(createOperationSuccess(pending));\n\t\t} catch (error) {\n\t\t\tconst op = createOperationFailure(pending, error);\n\t\t\tctx.log.log(op);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Re-scan with refetch\n\tconst updated = await scanCheckoutState(ctx, workspace, true);\n\tctx.workspace = updated;\n\treturn updated;\n}\n", "import { runWithConcurrency } from '../../private/async/runWithConcurrency';\nimport { doPullCheckout } from '../../private/commands/checkouts/doPullCheckout';\nimport { doPushCheckout } from '../../private/commands/checkouts/doPushCheckout';\nimport { syncWorkspaceCheckout } from '../../private/commands/workspaces/syncWorkspaceCheckout';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\nimport { presentCheckoutReport } from '../../private/present/presentCheckoutReport';\nimport { presentOperationsReport } from '../../private/present/presentOperationsReport';\nimport { loadCheckoutRecords } from '../../private/resources/checkout/loadCheckoutRecords';\nimport { loadRepositoryRecords } from '../../private/resources/repository/loadRepositoryRecords';\nimport { hydrateStoreFromRecords } from '../../private/store/hydrateStoreFromRecords';\nimport { scanAllCheckoutsStates } from '../../private/store/scanAllCheckoutsStates';\n\nexport async function runSync(\n\tctx: WorkspaceContext,\n\toptions: { checkouts?: string[]; all?: boolean } = {},\n): Promise<void> {\n\tconst repos = await loadRepositoryRecords(ctx);\n\tconst records = await loadCheckoutRecords(ctx, repos);\n\thydrateStoreFromRecords(ctx.config, ctx.store, records);\n\n\tctx.log.log(createGenericOperation('command', ['sync', options.checkouts]));\n\n\tawait scanAllCheckoutsStates(ctx);\n\n\tif (!options.all && (!options.checkouts || options.checkouts.length === 0)) {\n\t\tconsole.error('No checkouts matched.');\n\t\tconsole.error(\n\t\t\t`Usage: Use \\`art-workspace sync [options] -c <pattern>\\` or \\`art-workspace sync [options] --all\\` if you want to apply the sync to all checkouts.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst checkouts = options.all\n\t\t? ctx.store.getAllCheckouts()\n\t\t: ctx.store.getCheckoutsByPattern(options.checkouts ?? []);\n\n\tawait runWithConcurrency(checkouts, 4, async checkout => {\n\t\tif (checkout.scan?.can?.('pull')) {\n\t\t\tconst pulled = checkout.scan.should?.('pull')\n\t\t\t\t? await doPullCheckout(ctx, checkout)\n\t\t\t\t: checkout;\n\t\t\tif (pulled?.scan?.can?.('push') && pulled.scan.should?.('push')) {\n\t\t\t\tawait doPushCheckout(ctx, pulled);\n\t\t\t}\n\t\t}\n\t});\n\n\tawait syncWorkspaceCheckout(ctx);\n\n\tpresentCheckoutReport(ctx.config, checkouts);\n\tpresentOperationsReport(ctx.log);\n}\n", "import type { UnlinkPending } from '../../operations/types';\nimport type { Checkout } from '../../store/createCheckout';\n\nexport function createUnlinkOperation(\n\tcheckout: Checkout | undefined,\n\tpkg: string,\n\tsource: string,\n): UnlinkPending {\n\treturn {\n\t\tts: new Date(),\n\t\tcheckout,\n\t\toutcome: 'pending',\n\t\toperation: 'unlink',\n\t\tpackage: pkg,\n\t\tsource,\n\t\tmessage() {\n\t\t\treturn `unlinking ${pkg}`;\n\t\t},\n\t\ttiming() {\n\t\t\treturn this.finishedTs ? this.finishedTs.getTime() - this.ts.getTime() : NaN;\n\t\t},\n\t};\n}\n", "import { createUnlinkOperation } from '../../private/commands/operations/createUnlinkOperation';\nimport type { WorkspaceContext } from '../../private/context/createWorkspaceContext';\nimport { createGenericOperation } from '../../private/operations/createGenericOperation';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport async function runUnlink(ctx: WorkspaceContext, _options: { root: string }): Promise<void> {\n\tctx.log.log(createGenericOperation('command', ['unlink']));\n\tctx.log.log(createUnlinkOperation(ctx.workspace, '', ''));\n\t// TODO: implement unlink command\n\tconsole.info('unlink command - TODO');\n}\n", "import { existsSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport { build } from 'esbuild';\n\nimport { defineConfig } from './defineConfig';\nimport type { PartialWorkspaceConfig, WorkspaceConfig } from './types';\n\nconst MANIFEST_FILE = '.art-workspace.mts';\nconst TEMP_FILE = '.art-workspace-bundle.mjs';\n\nconst DEFAULT_CONFIG: PartialWorkspaceConfig = {\n\tclone: { path: 'checkouts' },\n\tcheckouts: {\n\t\tpath: '_records/',\n\t\ttemplate: '.agents/domains/workspace/templates/checkout.art.njk',\n\t},\n\trecords: {\n\t\tbase: '.',\n\t\tpattern: '*.art',\n\t\tignored: ['node_modules/', '.git/', 'dist/'],\n\t\texcluded: [],\n\t\tgitignore: true,\n\t},\n};\n\nfunction formatError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport async function loadWorkspaceConfig(rootPath: string): Promise<WorkspaceConfig> {\n\tconst manifestPath = join(rootPath, MANIFEST_FILE);\n\n\tif (!existsSync(manifestPath)) {\n\t\tconsole.warn(`${MANIFEST_FILE} not found at ${rootPath}; Using default config.`);\n\t\treturn defineConfig({ ...DEFAULT_CONFIG, root: { path: rootPath } });\n\t}\n\n\tlet output;\n\ttry {\n\t\toutput = await build({\n\t\t\tentryPoints: [manifestPath],\n\t\t\tbundle: true,\n\t\t\twrite: false,\n\t\t\tformat: 'esm',\n\t\t\tplatform: 'node',\n\t\t\texternal: [\n\t\t\t\t'node:fs',\n\t\t\t\t'node:os',\n\t\t\t\t'node:path',\n\t\t\t\t'node:url',\n\t\t\t\t'fs',\n\t\t\t\t'os',\n\t\t\t\t'path',\n\t\t\t\t'url',\n\t\t\t\t'esbuild',\n\t\t\t\t'simple-git',\n\t\t\t],\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Failed to bundle workspace manifest at ${manifestPath}: ${formatError(error)}`,\n\t\t);\n\t}\n\n\tconst tempFile = join(rootPath, TEMP_FILE);\n\twriteFileSync(tempFile, output.outputFiles[0].text);\n\n\ttry {\n\t\tconst loaded = await import(pathToFileURL(tempFile).href);\n\t\tconst config = loaded.default as PartialWorkspaceConfig;\n\t\treturn defineConfig({ ...config, root: { path: rootPath } });\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load workspace manifest at ${manifestPath}: ${formatError(error)}`);\n\t}\n}\n", "import type { FSRecordsPath } from '@art-lib/fs-records';\n\nimport type { PartialWorkspaceConfig } from '../types';\n\nconst DEFAULTS: FSRecordsPath = {\n\tbase: '.',\n\tpattern: '*.art',\n\tignored: ['node_modules/', '.git/', 'dist/'],\n\texcluded: [],\n\tgitignore: true,\n};\n\nexport function normalizeRecordPaths(records: PartialWorkspaceConfig['records']): FSRecordsPath[] {\n\tconst paths = records?.paths;\n\n\tif (!paths || paths.length === 0) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tbase: records?.base ?? DEFAULTS.base,\n\t\t\t\tpattern: records?.pattern ?? DEFAULTS.pattern,\n\t\t\t\tignored: records?.ignored ?? DEFAULTS.ignored,\n\t\t\t\texcluded: records?.excluded ?? DEFAULTS.excluded,\n\t\t\t\tgitignore: records?.gitignore ?? DEFAULTS.gitignore,\n\t\t\t},\n\t\t];\n\t}\n\n\treturn paths.map(p => ({\n\t\tbase: p.base ?? records?.base ?? DEFAULTS.base,\n\t\tpattern: p.pattern ?? records?.pattern ?? DEFAULTS.pattern,\n\t\tignored: p.ignored ?? records?.ignored ?? DEFAULTS.ignored,\n\t\texcluded: [...(p.excluded ?? []), ...(records?.excluded ?? [])],\n\t\tgitignore: p.gitignore ?? records?.gitignore ?? DEFAULTS.gitignore,\n\t}));\n}\n", "import { normalizeRecordPaths } from './private/normalizeRecordPaths';\nimport type { PartialWorkspaceConfig, WorkspaceConfig } from './types';\n\nexport function defineConfig(config: PartialWorkspaceConfig): WorkspaceConfig {\n\tconst clonePath = config.clone?.path || 'checkouts';\n\tconst rootPath = config.root?.path || process.cwd();\n\tconst checkoutsPath = config.checkouts?.path || '_records/';\n\tconst checkoutTemplatePath =\n\t\tconfig.checkouts?.template || '.agents/domains/workspace/templates/checkout.art.njk';\n\tconst recordsPaths = normalizeRecordPaths(config.records);\n\n\treturn {\n\t\tclone: {\n\t\t\tpath: clonePath,\n\t\t},\n\t\troot: {\n\t\t\tpath: rootPath,\n\t\t},\n\t\tcheckouts: {\n\t\t\tpath: checkoutsPath,\n\t\t\ttemplate: checkoutTemplatePath,\n\t\t},\n\t\trecords: {\n\t\t\tpaths: recordsPaths,\n\t\t},\n\t};\n}\n", "import type { WorkspaceConfig } from '../../config/types';\nimport type { OperationsLog } from '../log/createOperationsLog';\nimport type { Checkout } from '../store/createCheckout';\nimport type { CheckoutStore } from '../store/createCheckoutStore';\n\nexport interface WorkspaceContext {\n\tconfig: WorkspaceConfig;\n\tstore: CheckoutStore;\n\tlog: OperationsLog; // WIP Rename to `ops`\n\tworkspace?: Checkout;\n}\n\nexport function createWorkspaceContext(\n\tconfig: WorkspaceConfig,\n\tstore: CheckoutStore,\n\tlog: OperationsLog,\n\tworkspace?: Checkout,\n): WorkspaceContext {\n\treturn { config, store, log, workspace };\n}\n", "import type { Operation } from '../operations/types';\n\nexport interface OperationsLog {\n\tlog(operation: Operation): void;\n\tall(): Operation[];\n\tsince(ts: Date): Operation[];\n\tlatest(n: number): Operation[];\n}\n\nexport function createOperationsLog(logger: (op: Operation) => void = () => {}): OperationsLog {\n\tconst operations: Operation[] = [];\n\n\treturn {\n\t\tlog(operation: Operation): void {\n\t\t\tlogger(operation);\n\n\t\t\tif (operation.outcome !== 'pending') {\n\t\t\t\toperations.push(operation);\n\t\t\t}\n\t\t},\n\n\t\tall(): Operation[] {\n\t\t\treturn [...operations];\n\t\t},\n\n\t\tsince(ts: Date): Operation[] {\n\t\t\treturn operations.filter(op => op.ts > ts);\n\t\t},\n\n\t\tlatest(n: number): Operation[] {\n\t\t\treturn operations.slice(-n);\n\t\t},\n\t};\n}\n", "import type { Checkout } from './types';\n\nexport interface CheckoutStore {\n\taddCheckout: (checkout: Checkout) => void;\n\tgetCheckoutForLocation: (location: string) => Checkout | undefined;\n\tgetCheckoutOfRepo: (name: string) => Checkout | undefined;\n\tgetCheckoutByName: (name: string) => Checkout | undefined;\n\tgetCheckoutsByPattern: (patterns: string[]) => Checkout[];\n\tupdateCheckout: (checkout: Checkout) => void;\n\tgetAllCheckouts: () => Checkout[];\n}\n\nfunction matchCheckoutByName(checkouts: Map<string, Checkout>, name: string): Checkout | undefined {\n\tconst n = name.toLowerCase();\n\treturn Array.from(checkouts.values()).find(checkout => checkout.record.name.toLowerCase() === n);\n}\n\nfunction matchCheckoutByLocation(\n\tcheckouts: Map<string, Checkout>,\n\tlocation: string,\n): Checkout | undefined {\n\treturn checkouts.get(location);\n}\n\nfunction patternToRegex(pattern: string): RegExp {\n\tconst escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\tconst globbed = escaped.replace(/\\*/g, '.*');\n\treturn new RegExp(`^${globbed}$`, 'i');\n}\n\nfunction isWildcardPattern(pattern: string): boolean {\n\treturn pattern.includes('*');\n}\n\nexport function createCheckoutStore(): CheckoutStore {\n\tconst checkouts = new Map<string, Checkout>();\n\n\tfunction addCheckout(checkout: Checkout) {\n\t\tconst existing = checkouts.get(checkout.record.location);\n\t\tif (existing) {\n\t\t\tconst msg = `Duplicate location: \"${checkout.record.location}\", existing: \"${existing.record.name}\" duplicate: \"${checkout.record.name}\".`;\n\t\t\tconsole.error(msg);\n\t\t} else {\n\t\t\tcheckouts.set(checkout.record.location, checkout);\n\t\t}\n\t}\n\n\treturn {\n\t\taddCheckout,\n\n\t\tgetCheckoutForLocation(location: string): Checkout | undefined {\n\t\t\treturn matchCheckoutByLocation(checkouts, location);\n\t\t},\n\n\t\tgetCheckoutOfRepo(name: string): Checkout | undefined {\n\t\t\tconst n = name.toLowerCase();\n\t\t\treturn Array.from(checkouts.values()).find(\n\t\t\t\tcheckout => checkout.repo?.name.toLowerCase() === n,\n\t\t\t);\n\t\t},\n\n\t\tgetCheckoutByName(name: string): Checkout | undefined {\n\t\t\treturn matchCheckoutByName(checkouts, name);\n\t\t},\n\n\t\tgetCheckoutsByPattern(patterns: string[]): Checkout[] {\n\t\t\tconst matched = new Map<string, Checkout>(); // keyed by record.location for dedup\n\n\t\t\tfor (const pattern of patterns) {\n\t\t\t\tlet patternMatched = false;\n\n\t\t\t\tfor (const checkout of checkouts.values()) {\n\t\t\t\t\tlet nameMatch = false;\n\t\t\t\t\tlet locationMatch = false;\n\n\t\t\t\t\tif (isWildcardPattern(pattern)) {\n\t\t\t\t\t\t// Wildcard mode: regex match against name and location\n\t\t\t\t\t\tconst regex = patternToRegex(pattern);\n\t\t\t\t\t\tnameMatch = regex.test(checkout.record.name);\n\t\t\t\t\t\tlocationMatch = regex.test(checkout.record.location);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Exact mode: only exact match, no fallback\n\t\t\t\t\t\tnameMatch = matchCheckoutByName(checkouts, pattern) === checkout;\n\t\t\t\t\t\tlocationMatch = matchCheckoutByLocation(checkouts, pattern) === checkout;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nameMatch || locationMatch) {\n\t\t\t\t\t\tmatched.set(checkout.record.location, checkout);\n\t\t\t\t\t\tpatternMatched = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!patternMatched) {\n\t\t\t\t\tconsole.warn(`no checkout matches pattern: \"${pattern}\"`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.from(matched.values());\n\t\t},\n\n\t\tupdateCheckout(checkout: Checkout): void {\n\t\t\tcheckouts.set(checkout.record.location, checkout);\n\t\t},\n\n\t\tgetAllCheckouts(): Checkout[] {\n\t\t\treturn Array.from(checkouts.values());\n\t\t},\n\t};\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_simple_git", "simpleGit", "simpleGit", "import_node_path", "import_node_path", "import_fs_records", "import_fs_records", "import_fs_records", "import_simple_git", "simpleGit", "ahead", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "hasRemote", "import_node_path", "path", "import_simple_git", "simpleGit", "import_node_fs", "import_node_path", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_simple_git", "simpleGit", "import_node_fs", "import_node_path", "import_node_child_process", "import_fs_records", "import_fs_records", "import_fs_records", "import_fs_records", "import_fs_records", "import_fs_records", "import_promises", "import_node_path", "import_simple_git", "simpleGit", "import_node_fs", "import_node_path", "logger"]
7
7
  }