@mannyc1/ts-release 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/ARCHITECTURE.md +93 -0
  2. package/README.md +282 -49
  3. package/SPEC.md +46 -9
  4. package/dist/config/schema.d.ts +4 -0
  5. package/dist/config/schema.d.ts.map +1 -1
  6. package/dist/config/schema.js +13 -0
  7. package/dist/config/schema.js.map +1 -1
  8. package/dist/domain/evidence.d.ts +4 -0
  9. package/dist/domain/evidence.d.ts.map +1 -1
  10. package/dist/domain/evidence.js +4 -0
  11. package/dist/domain/evidence.js.map +1 -1
  12. package/dist/domain/operation.d.ts +1 -0
  13. package/dist/domain/operation.d.ts.map +1 -1
  14. package/dist/domain/operation.js +147 -1
  15. package/dist/domain/operation.js.map +1 -1
  16. package/dist/domain/release.d.ts +1 -0
  17. package/dist/domain/release.d.ts.map +1 -1
  18. package/dist/domain/release.js +1 -0
  19. package/dist/domain/release.js.map +1 -1
  20. package/dist/domain/remote-state.d.ts +90 -0
  21. package/dist/domain/remote-state.d.ts.map +1 -0
  22. package/dist/domain/remote-state.js +85 -0
  23. package/dist/domain/remote-state.js.map +1 -0
  24. package/dist/domain/status.d.ts +43 -0
  25. package/dist/domain/status.d.ts.map +1 -0
  26. package/dist/domain/status.js +50 -0
  27. package/dist/domain/status.js.map +1 -0
  28. package/dist/domain/target.d.ts +32 -2
  29. package/dist/domain/target.d.ts.map +1 -1
  30. package/dist/domain/target.js +35 -2
  31. package/dist/domain/target.js.map +1 -1
  32. package/dist/host/host.d.ts +7 -23
  33. package/dist/host/host.d.ts.map +1 -1
  34. package/dist/host/host.js +3 -22
  35. package/dist/host/host.js.map +1 -1
  36. package/dist/host/http-live.d.ts +1 -2
  37. package/dist/host/http-live.d.ts.map +1 -1
  38. package/dist/host/http-live.js +18 -9
  39. package/dist/host/http-live.js.map +1 -1
  40. package/dist/host/http.d.ts +3 -1
  41. package/dist/host/http.d.ts.map +1 -1
  42. package/dist/host/http.js +3 -1
  43. package/dist/host/http.js.map +1 -1
  44. package/dist/host/platform.d.ts +10 -0
  45. package/dist/host/platform.d.ts.map +1 -0
  46. package/dist/host/platform.js +121 -0
  47. package/dist/host/platform.js.map +1 -0
  48. package/dist/host/test.d.ts +7 -3
  49. package/dist/host/test.d.ts.map +1 -1
  50. package/dist/host/test.js +128 -25
  51. package/dist/host/test.js.map +1 -1
  52. package/dist/internal/workspace-path.d.ts +16 -0
  53. package/dist/internal/workspace-path.d.ts.map +1 -0
  54. package/dist/internal/workspace-path.js +33 -0
  55. package/dist/internal/workspace-path.js.map +1 -0
  56. package/dist/planner/artifact-inventory.d.ts +9 -0
  57. package/dist/planner/artifact-inventory.d.ts.map +1 -0
  58. package/dist/planner/artifact-inventory.js +85 -0
  59. package/dist/planner/artifact-inventory.js.map +1 -0
  60. package/dist/planner/create-release-plan.d.ts +1 -1
  61. package/dist/planner/create-release-plan.d.ts.map +1 -1
  62. package/dist/planner/errors.d.ts +37 -1
  63. package/dist/planner/errors.d.ts.map +1 -1
  64. package/dist/planner/errors.js +30 -0
  65. package/dist/planner/errors.js.map +1 -1
  66. package/dist/planner/evidence-recorder.d.ts +13 -8
  67. package/dist/planner/evidence-recorder.d.ts.map +1 -1
  68. package/dist/planner/evidence-recorder.js +116 -18
  69. package/dist/planner/evidence-recorder.js.map +1 -1
  70. package/dist/planner/executor.d.ts +31 -19
  71. package/dist/planner/executor.d.ts.map +1 -1
  72. package/dist/planner/executor.js +52 -7
  73. package/dist/planner/executor.js.map +1 -1
  74. package/dist/planner/normalize-release.d.ts +2 -2
  75. package/dist/planner/normalize-release.d.ts.map +1 -1
  76. package/dist/planner/normalize-release.js +50 -52
  77. package/dist/planner/normalize-release.js.map +1 -1
  78. package/dist/planner/reconcile.d.ts +17 -0
  79. package/dist/planner/reconcile.d.ts.map +1 -0
  80. package/dist/planner/reconcile.js +337 -0
  81. package/dist/planner/reconcile.js.map +1 -0
  82. package/dist/planner/release-eligibility.d.ts +34 -0
  83. package/dist/planner/release-eligibility.d.ts.map +1 -0
  84. package/dist/planner/release-eligibility.js +179 -0
  85. package/dist/planner/release-eligibility.js.map +1 -0
  86. package/dist/planner/render-plan.d.ts +10 -0
  87. package/dist/planner/render-plan.d.ts.map +1 -1
  88. package/dist/planner/render-plan.js +179 -0
  89. package/dist/planner/render-plan.js.map +1 -1
  90. package/dist/planner/status.d.ts +40 -0
  91. package/dist/planner/status.d.ts.map +1 -0
  92. package/dist/planner/status.js +342 -0
  93. package/dist/planner/status.js.map +1 -0
  94. package/dist/targets/github.d.ts.map +1 -1
  95. package/dist/targets/github.js +28 -13
  96. package/dist/targets/github.js.map +1 -1
  97. package/dist/targets/npm.d.ts +2 -2
  98. package/dist/targets/npm.d.ts.map +1 -1
  99. package/dist/targets/npm.js +74 -14
  100. package/dist/targets/npm.js.map +1 -1
  101. package/dist/workflows/config.d.ts +153 -0
  102. package/dist/workflows/config.d.ts.map +1 -0
  103. package/dist/workflows/config.js +301 -0
  104. package/dist/workflows/config.js.map +1 -0
  105. package/dist/workflows/diagnostics.d.ts +62 -0
  106. package/dist/workflows/diagnostics.d.ts.map +1 -0
  107. package/dist/workflows/diagnostics.js +474 -0
  108. package/dist/workflows/diagnostics.js.map +1 -0
  109. package/dist/workflows/evidence.d.ts +21 -0
  110. package/dist/workflows/evidence.d.ts.map +1 -0
  111. package/dist/workflows/evidence.js +45 -0
  112. package/dist/workflows/evidence.js.map +1 -0
  113. package/dist/workflows/index.d.ts +7 -0
  114. package/dist/workflows/index.d.ts.map +1 -0
  115. package/dist/workflows/index.js +6 -0
  116. package/dist/workflows/index.js.map +1 -0
  117. package/dist/workflows/init.d.ts +71 -0
  118. package/dist/workflows/init.d.ts.map +1 -0
  119. package/dist/workflows/init.js +384 -0
  120. package/dist/workflows/init.js.map +1 -0
  121. package/dist/workflows/live.d.ts +9 -0
  122. package/dist/workflows/live.d.ts.map +1 -0
  123. package/dist/workflows/live.js +7 -0
  124. package/dist/workflows/live.js.map +1 -0
  125. package/dist/workflows/options.d.ts +30 -0
  126. package/dist/workflows/options.d.ts.map +1 -0
  127. package/dist/workflows/options.js +16 -0
  128. package/dist/workflows/options.js.map +1 -0
  129. package/examples/README.md +16 -9
  130. package/examples/github-release/release.config.json +1 -0
  131. package/examples/homebrew-tap/release.config.json +1 -0
  132. package/examples/multi-target/release.config.json +10 -1
  133. package/examples/non-strict-skips/release.config.json +1 -0
  134. package/examples/npm-first-publish/release.config.json +33 -0
  135. package/examples/npm-only/release.config.json +10 -1
  136. package/examples/pypi-registry/release.config.json +1 -0
  137. package/examples/scoop-bucket/release.config.json +1 -0
  138. package/package.json +56 -27
  139. package/templates/README.md +54 -0
  140. package/templates/github-actions/plan-and-approved-execute.yml +53 -0
  141. package/templates/github-actions/plan-only.yml +30 -0
  142. package/templates/github-actions/trusted-publishing.yml +59 -0
  143. package/templates/multi-target-homebrew/release.config.json +70 -0
  144. package/templates/multi-target-scoop/release.config.json +72 -0
  145. package/templates/npm-github/release.config.json +50 -0
  146. package/templates/npm-only/release.config.json +39 -0
  147. package/dist/cli/command.d.ts +0 -4
  148. package/dist/cli/command.d.ts.map +0 -1
  149. package/dist/cli/command.js +0 -125
  150. package/dist/cli/command.js.map +0 -1
  151. package/dist/cli/main.d.ts +0 -3
  152. package/dist/cli/main.d.ts.map +0 -1
  153. package/dist/cli/main.js +0 -15
  154. package/dist/cli/main.js.map +0 -1
  155. package/dist/cli/programmatic.d.ts +0 -25
  156. package/dist/cli/programmatic.d.ts.map +0 -1
  157. package/dist/cli/programmatic.js +0 -53
  158. package/dist/cli/programmatic.js.map +0 -1
  159. package/dist/host/bun.d.ts +0 -9
  160. package/dist/host/bun.d.ts.map +0 -1
  161. package/dist/host/bun.js +0 -156
  162. package/dist/host/bun.js.map +0 -1
