@computis/effect-github 0.0.0-stage → 0.1.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.
Files changed (109) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +23 -0
  3. package/README.md +79 -2
  4. package/dist/action-client.d.ts +38 -0
  5. package/dist/action-client.d.ts.map +1 -0
  6. package/dist/action-client.js +96 -0
  7. package/dist/action-client.js.map +1 -0
  8. package/dist/action-context.d.ts +51 -0
  9. package/dist/action-context.d.ts.map +1 -0
  10. package/dist/action-context.js +61 -0
  11. package/dist/action-context.js.map +1 -0
  12. package/dist/action-runner.d.ts +57 -0
  13. package/dist/action-runner.d.ts.map +1 -0
  14. package/dist/action-runner.js +100 -0
  15. package/dist/action-runner.js.map +1 -0
  16. package/dist/action-summary.d.ts +45 -0
  17. package/dist/action-summary.d.ts.map +1 -0
  18. package/dist/action-summary.js +92 -0
  19. package/dist/action-summary.js.map +1 -0
  20. package/dist/action.d.ts +16 -0
  21. package/dist/action.d.ts.map +1 -0
  22. package/dist/action.js +37 -0
  23. package/dist/action.js.map +1 -0
  24. package/dist/errors/action-api-error.d.ts +13 -0
  25. package/dist/errors/action-api-error.d.ts.map +1 -0
  26. package/dist/errors/action-api-error.js +17 -0
  27. package/dist/errors/action-api-error.js.map +1 -0
  28. package/dist/errors/action-context-error.d.ts +16 -0
  29. package/dist/errors/action-context-error.d.ts.map +1 -0
  30. package/dist/errors/action-context-error.js +16 -0
  31. package/dist/errors/action-context-error.js.map +1 -0
  32. package/dist/errors/action-failed.d.ts +10 -0
  33. package/dist/errors/action-failed.d.ts.map +1 -0
  34. package/dist/errors/action-failed.js +10 -0
  35. package/dist/errors/action-failed.js.map +1 -0
  36. package/dist/errors/action-failure.d.ts +15 -0
  37. package/dist/errors/action-failure.d.ts.map +1 -0
  38. package/dist/errors/action-failure.js +15 -0
  39. package/dist/errors/action-failure.js.map +1 -0
  40. package/dist/errors/action-input-error.d.ts +17 -0
  41. package/dist/errors/action-input-error.d.ts.map +1 -0
  42. package/dist/errors/action-input-error.js +22 -0
  43. package/dist/errors/action-input-error.js.map +1 -0
  44. package/dist/errors/action-oidc-error.d.ts +15 -0
  45. package/dist/errors/action-oidc-error.d.ts.map +1 -0
  46. package/dist/errors/action-oidc-error.js +18 -0
  47. package/dist/errors/action-oidc-error.js.map +1 -0
  48. package/dist/errors/action-summary-error.d.ts +15 -0
  49. package/dist/errors/action-summary-error.d.ts.map +1 -0
  50. package/dist/errors/action-summary-error.js +18 -0
  51. package/dist/errors/action-summary-error.js.map +1 -0
  52. package/dist/errors/input-validation-failure.d.ts +19 -0
  53. package/dist/errors/input-validation-failure.d.ts.map +1 -0
  54. package/dist/errors/input-validation-failure.js +19 -0
  55. package/dist/errors/input-validation-failure.js.map +1 -0
  56. package/dist/errors/platform-missing.d.ts +9 -0
  57. package/dist/errors/platform-missing.d.ts.map +1 -0
  58. package/dist/errors/platform-missing.js +9 -0
  59. package/dist/errors/platform-missing.js.map +1 -0
  60. package/dist/input.d.ts +14 -0
  61. package/dist/input.d.ts.map +1 -0
  62. package/dist/input.js +30 -0
  63. package/dist/input.js.map +1 -0
  64. package/dist/object.d.ts +2 -0
  65. package/dist/object.d.ts.map +1 -0
  66. package/dist/object.js +2 -0
  67. package/dist/object.js.map +1 -0
  68. package/dist/testing/action-client-test.d.ts +7 -0
  69. package/dist/testing/action-client-test.d.ts.map +1 -0
  70. package/dist/testing/action-client-test.js +10 -0
  71. package/dist/testing/action-client-test.js.map +1 -0
  72. package/dist/testing/action-context-test.d.ts +10 -0
  73. package/dist/testing/action-context-test.d.ts.map +1 -0
  74. package/dist/testing/action-context-test.js +27 -0
  75. package/dist/testing/action-context-test.js.map +1 -0
  76. package/dist/testing/action-runner-test.d.ts +26 -0
  77. package/dist/testing/action-runner-test.d.ts.map +1 -0
  78. package/dist/testing/action-runner-test.js +92 -0
  79. package/dist/testing/action-runner-test.js.map +1 -0
  80. package/dist/testing/action-summary-test.d.ts +11 -0
  81. package/dist/testing/action-summary-test.d.ts.map +1 -0
  82. package/dist/testing/action-summary-test.js +62 -0
  83. package/dist/testing/action-summary-test.js.map +1 -0
  84. package/dist/thrown-message.d.ts +2 -0
  85. package/dist/thrown-message.d.ts.map +1 -0
  86. package/dist/thrown-message.js +7 -0
  87. package/dist/thrown-message.js.map +1 -0
  88. package/package.json +64 -3
  89. package/src/action-client.ts +238 -0
  90. package/src/action-context.ts +121 -0
  91. package/src/action-runner.ts +221 -0
  92. package/src/action-summary.ts +143 -0
  93. package/src/action.ts +81 -0
  94. package/src/errors/action-api-error.ts +18 -0
  95. package/src/errors/action-context-error.ts +20 -0
  96. package/src/errors/action-failed.ts +10 -0
  97. package/src/errors/action-failure.ts +36 -0
  98. package/src/errors/action-input-error.ts +24 -0
  99. package/src/errors/action-oidc-error.ts +19 -0
  100. package/src/errors/action-summary-error.ts +22 -0
  101. package/src/errors/input-validation-failure.ts +23 -0
  102. package/src/errors/platform-missing.ts +9 -0
  103. package/src/input.ts +60 -0
  104. package/src/object.ts +4 -0
  105. package/src/testing/action-client-test.ts +15 -0
  106. package/src/testing/action-context-test.ts +36 -0
  107. package/src/testing/action-runner-test.ts +138 -0
  108. package/src/testing/action-summary-test.ts +82 -0
  109. package/src/thrown-message.ts +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAsC,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,sBAAsB,EAEvB,MAAM,sCAAsC,CAAC;AAI9C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAUrD,CAAC;AAEF,eAAO,MAAM,GAAG,8DAGd,CAAC;AAEH,eAAO,MAAM,KAAK,GAA4C,CAAC,SAAS,MAAM,CAAC,GAAG,oHAiBhF,CAAC;AAEH,eAAO,MAAM,MAAM,SAAU,MAAM,gEAA+B,CAAC;AAEnE,eAAO,MAAM,cAAc,SAAU,MAAM,gEAAuC,CAAC;AAEnF,eAAO,MAAM,OAAO,SAAU,MAAM,gEAA+D,CAAC;AAEpG,eAAO,MAAM,MAAM,SAAU,MAAM,gEAAyC,CAAC;AAE7E,eAAO,MAAM,OAAO,SAAU,MAAM,iEAA6B,CAAC;AAElE,eAAO,MAAM,MAAM,SAAU,MAAM,oGAC2B,CAAC;AAE/D,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,GAAG,QAAQ,MAAM,UAAU,CAAC,2FACtB,CAAC"}
