@mannyc1/ts-release 0.0.1 → 0.0.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.
Files changed (117) hide show
  1. package/ARCHITECTURE.md +53 -0
  2. package/README.md +177 -34
  3. package/SPEC.md +8 -1
  4. package/dist/cli/command.d.ts +1 -1
  5. package/dist/cli/command.d.ts.map +1 -1
  6. package/dist/cli/command.js +101 -53
  7. package/dist/cli/command.js.map +1 -1
  8. package/dist/cli/main.js +3 -9
  9. package/dist/cli/main.js.map +1 -1
  10. package/dist/domain/operation.d.ts.map +1 -1
  11. package/dist/domain/operation.js +31 -1
  12. package/dist/domain/operation.js.map +1 -1
  13. package/dist/domain/remote-state.d.ts +90 -0
  14. package/dist/domain/remote-state.d.ts.map +1 -0
  15. package/dist/domain/remote-state.js +85 -0
  16. package/dist/domain/remote-state.js.map +1 -0
  17. package/dist/domain/status.d.ts +43 -0
  18. package/dist/domain/status.d.ts.map +1 -0
  19. package/dist/domain/status.js +50 -0
  20. package/dist/domain/status.js.map +1 -0
  21. package/dist/domain/target.d.ts +32 -2
  22. package/dist/domain/target.d.ts.map +1 -1
  23. package/dist/domain/target.js +35 -2
  24. package/dist/domain/target.js.map +1 -1
  25. package/dist/host/host.d.ts +7 -23
  26. package/dist/host/host.d.ts.map +1 -1
  27. package/dist/host/host.js +3 -22
  28. package/dist/host/host.js.map +1 -1
  29. package/dist/host/http-live.d.ts +1 -2
  30. package/dist/host/http-live.d.ts.map +1 -1
  31. package/dist/host/http-live.js +15 -9
  32. package/dist/host/http-live.js.map +1 -1
  33. package/dist/host/platform.d.ts +10 -0
  34. package/dist/host/platform.d.ts.map +1 -0
  35. package/dist/host/platform.js +121 -0
  36. package/dist/host/platform.js.map +1 -0
  37. package/dist/host/test.d.ts +6 -3
  38. package/dist/host/test.d.ts.map +1 -1
  39. package/dist/host/test.js +111 -25
  40. package/dist/host/test.js.map +1 -1
  41. package/dist/planner/artifact-inventory.d.ts +9 -0
  42. package/dist/planner/artifact-inventory.d.ts.map +1 -0
  43. package/dist/planner/artifact-inventory.js +66 -0
  44. package/dist/planner/artifact-inventory.js.map +1 -0
  45. package/dist/planner/create-release-plan.d.ts +1 -1
  46. package/dist/planner/create-release-plan.d.ts.map +1 -1
  47. package/dist/planner/errors.d.ts +37 -1
  48. package/dist/planner/errors.d.ts.map +1 -1
  49. package/dist/planner/errors.js +30 -0
  50. package/dist/planner/errors.js.map +1 -1
  51. package/dist/planner/evidence-recorder.d.ts +13 -8
  52. package/dist/planner/evidence-recorder.d.ts.map +1 -1
  53. package/dist/planner/evidence-recorder.js +98 -18
  54. package/dist/planner/evidence-recorder.js.map +1 -1
  55. package/dist/planner/executor.d.ts +31 -19
  56. package/dist/planner/executor.d.ts.map +1 -1
  57. package/dist/planner/executor.js +19 -6
  58. package/dist/planner/executor.js.map +1 -1
  59. package/dist/planner/normalize-release.d.ts +2 -2
  60. package/dist/planner/normalize-release.d.ts.map +1 -1
  61. package/dist/planner/normalize-release.js +40 -43
  62. package/dist/planner/normalize-release.js.map +1 -1
  63. package/dist/planner/reconcile.d.ts +17 -0
  64. package/dist/planner/reconcile.d.ts.map +1 -0
  65. package/dist/planner/reconcile.js +280 -0
  66. package/dist/planner/reconcile.js.map +1 -0
  67. package/dist/planner/release-eligibility.d.ts +33 -0
  68. package/dist/planner/release-eligibility.d.ts.map +1 -0
  69. package/dist/planner/release-eligibility.js +172 -0
  70. package/dist/planner/release-eligibility.js.map +1 -0
  71. package/dist/planner/render-plan.d.ts.map +1 -1
  72. package/dist/planner/render-plan.js +21 -0
  73. package/dist/planner/render-plan.js.map +1 -1
  74. package/dist/planner/status.d.ts +40 -0
  75. package/dist/planner/status.d.ts.map +1 -0
  76. package/dist/planner/status.js +336 -0
  77. package/dist/planner/status.js.map +1 -0
  78. package/dist/runtime/bun.d.ts +9 -0
  79. package/dist/runtime/bun.d.ts.map +1 -0
  80. package/dist/runtime/bun.js +10 -0
  81. package/dist/runtime/bun.js.map +1 -0
  82. package/dist/targets/github.d.ts.map +1 -1
  83. package/dist/targets/github.js +17 -13
  84. package/dist/targets/github.js.map +1 -1
  85. package/dist/targets/npm.d.ts +2 -2
  86. package/dist/targets/npm.d.ts.map +1 -1
  87. package/dist/targets/npm.js +74 -14
  88. package/dist/targets/npm.js.map +1 -1
  89. package/dist/version.d.ts +2 -0
  90. package/dist/version.d.ts.map +1 -0
  91. package/dist/version.js +2 -0
  92. package/dist/version.js.map +1 -0
  93. package/dist/workflows/config.d.ts +81 -0
  94. package/dist/workflows/config.d.ts.map +1 -0
  95. package/dist/workflows/config.js +191 -0
  96. package/dist/workflows/config.js.map +1 -0
  97. package/dist/workflows/evidence.d.ts +21 -0
  98. package/dist/workflows/evidence.d.ts.map +1 -0
  99. package/dist/workflows/evidence.js +45 -0
  100. package/dist/workflows/evidence.js.map +1 -0
  101. package/dist/workflows/live.d.ts +7 -0
  102. package/dist/workflows/live.d.ts.map +1 -0
  103. package/dist/workflows/live.js +5 -0
  104. package/dist/workflows/live.js.map +1 -0
  105. package/examples/README.md +6 -3
  106. package/examples/multi-target/release.config.json +6 -1
  107. package/examples/npm-first-publish/release.config.json +32 -0
  108. package/examples/npm-only/release.config.json +6 -1
  109. package/package.json +31 -9
  110. package/dist/cli/programmatic.d.ts +0 -25
  111. package/dist/cli/programmatic.d.ts.map +0 -1
  112. package/dist/cli/programmatic.js +0 -53
  113. package/dist/cli/programmatic.js.map +0 -1
  114. package/dist/host/bun.d.ts +0 -9
  115. package/dist/host/bun.d.ts.map +0 -1
  116. package/dist/host/bun.js +0 -156
  117. package/dist/host/bun.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ {
2
+ "identity": {
3
+ "name": "@scope/release-example-first",
4
+ "version": "0.1.0",
5
+ "commit": "example",
6
+ "tag": "v0.1.0"
7
+ },
8
+ "artifacts": [
9
+ {
10
+ "id": "package",
11
+ "path": ".",
12
+ "format": "directory",
13
+ "consumers": ["npm"]
14
+ }
15
+ ],
16
+ "targets": [
17
+ {
18
+ "_tag": "NpmRegistryTarget",
19
+ "id": "npm",
20
+ "registry": "https://registry.npmjs.org",
21
+ "packageName": "@scope/release-example-first",
22
+ "packagePath": ".",
23
+ "tokenEnv": "NPM_TOKEN",
24
+ "access": "public",
25
+ "dryRunSupport": "native",
26
+ "mutability": "immutable",
27
+ "recovery": "publish-new-version"
28
+ }
29
+ ],
30
+ "strict": true,
31
+ "evidenceDirectory": ".release/evidence"
32
+ }
@@ -18,8 +18,13 @@
18
18
  "_tag": "NpmRegistryTarget",
