@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.
- package/CHANGELOG.md +7 -0
- package/LICENSE +23 -0
- package/README.md +79 -2
- package/dist/action-client.d.ts +38 -0
- package/dist/action-client.d.ts.map +1 -0
- package/dist/action-client.js +96 -0
- package/dist/action-client.js.map +1 -0
- package/dist/action-context.d.ts +51 -0
- package/dist/action-context.d.ts.map +1 -0
- package/dist/action-context.js +61 -0
- package/dist/action-context.js.map +1 -0
- package/dist/action-runner.d.ts +57 -0
- package/dist/action-runner.d.ts.map +1 -0
- package/dist/action-runner.js +100 -0
- package/dist/action-runner.js.map +1 -0
- package/dist/action-summary.d.ts +45 -0
- package/dist/action-summary.d.ts.map +1 -0
- package/dist/action-summary.js +92 -0
- package/dist/action-summary.js.map +1 -0
- package/dist/action.d.ts +16 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +37 -0
- package/dist/action.js.map +1 -0
- package/dist/errors/action-api-error.d.ts +13 -0
- package/dist/errors/action-api-error.d.ts.map +1 -0
- package/dist/errors/action-api-error.js +17 -0
- package/dist/errors/action-api-error.js.map +1 -0
- package/dist/errors/action-context-error.d.ts +16 -0
- package/dist/errors/action-context-error.d.ts.map +1 -0
- package/dist/errors/action-context-error.js +16 -0
- package/dist/errors/action-context-error.js.map +1 -0
- package/dist/errors/action-failed.d.ts +10 -0
- package/dist/errors/action-failed.d.ts.map +1 -0
- package/dist/errors/action-failed.js +10 -0
- package/dist/errors/action-failed.js.map +1 -0
- package/dist/errors/action-failure.d.ts +15 -0
- package/dist/errors/action-failure.d.ts.map +1 -0
- package/dist/errors/action-failure.js +15 -0
- package/dist/errors/action-failure.js.map +1 -0
- package/dist/errors/action-input-error.d.ts +17 -0
- package/dist/errors/action-input-error.d.ts.map +1 -0
- package/dist/errors/action-input-error.js +22 -0
- package/dist/errors/action-input-error.js.map +1 -0
- package/dist/errors/action-oidc-error.d.ts +15 -0
- package/dist/errors/action-oidc-error.d.ts.map +1 -0
- package/dist/errors/action-oidc-error.js +18 -0
- package/dist/errors/action-oidc-error.js.map +1 -0
- package/dist/errors/action-summary-error.d.ts +15 -0
- package/dist/errors/action-summary-error.d.ts.map +1 -0
- package/dist/errors/action-summary-error.js +18 -0
- package/dist/errors/action-summary-error.js.map +1 -0
- package/dist/errors/input-validation-failure.d.ts +19 -0
- package/dist/errors/input-validation-failure.d.ts.map +1 -0
- package/dist/errors/input-validation-failure.js +19 -0
- package/dist/errors/input-validation-failure.js.map +1 -0
- package/dist/errors/platform-missing.d.ts +9 -0
- package/dist/errors/platform-missing.d.ts.map +1 -0
- package/dist/errors/platform-missing.js +9 -0
- package/dist/errors/platform-missing.js.map +1 -0
- package/dist/input.d.ts +14 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +30 -0
- package/dist/input.js.map +1 -0
- package/dist/object.d.ts +2 -0
- package/dist/object.d.ts.map +1 -0
- package/dist/object.js +2 -0
- package/dist/object.js.map +1 -0
- package/dist/testing/action-client-test.d.ts +7 -0
- package/dist/testing/action-client-test.d.ts.map +1 -0
- package/dist/testing/action-client-test.js +10 -0
- package/dist/testing/action-client-test.js.map +1 -0
- package/dist/testing/action-context-test.d.ts +10 -0
- package/dist/testing/action-context-test.d.ts.map +1 -0
- package/dist/testing/action-context-test.js +27 -0
- package/dist/testing/action-context-test.js.map +1 -0
- package/dist/testing/action-runner-test.d.ts +26 -0
- package/dist/testing/action-runner-test.d.ts.map +1 -0
- package/dist/testing/action-runner-test.js +92 -0
- package/dist/testing/action-runner-test.js.map +1 -0
- package/dist/testing/action-summary-test.d.ts +11 -0
- package/dist/testing/action-summary-test.d.ts.map +1 -0
- package/dist/testing/action-summary-test.js +62 -0
- package/dist/testing/action-summary-test.js.map +1 -0
- package/dist/thrown-message.d.ts +2 -0
- package/dist/thrown-message.d.ts.map +1 -0
- package/dist/thrown-message.js +7 -0
- package/dist/thrown-message.js.map +1 -0
- package/package.json +64 -3
- package/src/action-client.ts +238 -0
- package/src/action-context.ts +121 -0
- package/src/action-runner.ts +221 -0
- package/src/action-summary.ts +143 -0
- package/src/action.ts +81 -0
- package/src/errors/action-api-error.ts +18 -0
- package/src/errors/action-context-error.ts +20 -0
- package/src/errors/action-failed.ts +10 -0
- package/src/errors/action-failure.ts +36 -0
- package/src/errors/action-input-error.ts +24 -0
- package/src/errors/action-oidc-error.ts +19 -0
- package/src/errors/action-summary-error.ts +22 -0
- package/src/errors/input-validation-failure.ts +23 -0
- package/src/errors/platform-missing.ts +9 -0
- package/src/input.ts +60 -0
- package/src/object.ts +4 -0
- package/src/testing/action-client-test.ts +15 -0
- package/src/testing/action-context-test.ts +36 -0
- package/src/testing/action-runner-test.ts +138 -0
- package/src/testing/action-summary-test.ts +82 -0
- package/src/thrown-message.ts +9 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Effect, Layer } from "effect";
|
|
2
|
+
import { ActionSummary } from "../action-summary.ts";
|
|
3
|
+
import type { ActionSummaryApi } from "../action-summary.ts";
|
|
4
|
+
import { ActionSummaryError, ActionSummaryErrorReason } from "../errors/action-summary-error.ts";
|
|
5
|
+
|
|
6
|
+
const attribute = (name: string, value: string | number | undefined) =>
|
|
7
|
+
value === undefined ? "" : ` ${name}="${value}"`;
|
|
8
|
+
|
|
9
|
+
export const make = (
|
|
10
|
+
options: { readonly writeError?: string; readonly clearError?: string } = {},
|
|
11
|
+
) => {
|
|
12
|
+
const chunks = Array.of<string>();
|
|
13
|
+
const summary: ActionSummaryApi = {
|
|
14
|
+
addBreak: () => summary.addRaw("<br>\n"),
|
|
15
|
+
addCodeBlock: (code, lang) =>
|
|
16
|
+
summary.addRaw(`<pre${attribute("lang", lang)}><code>${code}</code></pre>\n`),
|
|
17
|
+
addDetails: (label, content) =>
|
|
18
|
+
summary.addRaw(`<details><summary>${label}</summary>${content}</details>\n`),
|
|
19
|
+
addEOL: () => summary.addRaw("\n"),
|
|
20
|
+
addHeading: (text, level = 1) => summary.addRaw(`<h${level}>${text}</h${level}>\n`),
|
|
21
|
+
addImage: (src, alt, imageOptions) =>
|
|
22
|
+
summary.addRaw(
|
|
23
|
+
`<img src="${src}" alt="${alt}"${attribute("width", imageOptions?.width)}${attribute("height", imageOptions?.height)}>\n`,
|
|
24
|
+
),
|
|
25
|
+
addLink: (text, href) => summary.addRaw(`<a href="${href}">${text}</a>\n`),
|
|
26
|
+
addList: (items, ordered = false) => {
|
|
27
|
+
const tag = ordered ? "ol" : "ul";
|
|
28
|
+
return summary.addRaw(
|
|
29
|
+
`<${tag}>${items.map((item) => `<li>${item}</li>`).join("")}</${tag}>\n`,
|
|
30
|
+
);
|
|
31
|
+
},
|
|
32
|
+
addQuote: (text, cite) =>
|
|
33
|
+
summary.addRaw(`<blockquote${attribute("cite", cite)}>${text}</blockquote>\n`),
|
|
34
|
+
addRaw: (text, addEOL = false) => {
|
|
35
|
+
chunks.push(addEOL ? `${text}\n` : text);
|
|
36
|
+
return summary;
|
|
37
|
+
},
|
|
38
|
+
addSeparator: () => summary.addRaw("<hr>\n"),
|
|
39
|
+
addTable: (rows) => {
|
|
40
|
+
const body = rows
|
|
41
|
+
.map((row) => {
|
|
42
|
+
const cells = row.map((cell) => {
|
|
43
|
+
const tag = cell.header === true ? "th" : "td";
|
|
44
|
+
return `<${tag}${attribute("colspan", cell.colspan)}${attribute("rowspan", cell.rowspan)}>${cell.data}</${tag}>`;
|
|
45
|
+
});
|
|
46
|
+
return `<tr>${cells.join("")}</tr>`;
|
|
47
|
+
})
|
|
48
|
+
.join("");
|
|
49
|
+
return summary.addRaw(`<table>${body}</table>\n`);
|
|
50
|
+
},
|
|
51
|
+
clear: () =>
|
|
52
|
+
options.clearError === undefined
|
|
53
|
+
? Effect.sync(() => {
|
|
54
|
+
chunks.splice(0);
|
|
55
|
+
return summary;
|
|
56
|
+
})
|
|
57
|
+
: Effect.fail(
|
|
58
|
+
new ActionSummaryError({
|
|
59
|
+
description: options.clearError,
|
|
60
|
+
reason: ActionSummaryErrorReason.WriteFailed,
|
|
61
|
+
}),
|
|
62
|
+
),
|
|
63
|
+
emptyBuffer: () => {
|
|
64
|
+
chunks.splice(0);
|
|
65
|
+
return summary;
|
|
66
|
+
},
|
|
67
|
+
isEmptyBuffer: () => chunks.every((chunk) => chunk === ""),
|
|
68
|
+
stringify: () => chunks.join(""),
|
|
69
|
+
write: () =>
|
|
70
|
+
options.writeError === undefined
|
|
71
|
+
? Effect.succeed(summary)
|
|
72
|
+
: Effect.fail(
|
|
73
|
+
new ActionSummaryError({
|
|
74
|
+
description: options.writeError,
|
|
75
|
+
reason: ActionSummaryErrorReason.WriteFailed,
|
|
76
|
+
}),
|
|
77
|
+
),
|
|
78
|
+
};
|
|
79
|
+
return { getBuffer: () => chunks.join(""), layer: Layer.succeed(ActionSummary, summary) };
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const { layer } = make();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Option, Schema } from "effect";
|
|
2
|
+
|
|
3
|
+
const decodeThrown = Schema.decodeUnknownOption(Schema.Struct({ message: Schema.String }));
|
|
4
|
+
|
|
5
|
+
export const thrownMessage = (cause: unknown, fallback: string) =>
|
|
6
|
+
Option.match(decodeThrown(cause), {
|
|
7
|
+
onNone: () => fallback,
|
|
8
|
+
onSome: (thrown) => thrown.message,
|
|
9
|
+
});
|