package/dist/host/http.js CHANGED
@@ -2,7 +2,7 @@ import * as Context from "effect/Context";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Layer from "effect/Layer";
4
4
  import * as Schema from "effect/Schema";
5
- import { HttpRequestSpec } from "../domain/operation.js";
5
+ import { HttpHeader, HttpRequestSpec } from "../domain/operation.js";
6
6
  export class HttpError extends Schema.TaggedErrorClass()("HttpError", {
7
7
  operation: Schema.String,
8
8
  url: Schema.String,
@@ -13,6 +13,7 @@ export class HttpResult extends Schema.Class("HttpResult")({
13
13
  request: HttpRequestSpec,
14
14
  status: Schema.Number,
15
15
  json: Schema.Json,
16
+ responseHeaders: Schema.Array(HttpHeader),
16
17
  startedAt: Schema.String,
17
18
  endedAt: Schema.String,
18
19
  durationMillis: Schema.Number
@@ -46,6 +47,7 @@ export const makeTestReleaseHttpLayer = (options = {}) => {
46
47
  request,
47
48
  status: response.status,
48
49
  json: response.json,
50
+ responseHeaders: response.responseHeaders === undefined ? [] : [...response.responseHeaders],
49
51
  startedAt,
50
52
  endedAt,
51
53
  durationMillis: 0
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/host/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAIxD,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,gBAAgB,EAAa,CAAC,WAAW,EAAE;IAC/E,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,GAAG,EAAE,MAAM,CAAC,MAAM;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;CAAG;AAEL,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,KAAK,CAAa,YAAY,CAAC,CAAC;IACrE,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM;CAC9B,CAAC;CAAG;AAML,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAAiC,CAAC,aAAa,CAAC;CAAG;AAYnG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAwB,EAAU,EAAE,CACjE,GAAG,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,GAAG,EAAE,CAAA;AAEzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,UAAkC,EAAE,EACV,EAAE;IAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAA;IAC5E,IAAI,cAAc,GAAG,CAAC,CAAA;IAEtB,MAAM,aAAa,GAAG,GAAW,EAAE;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,0BAA0B,CAAA;QAC3G,cAAc,IAAI,CAAC,CAAA;QACnB,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,SAAS,GAAG,aAAa,EAAE,CAAA;YACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;YACvD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC;oBACb,SAAS,EAAE,SAAS;oBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,MAAM,EAAE,kCAAkC;iBAC3C,CAAC,CACH,CAAA;YACH,CAAC;YACD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;YAC/B,OAAO,UAAU,CAAC,IAAI,CAAC;gBACrB,OAAO;gBACP,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS;gBACT,OAAO;gBACP,cAAc,EAAE,CAAC;aAClB,CAAC,CAAA;QACJ,CAAC,CAAC;KACL,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/host/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner";
3
+ import { ReleaseCommandRunner } from "./host.js";
4
+ export type * from "../types/effect-internal.js";
5
+ export interface PlatformCommandRunnerOptions {
6
+ readonly root?: string | undefined;
7
+ }
8
+ export declare const makePlatformCommandRunnerLayer: (options?: PlatformCommandRunnerOptions) => Layer.Layer<ReleaseCommandRunner, never, ChildProcessSpawner>;
9
+ export declare const PlatformCommandRunnerLayer: Layer.Layer<ReleaseCommandRunner, never, ChildProcessSpawner>;
10
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/host/platform.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAA;AAEjF,OAAO,EAAqC,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEnF,mBAAmB,6BAA6B,CAAA;AAEhD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAoFD,eAAO,MAAM,8BAA8B,GACzC,UAAS,4BAAiC,KACzC,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,EAAE,mBAAmB,CAyD5D,CAAA;AAEH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,KAAK,CAClD,oBAAoB,EACpB,KAAK,EACL,mBAAmB,CACe,CAAA"}
@@ -0,0 +1,121 @@
1
+ import * as Config from "effect/Config";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Option from "effect/Option";
5
+ import * as Stream from "effect/Stream";
6
+ import * as ChildProcess from "effect/unstable/process/ChildProcess";
7
+ import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner";
8
+ import { CommandResult, CommandRunnerError, ReleaseCommandRunner } from "./host.js";
9
+ const inheritedEnvNames = [
10
+ "PATH",
11
+ "HOME",
12
+ "USERPROFILE",
13
+ "SystemRoot",
14
+ "TEMP",
15
+ "TMP",
16
+ "CI",
17
+ "GITHUB_ACTIONS",
18
+ "GITHUB_API_URL",
19
+ "GITHUB_EVENT_NAME",
20
+ "GITHUB_GRAPHQL_URL",
21
+ "GITHUB_REF",
22
+ "GITHUB_REF_NAME",
23
+ "GITHUB_REF_TYPE",
24
+ "GITHUB_REPOSITORY",
25
+ "GITHUB_REPOSITORY_ID",
26
+ "GITHUB_REPOSITORY_OWNER",
27
+ "GITHUB_REPOSITORY_OWNER_ID",
28
+ "GITHUB_RUN_ATTEMPT",
29
+ "GITHUB_RUN_ID",
30
+ "GITHUB_RUN_NUMBER",
31
+ "GITHUB_SERVER_URL",
32
+ "GITHUB_SHA",
33
+ "GITHUB_WORKFLOW",
34
+ "GITHUB_WORKFLOW_REF",
35
+ "GITHUB_WORKFLOW_SHA",
36
+ "RUNNER_ENVIRONMENT",
37
+ "RUNNER_OS"
38
+ ];
39
+ const formatUnknown = (cause) => cause instanceof Error ? cause.message : String(cause);
40
+ const readOptionalEnv = (name) => Config.string(name).pipe(Effect.option, Effect.map(Option.getOrUndefined));
41
+ const commandEnv = Effect.fn("platform.commandEnv")(function* (command) {
42
+ const names = new Set([
43
+ ...inheritedEnvNames,
44
+ ...command.requiredEnv
45
+ ]);
46
+ const env = {};
47
+ for (const name of names) {
48
+ const value = yield* readOptionalEnv(name);
49
+ if (value !== undefined) {
50
+ env[name] = value;
51
+ }
52
+ }
53
+ return env;
54
+ });
55
+ const validateEnv = (command) => Effect.gen(function* () {
56
+ const missing = [];
57
+ for (const name of command.requiredEnv) {
58
+ const value = yield* readOptionalEnv(name);
59
+ if (value === undefined) {
60
+ missing.push(name);
61
+ }
62
+ }
63
+ if (missing.length > 0) {
64
+ return yield* Effect.fail(CommandRunnerError.make({
65
+ operation: "runCommand",
66
+ reason: `Missing required environment variables: ${missing.join(", ")}`
67
+ }));
68
+ }
69
+ });
70
+ const nowIso = Effect.fn("platform.nowIso")(function* () {
71
+ const millis = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
72
+ return new Date(millis).toISOString();
73
+ });
74
+ const commandOutput = (stream) => Stream.mkString(Stream.decodeText(stream));
75
+ export const makePlatformCommandRunnerLayer = (options = {}) => Layer.effect(ReleaseCommandRunner)(Effect.gen(function* () {
76
+ const spawner = yield* ChildProcessSpawner;
77
+ const commandCwd = (command) => command.cwd === undefined
78
+ ? options.root
79
+ : command.cwd;
80
+ return {
81
+ runCommand: (command) => Effect.gen(function* () {
82
+ yield* validateEnv(command);
83
+ const startedAt = yield* nowIso();
84
+ const startedMillis = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
85
+ const env = yield* commandEnv(command);
86
+ const cwd = commandCwd(command);
87
+ const childCommand = ChildProcess.make(command.executable, command.args, {
88
+ ...(cwd === undefined ? {} : { cwd }),
89
+ env,
90
+ extendEnv: false,
91
+ stdin: "ignore",
92
+ stdout: "pipe",
93
+ stderr: "pipe"
94
+ });
95
+ const output = yield* Effect.scoped(Effect.gen(function* () {
96
+ const handle = yield* spawner.spawn(childCommand);
97
+ return yield* Effect.all({
98
+ stdout: commandOutput(handle.stdout),
99
+ stderr: commandOutput(handle.stderr),
100
+ exitCode: handle.exitCode
101
+ }, { concurrency: "unbounded" });
102
+ })).pipe(Effect.mapError((cause) => CommandRunnerError.make({
103
+ operation: "runCommand",
104
+ reason: formatUnknown(cause)
105
+ })));
106
+ const endedAt = yield* nowIso();
107
+ const endedMillis = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
108
+ return CommandResult.make({
109
+ command,
110
+ exitCode: Number(output.exitCode),
111
+ stdout: output.stdout,
112
+ stderr: output.stderr,
113
+ startedAt,
114
+ endedAt,
115
+ durationMillis: Math.max(0, endedMillis - startedMillis)
116
+ });
117
+ })
118
+ };
119
+ }));
120
+ export const PlatformCommandRunnerLayer = makePlatformCommandRunnerLayer();
121
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/host/platform.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,23 @@
1
+ import * as Crypto from "effect/Crypto";
2
+ import * as FileSystem from "effect/FileSystem";
1
3
  import * as Layer from "effect/Layer";
4
+ import * as Path from "effect/Path";
2
5
  import { CommandSpec } from "../domain/operation.js";
3
- import { ReleaseHost } from "./host.js";
6
+ import { ReleaseCommandRunner } from "./host.js";
4
7
  export type * from "../types/effect-internal.js";
5
8
  export interface TestCommandResponse {
6
9
  readonly exitCode: number;
7
10
  readonly stdout: string;
8
11
  readonly stderr: string;
9
12
  }
10
- export interface TestReleaseHostOptions {
13
+ export interface TestCommandRunnerOptions {
11
14
  readonly files?: ReadonlyMap<string, string> | undefined;
12
15
  readonly directories?: ReadonlySet<string> | undefined;
13
16
  readonly env?: ReadonlyMap<string, string> | undefined;
14
17
  readonly commands?: ReadonlyMap<string, TestCommandResponse> | undefined;
15
18
  readonly timestamps?: ReadonlyArray<string> | undefined;
19
+ readonly pathLayer?: Layer.Layer<Path.Path> | undefined;
16
20
  }
17
21
  export declare const commandKey: (command: CommandSpec) => string;
18
- export declare const makeTestReleaseHostLayer: (options?: TestReleaseHostOptions) => Layer.Layer<ReleaseHost>;
22
+ export declare const makeTestCommandRunnerLayer: (options?: TestCommandRunnerOptions) => Layer.Layer<FileSystem.FileSystem | Path.Path | ReleaseCommandRunner | Crypto.Crypto, never, never>;
19
23
  //# sourceMappingURL=test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/host/test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAsC,WAAW,EAAE,MAAM,WAAW,CAAA;AAE3E,mBAAmB,6BAA6B,CAAA;AAEhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,CAAA;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;CACxD;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,KAAG,MACI,CAAA;AAKtD,eAAO,MAAM,wBAAwB,GACnC,UAAS,sBAA2B,KACnC,KAAK,CAAC,KAAK,CAAC,WAAW,CAgGzB,CAAA"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/host/test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAqC,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEnF,mBAAmB,6BAA6B,CAAA;AAEhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,CAAA;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;CACxD;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,KAAG,MACI,CAAA;AAsGtD,eAAO,MAAM,0BAA0B,GACrC,UAAS,wBAA6B,wGAqHvC,CAAA"}
package/dist/host/test.js CHANGED
@@ -1,9 +1,102 @@
1
+ import * as ConfigProvider from "effect/ConfigProvider";
2
+ import * as Crypto from "effect/Crypto";
1
3
  import * as Effect from "effect/Effect";
4
+ import * as FileSystem from "effect/FileSystem";
2
5
  import * as Layer from "effect/Layer";
3
- import { CommandResult, FileInfo, HostError, ReleaseHost } from "./host.js";
6
+ import * as Option from "effect/Option";
7
+ import * as Path from "effect/Path";
8
+ import * as PlatformError from "effect/PlatformError";
9
+ import { CommandResult, CommandRunnerError, ReleaseCommandRunner } from "./host.js";
4
10
  export const commandKey = (command) => [command.executable, ...command.args].join("\u0000");
5
- const checksumPrefix = (algorithm) => algorithm === "sha256" ? "sha256" : "sha512";
6
- export const makeTestReleaseHostLayer = (options = {}) => {
11
+ const notFound = (method, path) => PlatformError.systemError({
12
+ _tag: "NotFound",
13
+ module: "FileSystem",
14
+ method,
15
+ pathOrDescriptor: path,
16
+ description: "File not found"
17
+ });
18
+ const fileInfo = (sizeBytes) => ({
19
+ type: "File",
20
+ mtime: Option.none(),
21
+ atime: Option.none(),
22
+ birthtime: Option.none(),
23
+ dev: 0,
24
+ ino: Option.none(),
25
+ mode: 0,
26
+ nlink: Option.none(),
27
+ uid: Option.none(),
28
+ gid: Option.none(),
29
+ rdev: Option.none(),
30
+ size: FileSystem.Size(sizeBytes),
31
+ blksize: Option.none(),
32
+ blocks: Option.none()
33
+ });
34
+ const directoryInfo = {
35
+ type: "Directory",
36
+ mtime: Option.none(),
37
+ atime: Option.none(),
38
+ birthtime: Option.none(),
39
+ dev: 0,
40
+ ino: Option.none(),
41
+ mode: 0,
42
+ nlink: Option.none(),
43
+ uid: Option.none(),
44
+ gid: Option.none(),
45
+ rdev: Option.none(),
46
+ size: FileSystem.Size(0),
47
+ blksize: Option.none(),
48
+ blocks: Option.none()
49
+ };
50
+ const textEncoder = new TextEncoder();
51
+ const textDecoder = new TextDecoder();
52
+ const normalizedSeparators = (path) => path.replaceAll("\\", "/");
53
+ const addVariant = (variants, path) => {
54
+ variants.add(path);
55
+ variants.add(normalizedSeparators(path));
56
+ };
57
+ const addRelativePathVariants = (variants, cwd, path) => {
58
+ const normalizedCwd = normalizedSeparators(cwd);
59
+ const normalizedPath = normalizedSeparators(path);
60
+ if (normalizedPath === normalizedCwd) {
61
+ variants.add(".");
62
+ return;
63
+ }
64
+ const cwdPrefix = `${normalizedCwd}/`;
65
+ if (normalizedPath.startsWith(cwdPrefix)) {
66
+ variants.add(normalizedPath.slice(cwdPrefix.length));
67
+ }
68
+ };
69
+ const pathVariants = (path) => {
70
+ const variants = new Set();
71
+ addVariant(variants, path);
72
+ const cwd = globalThis.process?.cwd();
73
+ if (cwd === undefined) {
74
+ return [...variants];
75
+ }
76
+ if (path === cwd) {
77
+ variants.add(".");
78
+ }
79
+ addRelativePathVariants(variants, cwd, path);
80
+ return [...variants];
81
+ };
82
+ const getFixtureFile = (files, path) => {
83
+ for (const variant of pathVariants(path)) {
84
+ const contents = files.get(variant);
85
+ if (contents !== undefined) {
86
+ return contents;
87
+ }
88
+ }
89
+ return undefined;
90
+ };
91
+ const hasFixtureDirectory = (directories, path) => {
92
+ for (const variant of pathVariants(path)) {
93
+ if (directories.has(variant)) {
94
+ return true;
95
+ }
96
+ }
97
+ return false;
98
+ };
99
+ export const makeTestCommandRunnerLayer = (options = {}) => {
7
100
  const files = new Map(options.files ?? []);
8
101
  const directories = new Set(options.directories ?? []);
9
102
  const env = new Map(options.env ?? []);
@@ -15,31 +108,42 @@ export const makeTestReleaseHostLayer = (options = {}) => {
15
108
  timestampIndex += 1;
16
109
  return value;
17
110
  };
18
- return Layer.succeed(ReleaseHost)({
19
- readFileString: (path) => Effect.sync(() => files.get(path)).pipe(Effect.flatMap((contents) => contents === undefined
20
- ? Effect.fail(HostError.make({ operation: "readFileString", path, reason: "File not found" }))
21
- : Effect.succeed(contents))),
22
- writeFileString: (path, contents) => Effect.sync(() => {
23
- files.set(path, contents);
24
- }),
111
+ const envRecord = {};
112
+ for (const [name, value] of env) {
113
+ envRecord[name] = value;
114
+ }
115
+ return Layer.mergeAll(FileSystem.layerNoop({
25
116
  stat: (path) => Effect.sync(() => {
26
- const contents = files.get(path);
117
+ const contents = getFixtureFile(files, path);
27
118
  if (contents !== undefined) {
28
- return FileInfo.make({ path, sizeBytes: contents.length, kind: "file" });
119
+ return fileInfo(textEncoder.encode(contents).byteLength);
29
120
  }
30
- if (directories.has(path)) {
31
- return FileInfo.make({ path, sizeBytes: 0, kind: "directory" });
121
+ if (hasFixtureDirectory(directories, path)) {
122
+ return directoryInfo;
32
123
  }
33
124
  return undefined;
34
125
  }).pipe(Effect.flatMap((info) => info === undefined
35
- ? Effect.fail(HostError.make({ operation: "stat", path, reason: "File not found" }))
126
+ ? Effect.fail(notFound("stat", path))
36
127
  : Effect.succeed(info))),
37
- hashFile: (path, algorithm) => Effect.sync(() => files.get(path)).pipe(Effect.flatMap((contents) => directories.has(path)
38
- ? Effect.fail(HostError.make({ operation: "hashFile", path, reason: "Only file artifacts can be hashed" }))
39
- : contents === undefined
40
- ? Effect.fail(HostError.make({ operation: "hashFile", path, reason: "File not found" }))
41
- : Effect.succeed(`${checksumPrefix(algorithm)}:${contents.length}:${path}`))),
42
- readEnv: (name) => Effect.sync(() => env.get(name)),
128
+ readFile: (path) => Effect.sync(() => getFixtureFile(files, path)).pipe(Effect.flatMap((contents) => contents === undefined
129
+ ? Effect.fail(notFound("readFile", path))
130
+ : Effect.succeed(textEncoder.encode(contents)))),
131
+ readFileString: (path) => Effect.sync(() => getFixtureFile(files, path)).pipe(Effect.flatMap((contents) => contents === undefined
132
+ ? Effect.fail(notFound("readFileString", path))
133
+ : Effect.succeed(contents))),
134
+ makeDirectory: (path) => Effect.sync(() => {
135
+ directories.add(path);
136
+ }),
137
+ writeFile: (path, data) => Effect.sync(() => {
138
+ files.set(path, textDecoder.decode(data));
139
+ }),
140
+ writeFileString: (path, data) => Effect.sync(() => {
141
+ files.set(path, data);
142
+ })
143
+ }), options.pathLayer ?? Path.layer, Layer.succeed(Crypto.Crypto)(Crypto.make({
144
+ randomBytes: (size) => new Uint8Array(size),
145
+ digest: (_algorithm, data) => Effect.succeed(data)
146
+ })), Layer.succeed(ReleaseCommandRunner)({
43
147
  runCommand: (command) => Effect.gen(function* () {
44
148
  const missing = [];
45
149
  for (const name of command.requiredEnv) {
@@ -48,7 +152,7 @@ export const makeTestReleaseHostLayer = (options = {}) => {
48
152
  }
49
153
  }
50
154
  if (missing.length > 0) {
51
- return yield* Effect.fail(HostError.make({
155
+ return yield* Effect.fail(CommandRunnerError.make({
52
156
  operation: "runCommand",
53
157
  reason: `Missing required environment variables: ${missing.join(", ")}`
54
158
  }));
@@ -69,8 +173,7 @@ export const makeTestReleaseHostLayer = (options = {}) => {
69
173
  endedAt,
70
174
  durationMillis: 0
71
175
  });
72
- }),
73
- now: Effect.sync(nextTimestamp)
74
- });
176
+ })
177
+ }), ConfigProvider.layer(ConfigProvider.fromEnv({ env: envRecord })));
75
178
  };
76
179
  //# sourceMappingURL=test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/host/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/host/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type * as Path from "effect/Path";
2
+ export type WorkspacePathBoundaryReason = "empty-or-parent-traversal" | "outside-root";
3
+ export interface WorkspacePathOk {
4
+ readonly _tag: "Ok";
5
+ readonly path: string;
6
+ }
7
+ export interface WorkspacePathInvalid {
8
+ readonly _tag: "Invalid";
9
+ readonly reason: WorkspacePathBoundaryReason;
10
+ }
11
+ export type WorkspacePathResult = WorkspacePathOk | WorkspacePathInvalid;
12
+ export declare const hasParentTraversal: (pathName: string) => boolean;
13
+ export declare const resolveWorkspacePath: (path: Path.Path, root: string, pathName: string) => string;
14
+ export declare const isInsidePathBoundary: (path: Path.Path, root: string, targetPath: string) => boolean;
15
+ export declare const validateWorkspaceWritePath: (path: Path.Path, root: string, pathName: string) => WorkspacePathResult;
16
+ //# sourceMappingURL=workspace-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-path.d.ts","sourceRoot":"","sources":["../../src/internal/workspace-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AAExC,MAAM,MAAM,2BAA2B,GAAG,2BAA2B,GAAG,cAAc,CAAA;AAEtF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAA;CAC7C;AAED,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,oBAAoB,CAAA;AAExE,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,OACb,CAAA;AAEzC,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAMtF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,YAAY,MAAM,KAAG,OAIxF,CAAA;AAED,eAAO,MAAM,0BAA0B,GACrC,MAAM,IAAI,CAAC,IAAI,EACf,MAAM,MAAM,EACZ,UAAU,MAAM,KACf,mBAkBF,CAAA"}
@@ -0,0 +1,33 @@
1
+ export const hasParentTraversal = (pathName) => pathName.split(/[\\/]+/).includes("..");
2
+ export const resolveWorkspacePath = (path, root, pathName) => {
3
+ const rootPath = path.resolve(root);
4
+ if (path.isAbsolute(pathName)) {
5
+ return path.resolve(pathName);
6
+ }
7
+ return path.resolve(rootPath, pathName);
8
+ };
9
+ export const isInsidePathBoundary = (path, root, targetPath) => {
10
+ const rootPath = path.resolve(root);
11
+ const relative = path.relative(rootPath, targetPath);
12
+ return relative.length === 0 || (!relative.startsWith("..") && !path.isAbsolute(relative));
13
+ };
14
+ export const validateWorkspaceWritePath = (path, root, pathName) => {
15
+ if (pathName.trim().length === 0 || hasParentTraversal(pathName)) {
16
+ return {
17
+ _tag: "Invalid",
18
+ reason: "empty-or-parent-traversal"
19
+ };
20
+ }
21
+ const targetPath = resolveWorkspacePath(path, root, pathName);
22
+ if (isInsidePathBoundary(path, root, targetPath)) {
23
+ return {
24
+ _tag: "Ok",
25
+ path: targetPath
26
+ };
27
+ }
28
+ return {
29
+ _tag: "Invalid",
30
+ reason: "outside-root"
31
+ };
32
+ };
33
+ //# sourceMappingURL=workspace-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-path.js","sourceRoot":"","sources":["../../src/internal/workspace-path.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAW,EAAE,CAC9D,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAe,EAAE,IAAY,EAAE,QAAgB,EAAU,EAAE;IAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACzC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAe,EAAE,IAAY,EAAE,UAAkB,EAAW,EAAE;IACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACpD,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC5F,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,IAAe,EACf,IAAY,EACZ,QAAgB,EACK,EAAE;IACvB,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,2BAA2B;SACpC,CAAA;IACH,CAAC;IACD,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC7D,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,UAAU;SACjB,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,cAAc;KACvB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import * as Crypto from "effect/Crypto";
2
+ import * as Effect from "effect/Effect";
3
+ import * as FileSystem from "effect/FileSystem";
4
+ import * as Path from "effect/Path";
5
+ import { ArtifactIntent, ArtifactInventoryItem } from "../domain/artifact.js";
6
+ import { ReleaseNormalizationError } from "./errors.js";
7
+ export type * from "../types/effect-internal.js";
8
+ export declare const inventoryArtifact: (root: string, artifact: ArtifactIntent) => Effect.Effect<ArtifactInventoryItem, ReleaseNormalizationError, FileSystem.FileSystem | Path.Path | Crypto.Crypto>;
9
+ //# sourceMappingURL=artifact-inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-inventory.d.ts","sourceRoot":"","sources":["../../src/planner/artifact-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,EACL,cAAc,EACd,qBAAqB,EAGtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,mBAAmB,6BAA6B,CAAA;AAwGhD,eAAO,MAAM,iBAAiB,gKAuB5B,CAAA"}
@@ -0,0 +1,85 @@
1
+ import * as Crypto from "effect/Crypto";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Encoding from "effect/Encoding";
4
+ import * as FileSystem from "effect/FileSystem";
5
+ import * as Path from "effect/Path";
6
+ import { ArtifactInventoryItem, Checksum } from "../domain/artifact.js";
7
+ import { ReleaseNormalizationError } from "./errors.js";
8
+ const checksumName = (algorithm) => algorithm === "sha256" ? "SHA-256" : "SHA-512";
9
+ const formatUnknown = (cause) => cause instanceof Error ? cause.message : String(cause);
10
+ const artifactPath = (path, root, pathName) => path.isAbsolute(pathName) ? pathName : path.resolve(root, pathName);
11
+ const artifactKind = (info) => info.type === "Directory" ? "directory" : info.type === "File" ? "file" : "other";
12
+ const normalizationPlatformError = (field) => (cause) => ReleaseNormalizationError.make({
13
+ field,
14
+ reason: formatUnknown(cause)
15
+ });
16
+ const validateArtifactFormat = (artifact, kind) => {
17
+ if (artifact.format === "directory" && kind !== "directory") {
18
+ return Effect.fail(ReleaseNormalizationError.make({
19
+ field: `artifacts.${artifact.id}.format`,
20
+ reason: `Expected directory artifact at ${artifact.path}`
21
+ }));
22
+ }
23
+ if (artifact.format !== "directory" && kind === "directory") {
24
+ return Effect.fail(ReleaseNormalizationError.make({
25
+ field: `artifacts.${artifact.id}.format`,
26
+ reason: `Expected file-like artifact at ${artifact.path}`
27
+ }));
28
+ }
29
+ return Effect.void;
30
+ };
31
+ const checksumArtifact = Effect.fn("checksumArtifact")(function* (artifact, targetPath, fileType) {
32
+ if (fileType !== "File") {
33
+ return yield* Effect.fail(ReleaseNormalizationError.make({
34
+ field: `artifacts.${artifact.id}.checksum`,
35
+ reason: "Only file artifacts can be hashed"
36
+ }));
37
+ }
38
+ const fs = yield* FileSystem.FileSystem;
39
+ const crypto = yield* Crypto.Crypto;
40
+ const bytes = yield* fs.readFile(targetPath).pipe(Effect.mapError(normalizationPlatformError(`artifacts.${artifact.id}.checksum`)));
41
+ const digest = yield* crypto.digest(checksumName("sha256"), bytes).pipe(Effect.mapError(normalizationPlatformError(`artifacts.${artifact.id}.checksum`)));
42
+ return Checksum.make({
43
+ algorithm: "sha256",
44
+ value: Encoding.encodeHex(digest)
45
+ });
46
+ });
47
+ const verifiedChecksum = Effect.fn("verifiedChecksum")(function* (artifact, targetPath, fileType) {
48
+ if (artifact.checksum === undefined) {
49
+ return artifact.format === "directory"
50
+ ? undefined
51
+ : yield* checksumArtifact(artifact, targetPath, fileType);
52
+ }
53
+ if (artifact.checksum.algorithm !== "sha256") {
54
+ return yield* Effect.fail(ReleaseNormalizationError.make({
55
+ field: `artifacts.${artifact.id}.checksum`,
56
+ reason: "Only sha256 artifact checksums are supported."
57
+ }));
58
+ }
59
+ const computed = yield* checksumArtifact(artifact, targetPath, fileType);
60
+ if (artifact.checksum.value !== computed.value) {
61
+ return yield* Effect.fail(ReleaseNormalizationError.make({
62
+ field: `artifacts.${artifact.id}.checksum`,
63
+ reason: "Artifact checksum does not match artifact bytes."
64
+ }));
65
+ }
66
+ return artifact.checksum;
67
+ });
68
+ export const inventoryArtifact = Effect.fn("inventoryArtifact")(function* (root, artifact) {
69
+ const fs = yield* FileSystem.FileSystem;
70
+ const path = yield* Path.Path;
71
+ const targetPath = artifactPath(path, root, artifact.path);
72
+ const info = yield* fs.stat(targetPath).pipe(Effect.mapError(normalizationPlatformError(`artifacts.${artifact.id}.path`)));
73
+ const kind = artifactKind(info);
74
+ yield* validateArtifactFormat(artifact, kind);
75
+ const checksum = yield* verifiedChecksum(artifact, targetPath, info.type);
76
+ return ArtifactInventoryItem.make({
77
+ id: artifact.id,
78
+ path: artifact.path,
79
+ format: artifact.format,
80
+ consumers: [...artifact.consumers].sort(),
81
+ sizeBytes: Number(info.size),
82
+ ...(checksum === undefined ? {} : { checksum })
83
+ });
84
+ });
85
+ //# sourceMappingURL=artifact-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-inventory.js","sourceRoot":"","sources":["../../src/planner/artifact-inventory.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import { ReleaseIntent, ReleasePlan } from "../domain/release.js";
3
3
  export type * from "../types/effect-internal.js";
4
- export declare const createReleasePlan: (intent: ReleaseIntent, root?: string | undefined, configPath?: string | undefined) => Effect.Effect<ReleasePlan, import("./errors.js").ReleaseNormalizationError | import("./errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, import("../host/host.js").ReleaseHost | import("../targets/registry.js").TargetRegistry>;
4
+ export declare const createReleasePlan: (intent: ReleaseIntent, root?: string | undefined, configPath?: string | undefined) => Effect.Effect<ReleasePlan, import("./errors.js").ReleaseNormalizationError | import("./errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../targets/registry.js").TargetRegistry>;
5
5
  //# sourceMappingURL=create-release-plan.d.ts.map