@ebay-dt/bonfire-node 0.1.0-alpha.1 → 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/agent-service.d.ts.map +1 -1
- package/dist/agent-service.js.map +1 -1
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js.map +1 -1
- package/dist/cursor.d.ts.map +1 -1
- package/dist/cursor.js.map +1 -1
- package/dist/deployment-provider.d.ts.map +1 -1
- package/dist/deployment-provider.js.map +1 -1
- package/dist/duplicate.d.ts.map +1 -1
- package/dist/duplicate.js.map +1 -1
- package/dist/executable.d.ts.map +1 -1
- package/dist/executable.js.map +1 -1
- package/dist/git-repository.d.ts.map +1 -1
- package/dist/git-repository.js.map +1 -1
- package/dist/github-cli.d.ts.map +1 -1
- package/dist/github-cli.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/owned-destination.d.ts.map +1 -1
- package/dist/internal/owned-destination.js.map +1 -1
- package/dist/internal/prototype-templates.d.ts.map +1 -1
- package/dist/internal/prototype-templates.js.map +1 -1
- package/dist/internal/utils.d.ts.map +1 -1
- package/dist/internal/utils.js.map +1 -1
- package/dist/lifecycle/dirty-state.d.ts.map +1 -1
- package/dist/lifecycle/dirty-state.js.map +1 -1
- package/dist/lifecycle/local-prototype-lifecycle.d.ts.map +1 -1
- package/dist/lifecycle/local-prototype-lifecycle.js.map +1 -1
- package/dist/lifecycle/operation-gate.d.ts.map +1 -1
- package/dist/lifecycle/operation-gate.js.map +1 -1
- package/dist/lifecycle/runtime-context.d.ts.map +1 -1
- package/dist/lifecycle/runtime-context.js.map +1 -1
- package/dist/preferences.d.ts.map +1 -1
- package/dist/preferences.js.map +1 -1
- package/dist/prepare-prototype-files.d.ts.map +1 -1
- package/dist/prepare-prototype-files.js.map +1 -1
- package/dist/process-runner.d.ts.map +1 -1
- package/dist/process-runner.js.map +1 -1
- package/dist/prototype-catalog.d.ts.map +1 -1
- package/dist/prototype-catalog.js.map +1 -1
- package/dist/prototype-paths.d.ts.map +1 -1
- package/dist/prototype-paths.js.map +1 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js.map +1 -1
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-prototype-lifecycle.js","sourceRoot":"","sources":["../../src/lifecycle/local-prototype-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-prototype-lifecycle.js","sourceRoot":"","sources":["../../src/lifecycle/local-prototype-lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants } from \"node:fs\";\nimport { lstat, open, rename, rm, writeFile } from \"node:fs/promises\";\nimport { randomUUID } from \"node:crypto\";\nimport { join, relative, sep } from \"node:path\";\nimport {\n definePrototypeRef,\n getPrototypeUrl,\n LifecycleInputError,\n lifecycleFailure,\n lifecycleSuccess,\n parseCreatePrototypeInput,\n parseDuplicatePrototypeInput,\n parseEditPrototypeInput,\n parseBonfireIdentity,\n parsePrototypeCommandInput,\n parsePrototypeMetadata,\n slugifyPrototypeTitle,\n PrototypeRefError,\n type BranchPreparationValue,\n type CreatePrototypeInput,\n type CreatePrototypeValue,\n type DeletePrototypeValue,\n type DeploymentValue,\n type DeploymentWarningCode,\n type DirtyObservationValue,\n type DiscardPrototypeValue,\n type DuplicatePrototypeInput,\n type DuplicatePrototypeValue,\n type EditPrototypeInput,\n type EditPrototypeValue,\n type LifecycleErrorCode,\n type LifecycleResult,\n type BonfireIdentity,\n type PrototypeCommandInput,\n type SavePrototypeValue,\n type ThemeRegistry,\n} from \"@ebay-dt/bonfire-core\";\nimport {\n commitPath,\n discardPath,\n GitRepositoryError,\n prepareIdentityBranch,\n pushBranch,\n type GitRepository,\n} from \"../git-repository.js\";\nimport { duplicatePrototype, PrototypeDuplicateError } from \"../duplicate.js\";\nimport {\n PrototypeCatalog,\n type PrototypeCatalogLike,\n} from \"../prototype-catalog.js\";\nimport { PrototypeScaffoldError, scaffoldPrototype } from \"../scaffold.js\";\nimport {\n createPrototypeLifecycleRuntime,\n type PrototypeLifecycleRuntimeContext,\n} from \"./runtime-context.js\";\nimport type {\n PreparePrototypeFiles,\n PreparePrototypeFilesRequest,\n} from \"../prepare-prototype-files.js\";\nimport {\n cleanupOwnedDestination,\n validateOwnedDestination,\n type OwnedDestinationReceipt,\n} from \"../internal/owned-destination.js\";\nimport {\n RepositoryBusyError,\n withRepositoryOperation,\n} from \"./operation-gate.js\";\nimport {\n DeploymentProviderError,\n type DeploymentProvider,\n} from \"../deployment-provider.js\";\n\ntype LifecycleMethod<Input, Value> = (\n identity: BonfireIdentity,\n input: Input,\n) => Promise<LifecycleResult<Value>>;\n\nexport type PrototypeLifecycle = {\n prepareBranch(\n identity: BonfireIdentity,\n ): Promise<LifecycleResult<BranchPreparationValue>>;\n create: LifecycleMethod<CreatePrototypeInput, CreatePrototypeValue>;\n duplicate: LifecycleMethod<DuplicatePrototypeInput, DuplicatePrototypeValue>;\n edit: LifecycleMethod<EditPrototypeInput, EditPrototypeValue>;\n delete: LifecycleMethod<PrototypeCommandInput, DeletePrototypeValue>;\n getDirtyState: LifecycleMethod<PrototypeCommandInput, DirtyObservationValue>;\n save: LifecycleMethod<PrototypeCommandInput, SavePrototypeValue>;\n discard: LifecycleMethod<PrototypeCommandInput, DiscardPrototypeValue>;\n deploy: LifecycleMethod<PrototypeCommandInput, DeploymentValue>;\n};\n\nexport type LocalPrototypeLifecycleOptions = {\n repositoryRoot: string;\n prototypeRoot?: string;\n remote?: string;\n primaryBranch?: string;\n automaticBranchSwitch?: \"enabled\" | \"disabled\";\n commitIdentity?: {\n name: string;\n email: string;\n };\n catalog?: PrototypeCatalogLike;\n preparePrototypeFiles?: PreparePrototypeFiles;\n deploymentProvider?: DeploymentProvider;\n applicationId?: string;\n themeRegistry?: ThemeRegistry;\n};\n\ntype InternalLocalPrototypeLifecycleOptions = LocalPrototypeLifecycleOptions & {\n runtime?: PrototypeLifecycleRuntimeContext;\n};\n\nfunction repositoryRelativePath(\n runtime: PrototypeLifecycleRuntimeContext,\n ref: { login: string; slug: string },\n) {\n const absolutePath = join(runtime.prototypeRoot, ref.login, ref.slug);\n return relative(runtime.repositoryRoot, absolutePath).split(sep).join(\"/\");\n}\n\nfunction destinationRef(identity: BonfireIdentity, title: string) {\n const slug = slugifyPrototypeTitle(title);\n if (slug === null)\n throw new PrototypeRefError(\"title\", \"must produce a slug\");\n return definePrototypeRef({ login: identity.login, slug });\n}\n\nclass PrototypeNotFoundError extends Error {}\nclass PrototypeOwnershipError extends Error {}\nclass PrototypeMetadataFileError extends Error {}\nclass DeploymentUnavailableError extends Error {}\n\nfunction metadataPath(\n runtime: PrototypeLifecycleRuntimeContext,\n ref: { login: string; slug: string },\n) {\n return join(runtime.prototypeRoot, ref.login, ref.slug, \"metadata.json\");\n}\n\nasync function assertPrototypeDirectory(\n runtime: PrototypeLifecycleRuntimeContext,\n ref: { login: string; slug: string },\n) {\n const paths = [\n runtime.prototypeRoot,\n join(runtime.prototypeRoot, ref.login),\n join(runtime.prototypeRoot, ref.login, ref.slug),\n ];\n\n try {\n for (const path of paths) {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isDirectory()) {\n throw new PrototypeMetadataFileError();\n }\n }\n } catch (error) {\n if (error instanceof PrototypeMetadataFileError) throw error;\n throw new PrototypeMetadataFileError();\n }\n}\n\nasync function readMetadataDocument(\n runtime: PrototypeLifecycleRuntimeContext,\n ref: { login: string; slug: string },\n themeRegistry?: ThemeRegistry,\n) {\n const path = metadataPath(runtime, ref);\n try {\n const file = await open(\n path,\n constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0),\n );\n try {\n const source = await file.readFile(\"utf8\");\n const document: unknown = JSON.parse(source);\n parsePrototypeMetadata(document, { themeRegistry });\n if (\n typeof document !== \"object\" ||\n document === null ||\n Array.isArray(document)\n ) {\n throw new PrototypeMetadataFileError();\n }\n return { ...(document as Record<string, unknown>) };\n } finally {\n await file.close();\n }\n } catch (error) {\n if (error instanceof PrototypeMetadataFileError) throw error;\n throw new PrototypeMetadataFileError();\n }\n}\n\nasync function removePrototypeDirectory(\n runtime: PrototypeLifecycleRuntimeContext,\n ref: { login: string; slug: string },\n) {\n await assertPrototypeDirectory(runtime, ref);\n try {\n await rm(join(runtime.prototypeRoot, ref.login, ref.slug), {\n force: false,\n recursive: true,\n });\n } catch {\n throw new PrototypeMetadataFileError();\n }\n}\n\nasync function writeMetadataDocument(\n runtime: PrototypeLifecycleRuntimeContext,\n ref: { login: string; slug: string },\n document: Record<string, unknown>,\n) {\n const path = metadataPath(runtime, ref);\n const temporaryPath = `${path}.${randomUUID()}.tmp`;\n\n try {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isFile()) {\n throw new PrototypeMetadataFileError();\n }\n await writeFile(temporaryPath, `${JSON.stringify(document, null, 2)}\\n`, {\n encoding: \"utf8\",\n flag: \"wx\",\n });\n await rename(temporaryPath, path);\n } catch (error) {\n if (error instanceof PrototypeMetadataFileError) throw error;\n throw new PrototypeMetadataFileError();\n } finally {\n await rm(temporaryPath, { force: true }).catch(() => undefined);\n }\n}\n\nasync function mergeIdentityBranchToPrimary(\n repository: GitRepository,\n options: {\n branch: string;\n primaryBranch: string;\n remote: string;\n },\n) {\n if (options.branch === options.primaryBranch) return;\n\n const hasRemote = (await repository.remotes()).some(\n (remote) => remote.name === options.remote,\n );\n if (!hasRemote) return;\n\n await repository.checkout([options.primaryBranch]);\n try {\n await repository.merge([\n options.branch,\n \"--no-ff\",\n \"-m\",\n `merge: ${options.branch}`,\n ]);\n await repository.push(options.remote, options.primaryBranch);\n } finally {\n await repository.checkout([options.branch]);\n }\n}\n\nfunction mapError(error: unknown): LifecycleErrorCode {\n if (error instanceof PrototypeNotFoundError) return \"not-found\";\n if (error instanceof PrototypeOwnershipError) return \"forbidden\";\n if (error instanceof PrototypeMetadataFileError) return \"filesystem-failure\";\n if (error instanceof RepositoryBusyError) return \"repository-busy\";\n if (\n error instanceof PrototypeRefError ||\n error instanceof LifecycleInputError\n ) {\n return \"invalid-input\";\n }\n if (error instanceof GitRepositoryError) {\n if (error.kind === \"timeout\") return \"timeout\";\n if (error.kind === \"conflict\") return \"working-tree-conflict\";\n if (error.kind === \"invalid-configuration\") return \"unexpected-failure\";\n return \"git-failure\";\n }\n if (error instanceof PrototypeScaffoldError) {\n if (error.kind === \"collision\") return \"already-exists\";\n if (error.kind === \"invalid-input\") return \"invalid-input\";\n return \"filesystem-failure\";\n }\n if (error instanceof PrototypeDuplicateError) {\n if (error.kind === \"source-not-found\") return \"not-found\";\n if (error.kind === \"collision\") return \"already-exists\";\n if (error.kind === \"invalid-source\") return \"invalid-input\";\n return \"filesystem-failure\";\n }\n if (error instanceof DeploymentUnavailableError) {\n return \"deployment-unavailable\";\n }\n if (error instanceof DeploymentProviderError) {\n return error.kind === \"timeout\" ? \"timeout\" : \"deployment-failure\";\n }\n return \"unexpected-failure\";\n}\n\nfunction resultFrom<Value>(\n operation: () => Promise<Value>,\n): Promise<LifecycleResult<Value>> {\n return operation()\n .then(lifecycleSuccess)\n .catch((error: unknown) => lifecycleFailure(mapError(error)));\n}\n\nexport class LocalPrototypeLifecycle implements PrototypeLifecycle {\n readonly #runtime: PrototypeLifecycleRuntimeContext;\n readonly #catalog: PrototypeCatalogLike;\n readonly #repository: GitRepository;\n readonly #preparePrototypeFiles: PreparePrototypeFiles;\n readonly #deploymentProvider?: DeploymentProvider;\n readonly #applicationId?: string;\n readonly #themeRegistry?: ThemeRegistry;\n\n constructor(options: LocalPrototypeLifecycleOptions) {\n const internalOptions = options as InternalLocalPrototypeLifecycleOptions;\n this.#runtime =\n internalOptions.runtime ??\n createPrototypeLifecycleRuntime(internalOptions);\n this.#themeRegistry = options.themeRegistry;\n this.#catalog =\n internalOptions.catalog ??\n new PrototypeCatalog({\n ...this.#runtime,\n themeRegistry: this.#themeRegistry,\n });\n this.#repository = this.#runtime.gitRepository;\n this.#preparePrototypeFiles =\n internalOptions.preparePrototypeFiles ?? (() => undefined);\n this.#deploymentProvider = internalOptions.deploymentProvider;\n this.#applicationId = internalOptions.applicationId;\n if (\n this.#deploymentProvider &&\n (typeof this.#applicationId !== \"string\" ||\n this.#applicationId.length === 0)\n ) {\n throw new TypeError(\n \"applicationId must be provided when deploymentProvider is configured\",\n );\n }\n }\n\n async #verifiedIdentity(identity: BonfireIdentity) {\n return parseBonfireIdentity(identity);\n }\n\n async #currentBranch() {\n const branch = await this.#repository.currentBranch();\n if (branch === \"HEAD\" || branch.length === 0) {\n throw new GitRepositoryError(\"conflict\", \"current-branch\");\n }\n return branch;\n }\n\n async #ownedPrototype(\n identity: BonfireIdentity,\n input: PrototypeCommandInput,\n ) {\n const verifiedIdentity = await this.#verifiedIdentity(identity);\n const normalizedInput = parsePrototypeCommandInput(input);\n if (normalizedInput.ref.login !== verifiedIdentity.login) {\n throw new PrototypeOwnershipError();\n }\n const summary = await this.#catalog.getSummary(normalizedInput.ref);\n if (!summary) {\n throw new PrototypeNotFoundError();\n }\n\n return {\n ref: normalizedInput.ref,\n path: repositoryRelativePath(this.#runtime, normalizedInput.ref),\n summary,\n };\n }\n\n async #prepareMutationBranch(login: string) {\n if (this.#runtime.automaticBranchSwitch === \"disabled\") {\n return this.#currentBranch();\n }\n\n await prepareIdentityBranch(this.#repository, {\n identityBranch: login,\n primaryBranch: this.#runtime.primaryBranch,\n remote: this.#runtime.remote,\n });\n return login;\n }\n\n async #prepareDestination(\n receipt: OwnedDestinationReceipt,\n expectedFiles: readonly string[],\n request: PreparePrototypeFilesRequest,\n ) {\n try {\n const frozenRequest = Object.freeze({\n ...request,\n ref: Object.freeze({ ...request.ref }),\n identity: Object.freeze({ ...request.identity }),\n ...(request.operation === \"duplicate\"\n ? { source: Object.freeze({ ...request.source }) }\n : {}),\n }) as PreparePrototypeFilesRequest;\n await this.#preparePrototypeFiles(frozenRequest);\n await validateOwnedDestination(\n receipt,\n expectedFiles,\n request.ref,\n this.#themeRegistry,\n );\n } catch {\n try {\n await cleanupOwnedDestination(receipt);\n } catch {\n // The failure remains a finite filesystem failure without retrying cleanup.\n }\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n }\n\n async prepareBranch(\n identity: BonfireIdentity,\n ): Promise<LifecycleResult<BranchPreparationValue>> {\n return resultFrom(async () => {\n const verifiedIdentity = await this.#verifiedIdentity(identity);\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n if (this.#runtime.automaticBranchSwitch === \"disabled\") {\n await this.#currentBranch();\n return { status: \"disabled\" } satisfies BranchPreparationValue;\n }\n\n await prepareIdentityBranch(this.#repository, {\n identityBranch: verifiedIdentity.login,\n primaryBranch: this.#runtime.primaryBranch,\n remote: this.#runtime.remote,\n });\n return { status: \"ready\" } satisfies BranchPreparationValue;\n },\n );\n });\n }\n\n async create(\n identity: BonfireIdentity,\n input: CreatePrototypeInput,\n ): Promise<LifecycleResult<CreatePrototypeValue>> {\n return resultFrom(async () => {\n const verifiedIdentity = await this.#verifiedIdentity(identity);\n const normalizedInput = parseCreatePrototypeInput(\n input,\n this.#themeRegistry,\n );\n const ref = destinationRef(verifiedIdentity, normalizedInput.title);\n\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n if (await this.#catalog.getSummary(ref)) {\n throw new PrototypeScaffoldError(\"collision\");\n }\n\n const branch = await this.#prepareMutationBranch(\n verifiedIdentity.login,\n );\n const prepared = await scaffoldPrototype({\n paths: this.#runtime,\n ref,\n title: normalizedInput.title,\n description: normalizedInput.description,\n authorName: verifiedIdentity.name,\n theme: normalizedInput.theme,\n themeRegistry: this.#themeRegistry,\n });\n await this.#prepareDestination(\n prepared.receipt,\n prepared.expectedFiles,\n {\n operation: \"create\",\n repositoryRoot: this.#runtime.repositoryRoot,\n prototypeRoot: this.#runtime.prototypeRoot,\n prototypePath: prepared.destination,\n ref,\n identity: verifiedIdentity,\n title: normalizedInput.title,\n description: normalizedInput.description,\n },\n );\n await commitPath(\n this.#repository,\n repositoryRelativePath(this.#runtime, ref),\n `init: ${ref.slug}`,\n );\n const push = await pushBranch(\n this.#repository,\n this.#runtime.remote,\n branch,\n );\n\n return {\n ref,\n url: getPrototypeUrl(ref),\n remoteStatus: push.remoteStatus,\n } satisfies CreatePrototypeValue;\n },\n );\n });\n }\n\n async edit(\n identity: BonfireIdentity,\n input: EditPrototypeInput,\n ): Promise<LifecycleResult<EditPrototypeValue>> {\n return resultFrom(async () => {\n const verifiedIdentity = await this.#verifiedIdentity(identity);\n const normalizedInput = parseEditPrototypeInput(\n input,\n this.#themeRegistry,\n );\n\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n const { ref, path } = await this.#ownedPrototype(verifiedIdentity, {\n ref: normalizedInput.ref,\n });\n const branch = await this.#prepareMutationBranch(\n verifiedIdentity.login,\n );\n await assertPrototypeDirectory(this.#runtime, ref);\n const document = await readMetadataDocument(\n this.#runtime,\n ref,\n this.#themeRegistry,\n );\n const metadata = parsePrototypeMetadata(document, {\n themeRegistry: this.#themeRegistry,\n });\n if (metadata.authorLogin !== ref.login) {\n throw new PrototypeNotFoundError();\n }\n\n await writeMetadataDocument(this.#runtime, ref, {\n ...document,\n title: normalizedInput.title,\n description: normalizedInput.description,\n updatedAt: new Date().toISOString(),\n ...(normalizedInput.theme === undefined\n ? {}\n : { theme: normalizedInput.theme }),\n });\n await commitPath(this.#repository, path, `edit: ${ref.slug}`);\n await pushBranch(this.#repository, this.#runtime.remote, branch);\n\n return { edited: true, ref } satisfies EditPrototypeValue;\n },\n );\n });\n }\n\n async delete(\n identity: BonfireIdentity,\n input: PrototypeCommandInput,\n ): Promise<LifecycleResult<DeletePrototypeValue>> {\n return resultFrom(async () => {\n const verifiedIdentity = await this.#verifiedIdentity(identity);\n const normalizedInput = parsePrototypeCommandInput(input);\n\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n const { ref, path } = await this.#ownedPrototype(\n verifiedIdentity,\n normalizedInput,\n );\n const branch = await this.#prepareMutationBranch(\n verifiedIdentity.login,\n );\n await removePrototypeDirectory(this.#runtime, ref);\n await commitPath(this.#repository, path, `delete: ${ref.slug}`);\n await pushBranch(this.#repository, this.#runtime.remote, branch);\n\n return { deleted: true, ref } satisfies DeletePrototypeValue;\n },\n );\n });\n }\n\n async getDirtyState(\n identity: BonfireIdentity,\n input: PrototypeCommandInput,\n ): Promise<LifecycleResult<DirtyObservationValue>> {\n return resultFrom(async () => {\n const { path, summary } = await this.#ownedPrototype(identity, input);\n const status = await this.#repository.status([path]);\n return {\n status: status.files.length > 0 ? \"dirty\" : \"clean\",\n ...(summary.previewUrl !== undefined\n ? { previewUrl: summary.previewUrl }\n : {}),\n } satisfies DirtyObservationValue;\n });\n }\n\n async deploy(\n identity: BonfireIdentity,\n input: PrototypeCommandInput,\n ): Promise<LifecycleResult<DeploymentValue>> {\n return resultFrom(async () => {\n const verifiedIdentity = await this.#verifiedIdentity(identity);\n const normalizedInput = parsePrototypeCommandInput(input);\n if (!this.#deploymentProvider) {\n throw new DeploymentUnavailableError();\n }\n\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n const { ref, path } = await this.#ownedPrototype(\n verifiedIdentity,\n normalizedInput,\n );\n const branch = await this.#prepareMutationBranch(\n verifiedIdentity.login,\n );\n await assertPrototypeDirectory(this.#runtime, ref);\n const document = await readMetadataDocument(\n this.#runtime,\n ref,\n this.#themeRegistry,\n );\n const metadata = parsePrototypeMetadata(document, {\n themeRegistry: this.#themeRegistry,\n });\n if (metadata.authorLogin !== ref.login) {\n throw new PrototypeNotFoundError();\n }\n await commitPath(this.#repository, path, `deploy: ${ref.slug}`);\n await pushBranch(this.#repository, this.#runtime.remote, branch);\n\n const deployment = await this.#deploymentProvider!.deploy({\n applicationId: this.#applicationId!,\n login: verifiedIdentity.login,\n });\n const previewUrl = new URL(\n getPrototypeUrl(ref).slice(1),\n `${deployment.url.replace(/\\/+$/, \"\")}/`,\n ).toString();\n\n let warning: DeploymentWarningCode | undefined;\n try {\n await writeMetadataDocument(this.#runtime, ref, {\n ...document,\n previewUrl,\n updatedAt: new Date().toISOString(),\n });\n await commitPath(\n this.#repository,\n path,\n `deploy: ${ref.slug} (metadata)`,\n );\n await pushBranch(this.#repository, this.#runtime.remote, branch);\n } catch {\n warning = \"metadata-persistence-failed\";\n }\n\n if (warning === undefined) {\n try {\n await mergeIdentityBranchToPrimary(this.#repository, {\n branch,\n primaryBranch: this.#runtime.primaryBranch,\n remote: this.#runtime.remote,\n });\n } catch {\n warning = \"primary-merge-failed\";\n }\n }\n\n return {\n deployed: true,\n ref,\n previewUrl,\n deploymentId: deployment.deploymentId,\n readyState: deployment.readyState,\n warning,\n } satisfies DeploymentValue;\n },\n );\n });\n }\n\n async save(\n identity: BonfireIdentity,\n input: PrototypeCommandInput,\n ): Promise<LifecycleResult<SavePrototypeValue>> {\n return resultFrom(async () => {\n const { ref, path } = await this.#ownedPrototype(identity, input);\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n await commitPath(this.#repository, path, `save: ${ref.slug}`);\n return { saved: true } satisfies SavePrototypeValue;\n },\n );\n });\n }\n\n async discard(\n identity: BonfireIdentity,\n input: PrototypeCommandInput,\n ): Promise<LifecycleResult<DiscardPrototypeValue>> {\n return resultFrom(async () => {\n const { path } = await this.#ownedPrototype(identity, input);\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n await discardPath(this.#repository, path);\n return { discarded: true } satisfies DiscardPrototypeValue;\n },\n );\n });\n }\n\n async duplicate(\n identity: BonfireIdentity,\n input: DuplicatePrototypeInput,\n ): Promise<LifecycleResult<DuplicatePrototypeValue>> {\n return resultFrom(async () => {\n const verifiedIdentity = await this.#verifiedIdentity(identity);\n const normalizedInput = parseDuplicatePrototypeInput(input);\n if (!(await this.#catalog.getSummary(normalizedInput.source))) {\n throw new PrototypeDuplicateError(\"source-not-found\");\n }\n const ref = destinationRef(verifiedIdentity, normalizedInput.title);\n\n return withRepositoryOperation(\n this.#runtime.repositoryRealPath,\n async () => {\n if (await this.#catalog.getSummary(ref)) {\n throw new PrototypeDuplicateError(\"collision\");\n }\n\n const branch = await this.#prepareMutationBranch(\n verifiedIdentity.login,\n );\n const prepared = await duplicatePrototype({\n paths: this.#runtime,\n source: normalizedInput.source,\n destination: ref,\n title: normalizedInput.title,\n description: normalizedInput.description,\n authorName: verifiedIdentity.name,\n themeRegistry: this.#themeRegistry,\n });\n await this.#prepareDestination(\n prepared.receipt,\n prepared.expectedFiles,\n {\n operation: \"duplicate\",\n repositoryRoot: this.#runtime.repositoryRoot,\n prototypeRoot: this.#runtime.prototypeRoot,\n prototypePath: prepared.destination,\n ref,\n source: normalizedInput.source,\n identity: verifiedIdentity,\n title: normalizedInput.title,\n description: normalizedInput.description,\n },\n );\n await commitPath(\n this.#repository,\n repositoryRelativePath(this.#runtime, ref),\n `init: ${ref.slug}`,\n );\n const push = await pushBranch(\n this.#repository,\n this.#runtime.remote,\n branch,\n );\n\n return {\n ref,\n url: getPrototypeUrl(ref),\n remoteStatus: push.remoteStatus,\n } satisfies DuplicatePrototypeValue;\n },\n );\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation-gate.d.ts","sourceRoot":"","sources":["../../src/lifecycle/operation-gate.ts"],"names":[],"mappings":"AAQA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;IAE3C,cAGC;CACF;AAOD,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,UAEhE;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EACjD,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAC1C,OAAO,CAAC,KAAK,CAAC,CAchB"}
|
|
1
|
+
{"version":3,"file":"operation-gate.d.ts","sourceRoot":"","sources":["../../src/lifecycle/operation-gate.ts"],"names":[],"mappings":"AAQA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;IAE3C,cAGC;CACF;AAOD,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,UAEhE;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EACjD,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAC1C,OAAO,CAAC,KAAK,CAAC,CAchB","sourcesContent":["import { realpathSync } from \"node:fs\";\n\nconst GLOBAL_GATE_KEY = \"__bonfirePrototypeLifecycleOperationGates\";\n\ntype OperationGateGlobal = typeof globalThis & {\n [GLOBAL_GATE_KEY]?: Set<string>;\n};\n\nexport class RepositoryBusyError extends Error {\n readonly code = \"repository-busy\" as const;\n\n constructor() {\n super(\"A Bonfire repository operation is already in progress.\");\n this.name = \"RepositoryBusyError\";\n }\n}\n\nfunction getActiveRepositories() {\n const global = globalThis as OperationGateGlobal;\n return (global[GLOBAL_GATE_KEY] ??= new Set<string>());\n}\n\nexport function canonicalizeRepositoryPath(repositoryRoot: string) {\n return realpathSync(repositoryRoot);\n}\n\nexport async function withRepositoryOperation<Value>(\n repositoryRoot: string,\n operation: () => Value | PromiseLike<Value>,\n): Promise<Value> {\n const canonicalRoot = canonicalizeRepositoryPath(repositoryRoot);\n const activeRepositories = getActiveRepositories();\n\n if (activeRepositories.has(canonicalRoot)) {\n throw new RepositoryBusyError();\n }\n\n activeRepositories.add(canonicalRoot);\n try {\n return await operation();\n } finally {\n activeRepositories.delete(canonicalRoot);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation-gate.js","sourceRoot":"","sources":["../../src/lifecycle/operation-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,eAAe,GAAG,2CAA2C,CAAC;AAMpE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,GAAG,iBAA0B,CAAC;IAE3C;QACE,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,SAAS,qBAAqB;IAC5B,MAAM,MAAM,GAAG,UAAiC,CAAC;IACjD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,GAAG,EAAU,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,cAAsB;IAC/D,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,cAAsB,EACtB,SAA2C;IAE3C,MAAM,aAAa,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IAEnD,IAAI,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,mBAAmB,EAAE,CAAC;IAClC,CAAC;IAED,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,EAAE,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"operation-gate.js","sourceRoot":"","sources":["../../src/lifecycle/operation-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,eAAe,GAAG,2CAA2C,CAAC;AAMpE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,GAAG,iBAA0B,CAAC;IAE3C;QACE,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,SAAS,qBAAqB;IAC5B,MAAM,MAAM,GAAG,UAAiC,CAAC;IACjD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,GAAG,EAAU,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,cAAsB;IAC/D,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,cAAsB,EACtB,SAA2C;IAE3C,MAAM,aAAa,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IAEnD,IAAI,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,mBAAmB,EAAE,CAAC;IAClC,CAAC;IAED,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,EAAE,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC","sourcesContent":["import { realpathSync } from \"node:fs\";\n\nconst GLOBAL_GATE_KEY = \"__bonfirePrototypeLifecycleOperationGates\";\n\ntype OperationGateGlobal = typeof globalThis & {\n [GLOBAL_GATE_KEY]?: Set<string>;\n};\n\nexport class RepositoryBusyError extends Error {\n readonly code = \"repository-busy\" as const;\n\n constructor() {\n super(\"A Bonfire repository operation is already in progress.\");\n this.name = \"RepositoryBusyError\";\n }\n}\n\nfunction getActiveRepositories() {\n const global = globalThis as OperationGateGlobal;\n return (global[GLOBAL_GATE_KEY] ??= new Set<string>());\n}\n\nexport function canonicalizeRepositoryPath(repositoryRoot: string) {\n return realpathSync(repositoryRoot);\n}\n\nexport async function withRepositoryOperation<Value>(\n repositoryRoot: string,\n operation: () => Value | PromiseLike<Value>,\n): Promise<Value> {\n const canonicalRoot = canonicalizeRepositoryPath(repositoryRoot);\n const activeRepositories = getActiveRepositories();\n\n if (activeRepositories.has(canonicalRoot)) {\n throw new RepositoryBusyError();\n }\n\n activeRepositories.add(canonicalRoot);\n try {\n return await operation();\n } finally {\n activeRepositories.delete(canonicalRoot);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-context.d.ts","sourceRoot":"","sources":["../../src/lifecycle/runtime-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EACnC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAS9B,MAAM,MAAM,gCAAgC,GAAG,uBAAuB,GAAG;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,6BAA6B,GAAG;IAC7E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,yBAAyB,CAAC;IACjD,cAAc,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AASF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,gCAAgC,CA4BlC"}
|
|
1
|
+
{"version":3,"file":"runtime-context.d.ts","sourceRoot":"","sources":["../../src/lifecycle/runtime-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EACnC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAS9B,MAAM,MAAM,gCAAgC,GAAG,uBAAuB,GAAG;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,6BAA6B,GAAG;IAC7E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,yBAAyB,CAAC;IACjD,cAAc,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AASF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,gCAAgC,CA4BlC","sourcesContent":["import { realpathSync } from \"node:fs\";\nimport type { AutomaticBranchSwitchMode } from \"@ebay-dt/bonfire-core\";\nimport {\n resolvePrototypeCatalogPaths,\n type PrototypeCatalogOptions,\n type ResolvedPrototypeCatalogPaths,\n} from \"../prototype-paths.js\";\nimport {\n createGitRepository,\n type GitCommitIdentity,\n type GitRepository,\n} from \"../git-repository.js\";\n\nconst DEFAULT_REMOTE = \"origin\";\nconst DEFAULT_PRIMARY_BRANCH = \"main\";\nconst DEFAULT_COMMIT_IDENTITY: GitCommitIdentity = {\n name: \"Bonfire\",\n email: \"bonfire@localhost\",\n};\n\nexport type PrototypeLifecycleRuntimeOptions = PrototypeCatalogOptions & {\n remote?: string;\n primaryBranch?: string;\n commitIdentity?: GitCommitIdentity;\n automaticBranchSwitch?: AutomaticBranchSwitchMode;\n gitRepository?: GitRepository;\n};\n\nexport type PrototypeLifecycleRuntimeContext = ResolvedPrototypeCatalogPaths & {\n repositoryRealPath: string;\n remote: string;\n primaryBranch: string;\n automaticBranchSwitch: AutomaticBranchSwitchMode;\n commitIdentity: Readonly<GitCommitIdentity>;\n gitRepository: GitRepository;\n};\n\nfunction requireNonEmptyOption(value: string | undefined, option: string) {\n if (value !== undefined && value.length === 0) {\n throw new TypeError(`${option} must be a nonempty string`);\n }\n return value;\n}\n\nexport function createPrototypeLifecycleRuntime(\n options: PrototypeLifecycleRuntimeOptions,\n): PrototypeLifecycleRuntimeContext {\n const paths = resolvePrototypeCatalogPaths(options);\n const repositoryRealPath = realpathSync(paths.repositoryRoot);\n const remote =\n requireNonEmptyOption(options.remote, \"remote\") ?? DEFAULT_REMOTE;\n const primaryBranch =\n requireNonEmptyOption(options.primaryBranch, \"primaryBranch\") ??\n DEFAULT_PRIMARY_BRANCH;\n const automaticBranchSwitch = options.automaticBranchSwitch ?? \"enabled\";\n const commitIdentity = Object.freeze({\n ...DEFAULT_COMMIT_IDENTITY,\n ...options.commitIdentity,\n });\n\n return {\n ...paths,\n repositoryRealPath,\n remote,\n primaryBranch,\n automaticBranchSwitch,\n commitIdentity,\n gitRepository:\n options.gitRepository ??\n createGitRepository({\n repositoryRoot: paths.repositoryRoot,\n commitIdentity,\n }),\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-context.js","sourceRoot":"","sources":["../../src/lifecycle/runtime-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EACL,4BAA4B,GAG7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,GAGpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,cAAc,GAAG,QAAQ,CAAC;AAChC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,uBAAuB,GAAsB;IACjD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,mBAAmB;CAC3B,CAAC;AAmBF,SAAS,qBAAqB,CAAC,KAAyB,EAAE,MAAc;IACtE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,GAAG,MAAM,4BAA4B,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,OAAyC;IAEzC,MAAM,KAAK,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,MAAM,GACV,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC;IACpE,MAAM,aAAa,GACjB,qBAAqB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;QAC7D,sBAAsB,CAAC;IACzB,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,SAAS,CAAC;IACzE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,GAAG,uBAAuB;QAC1B,GAAG,OAAO,CAAC,cAAc;KAC1B,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,KAAK;QACR,kBAAkB;QAClB,MAAM;QACN,aAAa;QACb,qBAAqB;QACrB,cAAc;QACd,aAAa,EACX,OAAO,CAAC,aAAa;YACrB,mBAAmB,CAAC;gBAClB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,cAAc;aACf,CAAC;KACL,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"runtime-context.js","sourceRoot":"","sources":["../../src/lifecycle/runtime-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EACL,4BAA4B,GAG7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,GAGpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,cAAc,GAAG,QAAQ,CAAC;AAChC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,uBAAuB,GAAsB;IACjD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,mBAAmB;CAC3B,CAAC;AAmBF,SAAS,qBAAqB,CAAC,KAAyB,EAAE,MAAc;IACtE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,GAAG,MAAM,4BAA4B,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,OAAyC;IAEzC,MAAM,KAAK,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,MAAM,GACV,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC;IACpE,MAAM,aAAa,GACjB,qBAAqB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;QAC7D,sBAAsB,CAAC;IACzB,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,SAAS,CAAC;IACzE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,GAAG,uBAAuB;QAC1B,GAAG,OAAO,CAAC,cAAc;KAC1B,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,KAAK;QACR,kBAAkB;QAClB,MAAM;QACN,aAAa;QACb,qBAAqB;QACrB,cAAc;QACd,aAAa,EACX,OAAO,CAAC,aAAa;YACrB,mBAAmB,CAAC;gBAClB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,cAAc;aACf,CAAC;KACL,CAAC;AACJ,CAAC","sourcesContent":["import { realpathSync } from \"node:fs\";\nimport type { AutomaticBranchSwitchMode } from \"@ebay-dt/bonfire-core\";\nimport {\n resolvePrototypeCatalogPaths,\n type PrototypeCatalogOptions,\n type ResolvedPrototypeCatalogPaths,\n} from \"../prototype-paths.js\";\nimport {\n createGitRepository,\n type GitCommitIdentity,\n type GitRepository,\n} from \"../git-repository.js\";\n\nconst DEFAULT_REMOTE = \"origin\";\nconst DEFAULT_PRIMARY_BRANCH = \"main\";\nconst DEFAULT_COMMIT_IDENTITY: GitCommitIdentity = {\n name: \"Bonfire\",\n email: \"bonfire@localhost\",\n};\n\nexport type PrototypeLifecycleRuntimeOptions = PrototypeCatalogOptions & {\n remote?: string;\n primaryBranch?: string;\n commitIdentity?: GitCommitIdentity;\n automaticBranchSwitch?: AutomaticBranchSwitchMode;\n gitRepository?: GitRepository;\n};\n\nexport type PrototypeLifecycleRuntimeContext = ResolvedPrototypeCatalogPaths & {\n repositoryRealPath: string;\n remote: string;\n primaryBranch: string;\n automaticBranchSwitch: AutomaticBranchSwitchMode;\n commitIdentity: Readonly<GitCommitIdentity>;\n gitRepository: GitRepository;\n};\n\nfunction requireNonEmptyOption(value: string | undefined, option: string) {\n if (value !== undefined && value.length === 0) {\n throw new TypeError(`${option} must be a nonempty string`);\n }\n return value;\n}\n\nexport function createPrototypeLifecycleRuntime(\n options: PrototypeLifecycleRuntimeOptions,\n): PrototypeLifecycleRuntimeContext {\n const paths = resolvePrototypeCatalogPaths(options);\n const repositoryRealPath = realpathSync(paths.repositoryRoot);\n const remote =\n requireNonEmptyOption(options.remote, \"remote\") ?? DEFAULT_REMOTE;\n const primaryBranch =\n requireNonEmptyOption(options.primaryBranch, \"primaryBranch\") ??\n DEFAULT_PRIMARY_BRANCH;\n const automaticBranchSwitch = options.automaticBranchSwitch ?? \"enabled\";\n const commitIdentity = Object.freeze({\n ...DEFAULT_COMMIT_IDENTITY,\n ...options.commitIdentity,\n });\n\n return {\n ...paths,\n repositoryRealPath,\n remote,\n primaryBranch,\n automaticBranchSwitch,\n commitIdentity,\n gitRepository:\n options.gitRepository ??\n createGitRepository({\n repositoryRoot: paths.repositoryRoot,\n commitIdentity,\n }),\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAOvF,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC5C,gCAAgC,EAChC,eAAe,CAChB,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,GACpC,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED,MAAM,MAAM,6BAA6B,GACvC,eAAe,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;AAEnE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;IAE7C,YAAY,IAAI,EAAE,6BAA6B,EAI9C;CACF;AAqJD,qBAAa,oBAAqB,YAAW,wBAAwB;;IAGnE,YAAY,OAAO,EAAE,2BAA2B,EAE/C;IAEK,IAAI,CAAC,KAAK,EAAE,MAAM,4BAGvB;IAEK,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,4BAWhE;CACF"}
|
|
1
|
+
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAOvF,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC5C,gCAAgC,EAChC,eAAe,CAChB,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,GACpC,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED,MAAM,MAAM,6BAA6B,GACvC,eAAe,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;AAEnE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;IAE7C,YAAY,IAAI,EAAE,6BAA6B,EAI9C;CACF;AAqJD,qBAAa,oBAAqB,YAAW,wBAAwB;;IAGnE,YAAY,OAAO,EAAE,2BAA2B,EAE/C;IAEK,IAAI,CAAC,KAAK,EAAE,MAAM,4BAGvB;IAEK,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,4BAWhE;CACF","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { constants } from \"node:fs\";\nimport { lstat, mkdir, open, rename, rm } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport {\n definePrototypeRef,\n parseUserPreferences,\n PrototypeRefError,\n type UserPreferences,\n} from \"@ebay-dt/bonfire-core\";\nimport type { PrototypeLifecycleRuntimeContext } from \"./lifecycle/runtime-context.js\";\nimport { hasErrorCode, isFileNotFound, isRecord } from \"./internal/utils.js\";\n\nconst PREFERENCES_FILE = \"preferences.json\";\nconst TEMP_FILE_PREFIX = \".preferences-\";\nconst FILE_OPEN_FLAGS = constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0);\n\nexport type PrototypePreferencesOptions = Pick<\n PrototypeLifecycleRuntimeContext,\n \"prototypeRoot\"\n>;\n\nexport interface PrototypePreferencesLike {\n read(login: string): Promise<UserPreferences>;\n update(\n login: string,\n preferences: Partial<UserPreferences>,\n ): Promise<UserPreferences>;\n}\n\nexport type PrototypePreferencesErrorCode =\n \"invalid-login\" | \"unsafe-path\" | \"read-failed\" | \"write-failed\";\n\nexport class PrototypePreferencesError extends Error {\n readonly code: PrototypePreferencesErrorCode;\n\n constructor(code: PrototypePreferencesErrorCode) {\n super(\"Unable to access prototype preferences\");\n this.name = \"PrototypePreferencesError\";\n this.code = code;\n }\n}\n\ntype PreferenceDocument = Record<string, unknown>;\n\nconst writeQueues = new Map<string, Promise<unknown>>();\n\nfunction isFileExists(error: unknown) {\n return hasErrorCode(error, \"EEXIST\");\n}\n\nfunction isSymlinkError(error: unknown) {\n return hasErrorCode(error, \"ELOOP\");\n}\n\nfunction normalizeLogin(login: string) {\n try {\n return definePrototypeRef({ login, slug: \"preferences\" }).login;\n } catch (error) {\n if (error instanceof PrototypeRefError) {\n throw new PrototypePreferencesError(\"invalid-login\");\n }\n throw error;\n }\n}\n\nfunction preferencePath(prototypeRoot: string, login: string) {\n const normalizedLogin = normalizeLogin(login);\n const userDirectory = join(prototypeRoot, normalizedLogin);\n return {\n userDirectory,\n path: join(userDirectory, PREFERENCES_FILE),\n };\n}\n\nasync function assertDirectory(path: string) {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isDirectory()) {\n throw new PrototypePreferencesError(\"unsafe-path\");\n }\n}\n\nasync function assertSafeUserDirectory(path: string) {\n try {\n await assertDirectory(path);\n } catch (error) {\n if (!isFileNotFound(error)) {\n if (error instanceof PrototypePreferencesError) throw error;\n throw new PrototypePreferencesError(\"write-failed\");\n }\n try {\n await mkdir(path, { recursive: true, mode: 0o700 });\n await assertDirectory(path);\n } catch (nestedError) {\n if (nestedError instanceof PrototypePreferencesError) throw nestedError;\n throw new PrototypePreferencesError(\n isFileNotFound(nestedError) ? \"unsafe-path\" : \"write-failed\",\n );\n }\n }\n}\n\nasync function assertSafePreferenceFile(path: string) {\n try {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isFile()) {\n throw new PrototypePreferencesError(\"unsafe-path\");\n }\n } catch (error) {\n if (!isFileNotFound(error)) throw error;\n }\n}\n\nasync function readDocument(userDirectory: string, path: string) {\n try {\n await assertDirectory(userDirectory);\n await assertSafePreferenceFile(path);\n const file = await open(path, FILE_OPEN_FLAGS);\n try {\n const source = await file.readFile(\"utf8\");\n try {\n const value = JSON.parse(source);\n return isRecord(value) ? value : {};\n } catch {\n return {};\n }\n } finally {\n await file.close();\n }\n } catch (error) {\n if (error instanceof PrototypePreferencesError) throw error;\n if (isFileNotFound(error)) return {};\n if (isSymlinkError(error)) {\n throw new PrototypePreferencesError(\"unsafe-path\");\n }\n throw new PrototypePreferencesError(\"read-failed\");\n }\n}\n\nasync function writeAtomically(path: string, source: string) {\n let temporaryPath: string | undefined;\n\n try {\n for (let attempt = 0; attempt < 3; attempt += 1) {\n temporaryPath = join(\n dirname(path),\n `${TEMP_FILE_PREFIX}${randomUUID()}.tmp`,\n );\n try {\n const file = await open(temporaryPath, \"wx\", 0o600);\n try {\n await file.writeFile(source, \"utf8\");\n await file.sync();\n } finally {\n await file.close();\n }\n break;\n } catch (error) {\n if (!isFileExists(error) || attempt === 2) throw error;\n temporaryPath = undefined;\n }\n }\n\n await assertSafePreferenceFile(path);\n await rename(temporaryPath!, path);\n } catch (error) {\n if (error instanceof PrototypePreferencesError) throw error;\n throw new PrototypePreferencesError(\"write-failed\");\n } finally {\n if (temporaryPath !== undefined) {\n await rm(temporaryPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nasync function withWriteLock<Value>(\n path: string,\n operation: () => Promise<Value>,\n) {\n const previous = writeQueues.get(path) ?? Promise.resolve();\n const current = previous.catch(() => undefined).then(operation);\n writeQueues.set(path, current);\n\n try {\n return await current;\n } finally {\n if (writeQueues.get(path) === current) writeQueues.delete(path);\n }\n}\n\nexport class PrototypePreferences implements PrototypePreferencesLike {\n readonly #prototypeRoot: string;\n\n constructor(options: PrototypePreferencesOptions) {\n this.#prototypeRoot = options.prototypeRoot;\n }\n\n async read(login: string) {\n const { userDirectory, path } = preferencePath(this.#prototypeRoot, login);\n return parseUserPreferences(await readDocument(userDirectory, path));\n }\n\n async update(login: string, preferences: Partial<UserPreferences>) {\n const { userDirectory, path } = preferencePath(this.#prototypeRoot, login);\n\n return withWriteLock(path, async () => {\n await assertSafeUserDirectory(userDirectory);\n const existing = await readDocument(userDirectory, path);\n const supported = parseUserPreferences(preferences);\n const next = { ...existing, ...supported };\n await writeAtomically(path, `${JSON.stringify(next, null, 2)}\\n`);\n return parseUserPreferences(next);\n });\n }\n}\n"]}
|
package/dist/preferences.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { constants } from \"node:fs\";\nimport { lstat, mkdir, open, rename, rm } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport {\n definePrototypeRef,\n parseUserPreferences,\n PrototypeRefError,\n type UserPreferences,\n} from \"@ebay-dt/bonfire-core\";\nimport type { PrototypeLifecycleRuntimeContext } from \"./lifecycle/runtime-context.js\";\nimport { hasErrorCode, isFileNotFound, isRecord } from \"./internal/utils.js\";\n\nconst PREFERENCES_FILE = \"preferences.json\";\nconst TEMP_FILE_PREFIX = \".preferences-\";\nconst FILE_OPEN_FLAGS = constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0);\n\nexport type PrototypePreferencesOptions = Pick<\n PrototypeLifecycleRuntimeContext,\n \"prototypeRoot\"\n>;\n\nexport interface PrototypePreferencesLike {\n read(login: string): Promise<UserPreferences>;\n update(\n login: string,\n preferences: Partial<UserPreferences>,\n ): Promise<UserPreferences>;\n}\n\nexport type PrototypePreferencesErrorCode =\n \"invalid-login\" | \"unsafe-path\" | \"read-failed\" | \"write-failed\";\n\nexport class PrototypePreferencesError extends Error {\n readonly code: PrototypePreferencesErrorCode;\n\n constructor(code: PrototypePreferencesErrorCode) {\n super(\"Unable to access prototype preferences\");\n this.name = \"PrototypePreferencesError\";\n this.code = code;\n }\n}\n\ntype PreferenceDocument = Record<string, unknown>;\n\nconst writeQueues = new Map<string, Promise<unknown>>();\n\nfunction isFileExists(error: unknown) {\n return hasErrorCode(error, \"EEXIST\");\n}\n\nfunction isSymlinkError(error: unknown) {\n return hasErrorCode(error, \"ELOOP\");\n}\n\nfunction normalizeLogin(login: string) {\n try {\n return definePrototypeRef({ login, slug: \"preferences\" }).login;\n } catch (error) {\n if (error instanceof PrototypeRefError) {\n throw new PrototypePreferencesError(\"invalid-login\");\n }\n throw error;\n }\n}\n\nfunction preferencePath(prototypeRoot: string, login: string) {\n const normalizedLogin = normalizeLogin(login);\n const userDirectory = join(prototypeRoot, normalizedLogin);\n return {\n userDirectory,\n path: join(userDirectory, PREFERENCES_FILE),\n };\n}\n\nasync function assertDirectory(path: string) {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isDirectory()) {\n throw new PrototypePreferencesError(\"unsafe-path\");\n }\n}\n\nasync function assertSafeUserDirectory(path: string) {\n try {\n await assertDirectory(path);\n } catch (error) {\n if (!isFileNotFound(error)) {\n if (error instanceof PrototypePreferencesError) throw error;\n throw new PrototypePreferencesError(\"write-failed\");\n }\n try {\n await mkdir(path, { recursive: true, mode: 0o700 });\n await assertDirectory(path);\n } catch (nestedError) {\n if (nestedError instanceof PrototypePreferencesError) throw nestedError;\n throw new PrototypePreferencesError(\n isFileNotFound(nestedError) ? \"unsafe-path\" : \"write-failed\",\n );\n }\n }\n}\n\nasync function assertSafePreferenceFile(path: string) {\n try {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isFile()) {\n throw new PrototypePreferencesError(\"unsafe-path\");\n }\n } catch (error) {\n if (!isFileNotFound(error)) throw error;\n }\n}\n\nasync function readDocument(userDirectory: string, path: string) {\n try {\n await assertDirectory(userDirectory);\n await assertSafePreferenceFile(path);\n const file = await open(path, FILE_OPEN_FLAGS);\n try {\n const source = await file.readFile(\"utf8\");\n try {\n const value = JSON.parse(source);\n return isRecord(value) ? value : {};\n } catch {\n return {};\n }\n } finally {\n await file.close();\n }\n } catch (error) {\n if (error instanceof PrototypePreferencesError) throw error;\n if (isFileNotFound(error)) return {};\n if (isSymlinkError(error)) {\n throw new PrototypePreferencesError(\"unsafe-path\");\n }\n throw new PrototypePreferencesError(\"read-failed\");\n }\n}\n\nasync function writeAtomically(path: string, source: string) {\n let temporaryPath: string | undefined;\n\n try {\n for (let attempt = 0; attempt < 3; attempt += 1) {\n temporaryPath = join(\n dirname(path),\n `${TEMP_FILE_PREFIX}${randomUUID()}.tmp`,\n );\n try {\n const file = await open(temporaryPath, \"wx\", 0o600);\n try {\n await file.writeFile(source, \"utf8\");\n await file.sync();\n } finally {\n await file.close();\n }\n break;\n } catch (error) {\n if (!isFileExists(error) || attempt === 2) throw error;\n temporaryPath = undefined;\n }\n }\n\n await assertSafePreferenceFile(path);\n await rename(temporaryPath!, path);\n } catch (error) {\n if (error instanceof PrototypePreferencesError) throw error;\n throw new PrototypePreferencesError(\"write-failed\");\n } finally {\n if (temporaryPath !== undefined) {\n await rm(temporaryPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nasync function withWriteLock<Value>(\n path: string,\n operation: () => Promise<Value>,\n) {\n const previous = writeQueues.get(path) ?? Promise.resolve();\n const current = previous.catch(() => undefined).then(operation);\n writeQueues.set(path, current);\n\n try {\n return await current;\n } finally {\n if (writeQueues.get(path) === current) writeQueues.delete(path);\n }\n}\n\nexport class PrototypePreferences implements PrototypePreferencesLike {\n readonly #prototypeRoot: string;\n\n constructor(options: PrototypePreferencesOptions) {\n this.#prototypeRoot = options.prototypeRoot;\n }\n\n async read(login: string) {\n const { userDirectory, path } = preferencePath(this.#prototypeRoot, login);\n return parseUserPreferences(await readDocument(userDirectory, path));\n }\n\n async update(login: string, preferences: Partial<UserPreferences>) {\n const { userDirectory, path } = preferencePath(this.#prototypeRoot, login);\n\n return withWriteLock(path, async () => {\n await assertSafeUserDirectory(userDirectory);\n const existing = await readDocument(userDirectory, path);\n const supported = parseUserPreferences(preferences);\n const next = { ...existing, ...supported };\n await writeAtomically(path, `${JSON.stringify(next, null, 2)}\\n`);\n return parseUserPreferences(next);\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-prototype-files.d.ts","sourceRoot":"","sources":["../src/prepare-prototype-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE3E,MAAM,MAAM,4BAA4B,GACpC,QAAQ,CAAC;IACP,SAAS,EAAE,QAAQ,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,YAAY,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,GACF,QAAQ,CAAC;IACP,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,YAAY,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,CAAC;AAEP,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,4BAA4B,KAClC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"prepare-prototype-files.d.ts","sourceRoot":"","sources":["../src/prepare-prototype-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE3E,MAAM,MAAM,4BAA4B,GACpC,QAAQ,CAAC;IACP,SAAS,EAAE,QAAQ,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,YAAY,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,GACF,QAAQ,CAAC;IACP,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,YAAY,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,CAAC;AAEP,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,4BAA4B,KAClC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC","sourcesContent":["import type { BonfireIdentity, PrototypeRef } from \"@ebay-dt/bonfire-core\";\n\nexport type PreparePrototypeFilesRequest =\n | Readonly<{\n operation: \"create\";\n repositoryRoot: string;\n prototypeRoot: string;\n prototypePath: string;\n ref: PrototypeRef;\n identity: BonfireIdentity;\n title: string;\n description: string | null;\n }>\n | Readonly<{\n operation: \"duplicate\";\n repositoryRoot: string;\n prototypeRoot: string;\n prototypePath: string;\n ref: PrototypeRef;\n source: PrototypeRef;\n identity: BonfireIdentity;\n title: string;\n description: string | null;\n }>;\n\nexport type PreparePrototypeFiles = (\n request: PreparePrototypeFilesRequest,\n) => void | Promise<void>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-prototype-files.js","sourceRoot":"","sources":["../src/prepare-prototype-files.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"prepare-prototype-files.js","sourceRoot":"","sources":["../src/prepare-prototype-files.ts"],"names":[],"mappings":"","sourcesContent":["import type { BonfireIdentity, PrototypeRef } from \"@ebay-dt/bonfire-core\";\n\nexport type PreparePrototypeFilesRequest =\n | Readonly<{\n operation: \"create\";\n repositoryRoot: string;\n prototypeRoot: string;\n prototypePath: string;\n ref: PrototypeRef;\n identity: BonfireIdentity;\n title: string;\n description: string | null;\n }>\n | Readonly<{\n operation: \"duplicate\";\n repositoryRoot: string;\n prototypeRoot: string;\n prototypePath: string;\n ref: PrototypeRef;\n source: PrototypeRef;\n identity: BonfireIdentity;\n title: string;\n description: string | null;\n }>;\n\nexport type PreparePrototypeFiles = (\n request: PreparePrototypeFilesRequest,\n) => void | Promise<void>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-runner.d.ts","sourceRoot":"","sources":["../src/process-runner.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,CACA,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,KAAK,IAAI,GAC7C,qBAAqB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC;IACpD,IAAI,CACF,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,qBAAqB,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,qBAAqB,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,CACR,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,CACN,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,qBAAqB,KAC3B,qBAAqB,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,sBAsB3C,CAAC"}
|
|
1
|
+
{"version":3,"file":"process-runner.d.ts","sourceRoot":"","sources":["../src/process-runner.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,CACA,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,KAAK,IAAI,GAC7C,qBAAqB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC;IACpD,IAAI,CACF,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,qBAAqB,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,qBAAqB,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,CACR,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,CACN,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,qBAAqB,KAC3B,qBAAqB,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,sBAsB3C,CAAC","sourcesContent":["import {\n execFile as nodeExecFile,\n spawn as nodeSpawn,\n} from \"node:child_process\";\n\nexport type GitHubCliExecOptions = {\n timeout: number;\n maxBuffer: number;\n};\n\nexport type GitHubCliExecResult = {\n stdout: string;\n stderr: string;\n};\n\nexport type GitHubCliOutputStream = {\n on(\n event: \"data\",\n listener: (chunk: string | Uint8Array) => void,\n ): GitHubCliOutputStream;\n};\n\nexport type GitHubCliChildProcess = {\n stdout: GitHubCliOutputStream | null;\n stderr: GitHubCliOutputStream | null;\n kill: (signal?: NodeJS.Signals | number) => boolean;\n once(\n event: \"error\",\n listener: (error: unknown) => void,\n ): GitHubCliChildProcess;\n once(event: \"close\", listener: () => void): GitHubCliChildProcess;\n};\n\nexport type GitHubCliSpawnOptions = {\n stdio: [\"ignore\", \"pipe\", \"pipe\"];\n};\n\nexport type GitHubCliProcessRunner = {\n execFile: (\n executable: string,\n args: readonly string[],\n options: GitHubCliExecOptions,\n ) => Promise<GitHubCliExecResult>;\n spawn?: (\n executable: string,\n args: readonly string[],\n options: GitHubCliSpawnOptions,\n ) => GitHubCliChildProcess;\n};\n\nexport const defaultGitHubCliProcessRunner: GitHubCliProcessRunner = {\n execFile(executable, args, options) {\n return new Promise((resolve, reject) => {\n nodeExecFile(\n executable,\n [...args],\n { ...options, encoding: \"utf8\" },\n (error, stdout, stderr) => {\n if (error) {\n Object.assign(error, { stdout, stderr });\n reject(error);\n return;\n }\n\n resolve({ stdout, stderr });\n },\n );\n });\n },\n spawn(executable, args, options) {\n return nodeSpawn(executable, [...args], options) as GitHubCliChildProcess;\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-runner.js","sourceRoot":"","sources":["../src/process-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,KAAK,IAAI,SAAS,GACnB,MAAM,oBAAoB,CAAC;AA+C5B,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,YAAY,CACV,UAAU,EACV,CAAC,GAAG,IAAI,CAAC,EACT,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAChC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;oBACzC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9B,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;QAC7B,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAA0B,CAAC;IAC5E,CAAC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"process-runner.js","sourceRoot":"","sources":["../src/process-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,KAAK,IAAI,SAAS,GACnB,MAAM,oBAAoB,CAAC;AA+C5B,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,YAAY,CACV,UAAU,EACV,CAAC,GAAG,IAAI,CAAC,EACT,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAChC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;oBACzC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9B,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;QAC7B,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAA0B,CAAC;IAC5E,CAAC;CACF,CAAC","sourcesContent":["import {\n execFile as nodeExecFile,\n spawn as nodeSpawn,\n} from \"node:child_process\";\n\nexport type GitHubCliExecOptions = {\n timeout: number;\n maxBuffer: number;\n};\n\nexport type GitHubCliExecResult = {\n stdout: string;\n stderr: string;\n};\n\nexport type GitHubCliOutputStream = {\n on(\n event: \"data\",\n listener: (chunk: string | Uint8Array) => void,\n ): GitHubCliOutputStream;\n};\n\nexport type GitHubCliChildProcess = {\n stdout: GitHubCliOutputStream | null;\n stderr: GitHubCliOutputStream | null;\n kill: (signal?: NodeJS.Signals | number) => boolean;\n once(\n event: \"error\",\n listener: (error: unknown) => void,\n ): GitHubCliChildProcess;\n once(event: \"close\", listener: () => void): GitHubCliChildProcess;\n};\n\nexport type GitHubCliSpawnOptions = {\n stdio: [\"ignore\", \"pipe\", \"pipe\"];\n};\n\nexport type GitHubCliProcessRunner = {\n execFile: (\n executable: string,\n args: readonly string[],\n options: GitHubCliExecOptions,\n ) => Promise<GitHubCliExecResult>;\n spawn?: (\n executable: string,\n args: readonly string[],\n options: GitHubCliSpawnOptions,\n ) => GitHubCliChildProcess;\n};\n\nexport const defaultGitHubCliProcessRunner: GitHubCliProcessRunner = {\n execFile(executable, args, options) {\n return new Promise((resolve, reject) => {\n nodeExecFile(\n executable,\n [...args],\n { ...options, encoding: \"utf8\" },\n (error, stdout, stderr) => {\n if (error) {\n Object.assign(error, { stdout, stderr });\n reject(error);\n return;\n }\n\n resolve({ stdout, stderr });\n },\n );\n });\n },\n spawn(executable, args, options) {\n return nodeSpawn(executable, [...args], options) as GitHubCliChildProcess;\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototype-catalog.d.ts","sourceRoot":"","sources":["../src/prototype-catalog.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAGtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,sBAAsB,CAAC;AAS9B,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;IAC7C,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;CACjE;AA+ED,qBAAa,gBAAiB,YAAW,oBAAoB;;IAI3D,YAAY,OAAO,EAAE,uBAAuB,EAG3C;IAEK,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6BpE;IAEK,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoCxC;CACF"}
|
|
1
|
+
{"version":3,"file":"prototype-catalog.d.ts","sourceRoot":"","sources":["../src/prototype-catalog.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAGtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,sBAAsB,CAAC;AAS9B,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;IAC7C,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;CACjE;AA+ED,qBAAa,gBAAiB,YAAW,oBAAoB;;IAI3D,YAAY,OAAO,EAAE,uBAAuB,EAG3C;IAEK,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6BpE;IAEK,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoCxC;CACF","sourcesContent":["import { constants, type Dirent } from \"node:fs\";\nimport { lstat, open, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n createDefaultPrototypeTheme,\n definePrototypeRef,\n definePrototypeSummary,\n parsePrototypeMetadata,\n type PrototypeMetadata,\n type PrototypeRef,\n type PrototypeSummary,\n type ThemeRegistry,\n PrototypeRefError,\n} from \"@ebay-dt/bonfire-core\";\nimport {\n resolvePrototypeCatalogPaths,\n type PrototypeCatalogOptions,\n type ResolvedPrototypeCatalogPaths,\n} from \"./prototype-paths.js\";\n\nconst FILE_OPEN_FLAGS = constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0);\n\ntype LocatedPrototype = {\n ref: PrototypeRef;\n absolutePath: string;\n};\n\nexport interface PrototypeCatalogLike {\n scan(): Promise<readonly PrototypeSummary[]>;\n getSummary(ref: PrototypeRef): Promise<PrototypeSummary | null>;\n}\n\nasync function readDirectory(path: string): Promise<Dirent[] | null> {\n try {\n const before = await lstat(path);\n if (before.isSymbolicLink() || !before.isDirectory()) return null;\n\n const entries = await readdir(path, { withFileTypes: true });\n const after = await lstat(path);\n if (after.isSymbolicLink() || !after.isDirectory()) return null;\n return entries;\n } catch {\n return null;\n }\n}\n\nasync function readMetadata(\n path: string,\n themeRegistry?: ThemeRegistry,\n): Promise<PrototypeMetadata | null> {\n try {\n const file = await open(path, FILE_OPEN_FLAGS);\n try {\n const source = await file.readFile(\"utf8\");\n const metadata = parsePrototypeMetadata(JSON.parse(source), {\n themeRegistry,\n });\n if (themeRegistry && metadata.theme === undefined) {\n return {\n ...metadata,\n theme: createDefaultPrototypeTheme(themeRegistry),\n };\n }\n return metadata;\n } finally {\n await file.close();\n }\n } catch {\n return null;\n }\n}\n\nfunction parseLoginSegment(login: string) {\n try {\n return definePrototypeRef({ login, slug: \"prototype\" }).login;\n } catch (error) {\n if (error instanceof PrototypeRefError) return null;\n throw error;\n }\n}\n\nfunction parseSlugSegment(login: string, slug: string) {\n try {\n return definePrototypeRef({ login, slug }).slug;\n } catch (error) {\n if (error instanceof PrototypeRefError) return null;\n throw error;\n }\n}\n\nasync function readLocatedSummary(\n located: LocatedPrototype,\n themeRegistry?: ThemeRegistry,\n): Promise<PrototypeSummary | null> {\n const metadata = await readMetadata(\n join(located.absolutePath, \"metadata.json\"),\n themeRegistry,\n );\n if (metadata === null || metadata.authorLogin !== located.ref.login) {\n return null;\n }\n\n try {\n return definePrototypeSummary(metadata, located.ref);\n } catch {\n return null;\n }\n}\n\nexport class PrototypeCatalog implements PrototypeCatalogLike {\n readonly #paths: ResolvedPrototypeCatalogPaths;\n readonly #themeRegistry?: ThemeRegistry;\n\n constructor(options: PrototypeCatalogOptions) {\n this.#paths = resolvePrototypeCatalogPaths(options);\n this.#themeRegistry = options.themeRegistry;\n }\n\n async getSummary(ref: PrototypeRef): Promise<PrototypeSummary | null> {\n const normalizedRef = definePrototypeRef(ref);\n const prototypePath = join(\n this.#paths.prototypeRoot,\n normalizedRef.login,\n normalizedRef.slug,\n );\n const loginEntries = await readDirectory(\n join(this.#paths.prototypeRoot, normalizedRef.login),\n );\n if (loginEntries === null) return null;\n\n const prototypeEntries = await readDirectory(prototypePath);\n if (prototypeEntries === null) return null;\n if (\n prototypeEntries.some(\n (entry) => entry.name === \"metadata.json\" && entry.isSymbolicLink(),\n )\n ) {\n return null;\n }\n\n return readLocatedSummary(\n {\n ref: normalizedRef,\n absolutePath: prototypePath,\n },\n this.#themeRegistry,\n );\n }\n\n async scan(): Promise<PrototypeSummary[]> {\n const summaries: PrototypeSummary[] = [];\n const loginEntries = await readDirectory(this.#paths.prototypeRoot);\n if (loginEntries === null) return summaries;\n\n for (const loginEntry of loginEntries) {\n if (!loginEntry.isDirectory() || loginEntry.isSymbolicLink()) continue;\n const login = parseLoginSegment(loginEntry.name);\n if (login === null) continue;\n\n const loginPath = join(\n /*turbopackIgnore: true*/ this.#paths.prototypeRoot,\n login,\n );\n const slugEntries = await readDirectory(loginPath);\n if (slugEntries === null) continue;\n\n for (const slugEntry of slugEntries) {\n if (!slugEntry.isDirectory() || slugEntry.isSymbolicLink()) continue;\n const slug = parseSlugSegment(login, slugEntry.name);\n if (slug === null) continue;\n\n const result = await readLocatedSummary(\n {\n ref: { login, slug },\n absolutePath: join(/*turbopackIgnore: true*/ loginPath, slug),\n },\n this.#themeRegistry,\n );\n if (result !== null) summaries.push(result);\n }\n }\n\n return summaries.sort((left, right) =>\n left.url < right.url ? -1 : left.url > right.url ? 1 : 0,\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototype-catalog.js","sourceRoot":"","sources":["../src/prototype-catalog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prototype-catalog.js","sourceRoot":"","sources":["../src/prototype-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants, type Dirent } from \"node:fs\";\nimport { lstat, open, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n createDefaultPrototypeTheme,\n definePrototypeRef,\n definePrototypeSummary,\n parsePrototypeMetadata,\n type PrototypeMetadata,\n type PrototypeRef,\n type PrototypeSummary,\n type ThemeRegistry,\n PrototypeRefError,\n} from \"@ebay-dt/bonfire-core\";\nimport {\n resolvePrototypeCatalogPaths,\n type PrototypeCatalogOptions,\n type ResolvedPrototypeCatalogPaths,\n} from \"./prototype-paths.js\";\n\nconst FILE_OPEN_FLAGS = constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0);\n\ntype LocatedPrototype = {\n ref: PrototypeRef;\n absolutePath: string;\n};\n\nexport interface PrototypeCatalogLike {\n scan(): Promise<readonly PrototypeSummary[]>;\n getSummary(ref: PrototypeRef): Promise<PrototypeSummary | null>;\n}\n\nasync function readDirectory(path: string): Promise<Dirent[] | null> {\n try {\n const before = await lstat(path);\n if (before.isSymbolicLink() || !before.isDirectory()) return null;\n\n const entries = await readdir(path, { withFileTypes: true });\n const after = await lstat(path);\n if (after.isSymbolicLink() || !after.isDirectory()) return null;\n return entries;\n } catch {\n return null;\n }\n}\n\nasync function readMetadata(\n path: string,\n themeRegistry?: ThemeRegistry,\n): Promise<PrototypeMetadata | null> {\n try {\n const file = await open(path, FILE_OPEN_FLAGS);\n try {\n const source = await file.readFile(\"utf8\");\n const metadata = parsePrototypeMetadata(JSON.parse(source), {\n themeRegistry,\n });\n if (themeRegistry && metadata.theme === undefined) {\n return {\n ...metadata,\n theme: createDefaultPrototypeTheme(themeRegistry),\n };\n }\n return metadata;\n } finally {\n await file.close();\n }\n } catch {\n return null;\n }\n}\n\nfunction parseLoginSegment(login: string) {\n try {\n return definePrototypeRef({ login, slug: \"prototype\" }).login;\n } catch (error) {\n if (error instanceof PrototypeRefError) return null;\n throw error;\n }\n}\n\nfunction parseSlugSegment(login: string, slug: string) {\n try {\n return definePrototypeRef({ login, slug }).slug;\n } catch (error) {\n if (error instanceof PrototypeRefError) return null;\n throw error;\n }\n}\n\nasync function readLocatedSummary(\n located: LocatedPrototype,\n themeRegistry?: ThemeRegistry,\n): Promise<PrototypeSummary | null> {\n const metadata = await readMetadata(\n join(located.absolutePath, \"metadata.json\"),\n themeRegistry,\n );\n if (metadata === null || metadata.authorLogin !== located.ref.login) {\n return null;\n }\n\n try {\n return definePrototypeSummary(metadata, located.ref);\n } catch {\n return null;\n }\n}\n\nexport class PrototypeCatalog implements PrototypeCatalogLike {\n readonly #paths: ResolvedPrototypeCatalogPaths;\n readonly #themeRegistry?: ThemeRegistry;\n\n constructor(options: PrototypeCatalogOptions) {\n this.#paths = resolvePrototypeCatalogPaths(options);\n this.#themeRegistry = options.themeRegistry;\n }\n\n async getSummary(ref: PrototypeRef): Promise<PrototypeSummary | null> {\n const normalizedRef = definePrototypeRef(ref);\n const prototypePath = join(\n this.#paths.prototypeRoot,\n normalizedRef.login,\n normalizedRef.slug,\n );\n const loginEntries = await readDirectory(\n join(this.#paths.prototypeRoot, normalizedRef.login),\n );\n if (loginEntries === null) return null;\n\n const prototypeEntries = await readDirectory(prototypePath);\n if (prototypeEntries === null) return null;\n if (\n prototypeEntries.some(\n (entry) => entry.name === \"metadata.json\" && entry.isSymbolicLink(),\n )\n ) {\n return null;\n }\n\n return readLocatedSummary(\n {\n ref: normalizedRef,\n absolutePath: prototypePath,\n },\n this.#themeRegistry,\n );\n }\n\n async scan(): Promise<PrototypeSummary[]> {\n const summaries: PrototypeSummary[] = [];\n const loginEntries = await readDirectory(this.#paths.prototypeRoot);\n if (loginEntries === null) return summaries;\n\n for (const loginEntry of loginEntries) {\n if (!loginEntry.isDirectory() || loginEntry.isSymbolicLink()) continue;\n const login = parseLoginSegment(loginEntry.name);\n if (login === null) continue;\n\n const loginPath = join(\n /*turbopackIgnore: true*/ this.#paths.prototypeRoot,\n login,\n );\n const slugEntries = await readDirectory(loginPath);\n if (slugEntries === null) continue;\n\n for (const slugEntry of slugEntries) {\n if (!slugEntry.isDirectory() || slugEntry.isSymbolicLink()) continue;\n const slug = parseSlugSegment(login, slugEntry.name);\n if (slug === null) continue;\n\n const result = await readLocatedSummary(\n {\n ref: { login, slug },\n absolutePath: join(/*turbopackIgnore: true*/ loginPath, slug),\n },\n this.#themeRegistry,\n );\n if (result !== null) summaries.push(result);\n }\n }\n\n return summaries.sort((left, right) =>\n left.url < right.url ? -1 : left.url > right.url ? 1 : 0,\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototype-paths.d.ts","sourceRoot":"","sources":["../src/prototype-paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAIxC;CACF;AAuID,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,uBAAuB,GAC/B,6BAA6B,CAqB/B"}
|
|
1
|
+
{"version":3,"file":"prototype-paths.d.ts","sourceRoot":"","sources":["../src/prototype-paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAIxC;CACF;AAuID,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,uBAAuB,GAC/B,6BAA6B,CAqB/B","sourcesContent":["import { lstatSync, realpathSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport type { ThemeRegistry } from \"@ebay-dt/bonfire-core\";\n\nconst CONVENTIONAL_PROTOTYPE_ROOT = join(\"src\", \"app\", \"(prototypes)\");\n\nexport type PrototypeCatalogOptions = {\n repositoryRoot: string;\n prototypeRoot?: string;\n themeRegistry?: ThemeRegistry;\n};\n\nexport type ResolvedPrototypeCatalogPaths = {\n repositoryRoot: string;\n prototypeRoot: string;\n};\n\nexport class PrototypeCatalogPathError extends Error {\n readonly path: string;\n\n constructor(path: string, message: string) {\n super(`Invalid prototype catalog path at ${path}: ${message}`);\n this.name = \"PrototypeCatalogPathError\";\n this.path = path;\n }\n}\n\nfunction assertAbsoluteRepositoryRoot(repositoryRoot: unknown) {\n if (typeof repositoryRoot !== \"string\" || !isAbsolute(repositoryRoot)) {\n throw new PrototypeCatalogPathError(\n \"repositoryRoot\",\n \"must be an absolute path\",\n );\n }\n\n return resolve(repositoryRoot);\n}\n\nfunction resolvePrototypeRoot(repositoryRoot: string, prototypeRoot: unknown) {\n if (prototypeRoot === undefined) {\n return join(repositoryRoot, CONVENTIONAL_PROTOTYPE_ROOT);\n }\n if (typeof prototypeRoot !== \"string\" || prototypeRoot.length === 0) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"must be a nonempty path\",\n );\n }\n if (prototypeRoot.split(/[\\\\/]/u).some((segment) => segment === \"..\")) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"must not contain traversal segments\",\n );\n }\n\n return isAbsolute(prototypeRoot)\n ? resolve(prototypeRoot)\n : resolve(repositoryRoot, prototypeRoot);\n}\n\nfunction assertContained(repositoryRoot: string, prototypeRoot: string) {\n const relativePath = relative(repositoryRoot, prototypeRoot);\n if (\n relativePath.length === 0 ||\n relativePath === \"..\" ||\n relativePath.startsWith(`..${sep}`) ||\n isAbsolute(relativePath)\n ) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"must be contained within repositoryRoot\",\n );\n }\n}\n\nfunction assertDirectory(path: string, label: string) {\n let stats;\n try {\n stats = lstatSync(path);\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n throw new PrototypeCatalogPathError(label, \"does not exist\");\n }\n throw new PrototypeCatalogPathError(label, \"could not be inspected\");\n }\n\n if (stats.isSymbolicLink()) {\n throw new PrototypeCatalogPathError(label, \"must not be a symbolic link\");\n }\n if (!stats.isDirectory()) {\n throw new PrototypeCatalogPathError(label, \"must be a directory\");\n }\n\n return realpathSync(path);\n}\n\nfunction pathExists(path: string) {\n try {\n lstatSync(path);\n return true;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return false;\n }\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"could not be inspected\",\n );\n }\n}\n\nfunction realPathForMissingTarget(path: string) {\n let current = path;\n const missingSegments: string[] = [];\n\n while (!pathExists(current)) {\n const parent = dirname(current);\n if (parent === current) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"could not resolve its existing parent\",\n );\n }\n missingSegments.unshift(current.slice(parent.length + 1));\n current = parent;\n }\n\n let realPath = realpathSync(current);\n for (const segment of missingSegments) realPath = join(realPath, segment);\n return realPath;\n}\n\nfunction assertRealContainment(\n repositoryRealPath: string,\n prototypeRealPath: string,\n) {\n const relativePath = relative(repositoryRealPath, prototypeRealPath);\n if (\n relativePath.length === 0 ||\n relativePath === \"..\" ||\n relativePath.startsWith(`..${sep}`) ||\n isAbsolute(relativePath)\n ) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"escapes repositoryRoot through a symbolic link\",\n );\n }\n}\n\nexport function resolvePrototypeCatalogPaths(\n options: PrototypeCatalogOptions,\n): ResolvedPrototypeCatalogPaths {\n const repositoryRoot = assertAbsoluteRepositoryRoot(options?.repositoryRoot);\n const prototypeRoot = resolvePrototypeRoot(\n repositoryRoot,\n options?.prototypeRoot,\n );\n assertContained(repositoryRoot, prototypeRoot);\n\n const repositoryRealPath = assertDirectory(repositoryRoot, \"repositoryRoot\");\n let prototypeRealPath: string;\n\n if (pathExists(prototypeRoot)) {\n prototypeRealPath = assertDirectory(prototypeRoot, \"prototypeRoot\");\n } else if (options?.prototypeRoot !== undefined) {\n throw new PrototypeCatalogPathError(\"prototypeRoot\", \"does not exist\");\n } else {\n prototypeRealPath = realPathForMissingTarget(prototypeRoot);\n }\n\n assertRealContainment(repositoryRealPath, prototypeRealPath);\n return { repositoryRoot, prototypeRoot };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototype-paths.js","sourceRoot":"","sources":["../src/prototype-paths.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prototype-paths.js","sourceRoot":"","sources":["../src/prototype-paths.ts"],"names":[],"mappings":"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","sourcesContent":["import { lstatSync, realpathSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport type { ThemeRegistry } from \"@ebay-dt/bonfire-core\";\n\nconst CONVENTIONAL_PROTOTYPE_ROOT = join(\"src\", \"app\", \"(prototypes)\");\n\nexport type PrototypeCatalogOptions = {\n repositoryRoot: string;\n prototypeRoot?: string;\n themeRegistry?: ThemeRegistry;\n};\n\nexport type ResolvedPrototypeCatalogPaths = {\n repositoryRoot: string;\n prototypeRoot: string;\n};\n\nexport class PrototypeCatalogPathError extends Error {\n readonly path: string;\n\n constructor(path: string, message: string) {\n super(`Invalid prototype catalog path at ${path}: ${message}`);\n this.name = \"PrototypeCatalogPathError\";\n this.path = path;\n }\n}\n\nfunction assertAbsoluteRepositoryRoot(repositoryRoot: unknown) {\n if (typeof repositoryRoot !== \"string\" || !isAbsolute(repositoryRoot)) {\n throw new PrototypeCatalogPathError(\n \"repositoryRoot\",\n \"must be an absolute path\",\n );\n }\n\n return resolve(repositoryRoot);\n}\n\nfunction resolvePrototypeRoot(repositoryRoot: string, prototypeRoot: unknown) {\n if (prototypeRoot === undefined) {\n return join(repositoryRoot, CONVENTIONAL_PROTOTYPE_ROOT);\n }\n if (typeof prototypeRoot !== \"string\" || prototypeRoot.length === 0) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"must be a nonempty path\",\n );\n }\n if (prototypeRoot.split(/[\\\\/]/u).some((segment) => segment === \"..\")) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"must not contain traversal segments\",\n );\n }\n\n return isAbsolute(prototypeRoot)\n ? resolve(prototypeRoot)\n : resolve(repositoryRoot, prototypeRoot);\n}\n\nfunction assertContained(repositoryRoot: string, prototypeRoot: string) {\n const relativePath = relative(repositoryRoot, prototypeRoot);\n if (\n relativePath.length === 0 ||\n relativePath === \"..\" ||\n relativePath.startsWith(`..${sep}`) ||\n isAbsolute(relativePath)\n ) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"must be contained within repositoryRoot\",\n );\n }\n}\n\nfunction assertDirectory(path: string, label: string) {\n let stats;\n try {\n stats = lstatSync(path);\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n throw new PrototypeCatalogPathError(label, \"does not exist\");\n }\n throw new PrototypeCatalogPathError(label, \"could not be inspected\");\n }\n\n if (stats.isSymbolicLink()) {\n throw new PrototypeCatalogPathError(label, \"must not be a symbolic link\");\n }\n if (!stats.isDirectory()) {\n throw new PrototypeCatalogPathError(label, \"must be a directory\");\n }\n\n return realpathSync(path);\n}\n\nfunction pathExists(path: string) {\n try {\n lstatSync(path);\n return true;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return false;\n }\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"could not be inspected\",\n );\n }\n}\n\nfunction realPathForMissingTarget(path: string) {\n let current = path;\n const missingSegments: string[] = [];\n\n while (!pathExists(current)) {\n const parent = dirname(current);\n if (parent === current) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"could not resolve its existing parent\",\n );\n }\n missingSegments.unshift(current.slice(parent.length + 1));\n current = parent;\n }\n\n let realPath = realpathSync(current);\n for (const segment of missingSegments) realPath = join(realPath, segment);\n return realPath;\n}\n\nfunction assertRealContainment(\n repositoryRealPath: string,\n prototypeRealPath: string,\n) {\n const relativePath = relative(repositoryRealPath, prototypeRealPath);\n if (\n relativePath.length === 0 ||\n relativePath === \"..\" ||\n relativePath.startsWith(`..${sep}`) ||\n isAbsolute(relativePath)\n ) {\n throw new PrototypeCatalogPathError(\n \"prototypeRoot\",\n \"escapes repositoryRoot through a symbolic link\",\n );\n }\n}\n\nexport function resolvePrototypeCatalogPaths(\n options: PrototypeCatalogOptions,\n): ResolvedPrototypeCatalogPaths {\n const repositoryRoot = assertAbsoluteRepositoryRoot(options?.repositoryRoot);\n const prototypeRoot = resolvePrototypeRoot(\n repositoryRoot,\n options?.prototypeRoot,\n );\n assertContained(repositoryRoot, prototypeRoot);\n\n const repositoryRealPath = assertDirectory(repositoryRoot, \"repositoryRoot\");\n let prototypeRealPath: string;\n\n if (pathExists(prototypeRoot)) {\n prototypeRealPath = assertDirectory(prototypeRoot, \"prototypeRoot\");\n } else if (options?.prototypeRoot !== undefined) {\n throw new PrototypeCatalogPathError(\"prototypeRoot\", \"does not exist\");\n } else {\n prototypeRealPath = realPathForMissingTarget(prototypeRoot);\n }\n\n assertRealContainment(repositoryRealPath, prototypeRealPath);\n return { repositoryRoot, prototypeRoot };\n}\n"]}
|
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAC;AAYzC,KAAK,aAAa,GAAG,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,IAAI,CACT,6BAA6B,EAC7B,gBAAgB,GAAG,eAAe,CACnC,CAAC;IACF,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GACpC,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC;AAE/C,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAE1C,YAAY,IAAI,EAAE,0BAA0B,EAI3C;CACF;AA8ID,wBAAsB,iBAAiB,CAAC,EACtC,KAAK,EACL,GAAG,EACH,KAAK,EACL,WAAW,EACX,UAAU,EACV,KAAK,EACL,aAAa,EACb,KAAwB,EACxB,SAA0B,GAC3B,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4F5D;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAC;AAYzC,KAAK,aAAa,GAAG,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,IAAI,CACT,6BAA6B,EAC7B,gBAAgB,GAAG,eAAe,CACnC,CAAC;IACF,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GACpC,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC;AAE/C,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAE1C,YAAY,IAAI,EAAE,0BAA0B,EAI3C;CACF;AA8ID,wBAAsB,iBAAiB,CAAC,EACtC,KAAK,EACL,GAAG,EACH,KAAK,EACL,WAAW,EACX,UAAU,EACV,KAAK,EACL,aAAa,EACb,KAAwB,EACxB,SAA0B,GAC3B,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4F5D;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC","sourcesContent":["import { constants } from \"node:fs\";\nimport {\n lstat,\n mkdir,\n open,\n rm,\n rmdir,\n writeFile as writeFileAsync,\n} from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport {\n definePrototypeRef,\n parsePrototypeMetadata,\n type PrototypeRef,\n type PrototypeTheme,\n type ThemeRegistry,\n} from \"@ebay-dt/bonfire-core\";\nimport type { ResolvedPrototypeCatalogPaths } from \"./prototype-paths.js\";\nimport {\n captureOwnedDestination,\n type OwnedDestinationResult,\n} from \"./internal/owned-destination.js\";\nimport {\n buildAppCss,\n buildAppTsx,\n buildCssModulesDeclaration,\n buildMetadataJson,\n buildPageTsx,\n buildTsConfig,\n GENERATED_FILES,\n} from \"./internal/prototype-templates.js\";\nimport { isFileNotFound } from \"./internal/utils.js\";\n\ntype SafeWriteFile = (\n path: string,\n content: string,\n options: { encoding: \"utf8\"; flag: \"wx\" },\n) => Promise<void>;\n\nexport type PrototypeScaffoldOptions = {\n paths: Pick<\n ResolvedPrototypeCatalogPaths,\n \"repositoryRoot\" | \"prototypeRoot\"\n >;\n ref: PrototypeRef;\n title: string;\n description: string | null;\n authorName: string | null;\n theme?: PrototypeTheme;\n themeRegistry?: ThemeRegistry;\n clock?: () => Date;\n writeFile?: SafeWriteFile;\n};\n\nexport type PrototypeScaffoldErrorKind =\n \"collision\" | \"filesystem\" | \"invalid-input\";\n\nexport class PrototypeScaffoldError extends Error {\n readonly kind: PrototypeScaffoldErrorKind;\n\n constructor(kind: PrototypeScaffoldErrorKind) {\n super(`Prototype scaffold failed: ${kind}`);\n this.name = \"PrototypeScaffoldError\";\n this.kind = kind;\n }\n}\n\nfunction destinationFor(prototypeRoot: string, ref: PrototypeRef) {\n const normalizedRef = definePrototypeRef(ref);\n return join(prototypeRoot, normalizedRef.login, normalizedRef.slug);\n}\n\nasync function assertDirectory(path: string) {\n try {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isDirectory()) {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n } catch (error) {\n if (error instanceof PrototypeScaffoldError) throw error;\n if (isFileNotFound(error)) return;\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nasync function ensureDirectory(path: string) {\n try {\n await mkdir(path, { recursive: true });\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n await assertDirectory(path);\n}\n\ntype OwnedPath = {\n path: string;\n device: number;\n inode: number;\n};\n\nasync function ownedPath(path: string): Promise<OwnedPath> {\n const stats = await lstat(path);\n return { path, device: stats.dev, inode: stats.ino };\n}\n\nasync function reserveDestination(\n path: string,\n paths: Pick<\n ResolvedPrototypeCatalogPaths,\n \"repositoryRoot\" | \"prototypeRoot\"\n >,\n) {\n try {\n await mkdir(path);\n } catch (error) {\n if (\n error !== null &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"EEXIST\"\n ) {\n throw new PrototypeScaffoldError(\"collision\");\n }\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n\n try {\n return await captureOwnedDestination({\n path,\n repositoryRoot: paths.repositoryRoot,\n prototypeRoot: paths.prototypeRoot,\n });\n } catch {\n // The newly created path is retained because ownership was not proven.\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nasync function createDirectory(path: string) {\n try {\n await mkdir(path);\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n await assertDirectory(path);\n return ownedPath(path);\n}\n\nasync function writeNewFile(\n path: string,\n content: string,\n writeFile: SafeWriteFile,\n) {\n try {\n await writeFile(path, content, { encoding: \"utf8\", flag: \"wx\" });\n return await ownedPath(path);\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nasync function readWrittenMetadata(path: string) {\n const file = await open(\n path,\n constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0),\n );\n try {\n return await file.readFile(\"utf8\");\n } finally {\n await file.close();\n }\n}\n\nasync function removeIncompleteDestination(\n files: readonly OwnedPath[],\n directories: readonly OwnedPath[],\n) {\n try {\n for (const owned of [...files].reverse()) {\n const current = await lstat(owned.path).catch(() => null);\n if (\n current !== null &&\n !current.isSymbolicLink() &&\n current.dev === owned.device &&\n current.ino === owned.inode\n ) {\n await rm(owned.path, { force: true });\n }\n }\n\n for (const owned of [...directories].reverse()) {\n const current = await lstat(owned.path).catch(() => null);\n if (\n current !== null &&\n current.isDirectory() &&\n !current.isSymbolicLink() &&\n current.dev === owned.device &&\n current.ino === owned.inode\n ) {\n await rmdir(owned.path);\n }\n }\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nexport async function scaffoldPrototype({\n paths,\n ref,\n title,\n description,\n authorName,\n theme,\n themeRegistry,\n clock = () => new Date(),\n writeFile = writeFileAsync,\n}: PrototypeScaffoldOptions): Promise<OwnedDestinationResult> {\n const normalizedRef = definePrototypeRef(ref);\n const destination = destinationFor(paths.prototypeRoot, normalizedRef);\n const timestamp = clock().toISOString();\n const metadata = buildMetadataJson(\n title,\n description,\n normalizedRef.login,\n authorName,\n timestamp,\n theme,\n );\n\n parsePrototypeMetadata(JSON.parse(metadata), { themeRegistry });\n await ensureDirectory(paths.prototypeRoot);\n await ensureDirectory(dirname(destination));\n const ownedFiles: OwnedPath[] = [];\n const receipt = await reserveDestination(destination, paths);\n const ownedDirectories: OwnedPath[] = [receipt];\n\n try {\n ownedDirectories.push(\n await createDirectory(join(destination, \"components\")),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"page.tsx\"),\n buildPageTsx(),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"app.tsx\"),\n buildAppTsx(title, description, ref),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"app.module.css\"),\n buildAppCss(),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"components/.gitkeep\"),\n \"\",\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"metadata.json\"),\n metadata,\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"tsconfig.json\"),\n buildTsConfig(paths.repositoryRoot, destination),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"css-modules.d.ts\"),\n buildCssModulesDeclaration(),\n writeFile,\n ),\n );\n\n const writtenMetadata = await readWrittenMetadata(\n join(destination, \"metadata.json\"),\n );\n parsePrototypeMetadata(JSON.parse(writtenMetadata), { themeRegistry });\n return {\n destination,\n receipt,\n expectedFiles: Object.freeze([...GENERATED_FILES]),\n };\n } catch (error) {\n try {\n await removeIncompleteDestination(ownedFiles, ownedDirectories);\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n if (error instanceof PrototypeScaffoldError) throw error;\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nexport { GENERATED_FILES } from \"./internal/prototype-templates.js\";\n"]}
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants } from \"node:fs\";\nimport {\n lstat,\n mkdir,\n open,\n rm,\n rmdir,\n writeFile as writeFileAsync,\n} from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport {\n definePrototypeRef,\n parsePrototypeMetadata,\n type PrototypeRef,\n type PrototypeTheme,\n type ThemeRegistry,\n} from \"@ebay-dt/bonfire-core\";\nimport type { ResolvedPrototypeCatalogPaths } from \"./prototype-paths.js\";\nimport {\n captureOwnedDestination,\n type OwnedDestinationResult,\n} from \"./internal/owned-destination.js\";\nimport {\n buildAppCss,\n buildAppTsx,\n buildCssModulesDeclaration,\n buildMetadataJson,\n buildPageTsx,\n buildTsConfig,\n GENERATED_FILES,\n} from \"./internal/prototype-templates.js\";\nimport { isFileNotFound } from \"./internal/utils.js\";\n\ntype SafeWriteFile = (\n path: string,\n content: string,\n options: { encoding: \"utf8\"; flag: \"wx\" },\n) => Promise<void>;\n\nexport type PrototypeScaffoldOptions = {\n paths: Pick<\n ResolvedPrototypeCatalogPaths,\n \"repositoryRoot\" | \"prototypeRoot\"\n >;\n ref: PrototypeRef;\n title: string;\n description: string | null;\n authorName: string | null;\n theme?: PrototypeTheme;\n themeRegistry?: ThemeRegistry;\n clock?: () => Date;\n writeFile?: SafeWriteFile;\n};\n\nexport type PrototypeScaffoldErrorKind =\n \"collision\" | \"filesystem\" | \"invalid-input\";\n\nexport class PrototypeScaffoldError extends Error {\n readonly kind: PrototypeScaffoldErrorKind;\n\n constructor(kind: PrototypeScaffoldErrorKind) {\n super(`Prototype scaffold failed: ${kind}`);\n this.name = \"PrototypeScaffoldError\";\n this.kind = kind;\n }\n}\n\nfunction destinationFor(prototypeRoot: string, ref: PrototypeRef) {\n const normalizedRef = definePrototypeRef(ref);\n return join(prototypeRoot, normalizedRef.login, normalizedRef.slug);\n}\n\nasync function assertDirectory(path: string) {\n try {\n const stats = await lstat(path);\n if (stats.isSymbolicLink() || !stats.isDirectory()) {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n } catch (error) {\n if (error instanceof PrototypeScaffoldError) throw error;\n if (isFileNotFound(error)) return;\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nasync function ensureDirectory(path: string) {\n try {\n await mkdir(path, { recursive: true });\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n await assertDirectory(path);\n}\n\ntype OwnedPath = {\n path: string;\n device: number;\n inode: number;\n};\n\nasync function ownedPath(path: string): Promise<OwnedPath> {\n const stats = await lstat(path);\n return { path, device: stats.dev, inode: stats.ino };\n}\n\nasync function reserveDestination(\n path: string,\n paths: Pick<\n ResolvedPrototypeCatalogPaths,\n \"repositoryRoot\" | \"prototypeRoot\"\n >,\n) {\n try {\n await mkdir(path);\n } catch (error) {\n if (\n error !== null &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"EEXIST\"\n ) {\n throw new PrototypeScaffoldError(\"collision\");\n }\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n\n try {\n return await captureOwnedDestination({\n path,\n repositoryRoot: paths.repositoryRoot,\n prototypeRoot: paths.prototypeRoot,\n });\n } catch {\n // The newly created path is retained because ownership was not proven.\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nasync function createDirectory(path: string) {\n try {\n await mkdir(path);\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n await assertDirectory(path);\n return ownedPath(path);\n}\n\nasync function writeNewFile(\n path: string,\n content: string,\n writeFile: SafeWriteFile,\n) {\n try {\n await writeFile(path, content, { encoding: \"utf8\", flag: \"wx\" });\n return await ownedPath(path);\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nasync function readWrittenMetadata(path: string) {\n const file = await open(\n path,\n constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0),\n );\n try {\n return await file.readFile(\"utf8\");\n } finally {\n await file.close();\n }\n}\n\nasync function removeIncompleteDestination(\n files: readonly OwnedPath[],\n directories: readonly OwnedPath[],\n) {\n try {\n for (const owned of [...files].reverse()) {\n const current = await lstat(owned.path).catch(() => null);\n if (\n current !== null &&\n !current.isSymbolicLink() &&\n current.dev === owned.device &&\n current.ino === owned.inode\n ) {\n await rm(owned.path, { force: true });\n }\n }\n\n for (const owned of [...directories].reverse()) {\n const current = await lstat(owned.path).catch(() => null);\n if (\n current !== null &&\n current.isDirectory() &&\n !current.isSymbolicLink() &&\n current.dev === owned.device &&\n current.ino === owned.inode\n ) {\n await rmdir(owned.path);\n }\n }\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nexport async function scaffoldPrototype({\n paths,\n ref,\n title,\n description,\n authorName,\n theme,\n themeRegistry,\n clock = () => new Date(),\n writeFile = writeFileAsync,\n}: PrototypeScaffoldOptions): Promise<OwnedDestinationResult> {\n const normalizedRef = definePrototypeRef(ref);\n const destination = destinationFor(paths.prototypeRoot, normalizedRef);\n const timestamp = clock().toISOString();\n const metadata = buildMetadataJson(\n title,\n description,\n normalizedRef.login,\n authorName,\n timestamp,\n theme,\n );\n\n parsePrototypeMetadata(JSON.parse(metadata), { themeRegistry });\n await ensureDirectory(paths.prototypeRoot);\n await ensureDirectory(dirname(destination));\n const ownedFiles: OwnedPath[] = [];\n const receipt = await reserveDestination(destination, paths);\n const ownedDirectories: OwnedPath[] = [receipt];\n\n try {\n ownedDirectories.push(\n await createDirectory(join(destination, \"components\")),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"page.tsx\"),\n buildPageTsx(),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"app.tsx\"),\n buildAppTsx(title, description, ref),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"app.module.css\"),\n buildAppCss(),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"components/.gitkeep\"),\n \"\",\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"metadata.json\"),\n metadata,\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"tsconfig.json\"),\n buildTsConfig(paths.repositoryRoot, destination),\n writeFile,\n ),\n );\n ownedFiles.push(\n await writeNewFile(\n join(destination, \"css-modules.d.ts\"),\n buildCssModulesDeclaration(),\n writeFile,\n ),\n );\n\n const writtenMetadata = await readWrittenMetadata(\n join(destination, \"metadata.json\"),\n );\n parsePrototypeMetadata(JSON.parse(writtenMetadata), { themeRegistry });\n return {\n destination,\n receipt,\n expectedFiles: Object.freeze([...GENERATED_FILES]),\n };\n } catch (error) {\n try {\n await removeIncompleteDestination(ownedFiles, ownedDirectories);\n } catch {\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n if (error instanceof PrototypeScaffoldError) throw error;\n throw new PrototypeScaffoldError(\"filesystem\");\n }\n}\n\nexport { GENERATED_FILES } from \"./internal/prototype-templates.js\";\n"]}
|
package/dist/watcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,SAAS,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAa9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,KAAK,SAAS,CAAC;CAClE,CAAC;AAwLF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAElB"}
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,SAAS,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAa9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,KAAK,SAAS,CAAC;CAClE,CAAC;AAwLF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAElB","sourcesContent":["import {\n watch as chokidarWatch,\n type ChokidarOptions,\n type FSWatcher,\n} from \"chokidar\";\nimport {\n definePrototypeRef,\n type DirtyObservationValue,\n type PrototypeRef,\n} from \"@ebay-dt/bonfire-core\";\nimport { join, relative, sep } from \"node:path\";\nimport { createGitRepository, type GitRepository } from \"./git-repository.js\";\nimport { applyDirtyObservation } from \"./lifecycle/dirty-state.js\";\n\nconst DEFAULT_DEBOUNCE_MS = 250;\nconst WATCH_EVENTS = [\n \"add\",\n \"addDir\",\n \"change\",\n \"unlink\",\n \"unlinkDir\",\n] as const;\nconst WATCH_PATHS = [\".git/HEAD\", \".git/index\", \".git/refs/heads\"] as const;\n\nexport type PrototypeWatchRequest = {\n ref: PrototypeRef;\n initial?: DirtyObservationValue;\n onChange(value: DirtyObservationValue): void;\n};\n\nexport type PrototypeWatcher = {\n subscribe(request: PrototypeWatchRequest): () => void;\n};\n\nexport type PrototypeWatcherOptions = {\n repositoryRoot: string;\n prototypeRoot: string;\n gitRepository?: GitRepository;\n debounceMs?: number;\n watch?: (paths: string[], options: ChokidarOptions) => FSWatcher;\n};\n\ntype Subscriber = PrototypeWatchRequest & { key: string };\n\ntype Watchable = Pick<FSWatcher, \"on\" | \"close\">;\n\nfunction keyFor(ref: PrototypeRef) {\n return `${ref.login}/${ref.slug}`;\n}\n\nfunction pathFor(\n repositoryRoot: string,\n prototypeRoot: string,\n ref: PrototypeRef,\n) {\n return relative(repositoryRoot, join(prototypeRoot, ref.login, ref.slug))\n .split(sep)\n .join(\"/\");\n}\n\nclass LocalPrototypeWatcher implements PrototypeWatcher {\n readonly #repositoryRoot: string;\n readonly #prototypeRoot: string;\n readonly #gitRepository: GitRepository;\n readonly #debounceMs: number;\n readonly #watch: NonNullable<PrototypeWatcherOptions[\"watch\"]>;\n readonly #subscribers = new Set<Subscriber>();\n readonly #stateCache = new Map<string, DirtyObservationValue>();\n #watcher: Watchable | null = null;\n #debounceTimer: NodeJS.Timeout | null = null;\n #ticking = false;\n #pendingRetick = false;\n\n constructor(options: PrototypeWatcherOptions) {\n this.#repositoryRoot = options.repositoryRoot;\n this.#prototypeRoot = options.prototypeRoot;\n this.#gitRepository =\n options.gitRepository ??\n createGitRepository({ repositoryRoot: options.repositoryRoot });\n this.#debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;\n this.#watch = options.watch ?? chokidarWatch;\n }\n\n subscribe(request: PrototypeWatchRequest) {\n const ref = Object.freeze(definePrototypeRef(request.ref));\n const subscriber: Subscriber = {\n ...request,\n ref,\n key: keyFor(ref),\n };\n this.#subscribers.add(subscriber);\n this.#ensureStarted();\n\n if (!this.#stateCache.has(subscriber.key)) {\n if (subscriber.initial !== undefined) {\n this.#stateCache.set(subscriber.key, subscriber.initial);\n } else {\n void this.#seed(subscriber);\n }\n }\n\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n this.#subscribers.delete(subscriber);\n if (this.#subscribers.size === 0) this.#stop();\n };\n }\n\n #ensureStarted() {\n if (this.#watcher) return;\n\n const paths = [\n this.#prototypeRoot,\n ...WATCH_PATHS.map((path) => join(this.#repositoryRoot, path)),\n ];\n const options: ChokidarOptions = {\n persistent: true,\n ignoreInitial: true,\n followSymlinks: false,\n ignored: [/\\.next/, /node_modules/],\n };\n const watcher = this.#watch(paths, options);\n for (const event of WATCH_EVENTS) {\n watcher.on(event, () => this.#scheduleTick());\n }\n watcher.on(\"error\", () => {\n console.error(\"[bonfire watcher] filesystem observation failed\");\n });\n this.#watcher = watcher;\n }\n\n #scheduleTick() {\n if (this.#debounceTimer) clearTimeout(this.#debounceTimer);\n this.#debounceTimer = setTimeout(() => {\n this.#debounceTimer = null;\n void this.#tick();\n }, this.#debounceMs);\n }\n\n async #read(ref: PrototypeRef) {\n const path = pathFor(this.#repositoryRoot, this.#prototypeRoot, ref);\n const status = await this.#gitRepository.status([path]);\n return {\n status: status.files.length > 0 ? \"dirty\" : \"clean\",\n } satisfies DirtyObservationValue;\n }\n\n async #seed(subscriber: Subscriber) {\n try {\n const value = await this.#read(subscriber.ref);\n if (\n this.#subscribers.has(subscriber) &&\n !this.#stateCache.has(subscriber.key)\n ) {\n this.#stateCache.set(subscriber.key, value);\n }\n } catch {\n console.error(\"[bonfire watcher] Git observation failed\");\n }\n }\n\n async #tick() {\n if (this.#ticking) {\n this.#pendingRetick = true;\n return;\n }\n this.#ticking = true;\n\n try {\n const seen = new Set<string>();\n for (const subscriber of this.#subscribers) {\n if (seen.has(subscriber.key)) continue;\n seen.add(subscriber.key);\n\n let current: DirtyObservationValue;\n try {\n current = await this.#read(subscriber.ref);\n } catch {\n console.error(\"[bonfire watcher] Git observation failed\");\n continue;\n }\n\n const previous = this.#stateCache.get(subscriber.key)?.status;\n const transition = applyDirtyObservation(\n previous,\n current.status === \"dirty\",\n );\n if (!transition.changed) continue;\n this.#stateCache.set(subscriber.key, transition.value);\n\n for (const candidate of this.#subscribers) {\n if (candidate.key !== subscriber.key) continue;\n try {\n candidate.onChange(transition.value);\n } catch {\n console.error(\"[bonfire watcher] subscriber callback failed\");\n }\n }\n }\n } finally {\n this.#ticking = false;\n if (this.#pendingRetick) {\n this.#pendingRetick = false;\n void this.#tick();\n }\n }\n }\n\n #stop() {\n if (this.#debounceTimer) clearTimeout(this.#debounceTimer);\n this.#debounceTimer = null;\n this.#stateCache.clear();\n const watcher = this.#watcher;\n this.#watcher = null;\n if (watcher) {\n void watcher.close().catch(() => {\n console.error(\"[bonfire watcher] filesystem cleanup failed\");\n });\n }\n }\n}\n\nexport function createPrototypeWatcher(\n options: PrototypeWatcherOptions,\n): PrototypeWatcher {\n return new LocalPrototypeWatcher(options);\n}\n"]}
|