19
19
  "id": "npm",
20
20
  "registry": "https://registry.npmjs.org",
21
+ "packageName": "release-example-npm-only",
21
22
  "packagePath": ".",
22
- "tokenEnv": "NPM_TOKEN",
23
+ "trustedPublishing": {
24
+ "provider": "github-actions",
25
+ "workflow": "release.yml",
26
+ "packageExists": true
27
+ },
23
28
  "dryRunSupport": "native",
24
29
  "mutability": "immutable",
25
30
  "recovery": "publish-new-version"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mannyc1/ts-release",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "packageManager": "bun@1.3.14",
6
6
  "description": "Plan-first release orchestration with explicit validation, evidence, and execution gates.",
@@ -46,10 +46,6 @@
46
46
  "types": "./dist/cli/command.d.ts",
47
47
  "default": "./dist/cli/command.js"
48
48
  },
49
- "./cli/programmatic": {
50
- "types": "./dist/cli/programmatic.d.ts",
51
- "default": "./dist/cli/programmatic.js"
52
- },
53
49
  "./config/errors": {
54
50
  "types": "./dist/config/errors.d.ts",
55
51
  "default": "./dist/config/errors.js"
@@ -78,6 +74,10 @@
78
74
  "types": "./dist/domain/release.d.ts",
79
75
  "default": "./dist/domain/release.js"
80
76
  },
