tryharder 0.0.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.
@@ -0,0 +1,105 @@
1
+ import { createRequire } from "node:module";
2
+ var __dispose = Symbol.dispose || /* @__PURE__ */ Symbol.for("Symbol.dispose");
3
+ var __asyncDispose = Symbol.asyncDispose || /* @__PURE__ */ Symbol.for("Symbol.asyncDispose");
4
+ var __using = (stack, value, async) => {
5
+ if (value != null) {
6
+ if (typeof value !== "object" && typeof value !== "function")
7
+ throw TypeError('Object expected to be assigned to "using" declaration');
8
+ var dispose;
9
+ if (async)
10
+ dispose = value[__asyncDispose];
11
+ if (dispose === undefined)
12
+ dispose = value[__dispose];
13
+ if (typeof dispose !== "function")
14
+ throw TypeError("Object not disposable");
15
+ stack.push([async, dispose, value]);
16
+ } else if (async) {
17
+ stack.push([async]);
18
+ }
19
+ return value;
20
+ };
21
+ var __callDispose = (stack, error, hasError) => {
22
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
23
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
24
+ }, fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e), next = (it) => {
25
+ while (it = stack.pop()) {
26
+ try {
27
+ var result = it[1] && it[1].call(it[2]);
28
+ if (it[0])
29
+ return Promise.resolve(result).then(next, (e) => (fail(e), next()));
30
+ } catch (e) {
31
+ fail(e);
32
+ }
33
+ }
34
+ if (hasError)
35
+ throw error;
36
+ };
37
+ return next();
38
+ };
39
+
40
+ // src/lib/errors.ts
41
+ var PanicMessages = {
42
+ ALL_CATCH_HANDLER_REJECT: "Panic: all() catch handler rejected",
43
+ ALL_CATCH_HANDLER_THROW: "Panic: all() catch handler threw",
44
+ FLOW_NO_EXIT: "flow() requires at least one task to call $exit().",
45
+ ORCHESTRATION_UNSUPPORTED_POLICY: "Orchestration does not support retry() or timeout() policies.",
46
+ RETRY_INVALID_LIMIT: "retry() requires a non-negative finite retry limit.",
47
+ RUN_CATCH_HANDLER_REJECT: "Panic: run() catch handler rejected",
48
+ RUN_CATCH_HANDLER_THROW: "Panic: run() catch handler threw",
49
+ RUN_SYNC_ASYNC_RETRY_POLICY: "This retry policy may run asynchronously. Use run() instead.",
50
+ RUN_SYNC_CATCH_HANDLER_THROW: "Panic: runSync() catch handler threw",
51
+ RUN_SYNC_CATCH_PROMISE: "runSync() catch cannot return a Promise. Use run() instead.",
52
+ RUN_SYNC_TRY_PROMISE: "runSync() cannot handle Promise values. Use run() instead.",
53
+ RUN_SYNC_WRAPPED_RESULT_PROMISE: "Wrapped runSync() execution returned a Promise. Use run() instead.",
54
+ TASK_INVALID_HANDLER: "Task runner expected a function handler.",
55
+ TASK_SELF_REFERENCE: "Task cannot await its own result.",
56
+ TASK_UNKNOWN_REFERENCE: "Task attempted to read an unknown task result.",
57
+ TIMEOUT_INVALID_MS: "timeout() requires a non-negative finite millisecond value.",
58
+ UNREACHABLE_RETRY_POLICY_BACKOFF: "Panic: unreachable retry policy backoff"
59
+ };
60
+
61
+ class ControlError extends Error {
62
+ }
63
+
64
+ class CancellationError extends ControlError {
65
+ constructor(message = "Execution was cancelled", options) {
66
+ super(message, options);
67
+ this.name = "CancellationError";
68
+ }
69
+ }
70
+
71
+ class TimeoutError extends ControlError {
72
+ constructor(message = "Execution timed out", options) {
73
+ super(message, options);
74
+ this.name = "TimeoutError";
75
+ }
76
+ }
77
+
78
+ class RetryExhaustedError extends Error {
79
+ constructor(message = "Retry attempts exhausted", options) {
80
+ super(message, options);
81
+ this.name = "RetryExhaustedError";
82
+ }
83
+ }
84
+
85
+ class UnhandledException extends Error {
86
+ constructor(message = "Unhandled exception", options) {
87
+ super(message, options);
88
+ this.name = "UnhandledException";
89
+ }
90
+ }
91
+
92
+ class Panic extends Error {
93
+ code;
94
+ constructor(code, options = {}) {
95
+ const { message, ...errorOptions } = options;
96
+ super(message ?? PanicMessages[code], errorOptions);
97
+ this.code = code;
98
+ this.name = "Panic";
99
+ }
100
+ }
101
+
102
+ export { __using, __callDispose, ControlError, CancellationError, TimeoutError, RetryExhaustedError, UnhandledException, Panic };
103
+
104
+ //# debugId=63557B099A7511E964756E2164756E21
105
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2xpYi9lcnJvcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiZXhwb3J0IHR5cGUgUGFuaWNDb2RlID1cbiAgfCBcIkFMTF9DQVRDSF9IQU5ETEVSX1JFSkVDVFwiXG4gIHwgXCJBTExfQ0FUQ0hfSEFORExFUl9USFJPV1wiXG4gIHwgXCJGTE9XX05PX0VYSVRcIlxuICB8IFwiT1JDSEVTVFJBVElPTl9VTlNVUFBPUlRFRF9QT0xJQ1lcIlxuICB8IFwiUkVUUllfSU5WQUxJRF9MSU1JVFwiXG4gIHwgXCJSVU5fQ0FUQ0hfSEFORExFUl9SRUpFQ1RcIlxuICB8IFwiUlVOX0NBVENIX0hBTkRMRVJfVEhST1dcIlxuICB8IFwiUlVOX1NZTkNfQVNZTkNfUkVUUllfUE9MSUNZXCJcbiAgfCBcIlJVTl9TWU5DX0NBVENIX0hBTkRMRVJfVEhST1dcIlxuICB8IFwiUlVOX1NZTkNfQ0FUQ0hfUFJPTUlTRVwiXG4gIHwgXCJSVU5fU1lOQ19UUllfUFJPTUlTRVwiXG4gIHwgXCJSVU5fU1lOQ19XUkFQUEVEX1JFU1VMVF9QUk9NSVNFXCJcbiAgfCBcIlRBU0tfSU5WQUxJRF9IQU5ETEVSXCJcbiAgfCBcIlRBU0tfU0VMRl9SRUZFUkVOQ0VcIlxuICB8IFwiVElNRU9VVF9JTlZBTElEX01TXCJcbiAgfCBcIlRBU0tfVU5LTk9XTl9SRUZFUkVOQ0VcIlxuICB8IFwiVU5SRUFDSEFCTEVfUkVUUllfUE9MSUNZX0JBQ0tPRkZcIlxuXG5leHBvcnQgY29uc3QgUGFuaWNNZXNzYWdlcyA9IHtcbiAgQUxMX0NBVENIX0hBTkRMRVJfUkVKRUNUOiBcIlBhbmljOiBhbGwoKSBjYXRjaCBoYW5kbGVyIHJlamVjdGVkXCIsXG4gIEFMTF9DQVRDSF9IQU5ETEVSX1RIUk9XOiBcIlBhbmljOiBhbGwoKSBjYXRjaCBoYW5kbGVyIHRocmV3XCIsXG4gIEZMT1dfTk9fRVhJVDogXCJmbG93KCkgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHRhc2sgdG8gY2FsbCAkZXhpdCgpLlwiLFxuICBPUkNIRVNUUkFUSU9OX1VOU1VQUE9SVEVEX1BPTElDWTogXCJPcmNoZXN0cmF0aW9uIGRvZXMgbm90IHN1cHBvcnQgcmV0cnkoKSBvciB0aW1lb3V0KCkgcG9saWNpZXMuXCIsXG4gIFJFVFJZX0lOVkFMSURfTElNSVQ6IFwicmV0cnkoKSByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgcmV0cnkgbGltaXQuXCIsXG4gIFJVTl9DQVRDSF9IQU5ETEVSX1JFSkVDVDogXCJQYW5pYzogcnVuKCkgY2F0Y2ggaGFuZGxlciByZWplY3RlZFwiLFxuICBSVU5fQ0FUQ0hfSEFORExFUl9USFJPVzogXCJQYW5pYzogcnVuKCkgY2F0Y2ggaGFuZGxlciB0aHJld1wiLFxuICBSVU5fU1lOQ19BU1lOQ19SRVRSWV9QT0xJQ1k6IFwiVGhpcyByZXRyeSBwb2xpY3kgbWF5IHJ1biBhc3luY2hyb25vdXNseS4gVXNlIHJ1bigpIGluc3RlYWQuXCIsXG4gIFJVTl9TWU5DX0NBVENIX0hBTkRMRVJfVEhST1c6IFwiUGFuaWM6IHJ1blN5bmMoKSBjYXRjaCBoYW5kbGVyIHRocmV3XCIsXG4gIFJVTl9TWU5DX0NBVENIX1BST01JU0U6IFwicnVuU3luYygpIGNhdGNoIGNhbm5vdCByZXR1cm4gYSBQcm9taXNlLiBVc2UgcnVuKCkgaW5zdGVhZC5cIixcbiAgUlVOX1NZTkNfVFJZX1BST01JU0U6IFwicnVuU3luYygpIGNhbm5vdCBoYW5kbGUgUHJvbWlzZSB2YWx1ZXMuIFVzZSBydW4oKSBpbnN0ZWFkLlwiLFxuICBSVU5fU1lOQ19XUkFQUEVEX1JFU1VMVF9QUk9NSVNFOlxuICAgIFwiV3JhcHBlZCBydW5TeW5jKCkgZXhlY3V0aW9uIHJldHVybmVkIGEgUHJvbWlzZS4gVXNlIHJ1bigpIGluc3RlYWQuXCIsXG4gIFRBU0tfSU5WQUxJRF9IQU5ETEVSOiBcIlRhc2sgcnVubmVyIGV4cGVjdGVkIGEgZnVuY3Rpb24gaGFuZGxlci5cIixcbiAgVEFTS19TRUxGX1JFRkVSRU5DRTogXCJUYXNrIGNhbm5vdCBhd2FpdCBpdHMgb3duIHJlc3VsdC5cIixcbiAgVEFTS19VTktOT1dOX1JFRkVSRU5DRTogXCJUYXNrIGF0dGVtcHRlZCB0byByZWFkIGFuIHVua25vd24gdGFzayByZXN1bHQuXCIsXG4gIFRJTUVPVVRfSU5WQUxJRF9NUzogXCJ0aW1lb3V0KCkgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIG1pbGxpc2Vjb25kIHZhbHVlLlwiLFxuICBVTlJFQUNIQUJMRV9SRVRSWV9QT0xJQ1lfQkFDS09GRjogXCJQYW5pYzogdW5yZWFjaGFibGUgcmV0cnkgcG9saWN5IGJhY2tvZmZcIixcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxQYW5pY0NvZGUsIHN0cmluZz5cbmV4cG9ydCB0eXBlIFBhbmljTWVzc2FnZXMgPSB0eXBlb2YgUGFuaWNNZXNzYWdlc1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgQ29udHJvbEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGNsYXNzIENhbmNlbGxhdGlvbkVycm9yIGV4dGVuZHMgQ29udHJvbEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9IFwiRXhlY3V0aW9uIHdhcyBjYW5jZWxsZWRcIiwgb3B0aW9ucz86IEVycm9yT3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpXG4gICAgdGhpcy5uYW1lID0gXCJDYW5jZWxsYXRpb25FcnJvclwiXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIENvbnRyb2xFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSBcIkV4ZWN1dGlvbiB0aW1lZCBvdXRcIiwgb3B0aW9ucz86IEVycm9yT3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpXG4gICAgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIlxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXRyeUV4aGF1c3RlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gXCJSZXRyeSBhdHRlbXB0cyBleGhhdXN0ZWRcIiwgb3B0aW9ucz86IEVycm9yT3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpXG4gICAgdGhpcy5uYW1lID0gXCJSZXRyeUV4aGF1c3RlZEVycm9yXCJcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5oYW5kbGVkRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gXCJVbmhhbmRsZWQgZXhjZXB0aW9uXCIsIG9wdGlvbnM/OiBFcnJvck9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCBvcHRpb25zKVxuICAgIHRoaXMubmFtZSA9IFwiVW5oYW5kbGVkRXhjZXB0aW9uXCJcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFuaWMgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGU6IFBhbmljQ29kZVxuXG4gIGNvbnN0cnVjdG9yKGNvZGU6IFBhbmljQ29kZSwgb3B0aW9uczogRXJyb3JPcHRpb25zICYgeyBtZXNzYWdlPzogc3RyaW5nIH0gPSB7fSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgLi4uZXJyb3JPcHRpb25zIH0gPSBvcHRpb25zXG5cbiAgICBzdXBlcihtZXNzYWdlID8/IFBhbmljTWVzc2FnZXNbY29kZV0sIGVycm9yT3B0aW9ucylcbiAgICB0aGlzLmNvZGUgPSBjb2RlXG4gICAgdGhpcy5uYW1lID0gXCJQYW5pY1wiXG4gIH1cbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQk8sSUFBTSxnQkFBZ0I7QUFBQSxFQUMzQiwwQkFBMEI7QUFBQSxFQUMxQix5QkFBeUI7QUFBQSxFQUN6QixjQUFjO0FBQUEsRUFDZCxrQ0FBa0M7QUFBQSxFQUNsQyxxQkFBcUI7QUFBQSxFQUNyQiwwQkFBMEI7QUFBQSxFQUMxQix5QkFBeUI7QUFBQSxFQUN6Qiw2QkFBNkI7QUFBQSxFQUM3Qiw4QkFBOEI7QUFBQSxFQUM5Qix3QkFBd0I7QUFBQSxFQUN4QixzQkFBc0I7QUFBQSxFQUN0QixpQ0FDRTtBQUFBLEVBQ0Ysc0JBQXNCO0FBQUEsRUFDdEIscUJBQXFCO0FBQUEsRUFDckIsd0JBQXdCO0FBQUEsRUFDeEIsb0JBQW9CO0FBQUEsRUFDcEIsa0NBQWtDO0FBQ3BDO0FBQUE7QUFJTyxNQUFNLHFCQUFxQixNQUFNO0FBQUM7QUFBQTtBQUVsQyxNQUFNLDBCQUEwQixhQUFhO0FBQUEsRUFDbEQsV0FBVyxDQUFDLFVBQVUsMkJBQTJCLFNBQXdCO0FBQUEsSUFDdkUsTUFBTSxTQUFTLE9BQU87QUFBQSxJQUN0QixLQUFLLE9BQU87QUFBQTtBQUVoQjtBQUFBO0FBRU8sTUFBTSxxQkFBcUIsYUFBYTtBQUFBLEVBQzdDLFdBQVcsQ0FBQyxVQUFVLHVCQUF1QixTQUF3QjtBQUFBLElBQ25FLE1BQU0sU0FBUyxPQUFPO0FBQUEsSUFDdEIsS0FBSyxPQUFPO0FBQUE7QUFFaEI7QUFBQTtBQUVPLE1BQU0sNEJBQTRCLE1BQU07QUFBQSxFQUM3QyxXQUFXLENBQUMsVUFBVSw0QkFBNEIsU0FBd0I7QUFBQSxJQUN4RSxNQUFNLFNBQVMsT0FBTztBQUFBLElBQ3RCLEtBQUssT0FBTztBQUFBO0FBRWhCO0FBQUE7QUFFTyxNQUFNLDJCQUEyQixNQUFNO0FBQUEsRUFDNUMsV0FBVyxDQUFDLFVBQVUsdUJBQXVCLFNBQXdCO0FBQUEsSUFDbkUsTUFBTSxTQUFTLE9BQU87QUFBQSxJQUN0QixLQUFLLE9BQU87QUFBQTtBQUVoQjtBQUFBO0FBRU8sTUFBTSxjQUFjLE1BQU07QUFBQSxFQUN0QjtBQUFBLEVBRVQsV0FBVyxDQUFDLE1BQWlCLFVBQStDLENBQUMsR0FBRztBQUFBLElBQzlFLFFBQVEsWUFBWSxpQkFBaUI7QUFBQSxJQUVyQyxNQUFNLFdBQVcsY0FBYyxPQUFPLFlBQVk7QUFBQSxJQUNsRCxLQUFLLE9BQU87QUFBQSxJQUNaLEtBQUssT0FBTztBQUFBO0FBRWhCOyIsCiAgImRlYnVnSWQiOiAiNjM1NTdCMDk5QTc1MTFFOTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
@@ -0,0 +1,17 @@
1
+ declare const FLOW_EXIT_BRAND: unique symbol;
2
+ type FlowExit<T> = {
3
+ readonly [FLOW_EXIT_BRAND]: T;
4
+ };
5
+ type TaskRecord = Record<string, any>;
6
+ type TaskResult<T> = T extends (...args: any[]) => infer R ? Awaited<R> : never;
7
+ interface SettledFulfilled<T> {
8
+ status: "fulfilled";
9
+ value: T;
10
+ }
11
+ interface SettledRejected {
12
+ status: "rejected";
13
+ reason: unknown;
14
+ }
15
+ type SettledResult<T> = SettledFulfilled<T> | SettledRejected;
16
+ type AllSettledResult<T extends TaskRecord> = { [K in keyof T] : SettledResult<TaskResult<T[K]>> };
17
+ export { SettledResult, SettledRejected, SettledFulfilled, FlowExit, AllSettledResult };
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+
2
+ //# debugId=9FCB033A2878230664756E2164756E21
3
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICBdLAogICJtYXBwaW5ncyI6ICIiLAogICJkZWJ1Z0lkIjogIjlGQ0IwMzNBMjg3ODIzMDY2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "tryharder",
3
+ "version": "0.0.0",
4
+ "description": "A better try/catch for TypeScript",
5
+ "keywords": [
6
+ "abort-signal",
7
+ "error-handling",
8
+ "retry",
9
+ "timeout",
10
+ "try-catch"
11
+ ],
12
+ "homepage": "https://github.com/adelrodriguez/tryharder#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/adelrodriguez/tryharder/issues"
15
+ },
16
+ "license": "MIT",
17
+ "author": "Adel Rodríguez",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/adelrodriguez/tryharder.git"
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "type": "module",
26
+ "main": "./dist/index.js",
27
+ "module": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js"
33
+ },
34
+ "./errors": {
35
+ "types": "./dist/errors.d.ts",
36
+ "import": "./dist/errors.js"
37
+ },
38
+ "./types": {
39
+ "types": "./dist/types.d.ts",
40
+ "import": "./dist/types.js"
41
+ }
42
+ },
43
+ "scripts": {
44
+ "build": "bunup",
45
+ "bump:deps": "bun update --interactive",
46
+ "check": "adamantite check",
47
+ "dev": "bunup --watch",
48
+ "fix": "adamantite fix",
49
+ "release": "changeset publish",
50
+ "test": "bun test",
51
+ "test:coverage": "bun test --coverage",
52
+ "test:watch": "bun test --watch",
53
+ "typecheck": "adamantite typecheck",
54
+ "version": "changeset version && bun run format",
55
+ "format": "adamantite format",
56
+ "analyze": "adamantite analyze"
57
+ },
58
+ "devDependencies": {
59
+ "@changesets/cli": "2.29.8",
60
+ "@clack/prompts": "1.0.1",
61
+ "@types/bun": "1.3.9",
62
+ "adamantite": "^0.29.1",
63
+ "bunup": "0.16.29",
64
+ "knip": "5.85.0",
65
+ "oxfmt": "0.34.0",
66
+ "oxlint": "1.49.0",
67
+ "oxlint-tsgolint": "0.14.2",
68
+ "typescript": "5.9.3"
69
+ },
70
+ "packageManager": "bun@1.3.1"
71
+ }