ws-spec-kit 0.1.0-beta.0
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/LICENSE +201 -0
- package/README.md +79 -0
- package/dist/adapters/cli/output.d.ts +15 -0
- package/dist/adapters/cli/output.js +21 -0
- package/dist/adapters/cli/output.js.map +1 -0
- package/dist/adapters/cli/workflow.d.ts +25 -0
- package/dist/adapters/cli/workflow.js +131 -0
- package/dist/adapters/cli/workflow.js.map +1 -0
- package/dist/adapters/connectors/git-native.d.ts +23 -0
- package/dist/adapters/connectors/git-native.js +521 -0
- package/dist/adapters/connectors/git-native.js.map +1 -0
- package/dist/adapters/connectors/github-cli.d.ts +23 -0
- package/dist/adapters/connectors/github-cli.js +213 -0
- package/dist/adapters/connectors/github-cli.js.map +1 -0
- package/dist/adapters/connectors/gitlab-cli.d.ts +23 -0
- package/dist/adapters/connectors/gitlab-cli.js +199 -0
- package/dist/adapters/connectors/gitlab-cli.js.map +1 -0
- package/dist/adapters/connectors/lark-cli.d.ts +24 -0
- package/dist/adapters/connectors/lark-cli.js +296 -0
- package/dist/adapters/connectors/lark-cli.js.map +1 -0
- package/dist/adapters/process/redaction.d.ts +2 -0
- package/dist/adapters/process/redaction.js +51 -0
- package/dist/adapters/process/redaction.js.map +1 -0
- package/dist/adapters/process/spawn-json.d.ts +37 -0
- package/dist/adapters/process/spawn-json.js +312 -0
- package/dist/adapters/process/spawn-json.js.map +1 -0
- package/dist/adapters/skills/claude.d.ts +1 -0
- package/dist/adapters/skills/claude.js +3 -0
- package/dist/adapters/skills/claude.js.map +1 -0
- package/dist/adapters/skills/codex.d.ts +1 -0
- package/dist/adapters/skills/codex.js +3 -0
- package/dist/adapters/skills/codex.js.map +1 -0
- package/dist/adapters/skills/cursor.d.ts +1 -0
- package/dist/adapters/skills/cursor.js +3 -0
- package/dist/adapters/skills/cursor.js.map +1 -0
- package/dist/adapters/skills/generic.d.ts +1 -0
- package/dist/adapters/skills/generic.js +2 -0
- package/dist/adapters/skills/generic.js.map +1 -0
- package/dist/adapters/skills/install.d.ts +28 -0
- package/dist/adapters/skills/install.js +571 -0
- package/dist/adapters/skills/install.js.map +1 -0
- package/dist/application/acquire.d.ts +60 -0
- package/dist/application/acquire.js +964 -0
- package/dist/application/acquire.js.map +1 -0
- package/dist/application/application.d.ts +21 -0
- package/dist/application/application.js +31 -0
- package/dist/application/application.js.map +1 -0
- package/dist/application/artifact-reader.d.ts +1 -0
- package/dist/application/artifact-reader.js +150 -0
- package/dist/application/artifact-reader.js.map +1 -0
- package/dist/application/artifact-writer.d.ts +1 -0
- package/dist/application/artifact-writer.js +268 -0
- package/dist/application/artifact-writer.js.map +1 -0
- package/dist/application/artifact.d.ts +28 -0
- package/dist/application/artifact.js +523 -0
- package/dist/application/artifact.js.map +1 -0
- package/dist/application/decide.d.ts +12 -0
- package/dist/application/decide.js +168 -0
- package/dist/application/decide.js.map +1 -0
- package/dist/application/doctor-connectors.d.ts +34 -0
- package/dist/application/doctor-connectors.js +99 -0
- package/dist/application/doctor-connectors.js.map +1 -0
- package/dist/application/external-action.d.ts +164 -0
- package/dist/application/external-action.js +670 -0
- package/dist/application/external-action.js.map +1 -0
- package/dist/application/initial-stages.d.ts +3 -0
- package/dist/application/initial-stages.js +7 -0
- package/dist/application/initial-stages.js.map +1 -0
- package/dist/application/inspect.d.ts +2 -0
- package/dist/application/inspect.js +31 -0
- package/dist/application/inspect.js.map +1 -0
- package/dist/application/profile.d.ts +32 -0
- package/dist/application/profile.js +70 -0
- package/dist/application/profile.js.map +1 -0
- package/dist/application/snapshot.d.ts +75 -0
- package/dist/application/snapshot.js +338 -0
- package/dist/application/snapshot.js.map +1 -0
- package/dist/application/start.d.ts +43 -0
- package/dist/application/start.js +360 -0
- package/dist/application/start.js.map +1 -0
- package/dist/application/state.d.ts +17 -0
- package/dist/application/state.js +94 -0
- package/dist/application/state.js.map +1 -0
- package/dist/application/submit.d.ts +18 -0
- package/dist/application/submit.js +1090 -0
- package/dist/application/submit.js.map +1 -0
- package/dist/cli/commands/core.d.ts +2 -0
- package/dist/cli/commands/core.js +205 -0
- package/dist/cli/commands/core.js.map +1 -0
- package/dist/cli/commands/public-contract.d.ts +12 -0
- package/dist/cli/commands/public-contract.js +47 -0
- package/dist/cli/commands/public-contract.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +23 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/domain/artifacts.d.ts +52 -0
- package/dist/domain/artifacts.js +241 -0
- package/dist/domain/artifacts.js.map +1 -0
- package/dist/domain/digests.d.ts +11 -0
- package/dist/domain/digests.js +106 -0
- package/dist/domain/digests.js.map +1 -0
- package/dist/domain/external-receipt.d.ts +48 -0
- package/dist/domain/external-receipt.js +138 -0
- package/dist/domain/external-receipt.js.map +1 -0
- package/dist/domain/ids.d.ts +7 -0
- package/dist/domain/ids.js +5 -0
- package/dist/domain/ids.js.map +1 -0
- package/dist/domain/repository-path.d.ts +3 -0
- package/dist/domain/repository-path.js +87 -0
- package/dist/domain/repository-path.js.map +1 -0
- package/dist/domain/states.d.ts +38 -0
- package/dist/domain/states.js +69 -0
- package/dist/domain/states.js.map +1 -0
- package/dist/domain/work-package-identity.d.ts +2 -0
- package/dist/domain/work-package-identity.js +10 -0
- package/dist/domain/work-package-identity.js.map +1 -0
- package/dist/domain/workflow.d.ts +58 -0
- package/dist/domain/workflow.js +2 -0
- package/dist/domain/workflow.js.map +1 -0
- package/dist/engine/actor-roles.d.ts +15 -0
- package/dist/engine/actor-roles.js +53 -0
- package/dist/engine/actor-roles.js.map +1 -0
- package/dist/engine/approvals.d.ts +44 -0
- package/dist/engine/approvals.js +239 -0
- package/dist/engine/approvals.js.map +1 -0
- package/dist/engine/archive.d.ts +24 -0
- package/dist/engine/archive.js +442 -0
- package/dist/engine/archive.js.map +1 -0
- package/dist/engine/compiler.d.ts +25 -0
- package/dist/engine/compiler.js +828 -0
- package/dist/engine/compiler.js.map +1 -0
- package/dist/engine/control/condition.d.ts +10 -0
- package/dist/engine/control/condition.js +49 -0
- package/dist/engine/control/condition.js.map +1 -0
- package/dist/engine/control/loop.d.ts +23 -0
- package/dist/engine/control/loop.js +96 -0
- package/dist/engine/control/loop.js.map +1 -0
- package/dist/engine/control/retry.d.ts +15 -0
- package/dist/engine/control/retry.js +54 -0
- package/dist/engine/control/retry.js.map +1 -0
- package/dist/engine/docs-integrity.d.ts +13 -0
- package/dist/engine/docs-integrity.js +34 -0
- package/dist/engine/docs-integrity.js.map +1 -0
- package/dist/engine/expressions/ast.d.ts +18 -0
- package/dist/engine/expressions/ast.js +9 -0
- package/dist/engine/expressions/ast.js.map +1 -0
- package/dist/engine/expressions/evaluate.d.ts +7 -0
- package/dist/engine/expressions/evaluate.js +47 -0
- package/dist/engine/expressions/evaluate.js.map +1 -0
- package/dist/engine/expressions/parser.d.ts +2 -0
- package/dist/engine/expressions/parser.js +173 -0
- package/dist/engine/expressions/parser.js.map +1 -0
- package/dist/engine/external-effects/authorization.d.ts +146 -0
- package/dist/engine/external-effects/authorization.js +222 -0
- package/dist/engine/external-effects/authorization.js.map +1 -0
- package/dist/engine/external-effects/idempotency.d.ts +14 -0
- package/dist/engine/external-effects/idempotency.js +26 -0
- package/dist/engine/external-effects/idempotency.js.map +1 -0
- package/dist/engine/external-effects/reconciliation.d.ts +11 -0
- package/dist/engine/external-effects/reconciliation.js +18 -0
- package/dist/engine/external-effects/reconciliation.js.map +1 -0
- package/dist/engine/results.d.ts +14 -0
- package/dist/engine/results.js +88 -0
- package/dist/engine/results.js.map +1 -0
- package/dist/engine/scheduler.d.ts +60 -0
- package/dist/engine/scheduler.js +225 -0
- package/dist/engine/scheduler.js.map +1 -0
- package/dist/engine/tdd/green-gate.d.ts +6 -0
- package/dist/engine/tdd/green-gate.js +72 -0
- package/dist/engine/tdd/green-gate.js.map +1 -0
- package/dist/engine/tdd/red-gate.d.ts +30 -0
- package/dist/engine/tdd/red-gate.js +531 -0
- package/dist/engine/tdd/red-gate.js.map +1 -0
- package/dist/engine/tdd/types.d.ts +89 -0
- package/dist/engine/tdd/types.js +38 -0
- package/dist/engine/tdd/types.js.map +1 -0
- package/dist/engine/verification.d.ts +56 -0
- package/dist/engine/verification.js +196 -0
- package/dist/engine/verification.js.map +1 -0
- package/dist/policy/profile.d.ts +24 -0
- package/dist/policy/profile.js +23 -0
- package/dist/policy/profile.js.map +1 -0
- package/dist/policy/risk.d.ts +33 -0
- package/dist/policy/risk.js +138 -0
- package/dist/policy/risk.js.map +1 -0
- package/dist/protocol/application.d.ts +196 -0
- package/dist/protocol/application.js +2 -0
- package/dist/protocol/application.js.map +1 -0
- package/dist/protocol/public-contract.d.ts +81 -0
- package/dist/protocol/public-contract.js +231 -0
- package/dist/protocol/public-contract.js.map +1 -0
- package/dist/protocol/work-package.d.ts +55 -0
- package/dist/protocol/work-package.js +2 -0
- package/dist/protocol/work-package.js.map +1 -0
- package/dist/registry/connectors/external-executor.d.ts +4 -0
- package/dist/registry/connectors/external-executor.js +249 -0
- package/dist/registry/connectors/external-executor.js.map +1 -0
- package/dist/registry/connectors/feishu-document.d.ts +21 -0
- package/dist/registry/connectors/feishu-document.js +197 -0
- package/dist/registry/connectors/feishu-document.js.map +1 -0
- package/dist/registry/connectors/git-commit.d.ts +32 -0
- package/dist/registry/connectors/git-commit.js +122 -0
- package/dist/registry/connectors/git-commit.js.map +1 -0
- package/dist/registry/connectors/issue.d.ts +68 -0
- package/dist/registry/connectors/issue.js +301 -0
- package/dist/registry/connectors/issue.js.map +1 -0
- package/dist/registry/connectors/knowledge-publish.d.ts +30 -0
- package/dist/registry/connectors/knowledge-publish.js +157 -0
- package/dist/registry/connectors/knowledge-publish.js.map +1 -0
- package/dist/registry/connectors/local-requirement.d.ts +19 -0
- package/dist/registry/connectors/local-requirement.js +177 -0
- package/dist/registry/connectors/local-requirement.js.map +1 -0
- package/dist/registry/connectors/manifest.d.ts +6 -0
- package/dist/registry/connectors/manifest.js +164 -0
- package/dist/registry/connectors/manifest.js.map +1 -0
- package/dist/registry/connectors/registry.d.ts +11 -0
- package/dist/registry/connectors/registry.js +34 -0
- package/dist/registry/connectors/registry.js.map +1 -0
- package/dist/registry/connectors/requirement-source.d.ts +46 -0
- package/dist/registry/connectors/requirement-source.js +513 -0
- package/dist/registry/connectors/requirement-source.js.map +1 -0
- package/dist/registry/connectors/runtime.d.ts +38 -0
- package/dist/registry/connectors/runtime.js +127 -0
- package/dist/registry/connectors/runtime.js.map +1 -0
- package/dist/registry/connectors/secret-detector.d.ts +19 -0
- package/dist/registry/connectors/secret-detector.js +85 -0
- package/dist/registry/connectors/secret-detector.js.map +1 -0
- package/dist/registry/connectors/semver.d.ts +8 -0
- package/dist/registry/connectors/semver.js +57 -0
- package/dist/registry/connectors/semver.js.map +1 -0
- package/dist/registry/connectors/types.d.ts +45 -0
- package/dist/registry/connectors/types.js +2 -0
- package/dist/registry/connectors/types.js.map +1 -0
- package/dist/registry/executors/registry.d.ts +15 -0
- package/dist/registry/executors/registry.js +68 -0
- package/dist/registry/executors/registry.js.map +1 -0
- package/dist/registry/executors/types.d.ts +19 -0
- package/dist/registry/executors/types.js +2 -0
- package/dist/registry/executors/types.js.map +1 -0
- package/dist/registry/skills/lock.d.ts +3 -0
- package/dist/registry/skills/lock.js +278 -0
- package/dist/registry/skills/lock.js.map +1 -0
- package/dist/registry/skills/resolver.d.ts +16 -0
- package/dist/registry/skills/resolver.js +353 -0
- package/dist/registry/skills/resolver.js.map +1 -0
- package/dist/registry/skills/types.d.ts +75 -0
- package/dist/registry/skills/types.js +9 -0
- package/dist/registry/skills/types.js.map +1 -0
- package/dist/resources/catalog.d.ts +20 -0
- package/dist/resources/catalog.js +111 -0
- package/dist/resources/catalog.js.map +1 -0
- package/dist/schemas/definitions.d.ts +5 -0
- package/dist/schemas/definitions.js +958 -0
- package/dist/schemas/definitions.js.map +1 -0
- package/dist/schemas/generate.d.ts +1 -0
- package/dist/schemas/generate.js +26 -0
- package/dist/schemas/generate.js.map +1 -0
- package/dist/schemas/index.d.ts +11 -0
- package/dist/schemas/index.js +54 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/storage/control-plane.d.ts +136 -0
- package/dist/storage/control-plane.js +688 -0
- package/dist/storage/control-plane.js.map +1 -0
- package/dist/storage/events.d.ts +36 -0
- package/dist/storage/events.js +185 -0
- package/dist/storage/events.js.map +1 -0
- package/dist/storage/external-action-payload.d.ts +33 -0
- package/dist/storage/external-action-payload.js +190 -0
- package/dist/storage/external-action-payload.js.map +1 -0
- package/dist/storage/files.d.ts +13 -0
- package/dist/storage/files.js +45 -0
- package/dist/storage/files.js.map +1 -0
- package/dist/storage/git.d.ts +4 -0
- package/dist/storage/git.js +21 -0
- package/dist/storage/git.js.map +1 -0
- package/dist/storage/project-config.d.ts +11 -0
- package/dist/storage/project-config.js +60 -0
- package/dist/storage/project-config.js.map +1 -0
- package/dist/storage/repository.d.ts +14 -0
- package/dist/storage/repository.js +151 -0
- package/dist/storage/repository.js.map +1 -0
- package/dist/storage/work-items.d.ts +77 -0
- package/dist/storage/work-items.js +373 -0
- package/dist/storage/work-items.js.map +1 -0
- package/dist/storage/workflow-trust.d.ts +38 -0
- package/dist/storage/workflow-trust.js +310 -0
- package/dist/storage/workflow-trust.js.map +1 -0
- package/dist/workflow-package/loader.d.ts +12 -0
- package/dist/workflow-package/loader.js +249 -0
- package/dist/workflow-package/loader.js.map +1 -0
- package/dist/workflow-package/lock.d.ts +6 -0
- package/dist/workflow-package/lock.js +12 -0
- package/dist/workflow-package/lock.js.map +1 -0
- package/dist/workflow-package/path-boundary.d.ts +5 -0
- package/dist/workflow-package/path-boundary.js +38 -0
- package/dist/workflow-package/path-boundary.js.map +1 -0
- package/dist/workflow-package/trust.d.ts +27 -0
- package/dist/workflow-package/trust.js +61 -0
- package/dist/workflow-package/trust.js.map +1 -0
- package/dist/workflow-package/types.d.ts +176 -0
- package/dist/workflow-package/types.js +9 -0
- package/dist/workflow-package/types.js.map +1 -0
- package/dist/workflow-package/workflow-v1.d.ts +3 -0
- package/dist/workflow-package/workflow-v1.js +274 -0
- package/dist/workflow-package/workflow-v1.js.map +1 -0
- package/package.json +40 -0
- package/resources/catalog.yaml +37 -0
- package/resources/connectors/github-cli.yaml +24 -0
- package/resources/connectors/gitlab-cli.yaml +24 -0
- package/resources/connectors/lark-cli.yaml +28 -0
- package/resources/skills/bug-fixing/SKILL.md +16 -0
- package/resources/skills/code-review/SKILL.md +16 -0
- package/resources/skills/documentation-editing/SKILL.md +16 -0
- package/resources/skills/documentation-exploration/SKILL.md +16 -0
- package/resources/skills/documentation-review/SKILL.md +16 -0
- package/resources/skills/requirement-exploration/SKILL.md +16 -0
- package/resources/skills/solution-design/SKILL.md +16 -0
- package/resources/skills/task-planning/SKILL.md +16 -0
- package/resources/skills/tdd-implementation/SKILL.md +16 -0
- package/resources/workflows/documentation-delivery/manifest.yaml +8 -0
- package/resources/workflows/documentation-delivery/profiles/governed.yaml +23 -0
- package/resources/workflows/documentation-delivery/profiles/quick.yaml +23 -0
- package/resources/workflows/documentation-delivery/profiles/standard.yaml +21 -0
- package/resources/workflows/documentation-delivery/workflow.yaml +109 -0
- package/resources/workflows/feature-delivery/manifest.yaml +8 -0
- package/resources/workflows/feature-delivery/profiles/governed.yaml +27 -0
- package/resources/workflows/feature-delivery/profiles/quick.yaml +25 -0
- package/resources/workflows/feature-delivery/profiles/standard.yaml +26 -0
- package/resources/workflows/feature-delivery/workflow.yaml +150 -0
- package/schemas/builtin-agent-action-v1.schema.json +509 -0
- package/schemas/builtin-application-acquire-input-v1.schema.json +25 -0
- package/schemas/builtin-application-artifact-create-input-v1.schema.json +49 -0
- package/schemas/builtin-application-decision-input-v1.schema.json +284 -0
- package/schemas/builtin-application-inspect-input-v1.schema.json +20 -0
- package/schemas/builtin-application-project-config-snapshot-v1.schema.json +289 -0
- package/schemas/builtin-application-project-config-v1.schema.json +293 -0
- package/schemas/builtin-application-start-input-v1.schema.json +92 -0
- package/schemas/builtin-application-submit-input-v1.schema.json +145 -0
- package/schemas/builtin-artifact-v1.schema.json +48 -0
- package/schemas/builtin-evidence-v1.schema.json +65 -0
- package/schemas/builtin-external-action-grant-v1.schema.json +298 -0
- package/schemas/builtin-external-action-request-v1.schema.json +288 -0
- package/schemas/builtin-external-binding-v1.schema.json +59 -0
- package/schemas/builtin-external-receipt-v1.schema.json +109 -0
- package/schemas/builtin-external-write-receipt-v1.schema.json +253 -0
- package/schemas/builtin-source-artifact-v1.schema.json +293 -0
- package/schemas/builtin-submit-result-v1.schema.json +111 -0
- package/schemas/builtin-tdd-cycle-evidence-v1.schema.json +119 -0
- package/schemas/builtin-tdd-node-test-report-v1.schema.json +103 -0
- package/schemas/builtin-tdd-trusted-evidence-v1.schema.json +184 -0
- package/schemas/builtin-work-item-v1.schema.json +201 -0
- package/schemas/builtin-work-package-v1.schema.json +254 -0
- package/schemas/builtin-workflow-selection-v1.schema.json +40 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../../src/storage/control-plane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface DomainEvent {
|
|
2
|
+
eventId: string;
|
|
3
|
+
eventType: "work-item.transitioned" | "stage.transitioned" | "claim.created" | "claim.renewed" | "claim.released" | "context.created" | "attempt.acquired" | "attempt.reacquired" | "artifact.authored" | "step.skipped" | "attempt.submitted" | "approval.requested" | "approval.decided" | "approval.expired" | "external-action.prepared" | "external-action.approved" | "external-action.rejected" | "external-action.executing" | "external-action.dispatched" | "external-action.verified" | "external-action.reconciliation-required" | "external-action.reconciled" | "evidence.recorded" | "source.captured" | "profile.selected" | "profile.upgraded" | "projection.invalidated" | "work-item.closed" | "lock.recovered";
|
|
4
|
+
occurredAt: string;
|
|
5
|
+
actor: string;
|
|
6
|
+
repositoryId: string;
|
|
7
|
+
workItemId: string;
|
|
8
|
+
stageId: string | null;
|
|
9
|
+
attemptId: string | null;
|
|
10
|
+
from: string;
|
|
11
|
+
to: string;
|
|
12
|
+
idempotencyKey: string;
|
|
13
|
+
workflowDigest: string;
|
|
14
|
+
configDigest: string;
|
|
15
|
+
baselineTreeDigest: string;
|
|
16
|
+
inputWorkspaceTreeDigest: string;
|
|
17
|
+
outputWorkspaceTreeDigest: string | null;
|
|
18
|
+
inputDigest: string;
|
|
19
|
+
result: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface StoredEvent extends DomainEvent {
|
|
22
|
+
sequence: number;
|
|
23
|
+
previousHash: string | null;
|
|
24
|
+
eventHash: string;
|
|
25
|
+
}
|
|
26
|
+
export declare class EventStoreError extends Error {
|
|
27
|
+
readonly code: string;
|
|
28
|
+
constructor(code: string, message: string);
|
|
29
|
+
}
|
|
30
|
+
export declare function readEvents(controlPlane: string): Promise<StoredEvent[]>;
|
|
31
|
+
export declare function repairIncompleteEventTail(controlPlane: string): Promise<boolean>;
|
|
32
|
+
declare function appendEventUnlocked(controlPlane: string, event: DomainEvent): Promise<StoredEvent>;
|
|
33
|
+
export declare function recoverStaleControlPlaneLock(controlPlane: string): Promise<boolean>;
|
|
34
|
+
export declare function withControlPlaneLock<T>(controlPlane: string, operation: () => Promise<T>): Promise<T>;
|
|
35
|
+
export declare function appendEvent(controlPlane: string, event: DomainEvent): Promise<StoredEvent>;
|
|
36
|
+
export { appendEventUnlocked };
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { open, readFile, unlink } from "node:fs/promises";
|
|
2
|
+
import { hostname } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import * as canonicalizeModule from "canonicalize";
|
|
5
|
+
import { sha256 } from "../domain/digests.js";
|
|
6
|
+
const canonicalize = canonicalizeModule.default;
|
|
7
|
+
export class EventStoreError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
constructor(code, message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.name = "EventStoreError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function eventHash(event) {
|
|
16
|
+
const content = canonicalize(event);
|
|
17
|
+
if (content === undefined)
|
|
18
|
+
throw new EventStoreError("WSSPEC_EVENT_INVALID", "事件无法规范化。");
|
|
19
|
+
return sha256(content);
|
|
20
|
+
}
|
|
21
|
+
export async function readEvents(controlPlane) {
|
|
22
|
+
let text;
|
|
23
|
+
try {
|
|
24
|
+
text = await readFile(path.join(controlPlane, "events.jsonl"), "utf8");
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (error.code === "ENOENT")
|
|
28
|
+
return [];
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
const events = [];
|
|
32
|
+
let previousHash = null;
|
|
33
|
+
for (const [index, line] of text.split("\n").entries()) {
|
|
34
|
+
if (line === "")
|
|
35
|
+
continue;
|
|
36
|
+
let event;
|
|
37
|
+
try {
|
|
38
|
+
event = JSON.parse(line);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
throw new EventStoreError("WSSPEC_EVENT_CHAIN_INVALID", `事件日志第 ${index + 1} 行不是合法 JSON。`);
|
|
42
|
+
}
|
|
43
|
+
const { eventHash: actualHash, ...unsigned } = event;
|
|
44
|
+
if (event.sequence !== events.length + 1 || event.previousHash !== previousHash || eventHash(unsigned) !== actualHash) {
|
|
45
|
+
throw new EventStoreError("WSSPEC_EVENT_CHAIN_INVALID", `事件日志在序号 ${event.sequence} 处断链。`);
|
|
46
|
+
}
|
|
47
|
+
events.push(event);
|
|
48
|
+
previousHash = event.eventHash;
|
|
49
|
+
}
|
|
50
|
+
return events;
|
|
51
|
+
}
|
|
52
|
+
export async function repairIncompleteEventTail(controlPlane) {
|
|
53
|
+
const eventPath = path.join(controlPlane, "events.jsonl");
|
|
54
|
+
let content;
|
|
55
|
+
try {
|
|
56
|
+
content = await readFile(eventPath, "utf8");
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error.code === "ENOENT")
|
|
60
|
+
return false;
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
if (content === "" || content.endsWith("\n"))
|
|
64
|
+
return false;
|
|
65
|
+
const lastNewline = content.lastIndexOf("\n");
|
|
66
|
+
const tail = content.slice(lastNewline + 1);
|
|
67
|
+
try {
|
|
68
|
+
JSON.parse(tail);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
catch { /* An interrupted append is the only repairable corruption. */ }
|
|
72
|
+
const handle = await open(eventPath, "r+");
|
|
73
|
+
try {
|
|
74
|
+
await handle.truncate(lastNewline + 1);
|
|
75
|
+
await handle.sync();
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
await handle.close();
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
async function appendEventUnlocked(controlPlane, event) {
|
|
83
|
+
const current = await readEvents(controlPlane);
|
|
84
|
+
const unsigned = {
|
|
85
|
+
...event,
|
|
86
|
+
sequence: current.length + 1,
|
|
87
|
+
previousHash: current.at(-1)?.eventHash ?? null,
|
|
88
|
+
};
|
|
89
|
+
const stored = { ...unsigned, eventHash: eventHash(unsigned) };
|
|
90
|
+
const handle = await open(path.join(controlPlane, "events.jsonl"), "a", 0o600);
|
|
91
|
+
try {
|
|
92
|
+
const content = canonicalize(stored);
|
|
93
|
+
if (content === undefined)
|
|
94
|
+
throw new EventStoreError("WSSPEC_EVENT_INVALID", "事件无法规范化。");
|
|
95
|
+
await handle.writeFile(`${content}\n`, "utf8");
|
|
96
|
+
await handle.sync();
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
await handle.close();
|
|
100
|
+
}
|
|
101
|
+
return stored;
|
|
102
|
+
}
|
|
103
|
+
const delay = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
104
|
+
async function readLock(lockPath) {
|
|
105
|
+
try {
|
|
106
|
+
const value = JSON.parse(await readFile(lockPath, "utf8"));
|
|
107
|
+
if (value.version !== 1 || typeof value.ownerToken !== "string" || typeof value.pid !== "number" || typeof value.hostname !== "string" || typeof value.createdAt !== "string")
|
|
108
|
+
return undefined;
|
|
109
|
+
return value;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function processIsAlive(pid) {
|
|
116
|
+
try {
|
|
117
|
+
process.kill(pid, 0);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return error.code !== "ESRCH";
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export async function recoverStaleControlPlaneLock(controlPlane) {
|
|
125
|
+
const lockPath = path.join(controlPlane, "runtime.lock");
|
|
126
|
+
const owner = await readLock(lockPath);
|
|
127
|
+
if (owner === undefined) {
|
|
128
|
+
try {
|
|
129
|
+
const handle = await open(lockPath, "r");
|
|
130
|
+
await handle.close();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (error.code === "ENOENT")
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "控制面锁缺少可验证的所有者信息,不能自动清理。");
|
|
137
|
+
}
|
|
138
|
+
if (owner.hostname !== hostname() || processIsAlive(owner.pid))
|
|
139
|
+
throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "控制面锁的所有者仍可能存活,不能抢占。");
|
|
140
|
+
const confirmed = await readLock(lockPath);
|
|
141
|
+
if (confirmed?.ownerToken !== owner.ownerToken)
|
|
142
|
+
throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "控制面锁在恢复期间已经变化。");
|
|
143
|
+
await unlink(lockPath);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
export async function withControlPlaneLock(controlPlane, operation) {
|
|
147
|
+
const lockPath = path.join(controlPlane, "runtime.lock");
|
|
148
|
+
const deadline = Date.now() + 5_000;
|
|
149
|
+
const owner = { version: 1, ownerToken: crypto.randomUUID(), pid: process.pid, hostname: hostname(), createdAt: new Date().toISOString() };
|
|
150
|
+
let handle;
|
|
151
|
+
while (true) {
|
|
152
|
+
try {
|
|
153
|
+
handle = await open(lockPath, "wx", 0o600);
|
|
154
|
+
await handle.writeFile(`${JSON.stringify(owner)}\n`, "utf8");
|
|
155
|
+
await handle.sync();
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (error.code === "EEXIST") {
|
|
160
|
+
const existing = await readLock(lockPath);
|
|
161
|
+
if (existing?.hostname === hostname() && !processIsAlive(existing.pid)) {
|
|
162
|
+
throw new EventStoreError("WSSPEC_CONTROL_PLANE_STALE_LOCK", "检测到异常退出遗留的控制面锁,请在确认所有者已退出后执行受控恢复。");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (error.code !== "EEXIST" || Date.now() >= deadline) {
|
|
166
|
+
throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "共享控制面当前被其他进程占用。");
|
|
167
|
+
}
|
|
168
|
+
await delay(10);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
return await operation();
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
await handle.close();
|
|
176
|
+
const current = await readLock(lockPath);
|
|
177
|
+
if (current?.ownerToken === owner.ownerToken)
|
|
178
|
+
await unlink(lockPath).catch(() => undefined);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
export async function appendEvent(controlPlane, event) {
|
|
182
|
+
return withControlPlaneLock(controlPlane, () => appendEventUnlocked(controlPlane, event));
|
|
183
|
+
}
|
|
184
|
+
export { appendEventUnlocked };
|
|
185
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/storage/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ExternalActionName, ExternalActionRequest, ExternalActionTarget } from "../engine/external-effects/authorization.js";
|
|
2
|
+
export interface PreparedExternalActionPayload {
|
|
3
|
+
digest: `sha256:${string}`;
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class ExternalActionPayloadError extends Error {
|
|
7
|
+
readonly code: `WSSPEC_${string}`;
|
|
8
|
+
constructor(code: `WSSPEC_${string}`, message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare function prepareExternalActionPayload(input: {
|
|
11
|
+
workItemId: string;
|
|
12
|
+
stepId: string;
|
|
13
|
+
attemptId: string;
|
|
14
|
+
provider: string;
|
|
15
|
+
action: ExternalActionName;
|
|
16
|
+
target: ExternalActionTarget;
|
|
17
|
+
payload: unknown;
|
|
18
|
+
}): PreparedExternalActionPayload;
|
|
19
|
+
export declare function persistExternalActionPayload(input: {
|
|
20
|
+
controlPlane: string;
|
|
21
|
+
artifact: PreparedExternalActionPayload;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
digest: `sha256:${string}`;
|
|
24
|
+
created: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function removeExternalActionPayload(input: {
|
|
27
|
+
controlPlane: string;
|
|
28
|
+
digest: `sha256:${string}`;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
export declare function loadExternalActionPayload(input: {
|
|
31
|
+
controlPlane: string;
|
|
32
|
+
request: ExternalActionRequest;
|
|
33
|
+
}): Promise<unknown>;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { lstat, mkdir, open, readFile, realpath, unlink } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { canonicalDigest } from "../engine/external-effects/idempotency.js";
|
|
4
|
+
import { inspectDecodedCredentialSurface } from "../registry/connectors/secret-detector.js";
|
|
5
|
+
const maximumPayloadArtifactBytes = 1024 * 1024;
|
|
6
|
+
export class ExternalActionPayloadError extends Error {
|
|
7
|
+
code;
|
|
8
|
+
constructor(code, message) {
|
|
9
|
+
super(`${code}: ${message}`);
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.name = "ExternalActionPayloadError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function invalid(code = "WSSPEC_EXTERNAL_PAYLOAD_ARTIFACT_INVALID") {
|
|
15
|
+
throw new ExternalActionPayloadError(code, "外部动作 payload 工件无效或与授权身份不匹配。");
|
|
16
|
+
}
|
|
17
|
+
function artifactFilename(directory, digest) {
|
|
18
|
+
if (!/^sha256:[a-f0-9]{64}$/u.test(digest))
|
|
19
|
+
return invalid();
|
|
20
|
+
return path.join(directory, `${digest.slice("sha256:".length)}.json`);
|
|
21
|
+
}
|
|
22
|
+
async function secureArtifactDirectory(controlPlane) {
|
|
23
|
+
const canonicalControlPlane = await realpath(controlPlane);
|
|
24
|
+
const secureChildDirectory = async (parent, name) => {
|
|
25
|
+
const directory = path.join(parent, name);
|
|
26
|
+
try {
|
|
27
|
+
await mkdir(directory, { mode: 0o700 });
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error.code !== "EEXIST")
|
|
31
|
+
return invalid();
|
|
32
|
+
}
|
|
33
|
+
const info = await lstat(directory);
|
|
34
|
+
if (!info.isDirectory() || info.isSymbolicLink())
|
|
35
|
+
return invalid();
|
|
36
|
+
const canonical = await realpath(directory);
|
|
37
|
+
if (canonical !== directory || path.dirname(canonical) !== parent)
|
|
38
|
+
return invalid();
|
|
39
|
+
return canonical;
|
|
40
|
+
};
|
|
41
|
+
const externalActions = await secureChildDirectory(canonicalControlPlane, "external-actions");
|
|
42
|
+
const payloads = await secureChildDirectory(externalActions, "payloads");
|
|
43
|
+
if (!payloads.startsWith(`${canonicalControlPlane}${path.sep}`)) {
|
|
44
|
+
return invalid();
|
|
45
|
+
}
|
|
46
|
+
return payloads;
|
|
47
|
+
}
|
|
48
|
+
function envelope(input) {
|
|
49
|
+
const serialized = JSON.stringify(input.payload);
|
|
50
|
+
if (serialized === undefined || Buffer.byteLength(serialized, "utf8") > maximumPayloadArtifactBytes
|
|
51
|
+
|| !inspectDecodedCredentialSurface(serialized, {
|
|
52
|
+
maximumBytes: maximumPayloadArtifactBytes,
|
|
53
|
+
maximumDecodeRounds: 4,
|
|
54
|
+
}).ok) {
|
|
55
|
+
return invalid("WSSPEC_EXTERNAL_PAYLOAD_INVALID");
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
version: 1,
|
|
59
|
+
kind: "external-action-payload",
|
|
60
|
+
workItemId: input.workItemId,
|
|
61
|
+
stepId: input.stepId,
|
|
62
|
+
attemptId: input.attemptId,
|
|
63
|
+
provider: input.provider,
|
|
64
|
+
action: input.action,
|
|
65
|
+
target: { ...input.target },
|
|
66
|
+
payloadDigest: canonicalDigest(input.payload),
|
|
67
|
+
payload: input.payload,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function parseEnvelope(value) {
|
|
71
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
72
|
+
return invalid();
|
|
73
|
+
const source = value;
|
|
74
|
+
const keys = ["action", "attemptId", "kind", "payload", "payloadDigest", "provider", "stepId", "target", "version", "workItemId"];
|
|
75
|
+
if (Object.keys(source).sort().join("\0") !== keys.sort().join("\0")
|
|
76
|
+
|| source.version !== 1 || source.kind !== "external-action-payload"
|
|
77
|
+
|| typeof source.workItemId !== "string" || typeof source.stepId !== "string"
|
|
78
|
+
|| typeof source.attemptId !== "string" || typeof source.provider !== "string"
|
|
79
|
+
|| !["git.commit", "issue.update", "knowledge.publish", "issue.close"].includes(source.action)
|
|
80
|
+
|| source.target === null || typeof source.target !== "object" || Array.isArray(source.target)
|
|
81
|
+
|| typeof source.payloadDigest !== "string")
|
|
82
|
+
return invalid();
|
|
83
|
+
const target = source.target;
|
|
84
|
+
if (Object.keys(target).sort().join("\0") !== "kind\0stableId"
|
|
85
|
+
|| !["repository", "issue", "knowledge"].includes(target.kind) || typeof target.stableId !== "string")
|
|
86
|
+
return invalid();
|
|
87
|
+
const result = source;
|
|
88
|
+
if (canonicalDigest(result.payload) !== result.payloadDigest)
|
|
89
|
+
return invalid();
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
async function readArtifact(filename, expectedDigest) {
|
|
93
|
+
let before;
|
|
94
|
+
try {
|
|
95
|
+
before = await lstat(filename, { bigint: true });
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return invalid();
|
|
99
|
+
}
|
|
100
|
+
if (!before.isFile() || before.isSymbolicLink() || before.nlink !== 1n || (before.mode & 63n) !== 0n || before.size < 1n
|
|
101
|
+
|| before.size > BigInt(maximumPayloadArtifactBytes))
|
|
102
|
+
return invalid();
|
|
103
|
+
const canonical = await realpath(filename);
|
|
104
|
+
if (canonical !== filename)
|
|
105
|
+
return invalid();
|
|
106
|
+
const content = await readFile(filename, "utf8");
|
|
107
|
+
const after = await lstat(filename, { bigint: true });
|
|
108
|
+
if (before.dev !== after.dev || before.ino !== after.ino || before.size !== after.size || before.mtimeNs !== after.mtimeNs)
|
|
109
|
+
return invalid();
|
|
110
|
+
let parsed;
|
|
111
|
+
try {
|
|
112
|
+
parsed = JSON.parse(content);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return invalid();
|
|
116
|
+
}
|
|
117
|
+
const result = parseEnvelope(parsed);
|
|
118
|
+
if (canonicalDigest(result) !== expectedDigest)
|
|
119
|
+
return invalid();
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
export function prepareExternalActionPayload(input) {
|
|
123
|
+
const value = envelope(input);
|
|
124
|
+
const digest = canonicalDigest(value);
|
|
125
|
+
const content = `${JSON.stringify(value)}\n`;
|
|
126
|
+
if (Buffer.byteLength(content, "utf8") > maximumPayloadArtifactBytes) {
|
|
127
|
+
return invalid("WSSPEC_EXTERNAL_PAYLOAD_INVALID");
|
|
128
|
+
}
|
|
129
|
+
return { digest, content };
|
|
130
|
+
}
|
|
131
|
+
export async function persistExternalActionPayload(input) {
|
|
132
|
+
let parsed;
|
|
133
|
+
try {
|
|
134
|
+
parsed = JSON.parse(input.artifact.content);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return invalid();
|
|
138
|
+
}
|
|
139
|
+
const value = parseEnvelope(parsed);
|
|
140
|
+
if (canonicalDigest(value) !== input.artifact.digest)
|
|
141
|
+
return invalid();
|
|
142
|
+
const directory = await secureArtifactDirectory(input.controlPlane);
|
|
143
|
+
const filename = artifactFilename(directory, input.artifact.digest);
|
|
144
|
+
let handle;
|
|
145
|
+
let created = false;
|
|
146
|
+
try {
|
|
147
|
+
handle = await open(filename, "wx", 0o600);
|
|
148
|
+
created = true;
|
|
149
|
+
await handle.writeFile(input.artifact.content, "utf8");
|
|
150
|
+
await handle.sync();
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
if (error.code !== "EEXIST") {
|
|
154
|
+
await handle?.close().catch(() => undefined);
|
|
155
|
+
handle = undefined;
|
|
156
|
+
if (created)
|
|
157
|
+
await unlink(filename).catch(() => undefined);
|
|
158
|
+
if (error instanceof ExternalActionPayloadError)
|
|
159
|
+
throw error;
|
|
160
|
+
return invalid();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
await handle?.close();
|
|
165
|
+
}
|
|
166
|
+
await readArtifact(filename, input.artifact.digest);
|
|
167
|
+
return { digest: input.artifact.digest, created };
|
|
168
|
+
}
|
|
169
|
+
export async function removeExternalActionPayload(input) {
|
|
170
|
+
const directory = await secureArtifactDirectory(input.controlPlane);
|
|
171
|
+
const filename = artifactFilename(directory, input.digest);
|
|
172
|
+
try {
|
|
173
|
+
await unlink(filename);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
if (error.code !== "ENOENT")
|
|
177
|
+
throw error;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export async function loadExternalActionPayload(input) {
|
|
181
|
+
const directory = await secureArtifactDirectory(input.controlPlane);
|
|
182
|
+
const value = await readArtifact(artifactFilename(directory, input.request.payloadArtifactDigest), input.request.payloadArtifactDigest);
|
|
183
|
+
if (value.workItemId !== input.request.workItemId || value.stepId !== input.request.stepId
|
|
184
|
+
|| value.attemptId !== input.request.attemptId || value.provider !== input.request.provider
|
|
185
|
+
|| value.action !== input.request.action || value.target.kind !== input.request.target.kind
|
|
186
|
+
|| value.target.stableId !== input.request.target.stableId || value.payloadDigest !== input.request.payloadDigest)
|
|
187
|
+
return invalid();
|
|
188
|
+
return value.payload;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=external-action-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-action-payload.js","sourceRoot":"","sources":["../../src/storage/external-action-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAE5F,MAAM,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAAC;AAoBhD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC9B;IAArB,YAAqB,IAAwB,EAAE,OAAe;QAC5D,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QADV,SAAI,GAAJ,IAAI,CAAoB;QAE3C,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,SAAS,OAAO,CAAC,OAA2B,0CAA0C;IACpF,MAAM,IAAI,0BAA0B,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,MAA0B;IACrE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,YAAoB;IACzD,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAAmB,EAAE;QACnF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,EAAE,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO,OAAO,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM;YAAE,OAAO,OAAO,EAAE,CAAC;QACpF,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,oBAAoB,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QAChE,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,KAQjB;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,2BAA2B;WAC9F,CAAC,+BAA+B,CAAC,UAAU,EAAE;YAC9C,YAAY,EAAE,2BAA2B;YACzC,mBAAmB,EAAE,CAAC;SACvB,CAAC,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,yBAAyB;QAC/B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;QAC3B,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7C,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IAC1F,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAClI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;WAC/D,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,yBAAyB;WACjE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;WAC1E,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;WAC3E,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAgB,CAAC;WACrG,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;WAC3F,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAiC,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB;WACzD,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAc,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IACpI,MAAM,MAAM,GAAG,MAAkD,CAAC;IAClE,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,aAAa;QAAE,OAAO,OAAO,EAAE,CAAC;IAC/E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,cAAkC;IAC9E,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IACzD,MAAM,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;IAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAM,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE;WACtH,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IACzE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAAE,OAAO,OAAO,EAAE,CAAC;IAC7I,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACrC,MAAM,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;IAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,cAAc;QAAE,OAAO,OAAO,EAAE,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAQ5C;IACC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,2BAA2B,EAAE,CAAC;QACrE,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,KAGlD;IACC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACpD,MAAM,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;IAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,OAAO,EAAE,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC;IACX,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,GAAG,SAAS,CAAC;YACnB,IAAI,OAAO;gBAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,KAAK,YAAY,0BAA0B;gBAAE,MAAM,KAAK,CAAC;YAC7D,OAAO,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,KAGjD;IACC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAG/C;IACC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxI,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM;WACrF,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ;WACxF,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;WACxF,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,EAAE,CAAC;IACtI,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface AtomicFileHandle {
|
|
2
|
+
writeFile(content: string, encoding: "utf8"): Promise<void>;
|
|
3
|
+
sync(): Promise<void>;
|
|
4
|
+
close(): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export interface AtomicFileDependencies {
|
|
7
|
+
mkdir(directory: string): Promise<unknown>;
|
|
8
|
+
open(filename: string, flags: string, mode?: number): Promise<AtomicFileHandle>;
|
|
9
|
+
rename(source: string, target: string): Promise<void>;
|
|
10
|
+
unlink(filename: string): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare function createWriteFileAtomic(overrides?: Partial<AtomicFileDependencies>): (target: string, content: string) => Promise<void>;
|
|
13
|
+
export declare const writeFileAtomic: (target: string, content: string) => Promise<void>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { mkdir, open, rename, unlink } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const defaultDependencies = {
|
|
4
|
+
mkdir: async (directory) => mkdir(directory, { recursive: true }),
|
|
5
|
+
open: async (filename, flags, mode) => open(filename, flags, mode),
|
|
6
|
+
rename,
|
|
7
|
+
unlink,
|
|
8
|
+
};
|
|
9
|
+
export function createWriteFileAtomic(overrides = {}) {
|
|
10
|
+
const dependencies = { ...defaultDependencies, ...overrides };
|
|
11
|
+
return async (target, content) => {
|
|
12
|
+
const directory = path.dirname(target);
|
|
13
|
+
const temporary = path.join(directory, `.${path.basename(target)}.${process.pid}.${crypto.randomUUID()}.tmp`);
|
|
14
|
+
let handle;
|
|
15
|
+
let temporaryCreated = false;
|
|
16
|
+
let renamed = false;
|
|
17
|
+
try {
|
|
18
|
+
await dependencies.mkdir(directory);
|
|
19
|
+
handle = await dependencies.open(temporary, "wx", 0o600);
|
|
20
|
+
temporaryCreated = true;
|
|
21
|
+
await handle.writeFile(content, "utf8");
|
|
22
|
+
await handle.sync();
|
|
23
|
+
await handle.close();
|
|
24
|
+
handle = undefined;
|
|
25
|
+
await dependencies.rename(temporary, target);
|
|
26
|
+
renamed = true;
|
|
27
|
+
const directoryHandle = await dependencies.open(directory, "r");
|
|
28
|
+
try {
|
|
29
|
+
await directoryHandle.sync();
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
await directoryHandle.close();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (handle !== undefined)
|
|
37
|
+
await handle.close().catch(() => undefined);
|
|
38
|
+
if (temporaryCreated && !renamed)
|
|
39
|
+
await dependencies.unlink(temporary).catch(() => undefined);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export const writeFileAtomic = createWriteFileAtomic();
|
|
45
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/storage/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAmB,MAAM,kBAAkB,CAAC;AAChF,OAAO,IAAI,MAAM,WAAW,CAAC;AAe7B,MAAM,mBAAmB,GAA2B;IAClD,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAmC,EAAE,IAAI,CAAwB;IACvH,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,YAA6C,EAAE;IACnF,MAAM,YAAY,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9G,IAAI,MAAoC,CAAC;QACzC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACzD,gBAAgB,GAAG,IAAI,CAAC;YACxB,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;oBAAS,CAAC;gBACT,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACtE,IAAI,gBAAgB,IAAI,CAAC,OAAO;gBAAE,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function runGit(cwd: string, args: string[]): Promise<string>;
|
|
2
|
+
export declare function runGitRaw(cwd: string, args: string[]): Promise<string>;
|
|
3
|
+
export declare function repositoryRoot(cwd: string): Promise<string>;
|
|
4
|
+
export declare function gitCommonDir(cwd: string): Promise<string>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
export async function runGit(cwd, args) {
|
|
5
|
+
return (await runGitRaw(cwd, args)).trim();
|
|
6
|
+
}
|
|
7
|
+
export async function runGitRaw(cwd, args) {
|
|
8
|
+
const { stdout } = await execFileAsync("git", args, {
|
|
9
|
+
cwd,
|
|
10
|
+
encoding: "utf8",
|
|
11
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
12
|
+
});
|
|
13
|
+
return stdout;
|
|
14
|
+
}
|
|
15
|
+
export async function repositoryRoot(cwd) {
|
|
16
|
+
return runGit(cwd, ["rev-parse", "--show-toplevel"]);
|
|
17
|
+
}
|
|
18
|
+
export async function gitCommonDir(cwd) {
|
|
19
|
+
return runGit(cwd, ["rev-parse", "--path-format=absolute", "--git-common-dir"]);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=git.js.map
|