77
+ "./domain/status": {
78
+ "types": "./dist/domain/status.d.ts",
79
+ "default": "./dist/domain/status.js"
80
+ },
81
81
  "./domain/target": {
82
82
  "types": "./dist/domain/target.d.ts",
83
83
  "default": "./dist/domain/target.js"
@@ -86,10 +86,6 @@
86
86
  "types": "./dist/host/host.d.ts",
87
87
  "default": "./dist/host/host.js"
88
88
  },
89
- "./host/bun": {
90
- "types": "./dist/host/bun.d.ts",
91
- "default": "./dist/host/bun.js"
92
- },
93
89
  "./host/http": {
94
90
  "types": "./dist/host/http.d.ts",
95
91
  "default": "./dist/host/http.js"
@@ -98,6 +94,10 @@
98
94
  "types": "./dist/host/http-live.d.ts",
99
95
  "default": "./dist/host/http-live.js"
100
96
  },
97
+ "./host/platform": {
98
+ "types": "./dist/host/platform.d.ts",
99
+ "default": "./dist/host/platform.js"
100
+ },
101
101
  "./host/test": {
102
102
  "types": "./dist/host/test.d.ts",
103
103
  "default": "./dist/host/test.js"
@@ -126,6 +126,14 @@
126
126
  "types": "./dist/planner/render-plan.d.ts",
127
127
  "default": "./dist/planner/render-plan.js"
128
128
  },
129
+ "./planner/status": {
130
+ "types": "./dist/planner/status.d.ts",
131
+ "default": "./dist/planner/status.js"
132
+ },
133
+ "./runtime/bun": {
134
+ "types": "./dist/runtime/bun.d.ts",
135
+ "default": "./dist/runtime/bun.js"
136
+ },
129
137
  "./targets/adapter": {
130
138
  "types": "./dist/targets/adapter.d.ts",
131
139
  "default": "./dist/targets/adapter.js"
@@ -157,9 +165,22 @@
157
165
  "./targets/scoop": {
158
166
  "types": "./dist/targets/scoop.d.ts",
159
167
  "default": "./dist/targets/scoop.js"
168
+ },
169
+ "./workflows/config": {
170
+ "types": "./dist/workflows/config.d.ts",
171
+ "default": "./dist/workflows/config.js"
172
+ },
173
+ "./workflows/evidence": {
174
+ "types": "./dist/workflows/evidence.d.ts",
175
+ "default": "./dist/workflows/evidence.js"
176
+ },
177
+ "./workflows/live": {
178
+ "types": "./dist/workflows/live.d.ts",
179
+ "default": "./dist/workflows/live.js"
160
180
  }
161
181
  },
162
182
  "files": [
183
+ "ARCHITECTURE.md",
163
184
  "dist",
164
185
  "examples",
165
186
  "SPEC.md",
@@ -180,6 +201,7 @@
180
201
  "check:self-release-config": "bun run scripts/check-self-release-config.ts",
181
202
  "check:portable": "bun run check && bun test && bun audit && bun run check:effect-imports && bun run check:tree-shaking && bun run build && bun run check:examples && bun run check:readme && bun run check:package-exports && bun dist/cli/main.js --help",
182
203
  "check:release": "bun run check:self-release-config && bun run check:portable",
204
+ "release:artifacts": "bun run scripts/build-release-artifacts.ts",
183
205
  "cli": "bun run src/cli/main.ts"
184
206
  },