package/dist/input.js ADDED
@@ -0,0 +1,30 @@
1
+ import { Effect, Schema, SchemaGetter, SchemaTransformation } from "effect";
2
+ import { ActionRunner } from "./action-runner.js";
3
+ import { InputValidationFailure, InputValidationFailureReason, } from "./errors/input-validation-failure.js";
4
+ const yamlTrue = new Set(["true", "yes", "on", "1"]);
5
+ export const YamlBoolean = Schema.String.pipe(Schema.decodeTo(Schema.String, SchemaTransformation.toLowerCase()), Schema.decodeTo(Schema.Literals(["true", "yes", "on", "1", "false", "no", "off", "0", ""]), SchemaTransformation.passthroughSupertype()), Schema.decodeTo(Schema.Boolean, {
6
+ decode: SchemaGetter.transform((literal) => yamlTrue.has(literal)),
7
+ encode: SchemaGetter.transform((value) => (value ? "true" : "false")),
8
+ }));
9
+ export const raw = Effect.fn("Input.raw")(function* raw(name) {
10
+ const runner = yield* ActionRunner;
11
+ return yield* runner.getInput(name).pipe(Effect.orDie);
12
+ });
13
+ export const parse = Effect.fn("Input.parse")(function* parse(name, schema) {
14
+ const value = yield* raw(name);
15
+ return yield* Schema.decodeUnknownEffect(schema)(value).pipe(Effect.mapError((cause) => new InputValidationFailure({
16
+ cause,
17
+ input: name,
18
+ message: cause.message,
19
+ reason: InputValidationFailureReason.SchemaValidation,
20
+ value,
21
+ })));
22
+ });
23
+ export const string = (name) => parse(name, Schema.String);
24
+ export const nonEmptyString = (name) => parse(name, Schema.NonEmptyString);
25
+ export const integer = (name) => parse(name, Schema.NumberFromString.check(Schema.isInt()));
26
+ export const number = (name) => parse(name, Schema.NumberFromString);
27
+ export const boolean = (name) => parse(name, YamlBoolean);
28
+ export const secret = (name) => parse(name, Schema.RedactedFromValue(Schema.NonEmptyString));
29
+ export const json = (name, schema) => parse(name, Schema.fromJsonString(schema));
30
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const whenDefined: <T, U extends object>(value: T, factory: (value: NonNullable<T>) => U) => U | undefined;
2
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,SAAS,MAAM,SACtC,CAAC,WACC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,kBACkC,CAAC"}
package/dist/object.js ADDED
@@ -0,0 +1,2 @@
1
+ export const whenDefined = (value, factory) => (value === undefined || value === null ? undefined : factory(value));
2
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAQ,EACR,OAAqC,EACrC,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Layer } from "effect";
2
+ import { ActionClient } from "../action-client.ts";
3
+ export declare const make: (options?: {
4
+ readonly fetch?: typeof globalThis.fetch;
5
+ }) => Layer.Layer<ActionClient, never, never>;
6
+ export declare const layer: Layer.Layer<ActionClient>;
7
+ //# sourceMappingURL=action-client-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-client-test.d.ts","sourceRoot":"","sources":["../../src/testing/action-client-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,eAAO,MAAM,IAAI,aAAa;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAAE,4CAQtE,CAAC;AAEL,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Redacted } from "effect";
2
+ import { ActionClient } from "../action-client.js";
3
+ export const make = (options = {}) => ActionClient.layer(Redacted.make("test-token"), {
4
+ request: {
5
+ fetch: options.fetch ??
6
+ (async () => await Promise.resolve(Response.json({ message: "Not Found" }, { status: 404 }))),
7
+ },
8
+ });
9
+ export const layer = make();
10
+ //# sourceMappingURL=action-client-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-client-test.js","sourceRoot":"","sources":["../../src/testing/action-client-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,GAAiD,EAAE,EAAE,EAAE,CACjF,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;IAC9C,OAAO,EAAE;QACP,KAAK,EACH,OAAO,CAAC,KAAK;YACb,CAAC,KAAK,IAAI,EAAE,CACV,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;KACrF;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,KAAK,GAA8B,IAAI,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Layer } from "effect";
2
+ import { ActionContext } from "../action-context.ts";
3
+ import type { ActionContextApi, IssueContext, RepoContext } from "../action-context.ts";
4
+ import { ActionContextError } from "../errors/action-context-error.ts";
5
+ export declare const make: (options?: Partial<Omit<ActionContextApi, "repo" | "issue"> & {
6
+ readonly repo: RepoContext | ActionContextError;
7
+ readonly issue: IssueContext | ActionContextError;
8
+ }>) => Layer.Layer<ActionContext, never, never>;
9
+ export declare const layer: Layer.Layer<ActionContext, never, never>;
10
+ //# sourceMappingURL=action-context-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-context-test.d.ts","sourceRoot":"","sources":["../../src/testing/action-context-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,eAAO,MAAM,IAAI,aACN,OAAO,CACd,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IACzC,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,kBAAkB,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAAC;CACnD,CACF,6CAsBF,CAAC;AAEF,eAAO,MAAM,KAAK,0CAAS,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Effect, Layer } from "effect";
2
+ import { ActionContext } from "../action-context.js";
3
+ import { ActionContextError } from "../errors/action-context-error.js";
4
+ export const make = (options = {}) => {
5
+ const repo = options.repo ?? { owner: "octocat", repo: "hello-world" };
6
+ const issue = options.issue ?? { number: 1, owner: "octocat", repo: "hello-world" };
7
+ return Layer.succeed(ActionContext, {
8
+ action: options.action ?? "run",
9
+ actor: options.actor ?? "octocat",
10
+ apiUrl: options.apiUrl ?? "https://api.github.com",
11
+ eventName: options.eventName ?? "push",
12
+ graphqlUrl: options.graphqlUrl ?? "https://api.github.com/graphql",
13
+ issue: issue instanceof ActionContextError ? Effect.fail(issue) : Effect.succeed(issue),
14
+ job: options.job ?? "build",
15
+ payload: options.payload ?? {},
16
+ ref: options.ref ?? "refs/heads/main",
17
+ repo: repo instanceof ActionContextError ? Effect.fail(repo) : Effect.succeed(repo),
18
+ runAttempt: options.runAttempt ?? 1,
19
+ runId: options.runId ?? 12_345,
20
+ runNumber: options.runNumber ?? 1,
21
+ serverUrl: options.serverUrl ?? "https://github.com",
22
+ sha: options.sha ?? "abc123def456",
23
+ workflow: options.workflow ?? "CI",
24
+ });
25
+ };
26
+ export const layer = make();
27
+ //# sourceMappingURL=action-context-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-context-test.js","sourceRoot":"","sources":["../../src/testing/action-context-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,OAAO,GAKH,EAAE,EACN,EAAE;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACpF,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;QACjC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,wBAAwB;QAClD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,gCAAgC;QAClE,KAAK,EAAE,KAAK,YAAY,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvF,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;QAC9B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,iBAAiB;QACrC,IAAI,EAAE,IAAI,YAAY,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QACnF,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;QACnC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,oBAAoB;QACpD,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,cAAc;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;KACnC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Layer } from "effect";
2
+ import type { Schema } from "effect";
3
+ import { ActionRunner } from "../action-runner.ts";
4
+ export interface LogEntry {
5
+ readonly level: "debug" | "info" | "warning" | "error" | "notice";
6
+ readonly message: string;
7
+ }
8
+ export declare const make: (options?: {
9
+ readonly inputs?: Readonly<Record<string, string>>;
10
+ readonly state?: Readonly<Record<string, string>>;
11
+ readonly idToken?: string;
12
+ }) => {
13
+ layer: Layer.Layer<ActionRunner, never, never>;
14
+ recording: {
15
+ failures: string[];
16
+ groups: string[];
17
+ logs: LogEntry[];
18
+ outputs: Map<string, Schema.Json>;
19
+ paths: string[];
20
+ secrets: string[];
21
+ state: Map<string, string>;
22
+ variables: Map<string, string>;
23
+ };
24
+ };
25
+ export declare const layer: Layer.Layer<ActionRunner, never, never>;
26
+ //# sourceMappingURL=action-runner-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-runner-test.d.ts","sourceRoot":"","sources":["../../src/testing/action-runner-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAuB,MAAM,QAAQ,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAQD,eAAO,MAAM,IAAI,aACN;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;;;;;;;;;;;;CAiHF,CAAC;AAEF,eAAO,MAAQ,KAAK,yCAAW,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { Effect, Layer, Predicate, Redacted } from "effect";
2
+ import { ActionRunner } from "../action-runner.js";
3
+ import { ActionInputError, ActionInputErrorReason } from "../errors/action-input-error.js";
4
+ const trueInputs = new Set(["true", "True", "TRUE"]);
5
+ const falseInputs = new Set(["false", "False", "FALSE"]);
6
+ const messageText = (message) => Predicate.isString(message) ? message : message.message;
7
+ export const make = (options = {}) => {
8
+ const inputs = new Map(Object.entries(options.inputs ?? {}));
9
+ const recording = {
10
+ failures: Array.of(),
11
+ groups: Array.of(),
12
+ logs: Array.of(),
13
+ outputs: new Map(),
14
+ paths: Array.of(),
15
+ secrets: Array.of(),
16
+ state: new Map(Object.entries(options.state ?? {})),
17
+ variables: new Map(),
18
+ };
19
+ const readInput = Effect.fn("ActionRunnerTest.readInput")(function* readInput(name, inputOptions = {}) {
20
+ const value = inputs.get(name) ?? "";
21
+ if (inputOptions.required === true && value === "") {
22
+ return yield* new ActionInputError({ name, reason: ActionInputErrorReason.Missing });
23
+ }
24
+ return inputOptions.trimWhitespace === false ? value : value.trim();
25
+ });
26
+ const log = (level) => (message) => Effect.sync(() => {
27
+ recording.logs.push({ level, message: messageText(message) });
28
+ });
29
+ const layer = Layer.succeed(ActionRunner, {
30
+ addPath: (path) => Effect.sync(() => {
31
+ recording.paths.push(path);
32
+ }),
33
+ debug: log("debug"),
34
+ endGroup: () => Effect.sync(() => {
35
+ recording.groups.pop();
36
+ }),
37
+ error: log("error"),
38
+ exportVariable: (name, value) => Effect.sync(() => {
39
+ recording.variables.set(name, value);
40
+ }),
41
+ getBooleanInput: Effect.fn("TestActionRunner.getBooleanInput")(function* getBooleanInput(name, inputOptions) {
42
+ const value = yield* readInput(name, inputOptions).pipe(Effect.mapError((cause) => new ActionInputError({ cause, name, reason: ActionInputErrorReason.InvalidType })));
43
+ if (trueInputs.has(value)) {
44
+ return true;
45
+ }
46
+ if (falseInputs.has(value)) {
47
+ return false;
48
+ }
49
+ return yield* new ActionInputError({
50
+ name,
51
+ reason: ActionInputErrorReason.InvalidType,
52
+ value,
53
+ });
54
+ }),
55
+ getIDToken: () => Effect.succeed(Redacted.make(options.idToken ?? "test-oidc-token")),
56
+ getInput: readInput,
57
+ getMultilineInput: Effect.fn("ActionRunnerTest.getMultilineInput")(function* getMultilineInput(name, inputOptions) {
58
+ const value = yield* readInput(name, { ...inputOptions, trimWhitespace: false });
59
+ return value
60
+ .split("\n")
61
+ .filter((line) => line !== "")
62
+ .map((line) => (inputOptions?.trimWhitespace === false ? line : line.trim()));
63
+ }),
64
+ getState: (name) => Effect.sync(() => recording.state.get(name) ?? ""),
65
+ group: (name, fn) => Effect.acquireUseRelease(Effect.sync(() => {
66
+ recording.groups.push(name);
67
+ }), fn, () => Effect.sync(() => {
68
+ recording.groups.pop();
69
+ })).pipe(Effect.withSpan("ActionRunnerTest.group", { attributes: { group: name } })),
70
+ info: log("info"),
71
+ notice: log("notice"),
72
+ saveState: (name, value) => Effect.sync(() => {
73
+ recording.state.set(name, Predicate.isString(value) ? value : JSON.stringify(value));
74
+ }),
75
+ setFailed: (message) => Effect.sync(() => {
76
+ recording.failures.push(messageText(message));
77
+ }),
78
+ setOutput: (name, value) => Effect.sync(() => {
79
+ recording.outputs.set(name, value);
80
+ }),
81
+ setSecret: (secret) => Effect.sync(() => {
82
+ recording.secrets.push(secret);
83
+ }),
84
+ startGroup: (name) => Effect.sync(() => {
85
+ recording.groups.push(name);
86
+ }),
87
+ warning: log("warning"),
88
+ });
89
+ return { layer, recording };
90
+ };
91
+ export const { layer } = make();
92
+ //# sourceMappingURL=action-runner-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-runner-test.js","sourceRoot":"","sources":["../../src/testing/action-runner-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Layer } from "effect";
2
+ import { ActionSummary } from "../action-summary.ts";
3
+ export declare const make: (options?: {
4
+ readonly writeError?: string;
5
+ readonly clearError?: string;
6
+ }) => {
7
+ getBuffer: () => string;
8
+ layer: Layer.Layer<ActionSummary, never, never>;
9
+ };
10
+ export declare const layer: Layer.Layer<ActionSummary, never, never>;
11
+ //# sourceMappingURL=action-summary-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-summary-test.d.ts","sourceRoot":"","sources":["../../src/testing/action-summary-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAOrD,eAAO,MAAM,IAAI,aACN;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;IAqE9D,SAAS;IAAyB,KAAK;CACjD,CAAC;AAEF,eAAO,MAAQ,KAAK,0CAAW,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { Effect, Layer } from "effect";
2
+ import { ActionSummary } from "../action-summary.js";
3
+ import { ActionSummaryError, ActionSummaryErrorReason } from "../errors/action-summary-error.js";
4
+ const attribute = (name, value) => value === undefined ? "" : ` ${name}="${value}"`;
5
+ export const make = (options = {}) => {
6
+ const chunks = Array.of();
7
+ const summary = {
8
+ addBreak: () => summary.addRaw("<br>\n"),
9
+ addCodeBlock: (code, lang) => summary.addRaw(`<pre${attribute("lang", lang)}><code>${code}</code></pre>\n`),
10
+ addDetails: (label, content) => summary.addRaw(`<details><summary>${label}</summary>${content}</details>\n`),
11
+ addEOL: () => summary.addRaw("\n"),
12
+ addHeading: (text, level = 1) => summary.addRaw(`<h${level}>${text}</h${level}>\n`),
13
+ addImage: (src, alt, imageOptions) => summary.addRaw(`<img src="${src}" alt="${alt}"${attribute("width", imageOptions?.width)}${attribute("height", imageOptions?.height)}>\n`),
14
+ addLink: (text, href) => summary.addRaw(`<a href="${href}">${text}</a>\n`),
15
+ addList: (items, ordered = false) => {
16
+ const tag = ordered ? "ol" : "ul";
17
+ return summary.addRaw(`<${tag}>${items.map((item) => `<li>${item}</li>`).join("")}</${tag}>\n`);
18
+ },
19
+ addQuote: (text, cite) => summary.addRaw(`<blockquote${attribute("cite", cite)}>${text}</blockquote>\n`),
20
+ addRaw: (text, addEOL = false) => {
21
+ chunks.push(addEOL ? `${text}\n` : text);
22
+ return summary;
23
+ },
24
+ addSeparator: () => summary.addRaw("<hr>\n"),
25
+ addTable: (rows) => {
26
+ const body = rows
27
+ .map((row) => {
28
+ const cells = row.map((cell) => {
29
+ const tag = cell.header === true ? "th" : "td";
30
+ return `<${tag}${attribute("colspan", cell.colspan)}${attribute("rowspan", cell.rowspan)}>${cell.data}</${tag}>`;
31
+ });
32
+ return `<tr>${cells.join("")}</tr>`;
33
+ })
34
+ .join("");
35
+ return summary.addRaw(`<table>${body}</table>\n`);
36
+ },
37
+ clear: () => options.clearError === undefined
38
+ ? Effect.sync(() => {
39
+ chunks.splice(0);
40
+ return summary;
41
+ })
42
+ : Effect.fail(new ActionSummaryError({
43
+ description: options.clearError,
44
+ reason: ActionSummaryErrorReason.WriteFailed,
45
+ })),
46
+ emptyBuffer: () => {
47
+ chunks.splice(0);
48
+ return summary;
49
+ },
50
+ isEmptyBuffer: () => chunks.every((chunk) => chunk === ""),
51
+ stringify: () => chunks.join(""),
52
+ write: () => options.writeError === undefined
53
+ ? Effect.succeed(summary)
54
+ : Effect.fail(new ActionSummaryError({
55
+ description: options.writeError,
56
+ reason: ActionSummaryErrorReason.WriteFailed,
57
+ })),
58
+ };
59
+ return { getBuffer: () => chunks.join(""), layer: Layer.succeed(ActionSummary, summary) };
60
+ };
61
+ export const { layer } = make();
62
+ //# sourceMappingURL=action-summary-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-summary-test.js","sourceRoot":"","sources":["../../src/testing/action-summary-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const thrownMessage: (cause: unknown, fallback: string) => string;
2
+ //# sourceMappingURL=thrown-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thrown-message.d.ts","sourceRoot":"","sources":["../src/thrown-message.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,UAAW,OAAO,YAAY,MAAM,WAI1D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Option, Schema } from "effect";
2
+ const decodeThrown = Schema.decodeUnknownOption(Schema.Struct({ message: Schema.String }));
3
+ export const thrownMessage = (cause, fallback) => Option.match(decodeThrown(cause), {
4
+ onNone: () => fallback,
5
+ onSome: (thrown) => thrown.message,
6
+ });
7
+ //# sourceMappingURL=thrown-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thrown-message.js","sourceRoot":"","sources":["../src/thrown-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,QAAgB,EAAE,EAAE,CAChE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;IAChC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;IACtB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO;CACnC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,67 @@
1
1
  {
2
2
  "name": "@computis/effect-github",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "Write the logic of GitHub Actions with Effect: inputs, outputs, event context, Octokit, job summary and runMain.",
5
+ "homepage": "https://github.com/computis-labs/oss/tree/main/packages/effect-github#readme",
6
+ "bugs": "https://github.com/computis-labs/oss/issues",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/computis-labs/oss.git",
11
+ "directory": "packages/effect-github"
12
+ },
13
+ "files": [
14
+ "src/**/*.ts",
15
+ "!src/**/*.test.ts",
16
+ "dist/**/*.js",
17
+ "dist/**/*.js.map",
18
+ "dist/**/*.d.ts",
19
+ "dist/**/*.d.ts.map",
20
+ "CHANGELOG.md"
21
+ ],
22
+ "type": "module",
23
+ "exports": {
24
+ "./action": "./dist/action.js",
25
+ "./action-client": "./dist/action-client.js",
26
+ "./action-context": "./dist/action-context.js",
27
+ "./action-runner": "./dist/action-runner.js",
28
+ "./action-summary": "./dist/action-summary.js",
29
+ "./errors/*": "./dist/errors/*.js",
30
+ "./input": "./dist/input.js",
31
+ "./testing/*": "./dist/testing/*.js",
32
+ "./package.json": "./package.json"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public",
36
+ "provenance": true
37
+ },
38
+ "dependencies": {
39
+ "@actions/core": "3.0.1",
40
+ "@actions/github": "9.1.1"
41
+ },
42
+ "devDependencies": {
43
+ "@effect/platform-node": "4.0.3",
44
+ "@effect/vitest": "4.0.3",
45
+ "@types/node": "^26.6.4",
46
+ "effect": "4.0.3",
47
+ "vitest": "5.0.3",
48
+ "@computis/config": "0.0.1"
49
+ },
50
+ "peerDependencies": {
51
+ "@effect/platform-node": "^4.0.0",
52
+ "effect": "^4.0.0"
53
+ },
54
+ "peerDependenciesMeta": {
55
+ "@effect/platform-node": {
56
+ "optional": true
57
+ }
58
+ },
59
+ "engines": {
60
+ "node": ">=22"
61
+ },
62
+ "scripts": {
63
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
64
+ "test": "vitest run",
65
+ "typecheck": "tsc -p tsconfig.json --noEmit"
66
+ }
6
67
  }