@effect-app/infra 4.0.0-beta.241 → 4.0.0-beta.243
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 +21 -0
- package/dist/CUPS.d.ts +21 -7
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +20 -3
- package/package.json +2 -2
- package/src/CUPS.ts +37 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.243
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8eb6737: Wrap `CUPS` exec failures in tagged `CUPSError` instead of `UnknownException`.
|
|
8
|
+
|
|
9
|
+
Retains `command`, `message`, exit `code`, `signal`, `killed`, `stdout`,
|
|
10
|
+
`stderr`, and original `cause` from the underlying `child_process.exec`
|
|
11
|
+
rejection so callers can branch on real failure detail.
|
|
12
|
+
|
|
13
|
+
- effect-app@4.0.0-beta.243
|
|
14
|
+
|
|
15
|
+
## 4.0.0-beta.242
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [da83c1f]
|
|
20
|
+
- Updated dependencies [21017d5]
|
|
21
|
+
- Updated dependencies [2495ace]
|
|
22
|
+
- effect-app@4.0.0-beta.242
|
|
23
|
+
|
|
3
24
|
## 4.0.0-beta.241
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/dist/CUPS.d.ts
CHANGED
|
@@ -7,6 +7,20 @@ import * as Option from "effect-app/Option";
|
|
|
7
7
|
import * as S from "effect-app/Schema";
|
|
8
8
|
export declare const PrinterId: S.WithDefaults<import("effect-app/Schema/brand").BrandedSchema<import("effect/Schema").NonEmptyString, S.NonEmptyString255>> & import("effect-app/Schema/brand").BrandedSchema<import("effect/Schema").NonEmptyString, S.NonEmptyString255>;
|
|
9
9
|
export type PrinterId = S.NonEmptyString255;
|
|
10
|
+
declare const CUPSError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
11
|
+
readonly _tag: "CUPSError";
|
|
12
|
+
} & Readonly<A>;
|
|
13
|
+
export declare class CUPSError extends CUPSError_base<{
|
|
14
|
+
readonly command: string;
|
|
15
|
+
readonly message: string;
|
|
16
|
+
readonly code: number | string | undefined;
|
|
17
|
+
readonly signal: NodeJS.Signals | null | undefined;
|
|
18
|
+
readonly killed: boolean | undefined;
|
|
19
|
+
readonly stdout: string | undefined;
|
|
20
|
+
readonly stderr: string | undefined;
|
|
21
|
+
readonly cause: unknown;
|
|
22
|
+
}> {
|
|
23
|
+
}
|
|
10
24
|
export declare const prepareTempDir: Effect.Effect<void, never, never>;
|
|
11
25
|
export declare const makePrintJobTempFile: (data: string | AsyncIterable<string | NodeJS.ArrayBufferView<ArrayBufferLike>> | Iterable<string | NodeJS.ArrayBufferView<ArrayBufferLike>> | import("node:stream") | NodeJS.ArrayBufferView<ArrayBufferLike>, options?: FileOptions) => Effect.Effect<string, import("effect/Cause").UnknownError, import("effect/Scope").Scope>;
|
|
12
26
|
export declare const makePrintJobTempFileArrayBuffer: (buffer: ArrayBuffer, options?: FileOptions) => Effect.Effect<string, import("effect/Cause").UnknownError, import("effect/Scope").Scope>;
|
|
@@ -17,27 +31,27 @@ declare const CUPS_base: Context.ServiceClass<CUPS, "effect-app/CUPS", {
|
|
|
17
31
|
print: (buffer: ArrayBuffer, printerId: PrinterId, ...options: string[]) => Effect.Effect<{
|
|
18
32
|
stdout: string;
|
|
19
33
|
stderr: string;
|
|
20
|
-
}, import("effect/Cause").UnknownError, never>;
|
|
34
|
+
}, CUPSError | import("effect/Cause").UnknownError, never>;
|
|
21
35
|
printFile: (filePath: string, printerId: PrinterId, ...options: string[]) => Effect.Effect<{
|
|
22
36
|
stdout: string;
|
|
23
37
|
stderr: string;
|
|
24
|
-
},
|
|
25
|
-
getAvailablePrinters: Effect.Effect<S.NonEmptyString255[],
|
|
38
|
+
}, CUPSError, never>;
|
|
39
|
+
getAvailablePrinters: Effect.Effect<S.NonEmptyString255[], CUPSError, never>;
|
|
26
40
|
}> & {
|
|
27
41
|
readonly make: Effect.Effect<{
|
|
28
42
|
print: (buffer: ArrayBuffer, printerId: PrinterId, ...options: string[]) => Effect.Effect<{
|
|
29
43
|
stdout: string;
|
|
30
44
|
stderr: string;
|
|
31
|
-
}, import("effect/Cause").UnknownError, never>;
|
|
45
|
+
}, CUPSError | import("effect/Cause").UnknownError, never>;
|
|
32
46
|
printFile: (filePath: string, printerId: PrinterId, ...options: string[]) => Effect.Effect<{
|
|
33
47
|
stdout: string;
|
|
34
48
|
stderr: string;
|
|
35
|
-
},
|
|
36
|
-
getAvailablePrinters: Effect.Effect<S.NonEmptyString255[],
|
|
49
|
+
}, CUPSError, never>;
|
|
50
|
+
getAvailablePrinters: Effect.Effect<S.NonEmptyString255[], CUPSError, never>;
|
|
37
51
|
}, Config.ConfigError, never>;
|
|
38
52
|
};
|
|
39
53
|
export declare class CUPS extends CUPS_base {
|
|
40
54
|
static readonly Fake: Layer.Layer<CUPS, never, never>;
|
|
41
55
|
}
|
|
42
56
|
export {};
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ1VQUy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NVUFMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFZLE1BQU0sNEJBQTRCLENBQUE7QUFFdkUsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFVdEMsZUFBTyxNQUFNLFNBQVMsNk9BQXNCLENBQUE7QUFDNUMsTUFBTSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUE7Ozs7QUFXM0MscUJBQWEsU0FBVSxTQUFRLGVBQThCO0lBQzNELFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFBO0lBQ3hCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFBO0lBQ3hCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUE7SUFDMUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxTQUFTLENBQUE7SUFDbEQsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFBO0lBQ3BDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQTtJQUNuQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUE7SUFDbkMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUE7Q0FDeEIsQ0FBQztDQUFHO0FBcURMLGVBQU8sTUFBTSxjQUFjLG1DQVV6QixDQUFBO0FBR0YsZUFBTyxNQUFNLG9CQUFvQixvVUFBNEIsQ0FBQTtBQUM3RCxlQUFPLE1BQU0sK0JBQStCLFdBQVksV0FBVyxZQUFZLFdBQVcsNkZBQ3RDLENBQUE7QUF5QnBELGVBQU8sTUFBTSxVQUFVOztFQVFyQixDQUFBOztvQkFNeUIsV0FBVyxhQUFhLFNBQVMsY0FBYyxNQUFNLEVBQUU7Ozs7MEJBU3RELE1BQU0sYUFBYSxTQUFTLGNBQWMsTUFBTSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFiOUUscUJBQWEsSUFBSyxTQUFRLFNBcUJ4QjtJQUNBLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxrQ0ErQm5CO0NBQ0YifQ==
|
package/dist/CUPS.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CUPS.d.ts","sourceRoot":"","sources":["../src/CUPS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,4BAA4B,CAAA;AAEvE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"CUPS.d.ts","sourceRoot":"","sources":["../src/CUPS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,4BAA4B,CAAA;AAEvE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAUtC,eAAO,MAAM,SAAS,6OAAsB,CAAA;AAC5C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,iBAAiB,CAAA;;;;AAW3C,qBAAa,SAAU,SAAQ,eAA8B;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB,CAAC;CAAG;AAqDL,eAAO,MAAM,cAAc,mCAUzB,CAAA;AAGF,eAAO,MAAM,oBAAoB,oUAA4B,CAAA;AAC7D,eAAO,MAAM,+BAA+B,WAAY,WAAW,YAAY,WAAW,6FACtC,CAAA;AAyBpD,eAAO,MAAM,UAAU;;EAQrB,CAAA;;oBAMyB,WAAW,aAAa,SAAS,cAAc,MAAM,EAAE;;;;0BAStD,MAAM,aAAa,SAAS,cAAc,MAAM,EAAE;;;;;;;;;;;;;;;;;;AAb9E,qBAAa,IAAK,SAAQ,SAqBxB;IACA,MAAM,CAAC,QAAQ,CAAC,IAAI,kCA+BnB;CACF"}
|
package/dist/CUPS.js
CHANGED
|
@@ -7,6 +7,7 @@ import * as Layer from "effect-app/Layer";
|
|
|
7
7
|
import * as Option from "effect-app/Option";
|
|
8
8
|
import * as S from "effect-app/Schema";
|
|
9
9
|
import { pretty } from "effect-app/utils";
|
|
10
|
+
import * as Data from "effect/Data";
|
|
10
11
|
import * as Predicate from "effect/Predicate";
|
|
11
12
|
import fs from "fs";
|
|
12
13
|
import os from "os";
|
|
@@ -14,9 +15,25 @@ import path from "path";
|
|
|
14
15
|
import util from "util";
|
|
15
16
|
import { InfraLogger } from "./logger.js";
|
|
16
17
|
export const PrinterId = S.NonEmptyString255;
|
|
18
|
+
export class CUPSError extends Data.TaggedError("CUPSError") {
|
|
19
|
+
}
|
|
17
20
|
const exec_ = util.promisify(cp.exec);
|
|
18
|
-
const exec = (command) => Effect.andThen(InfraLogger.logDebug(`Executing: ${command}`), Effect.tap(Effect
|
|
19
|
-
|
|
21
|
+
const exec = (command) => Effect.andThen(InfraLogger.logDebug(`Executing: ${command}`), Effect.tap(Effect.tryPromise({
|
|
22
|
+
try: () => exec_(command),
|
|
23
|
+
catch: (cause) => {
|
|
24
|
+
const e = cause;
|
|
25
|
+
return new CUPSError({
|
|
26
|
+
command,
|
|
27
|
+
message: e?.message ?? String(cause),
|
|
28
|
+
code: e?.code,
|
|
29
|
+
signal: e?.signal,
|
|
30
|
+
killed: e?.killed,
|
|
31
|
+
stdout: e?.stdout,
|
|
32
|
+
stderr: e?.stderr,
|
|
33
|
+
cause
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}), (r) => (InfraLogger.logDebug(`Executed`).pipe(Effect.annotateLogs("result", pretty(r))))));
|
|
20
37
|
function printFile(printer, options) {
|
|
21
38
|
return (filePath) => printFile_(filePath, printer, options);
|
|
22
39
|
}
|
|
@@ -115,4 +132,4 @@ export class CUPS extends Context.Service()("effect-app/CUPS", {
|
|
|
115
132
|
getAvailablePrinters: Effect.sync(() => [])
|
|
116
133
|
})));
|
|
117
134
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ1VQUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DVVBTLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDdkUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEtBQUssSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUNuQyxPQUFPLEtBQUssU0FBUyxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUNuQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQ3ZCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUE7QUFZNUMsTUFBTSxPQUFPLFNBQVUsU0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FTekQ7Q0FBRztBQUVMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3JDLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBZSxFQUFFLEVB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.243",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "8.4.0",
|
|
15
15
|
"query-string": "^9.3.1",
|
|
16
|
-
"effect-app": "4.0.0-beta.
|
|
16
|
+
"effect-app": "4.0.0-beta.243"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.9.3",
|
package/src/CUPS.ts
CHANGED
|
@@ -7,6 +7,7 @@ import * as Layer from "effect-app/Layer"
|
|
|
7
7
|
import * as Option from "effect-app/Option"
|
|
8
8
|
import * as S from "effect-app/Schema"
|
|
9
9
|
import { pretty } from "effect-app/utils"
|
|
10
|
+
import * as Data from "effect/Data"
|
|
10
11
|
import * as Predicate from "effect/Predicate"
|
|
11
12
|
import fs from "fs"
|
|
12
13
|
import os from "os"
|
|
@@ -17,13 +18,47 @@ import { InfraLogger } from "./logger.js"
|
|
|
17
18
|
export const PrinterId = S.NonEmptyString255
|
|
18
19
|
export type PrinterId = S.NonEmptyString255
|
|
19
20
|
|
|
21
|
+
type ExecError = Error & {
|
|
22
|
+
code?: number | string
|
|
23
|
+
killed?: boolean
|
|
24
|
+
signal?: NodeJS.Signals | null
|
|
25
|
+
cmd?: string
|
|
26
|
+
stdout?: string
|
|
27
|
+
stderr?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class CUPSError extends Data.TaggedError("CUPSError")<{
|
|
31
|
+
readonly command: string
|
|
32
|
+
readonly message: string
|
|
33
|
+
readonly code: number | string | undefined
|
|
34
|
+
readonly signal: NodeJS.Signals | null | undefined
|
|
35
|
+
readonly killed: boolean | undefined
|
|
36
|
+
readonly stdout: string | undefined
|
|
37
|
+
readonly stderr: string | undefined
|
|
38
|
+
readonly cause: unknown
|
|
39
|
+
}> {}
|
|
40
|
+
|
|
20
41
|
const exec_ = util.promisify(cp.exec)
|
|
21
42
|
const exec = (command: string) =>
|
|
22
43
|
Effect.andThen(
|
|
23
44
|
InfraLogger.logDebug(`Executing: ${command}`),
|
|
24
45
|
Effect.tap(
|
|
25
|
-
Effect
|
|
26
|
-
|
|
46
|
+
Effect.tryPromise({
|
|
47
|
+
try: () => exec_(command),
|
|
48
|
+
catch: (cause) => {
|
|
49
|
+
const e = cause as ExecError
|
|
50
|
+
return new CUPSError({
|
|
51
|
+
command,
|
|
52
|
+
message: e?.message ?? String(cause),
|
|
53
|
+
code: e?.code,
|
|
54
|
+
signal: e?.signal,
|
|
55
|
+
killed: e?.killed,
|
|
56
|
+
stdout: e?.stdout,
|
|
57
|
+
stderr: e?.stderr,
|
|
58
|
+
cause
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
}),
|
|
27
62
|
(r) => (InfraLogger.logDebug(`Executed`).pipe(Effect.annotateLogs("result", pretty(r))))
|
|
28
63
|
)
|
|
29
64
|
)
|