185
207
  "dependencies": {
@@ -1,25 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Schema from "effect/Schema";
3
- import { ReleasePlan } from "../domain/release.js";
4
- export type * from "../types/effect-internal.js";
5
- export declare const DEFAULT_RELEASE_CLI_VERSION = "0.0.1";
6
- export declare const ReleasePlanFormat: Schema.Literals<readonly ["json", "text"]>;
7
- export type ReleasePlanFormat = typeof ReleasePlanFormat.Type;
8
- declare const ReleaseCliOptions_base: Schema.Class<ReleaseCliOptions, Schema.Struct<{
9
- readonly root: Schema.optionalKey<Schema.String>;
10
- readonly version: Schema.optionalKey<Schema.String>;
11
- }>, {}>;
12
- export declare class ReleaseCliOptions extends ReleaseCliOptions_base {
13
- }
14
- declare const PlanReleaseConfigOptions_base: Schema.Class<PlanReleaseConfigOptions, Schema.Struct<{
15
- readonly root: Schema.optionalKey<Schema.String>;
16
- readonly configPath: Schema.optionalKey<Schema.String>;
17
- readonly format: Schema.optionalKey<Schema.Literals<readonly ["json", "text"]>>;
18
- }>, {}>;
19
- export declare class PlanReleaseConfigOptions extends PlanReleaseConfigOptions_base {
20
- }
21
- export declare const planReleaseConfig: (options?: PlanReleaseConfigOptions | undefined) => Effect.Effect<ReleasePlan, import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../host/host.js").HostError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, never>;
22
- export declare const renderReleaseConfigPlan: (options?: PlanReleaseConfigOptions | undefined) => Effect.Effect<string, import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../host/host.js").HostError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, never>;
23
- export declare const runReleaseCli: (args: readonly string[], options?: ReleaseCliOptions | undefined) => Effect.Effect<void, import("effect/unstable/cli/CliError").CliError | import("../domain/operation.js").ExecutionApprovalError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../host/host.js").HostError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").EvidenceWriteError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError, never>;
24
- export type ProgrammaticReleasePlan = ReleasePlan;
25
- //# sourceMappingURL=programmatic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"programmatic.d.ts","sourceRoot":"","sources":["../../src/cli/programmatic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AASlD,mBAAmB,6BAA6B,CAAA;AAEhD,eAAO,MAAM,2BAA2B,UAAU,CAAA;AAElD,eAAO,MAAM,iBAAiB,4CAAoC,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;;;;;AAE7D,qBAAa,iBAAkB,SAAQ,sBAGrC;CAAG;;;;;;AAEL,qBAAa,wBAAyB,SAAQ,6BAI5C;CAAG;AAyBL,eAAO,MAAM,iBAAiB,kZAM5B,CAAA;AAEF,eAAO,MAAM,uBAAuB,6YAOlC,CAAA;AAEF,eAAO,MAAM,aAAa,mnBAOxB,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAA"}
@@ -1,53 +0,0 @@
1
- import * as BunHttpClient from "@effect/platform-bun/BunHttpClient";
2
- import * as BunServices from "@effect/platform-bun/BunServices";
3
- import * as Effect from "effect/Effect";
4
- import * as Layer from "effect/Layer";
5
- import * as Schema from "effect/Schema";
6
- import * as Command from "effect/unstable/cli/Command";
7
- import { parseReleaseIntent } from "../config/load.js";
8
- import { DEFAULT_CONFIG_PATH } from "../config/schema.js";
9
- import { makeBunReleaseHostLayer } from "../host/bun.js";
10
- import { ReleaseHost } from "../host/host.js";
11
- import { LiveReleaseHttpLayer } from "../host/http-live.js";
12
- import { createReleasePlan } from "../planner/create-release-plan.js";
13
- import { renderPlanJson, renderPlanText } from "../planner/render-plan.js";
14
- import { LiveTargetRegistryLayer } from "../targets/live.js";
15
- import { cli } from "./command.js";
16
- export const DEFAULT_RELEASE_CLI_VERSION = "0.0.1";
17
- export const ReleasePlanFormat = Schema.Literals(["json", "text"]);
18
- export class ReleaseCliOptions extends Schema.Class("ReleaseCliOptions")({
19
- root: Schema.optionalKey(Schema.String),
20
- version: Schema.optionalKey(Schema.String)
21
- }) {
22
- }
23
- export class PlanReleaseConfigOptions extends Schema.Class("PlanReleaseConfigOptions")({
24
- root: Schema.optionalKey(Schema.String),
25
- configPath: Schema.optionalKey(Schema.String),
26
- format: Schema.optionalKey(ReleasePlanFormat)
27
- }) {
28
- }
29
- const programmaticLayer = (root) => {
30
- const hostHttpClientLayer = Layer.mergeAll(makeBunReleaseHostLayer({ root }), BunHttpClient.layer);
31
- return Layer.mergeAll(LiveReleaseHttpLayer.pipe(Layer.provideMerge(hostHttpClientLayer)), LiveTargetRegistryLayer, BunServices.layer);
32
- };
33
- const loadPlanFromOptions = Effect.fn("cli.programmatic.loadPlanFromOptions")(function* (options) {
34
- const root = options.root ?? ".";
35
- const configPath = options.configPath ?? DEFAULT_CONFIG_PATH;
36
- const host = yield* ReleaseHost;
37
- const contents = yield* host.readFileString(configPath);
38
- const intent = yield* parseReleaseIntent(contents, configPath);
39
- return yield* createReleasePlan(intent, root, configPath);
40
- });
41
- export const planReleaseConfig = Effect.fn("planReleaseConfig")(function* (options = PlanReleaseConfigOptions.make({})) {
42
- return yield* loadPlanFromOptions(options).pipe(Effect.provide(programmaticLayer(options.root)));
43
- });
44
- export const renderReleaseConfigPlan = Effect.fn("renderReleaseConfigPlan")(function* (options = PlanReleaseConfigOptions.make({})) {
45
- const plan = yield* planReleaseConfig(options);
46
- return (options.format ?? "text") === "json"
47
- ? renderPlanJson(plan)
48
- : renderPlanText(plan);
49
- });
50
- export const runReleaseCli = Effect.fn("runReleaseCli")(function* (args, options = ReleaseCliOptions.make({})) {
51
- yield* Command.runWith(cli, { version: options.version ?? DEFAULT_RELEASE_CLI_VERSION })([...args]).pipe(Effect.provide(programmaticLayer(options.root)));
52
- });
53
- //# sourceMappingURL=programmatic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"programmatic.js","sourceRoot":"","sources":["../../src/cli/programmatic.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import * as Layer from "effect/Layer";
2
- import { ReleaseHost } from "./host.js";
3
- export type * from "../types/effect-internal.js";
4
- export interface BunReleaseHostOptions {
5
- readonly root?: string | undefined;
6
- }
7
- export declare const makeBunReleaseHostLayer: (options?: BunReleaseHostOptions) => Layer.Layer<ReleaseHost>;
8
- export declare const BunReleaseHostLayer: Layer.Layer<ReleaseHost>;
9
- //# sourceMappingURL=bun.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../../src/host/bun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAKrC,OAAO,EAAsC,WAAW,EAAE,MAAM,WAAW,CAAA;AAE3E,mBAAmB,6BAA6B,CAAA;AAKhD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAmED,eAAO,MAAM,uBAAuB,GAAI,UAAS,qBAA0B,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAoHpG,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAA6B,CAAA"}
package/dist/host/bun.js DELETED
@@ -1,156 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Layer from "effect/Layer";
3
- import { mkdir, stat as fsStat } from "node:fs/promises";
4
- import { dirname, isAbsolute, resolve } from "node:path";
5
- import { CommandResult, FileInfo, HostError, ReleaseHost } from "./host.js";
6
- const formatUnknown = (cause) => cause instanceof Error ? cause.message : String(cause);
7
- const checksumName = (algorithm) => algorithm === "sha256" ? "SHA-256" : "SHA-512";
8
- const toHex = (bytes) => {
9
- let output = "";
10
- for (const byte of bytes) {
11
- output += byte.toString(16).padStart(2, "0");
12
- }
13
- return output;
14
- };
15
- const streamText = async (stream) => {
16
- if (stream === null) {
17
- return "";
18
- }
19
- return await new Response(stream).text();
20
- };
21
- const inheritedEnvNames = [
22
- "PATH",
23
- "HOME",
24
- "USERPROFILE",
25
- "SystemRoot",
26
- "TEMP",
27
- "TMP"
28
- ];
29
- const commandEnv = (command) => {
30
- const names = new Set([
31
- ...inheritedEnvNames,
32
- ...command.requiredEnv,
33
- ...command.redactedEnv
34
- ]);
35
- const env = {};
36
- for (const name of names) {
37
- const value = Bun.env[name];
38
- if (value !== undefined) {
39
- env[name] = value;
40
- }
41
- }
42
- return env;
43
- };
44
- const validateEnv = (command) => Effect.sync(() => {
45
- const missing = [];
46
- for (const name of command.requiredEnv) {
47
- if (Bun.env[name] === undefined) {
48
- missing.push(name);
49
- }
50
- }
51
- return missing;
52
- }).pipe(Effect.flatMap((missing) => missing.length === 0
53
- ? Effect.void
54
- : Effect.fail(HostError.make({
55
- operation: "runCommand",
56
- reason: `Missing required environment variables: ${missing.join(", ")}`
57
- }))));
58
- export const makeBunReleaseHostLayer = (options = {}) => {
59
- const hostPath = (path) => options.root === undefined || isAbsolute(path) ? path : resolve(options.root, path);
60
- const commandCwd = (command) => command.cwd === undefined
61
- ? options.root
62
- : hostPath(command.cwd);
63
- return Layer.succeed(ReleaseHost)({
64
- readFileString: (path) => Effect.tryPromise({
65
- try: () => Bun.file(hostPath(path)).text(),
66
- catch: (cause) => HostError.make({
67
- operation: "readFileString",
68
- path,
69
- reason: formatUnknown(cause)
70
- })
71
- }),
72
- writeFileString: (path, contents) => Effect.tryPromise({
73
- try: async () => {
74
- const targetPath = hostPath(path);
75
- await mkdir(dirname(targetPath), { recursive: true });
76
- await Bun.write(targetPath, contents);
77
- },
78
- catch: (cause) => HostError.make({
79
- operation: "writeFileString",
80
- path,
81
- reason: formatUnknown(cause)
82
- })
83
- }),
84
- stat: (path) => Effect.tryPromise({
85
- try: async () => {
86
- const info = await fsStat(hostPath(path));
87
- return FileInfo.make({
88
- path,
89
- sizeBytes: Number(info.size),
90
- kind: info.isDirectory() ? "directory" : info.isFile() ? "file" : "other"
91
- });
92
- },
93
- catch: (cause) => HostError.make({
94
- operation: "stat",
95
- path,
96
- reason: formatUnknown(cause)
97
- })
98
- }),
99
- hashFile: (path, algorithm) => Effect.tryPromise({
100
- try: async () => {
101
- const targetPath = hostPath(path);
102
- const info = await fsStat(targetPath);
103
- if (!info.isFile()) {
104
- throw new Error("Only file artifacts can be hashed");
105
- }
106
- const buffer = await Bun.file(targetPath).arrayBuffer();
107
- const hash = await crypto.subtle.digest(checksumName(algorithm), buffer);
108
- return toHex(new Uint8Array(hash));
109
- },
110
- catch: (cause) => HostError.make({
111
- operation: "hashFile",
112
- path,
113
- reason: formatUnknown(cause)
114
- })
115
- }),
116
- readEnv: (name) => Effect.sync(() => Bun.env[name]),
117
- runCommand: (command) => Effect.gen(function* () {
118
- yield* validateEnv(command);
119
- const startedAt = new Date().toISOString();
120
- const started = performance.now();
121
- return yield* Effect.tryPromise({
122
- try: async () => {
123
- const cwd = commandCwd(command);
124
- const subprocess = Bun.spawn([command.executable, ...command.args], {
125
- ...(cwd === undefined ? {} : { cwd }),
126
- env: commandEnv(command),
127
- stdout: "pipe",
128
- stderr: "pipe"
129
- });
130
- const stdoutPromise = streamText(subprocess.stdout);
131
- const stderrPromise = streamText(subprocess.stderr);
132
- const exitCode = await subprocess.exited;
133
- const stdout = await stdoutPromise;
134
- const stderr = await stderrPromise;
135
- const endedAt = new Date().toISOString();
136
- return CommandResult.make({
137
- command,
138
- exitCode,
139
- stdout,
140
- stderr,
141
- startedAt,
142
- endedAt,
143
- durationMillis: Math.round(performance.now() - started)
144
- });
145
- },
146
- catch: (cause) => HostError.make({
147
- operation: "runCommand",
148
- reason: formatUnknown(cause)
149
- })
150
- });
151
- }),
152
- now: Effect.sync(() => new Date().toISOString())
153
- });
154
- };
155
- export const BunReleaseHostLayer = makeBunReleaseHostLayer();
156
- //# sourceMappingURL=bun.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/host/bun.ts"],"names":[],"mappings":"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"}