@better-agent/shared 0.1.0-canary.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/README.md +3 -0
- package/dist/chunk-CtajNgzt.mjs +36 -0
- package/dist/errors.d.mts +96 -0
- package/dist/errors.d.mts.map +1 -0
- package/dist/errors.mjs +214 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/logger.d.mts +8 -0
- package/dist/logger.d.mts.map +1 -0
- package/dist/logger.mjs +71 -0
- package/dist/logger.mjs.map +1 -0
- package/dist/neverthrow.d.mts +8 -0
- package/dist/neverthrow.d.mts.map +1 -0
- package/dist/neverthrow.mjs +12 -0
- package/dist/neverthrow.mjs.map +1 -0
- package/dist/utils.d.mts +8 -0
- package/dist/utils.d.mts.map +1 -0
- package/dist/utils.mjs +17 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +65 -0
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __exportAll = (all, no_symbols) => {
|
|
7
|
+
let target = {};
|
|
8
|
+
for (var name in all) {
|
|
9
|
+
__defProp(target, name, {
|
|
10
|
+
get: all[name],
|
|
11
|
+
enumerable: true
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
if (!no_symbols) {
|
|
15
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
16
|
+
}
|
|
17
|
+
return target;
|
|
18
|
+
};
|
|
19
|
+
var __copyProps = (to, from, except, desc) => {
|
|
20
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
21
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
22
|
+
key = keys[i];
|
|
23
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
24
|
+
__defProp(to, key, {
|
|
25
|
+
get: ((k) => from[k]).bind(null, key),
|
|
26
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return to;
|
|
32
|
+
};
|
|
33
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
export { __reExport as n, __exportAll as t };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//#region src/errors.d.ts
|
|
2
|
+
/** Better Agent error codes. */
|
|
3
|
+
type BetterAgentErrorCode = "BAD_REQUEST" | "VALIDATION_FAILED" | "NOT_FOUND" | "CONFLICT" | "RATE_LIMITED" | "TIMEOUT" | "ABORTED" | "UPSTREAM_FAILED" | "INTERNAL" | (string & {});
|
|
4
|
+
type ErrorCodeMeta = {
|
|
5
|
+
status: number;
|
|
6
|
+
title: string;
|
|
7
|
+
retryable: boolean;
|
|
8
|
+
slug: string;
|
|
9
|
+
};
|
|
10
|
+
declare const ERROR_DOCS_BASE_URL = "https://better-agent.com/docs/concepts/errors";
|
|
11
|
+
/** Default metadata by error code. */
|
|
12
|
+
declare const ERROR_CODE_META: Readonly<Record<string, ErrorCodeMeta>>;
|
|
13
|
+
/** One error trace frame. */
|
|
14
|
+
type BetterAgentErrorTraceFrame = {
|
|
15
|
+
at: string;
|
|
16
|
+
data?: Record<string, unknown>;
|
|
17
|
+
};
|
|
18
|
+
/** Free-form error metadata. */
|
|
19
|
+
type BetterAgentErrorContext = Record<string, unknown>;
|
|
20
|
+
/** RFC 7807-style error payload. */
|
|
21
|
+
type BetterAgentProblemDetails = {
|
|
22
|
+
type: string;
|
|
23
|
+
title: string;
|
|
24
|
+
status: number;
|
|
25
|
+
detail: string;
|
|
26
|
+
code: string;
|
|
27
|
+
retryable?: boolean;
|
|
28
|
+
issues?: unknown[];
|
|
29
|
+
context?: BetterAgentErrorContext;
|
|
30
|
+
traceId?: string;
|
|
31
|
+
trace?: BetterAgentErrorTraceFrame[];
|
|
32
|
+
};
|
|
33
|
+
type WrapOptions = {
|
|
34
|
+
code?: BetterAgentErrorCode | undefined;
|
|
35
|
+
status?: number | undefined;
|
|
36
|
+
title?: string | undefined;
|
|
37
|
+
type?: string | undefined;
|
|
38
|
+
retryable?: boolean | undefined;
|
|
39
|
+
issues?: unknown[] | undefined;
|
|
40
|
+
context?: BetterAgentErrorContext | undefined;
|
|
41
|
+
traceId?: string | undefined;
|
|
42
|
+
cause?: unknown;
|
|
43
|
+
trace?: BetterAgentErrorTraceFrame[] | undefined;
|
|
44
|
+
stackFrom?: Function;
|
|
45
|
+
};
|
|
46
|
+
/** Options for {@link BetterAgentError}. */
|
|
47
|
+
type BetterAgentErrorOptions = {
|
|
48
|
+
code: BetterAgentErrorCode;
|
|
49
|
+
status?: number | undefined;
|
|
50
|
+
title?: string | undefined;
|
|
51
|
+
type?: string | undefined;
|
|
52
|
+
retryable?: boolean | undefined;
|
|
53
|
+
issues?: unknown[] | undefined;
|
|
54
|
+
context?: BetterAgentErrorContext | undefined;
|
|
55
|
+
traceId?: string | undefined;
|
|
56
|
+
cause?: unknown;
|
|
57
|
+
trace?: BetterAgentErrorTraceFrame[] | undefined;
|
|
58
|
+
stackFrom?: Function;
|
|
59
|
+
};
|
|
60
|
+
/** Better Agent error type. */
|
|
61
|
+
declare class BetterAgentError extends Error {
|
|
62
|
+
code: BetterAgentErrorCode;
|
|
63
|
+
status: number;
|
|
64
|
+
title: string;
|
|
65
|
+
type: string;
|
|
66
|
+
retryable: boolean;
|
|
67
|
+
issues?: unknown[];
|
|
68
|
+
context?: BetterAgentErrorContext;
|
|
69
|
+
traceId?: string;
|
|
70
|
+
trace: BetterAgentErrorTraceFrame[];
|
|
71
|
+
constructor(message: string, opts: BetterAgentErrorOptions);
|
|
72
|
+
/** Adds a trace frame. */
|
|
73
|
+
at(frame: BetterAgentErrorTraceFrame): this;
|
|
74
|
+
/** Converts this error to problem details. */
|
|
75
|
+
toProblem(overrides?: Partial<BetterAgentProblemDetails>): BetterAgentProblemDetails;
|
|
76
|
+
/** JSON form for `JSON.stringify`. */
|
|
77
|
+
toJSON(): BetterAgentProblemDetails;
|
|
78
|
+
/** Debug form with stack and cause. */
|
|
79
|
+
toDebugJSON(): BetterAgentProblemDetails & {
|
|
80
|
+
stack?: string;
|
|
81
|
+
cause?: unknown;
|
|
82
|
+
};
|
|
83
|
+
/** Creates an error from a code and message. */
|
|
84
|
+
static fromCode(code: BetterAgentErrorCode, message: string, opts?: Omit<WrapOptions, "code">): BetterAgentError;
|
|
85
|
+
/** Rehydrates an error from problem details. */
|
|
86
|
+
static fromProblem(input: BetterAgentProblemDetails | Record<string, unknown>, opts?: Omit<WrapOptions, "code">): BetterAgentError;
|
|
87
|
+
/** Wraps unknown errors as {@link BetterAgentError}. */
|
|
88
|
+
static wrap(args: {
|
|
89
|
+
err: unknown;
|
|
90
|
+
message?: string;
|
|
91
|
+
opts?: WrapOptions;
|
|
92
|
+
}): BetterAgentError;
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
export { BetterAgentError, BetterAgentErrorCode, BetterAgentErrorContext, BetterAgentErrorOptions, BetterAgentErrorTraceFrame, BetterAgentProblemDetails, ERROR_CODE_META, ERROR_DOCS_BASE_URL };
|
|
96
|
+
//# sourceMappingURL=errors.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.mts","names":[],"sources":["../src/errors.ts"],"mappings":";;KACY,oBAAA;AAAA,KAYP,aAAA;EACD,MAAA;EACA,KAAA;EACA,SAAA;EACA,IAAA;AAAA;AAAA,cAGS,mBAAA;;cAGA,eAAA,EAAiB,QAAA,CAAS,MAAA,SAAe,aAAA;;KAsC1C,0BAAA;EACR,EAAA;EACA,IAAA,GAAO,MAAA;AAAA;AA3CX;AAAA,KA+CY,uBAAA,GAA0B,MAAA;;KAG1B,yBAAA;EACR,IAAA;EACA,KAAA;EACA,MAAA;EACA,MAAA;EACA,IAAA;EACA,SAAA;EACA,MAAA;EACA,OAAA,GAAU,uBAAA;EACV,OAAA;EACA,KAAA,GAAQ,0BAAA;AAAA;AAAA,KAGP,WAAA;EACD,IAAA,GAAO,oBAAA;EACP,MAAA;EACA,KAAA;EACA,IAAA;EACA,SAAA;EACA,MAAA;EACA,OAAA,GAAU,uBAAA;EACV,OAAA;EACA,KAAA;EACA,KAAA,GAAQ,0BAAA;EAER,SAAA,GAAY,QAAA;AAAA;;KAIJ,uBAAA;EACR,IAAA,EAAM,oBAAA;EACN,MAAA;EACA,KAAA;EACA,IAAA;EACA,SAAA;EACA,MAAA;EACA,OAAA,GAAU,uBAAA;EACV,OAAA;EACA,KAAA;EACA,KAAA,GAAQ,0BAAA;EAER,SAAA,GAAY,QAAA;AAAA;;cAkCH,gBAAA,SAAyB,KAAA;EAClC,IAAA,EAAM,oBAAA;EACN,MAAA;EACA,KAAA;EACA,IAAA;EACA,SAAA;EACQ,MAAA;EACA,OAAA,GAAU,uBAAA;EACV,OAAA;EACR,KAAA,EAAO,0BAAA;cAEK,OAAA,UAAiB,IAAA,EAAM,uBAAA;EAlEzB;EAiGV,EAAA,CAAG,KAAA,EAAO,0BAAA;EA5FE;EAkGZ,SAAA,CAAU,SAAA,GAAW,OAAA,CAAQ,yBAAA,IAAkC,yBAAA;EAlG3C;EAiIpB,MAAA,CAAA,GAAM,yBAAA;EA5IC;EAiJP,WAAA,CAAA,GAAW,yBAAA;;;;EA5IX;EAAA,OAyJO,QAAA,CACH,IAAA,EAAM,oBAAA,EACN,OAAA,UACA,IAAA,GAAM,IAAA,CAAK,WAAA,YACZ,gBAAA;EA5JO;EAAA,OAqKH,WAAA,CACH,KAAA,EAAO,yBAAA,GAA4B,MAAA,mBACnC,IAAA,GAAM,IAAA,CAAK,WAAA,YACZ,gBAAA;EAtKH;EAAA,OAkMO,IAAA,CAAK,IAAA;IACR,GAAA;IACA,OAAA;IACA,IAAA,GAAO,WAAA;EAAA,IACP,gBAAA;AAAA"}
|
package/dist/errors.mjs
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
//#region src/errors.ts
|
|
2
|
+
const ERROR_DOCS_BASE_URL = "https://better-agent.com/docs/concepts/errors";
|
|
3
|
+
/** Default metadata by error code. */
|
|
4
|
+
const ERROR_CODE_META = {
|
|
5
|
+
BAD_REQUEST: {
|
|
6
|
+
status: 400,
|
|
7
|
+
title: "Bad Request",
|
|
8
|
+
retryable: false,
|
|
9
|
+
slug: "bad-request"
|
|
10
|
+
},
|
|
11
|
+
NOT_FOUND: {
|
|
12
|
+
status: 404,
|
|
13
|
+
title: "Not Found",
|
|
14
|
+
retryable: false,
|
|
15
|
+
slug: "not-found"
|
|
16
|
+
},
|
|
17
|
+
CONFLICT: {
|
|
18
|
+
status: 409,
|
|
19
|
+
title: "Conflict",
|
|
20
|
+
retryable: false,
|
|
21
|
+
slug: "conflict"
|
|
22
|
+
},
|
|
23
|
+
VALIDATION_FAILED: {
|
|
24
|
+
status: 422,
|
|
25
|
+
title: "Unprocessable Entity",
|
|
26
|
+
retryable: false,
|
|
27
|
+
slug: "validation-failed"
|
|
28
|
+
},
|
|
29
|
+
RATE_LIMITED: {
|
|
30
|
+
status: 429,
|
|
31
|
+
title: "Too Many Requests",
|
|
32
|
+
retryable: true,
|
|
33
|
+
slug: "rate-limited"
|
|
34
|
+
},
|
|
35
|
+
TIMEOUT: {
|
|
36
|
+
status: 504,
|
|
37
|
+
title: "Gateway Timeout",
|
|
38
|
+
retryable: true,
|
|
39
|
+
slug: "timeout"
|
|
40
|
+
},
|
|
41
|
+
ABORTED: {
|
|
42
|
+
status: 499,
|
|
43
|
+
title: "Client Closed Request",
|
|
44
|
+
retryable: false,
|
|
45
|
+
slug: "aborted"
|
|
46
|
+
},
|
|
47
|
+
UPSTREAM_FAILED: {
|
|
48
|
+
status: 502,
|
|
49
|
+
title: "Upstream Failed",
|
|
50
|
+
retryable: true,
|
|
51
|
+
slug: "upstream-failed"
|
|
52
|
+
},
|
|
53
|
+
INTERNAL: {
|
|
54
|
+
status: 500,
|
|
55
|
+
title: "Internal Server Error",
|
|
56
|
+
retryable: false,
|
|
57
|
+
slug: "internal"
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
61
|
+
const isProblemDetailsLike = (value) => {
|
|
62
|
+
if (!isRecord(value)) return false;
|
|
63
|
+
return typeof value.type === "string" && typeof value.title === "string" && typeof value.status === "number" && typeof value.detail === "string" && typeof value.code === "string";
|
|
64
|
+
};
|
|
65
|
+
const getCodeMeta = (code) => {
|
|
66
|
+
const found = ERROR_CODE_META[code];
|
|
67
|
+
if (found) return found;
|
|
68
|
+
return {
|
|
69
|
+
status: 500,
|
|
70
|
+
title: "Internal Server Error",
|
|
71
|
+
retryable: false,
|
|
72
|
+
slug: code.toLowerCase().replace(/_/g, "-")
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
const getDocsTypeUrl = (code) => {
|
|
76
|
+
return `${ERROR_DOCS_BASE_URL}#${getCodeMeta(code).slug}`;
|
|
77
|
+
};
|
|
78
|
+
/** Better Agent error type. */
|
|
79
|
+
var BetterAgentError = class BetterAgentError extends Error {
|
|
80
|
+
code;
|
|
81
|
+
status;
|
|
82
|
+
title;
|
|
83
|
+
type;
|
|
84
|
+
retryable;
|
|
85
|
+
trace;
|
|
86
|
+
constructor(message, opts) {
|
|
87
|
+
if (opts.cause !== void 0) super(message, { cause: opts.cause });
|
|
88
|
+
else super(message);
|
|
89
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
90
|
+
this.name = "BetterAgentError";
|
|
91
|
+
const meta = getCodeMeta(opts.code);
|
|
92
|
+
this.code = opts.code;
|
|
93
|
+
this.status = opts.status ?? meta.status;
|
|
94
|
+
this.title = opts.title ?? meta.title;
|
|
95
|
+
this.type = opts.type ?? getDocsTypeUrl(opts.code);
|
|
96
|
+
this.retryable = opts.retryable ?? meta.retryable;
|
|
97
|
+
if (opts.issues !== void 0) this.issues = opts.issues;
|
|
98
|
+
if (opts.context !== void 0) this.context = opts.context;
|
|
99
|
+
if (opts.traceId !== void 0) this.traceId = opts.traceId;
|
|
100
|
+
this.trace = opts.trace ?? [];
|
|
101
|
+
const ctor = Error;
|
|
102
|
+
if (ctor.captureStackTrace !== void 0) ctor.captureStackTrace(this, opts.stackFrom ?? BetterAgentError);
|
|
103
|
+
}
|
|
104
|
+
/** Adds a trace frame. */
|
|
105
|
+
at(frame) {
|
|
106
|
+
this.trace.push(frame);
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
/** Converts this error to problem details. */
|
|
110
|
+
toProblem(overrides = {}) {
|
|
111
|
+
const out = {
|
|
112
|
+
type: overrides.type ?? this.type,
|
|
113
|
+
title: overrides.title ?? this.title,
|
|
114
|
+
status: overrides.status ?? this.status,
|
|
115
|
+
detail: overrides.detail ?? this.message,
|
|
116
|
+
code: String(overrides.code ?? this.code)
|
|
117
|
+
};
|
|
118
|
+
const retryable = overrides.retryable ?? this.retryable;
|
|
119
|
+
if (retryable !== void 0) out.retryable = retryable;
|
|
120
|
+
const issues = overrides.issues ?? this.issues;
|
|
121
|
+
if (issues !== void 0) out.issues = issues;
|
|
122
|
+
const traceId = overrides.traceId ?? this.traceId;
|
|
123
|
+
if (traceId !== void 0) out.traceId = traceId;
|
|
124
|
+
const context = {
|
|
125
|
+
...this.context ?? {},
|
|
126
|
+
...isRecord(overrides.context) ? overrides.context : {}
|
|
127
|
+
};
|
|
128
|
+
if (Object.keys(context).length > 0) out.context = context;
|
|
129
|
+
const trace = overrides.trace ?? this.trace;
|
|
130
|
+
if (trace.length > 0) out.trace = trace;
|
|
131
|
+
return out;
|
|
132
|
+
}
|
|
133
|
+
/** JSON form for `JSON.stringify`. */
|
|
134
|
+
toJSON() {
|
|
135
|
+
return this.toProblem();
|
|
136
|
+
}
|
|
137
|
+
/** Debug form with stack and cause. */
|
|
138
|
+
toDebugJSON() {
|
|
139
|
+
const debug = this.toProblem();
|
|
140
|
+
if (this.stack !== void 0) debug.stack = this.stack;
|
|
141
|
+
if (this.cause !== void 0) debug.cause = this.cause;
|
|
142
|
+
return debug;
|
|
143
|
+
}
|
|
144
|
+
/** Creates an error from a code and message. */
|
|
145
|
+
static fromCode(code, message, opts = {}) {
|
|
146
|
+
return new BetterAgentError(message, {
|
|
147
|
+
code,
|
|
148
|
+
...opts,
|
|
149
|
+
stackFrom: opts.stackFrom ?? BetterAgentError.fromCode
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/** Rehydrates an error from problem details. */
|
|
153
|
+
static fromProblem(input, opts = {}) {
|
|
154
|
+
if (!isProblemDetailsLike(input)) return BetterAgentError.wrap({
|
|
155
|
+
err: input,
|
|
156
|
+
message: "Invalid problem details payload",
|
|
157
|
+
opts: {
|
|
158
|
+
...opts,
|
|
159
|
+
code: "INTERNAL"
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
return new BetterAgentError(input.detail, {
|
|
163
|
+
code: input.code,
|
|
164
|
+
status: input.status,
|
|
165
|
+
title: input.title,
|
|
166
|
+
type: input.type,
|
|
167
|
+
retryable: input.retryable,
|
|
168
|
+
issues: input.issues,
|
|
169
|
+
context: input.context,
|
|
170
|
+
traceId: input.traceId,
|
|
171
|
+
trace: input.trace,
|
|
172
|
+
...opts,
|
|
173
|
+
stackFrom: opts.stackFrom ?? BetterAgentError.fromProblem
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/** Wraps unknown errors as {@link BetterAgentError}. */
|
|
177
|
+
static wrap(args) {
|
|
178
|
+
const code = args.opts?.code ?? "INTERNAL";
|
|
179
|
+
if (args.err instanceof BetterAgentError) return new BetterAgentError(args.message ? `${args.message}: ${args.err.message}` : args.err.message, {
|
|
180
|
+
code,
|
|
181
|
+
status: args.opts?.status ?? args.err.status,
|
|
182
|
+
title: args.opts?.title ?? args.err.title,
|
|
183
|
+
type: args.opts?.type ?? args.err.type,
|
|
184
|
+
retryable: args.opts?.retryable ?? args.err.retryable,
|
|
185
|
+
context: {
|
|
186
|
+
...args.err.context ?? {},
|
|
187
|
+
...args.opts?.context ?? {}
|
|
188
|
+
},
|
|
189
|
+
traceId: args.opts?.traceId ?? args.err.traceId,
|
|
190
|
+
trace: args.opts?.trace ? [...args.err.trace, ...args.opts.trace] : args.err.trace,
|
|
191
|
+
cause: args.opts?.cause ?? args.err,
|
|
192
|
+
stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap
|
|
193
|
+
});
|
|
194
|
+
if (isProblemDetailsLike(args.err)) return BetterAgentError.fromProblem(args.err, {
|
|
195
|
+
...args.opts,
|
|
196
|
+
stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap
|
|
197
|
+
});
|
|
198
|
+
if (args.err instanceof Error) return new BetterAgentError(args.message || args.err.message, {
|
|
199
|
+
...args.opts,
|
|
200
|
+
code,
|
|
201
|
+
cause: args.opts?.cause ?? args.err,
|
|
202
|
+
stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap
|
|
203
|
+
});
|
|
204
|
+
return new BetterAgentError(args.message || "Unknown error", {
|
|
205
|
+
...args.opts,
|
|
206
|
+
code,
|
|
207
|
+
stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
//#endregion
|
|
213
|
+
export { BetterAgentError, ERROR_CODE_META, ERROR_DOCS_BASE_URL };
|
|
214
|
+
//# sourceMappingURL=errors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.mjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Better Agent error codes. */\nexport type BetterAgentErrorCode =\n | \"BAD_REQUEST\"\n | \"VALIDATION_FAILED\"\n | \"NOT_FOUND\"\n | \"CONFLICT\"\n | \"RATE_LIMITED\"\n | \"TIMEOUT\"\n | \"ABORTED\"\n | \"UPSTREAM_FAILED\"\n | \"INTERNAL\"\n | (string & {});\n\ntype ErrorCodeMeta = {\n status: number;\n title: string;\n retryable: boolean;\n slug: string;\n};\n\nexport const ERROR_DOCS_BASE_URL = \"https://better-agent.com/docs/concepts/errors\";\n\n/** Default metadata by error code. */\nexport const ERROR_CODE_META: Readonly<Record<string, ErrorCodeMeta>> = {\n BAD_REQUEST: { status: 400, title: \"Bad Request\", retryable: false, slug: \"bad-request\" },\n NOT_FOUND: { status: 404, title: \"Not Found\", retryable: false, slug: \"not-found\" },\n CONFLICT: { status: 409, title: \"Conflict\", retryable: false, slug: \"conflict\" },\n VALIDATION_FAILED: {\n status: 422,\n title: \"Unprocessable Entity\",\n retryable: false,\n slug: \"validation-failed\",\n },\n RATE_LIMITED: {\n status: 429,\n title: \"Too Many Requests\",\n retryable: true,\n slug: \"rate-limited\",\n },\n TIMEOUT: { status: 504, title: \"Gateway Timeout\", retryable: true, slug: \"timeout\" },\n ABORTED: {\n status: 499,\n title: \"Client Closed Request\",\n retryable: false,\n slug: \"aborted\",\n },\n UPSTREAM_FAILED: {\n status: 502,\n title: \"Upstream Failed\",\n retryable: true,\n slug: \"upstream-failed\",\n },\n INTERNAL: {\n status: 500,\n title: \"Internal Server Error\",\n retryable: false,\n slug: \"internal\",\n },\n};\n\n/** One error trace frame. */\nexport type BetterAgentErrorTraceFrame = {\n at: string;\n data?: Record<string, unknown>;\n};\n\n/** Free-form error metadata. */\nexport type BetterAgentErrorContext = Record<string, unknown>;\n\n/** RFC 7807-style error payload. */\nexport type BetterAgentProblemDetails = {\n type: string;\n title: string;\n status: number;\n detail: string;\n code: string;\n retryable?: boolean;\n issues?: unknown[];\n context?: BetterAgentErrorContext;\n traceId?: string;\n trace?: BetterAgentErrorTraceFrame[];\n};\n\ntype WrapOptions = {\n code?: BetterAgentErrorCode | undefined;\n status?: number | undefined;\n title?: string | undefined;\n type?: string | undefined;\n retryable?: boolean | undefined;\n issues?: unknown[] | undefined;\n context?: BetterAgentErrorContext | undefined;\n traceId?: string | undefined;\n cause?: unknown;\n trace?: BetterAgentErrorTraceFrame[] | undefined;\n // biome-ignore lint/complexity/noBannedTypes: Stack capture needs function constructor references.\n stackFrom?: Function;\n};\n\n/** Options for {@link BetterAgentError}. */\nexport type BetterAgentErrorOptions = {\n code: BetterAgentErrorCode;\n status?: number | undefined;\n title?: string | undefined;\n type?: string | undefined;\n retryable?: boolean | undefined;\n issues?: unknown[] | undefined;\n context?: BetterAgentErrorContext | undefined;\n traceId?: string | undefined;\n cause?: unknown;\n trace?: BetterAgentErrorTraceFrame[] | undefined;\n // biome-ignore lint/complexity/noBannedTypes: Stack capture needs function constructor references.\n stackFrom?: Function;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst isProblemDetailsLike = (value: unknown): value is BetterAgentProblemDetails => {\n if (!isRecord(value)) return false;\n return (\n typeof value.type === \"string\" &&\n typeof value.title === \"string\" &&\n typeof value.status === \"number\" &&\n typeof value.detail === \"string\" &&\n typeof value.code === \"string\"\n );\n};\n\nconst getCodeMeta = (code: string): ErrorCodeMeta => {\n const found = ERROR_CODE_META[code];\n if (found) return found;\n return {\n status: 500,\n title: \"Internal Server Error\",\n retryable: false,\n slug: code.toLowerCase().replace(/_/g, \"-\"),\n };\n};\n\nconst getDocsTypeUrl = (code: string): string => {\n const meta = getCodeMeta(code);\n return `${ERROR_DOCS_BASE_URL}#${meta.slug}`;\n};\n\n/** Better Agent error type. */\nexport class BetterAgentError extends Error {\n code: BetterAgentErrorCode;\n status: number;\n title: string;\n type: string;\n retryable: boolean;\n declare issues?: unknown[];\n declare context?: BetterAgentErrorContext;\n declare traceId?: string;\n trace: BetterAgentErrorTraceFrame[];\n\n constructor(message: string, opts: BetterAgentErrorOptions) {\n if (opts.cause !== undefined) {\n super(message, { cause: opts.cause });\n } else {\n super(message);\n }\n\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = \"BetterAgentError\";\n\n const meta = getCodeMeta(opts.code);\n this.code = opts.code;\n this.status = opts.status ?? meta.status;\n this.title = opts.title ?? meta.title;\n this.type = opts.type ?? getDocsTypeUrl(opts.code);\n this.retryable = opts.retryable ?? meta.retryable;\n if (opts.issues !== undefined) this.issues = opts.issues;\n if (opts.context !== undefined) this.context = opts.context;\n if (opts.traceId !== undefined) this.traceId = opts.traceId;\n this.trace = opts.trace ?? [];\n\n // captureStackTrace is available in V8/Node.js environments\n const ctor = Error as unknown as {\n captureStackTrace?: (target: object, ctor?: unknown) => void;\n };\n if (ctor.captureStackTrace !== undefined) {\n ctor.captureStackTrace(this, opts.stackFrom ?? BetterAgentError);\n }\n }\n\n /** Adds a trace frame. */\n at(frame: BetterAgentErrorTraceFrame): this {\n this.trace.push(frame);\n return this;\n }\n\n /** Converts this error to problem details. */\n toProblem(overrides: Partial<BetterAgentProblemDetails> = {}): BetterAgentProblemDetails {\n const out: BetterAgentProblemDetails = {\n type: overrides.type ?? this.type,\n title: overrides.title ?? this.title,\n status: overrides.status ?? this.status,\n detail: overrides.detail ?? this.message,\n code: String(overrides.code ?? this.code),\n };\n\n const retryable = overrides.retryable ?? this.retryable;\n if (retryable !== undefined) out.retryable = retryable;\n\n const issues = overrides.issues ?? this.issues;\n if (issues !== undefined) out.issues = issues;\n\n const traceId = overrides.traceId ?? this.traceId;\n if (traceId !== undefined) out.traceId = traceId;\n\n const context = {\n ...(this.context ?? {}),\n ...(isRecord(overrides.context) ? overrides.context : {}),\n };\n if (Object.keys(context).length > 0) out.context = context;\n\n const trace = overrides.trace ?? this.trace;\n if (trace.length > 0) out.trace = trace;\n\n return out;\n }\n\n /** JSON form for `JSON.stringify`. */\n toJSON() {\n return this.toProblem();\n }\n\n /** Debug form with stack and cause. */\n toDebugJSON() {\n const debug = this.toProblem() as BetterAgentProblemDetails & {\n stack?: string;\n cause?: unknown;\n };\n\n if (this.stack !== undefined) debug.stack = this.stack;\n if (this.cause !== undefined) debug.cause = this.cause;\n\n return debug;\n }\n\n /** Creates an error from a code and message. */\n static fromCode(\n code: BetterAgentErrorCode,\n message: string,\n opts: Omit<WrapOptions, \"code\"> = {},\n ): BetterAgentError {\n return new BetterAgentError(message, {\n code,\n ...opts,\n stackFrom: opts.stackFrom ?? BetterAgentError.fromCode,\n });\n }\n\n /** Rehydrates an error from problem details. */\n static fromProblem(\n input: BetterAgentProblemDetails | Record<string, unknown>,\n opts: Omit<WrapOptions, \"code\"> = {},\n ): BetterAgentError {\n if (!isProblemDetailsLike(input)) {\n return BetterAgentError.wrap({\n err: input,\n message: \"Invalid problem details payload\",\n opts: {\n ...opts,\n code: \"INTERNAL\",\n },\n });\n }\n\n return new BetterAgentError(input.detail, {\n code: input.code,\n status: input.status,\n title: input.title,\n type: input.type,\n retryable: input.retryable,\n issues: input.issues,\n context: input.context,\n traceId: input.traceId,\n trace: input.trace,\n ...opts,\n stackFrom: opts.stackFrom ?? BetterAgentError.fromProblem,\n });\n }\n\n /** Wraps unknown errors as {@link BetterAgentError}. */\n static wrap(args: {\n err: unknown;\n message?: string;\n opts?: WrapOptions;\n }): BetterAgentError {\n const code = args.opts?.code ?? \"INTERNAL\";\n\n if (args.err instanceof BetterAgentError) {\n return new BetterAgentError(\n args.message ? `${args.message}: ${args.err.message}` : args.err.message,\n {\n code,\n status: args.opts?.status ?? args.err.status,\n title: args.opts?.title ?? args.err.title,\n type: args.opts?.type ?? args.err.type,\n retryable: args.opts?.retryable ?? args.err.retryable,\n context: {\n ...(args.err.context ?? {}),\n ...(args.opts?.context ?? {}),\n },\n traceId: args.opts?.traceId ?? args.err.traceId,\n trace: args.opts?.trace\n ? [...args.err.trace, ...args.opts.trace]\n : args.err.trace,\n cause: args.opts?.cause ?? args.err,\n stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap,\n },\n );\n }\n\n if (isProblemDetailsLike(args.err)) {\n return BetterAgentError.fromProblem(args.err, {\n ...args.opts,\n stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap,\n });\n }\n\n if (args.err instanceof Error) {\n return new BetterAgentError(args.message || args.err.message, {\n ...args.opts,\n code,\n cause: args.opts?.cause ?? args.err,\n stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap,\n });\n }\n\n return new BetterAgentError(args.message || \"Unknown error\", {\n ...args.opts,\n code,\n stackFrom: args.opts?.stackFrom ?? BetterAgentError.wrap,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/logger.d.ts
|
|
2
|
+
type LogLevel = "debug" | "info" | "success" | "warn" | "error";
|
|
3
|
+
type LogMethod = (message?: unknown, ...args: unknown[]) => void;
|
|
4
|
+
type InternalLogger = { [K in LogLevel]: LogMethod };
|
|
5
|
+
declare const logger: InternalLogger;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { InternalLogger, LogLevel, LogMethod, logger };
|
|
8
|
+
//# sourceMappingURL=logger.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.mts","names":[],"sources":["../src/logger.ts"],"mappings":";KAAY,QAAA;AAAA,KAEA,SAAA,IAAa,OAAA,eAAsB,IAAA;AAAA,KAEnC,cAAA,WACF,QAAA,GAAW,SAAA;AAAA,cAyFR,MAAA,EAAQ,cAAA"}
|
package/dist/logger.mjs
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
//#region src/logger.ts
|
|
2
|
+
const levels = [
|
|
3
|
+
"debug",
|
|
4
|
+
"info",
|
|
5
|
+
"success",
|
|
6
|
+
"warn",
|
|
7
|
+
"error"
|
|
8
|
+
];
|
|
9
|
+
const colors = {
|
|
10
|
+
reset: "\x1B[0m",
|
|
11
|
+
dim: "\x1B[2m",
|
|
12
|
+
bright: "\x1B[1m",
|
|
13
|
+
blue: "\x1B[34m",
|
|
14
|
+
green: "\x1B[32m",
|
|
15
|
+
yellow: "\x1B[33m",
|
|
16
|
+
red: "\x1B[31m",
|
|
17
|
+
magenta: "\x1B[35m"
|
|
18
|
+
};
|
|
19
|
+
const levelColors = {
|
|
20
|
+
debug: colors.magenta,
|
|
21
|
+
info: colors.blue,
|
|
22
|
+
success: colors.green,
|
|
23
|
+
warn: colors.yellow,
|
|
24
|
+
error: colors.red
|
|
25
|
+
};
|
|
26
|
+
function shouldPublishLog(currentLogLevel, logLevel) {
|
|
27
|
+
const currentIndex = levels.indexOf(currentLogLevel);
|
|
28
|
+
return levels.indexOf(logLevel) >= currentIndex;
|
|
29
|
+
}
|
|
30
|
+
function canUseColors() {
|
|
31
|
+
if (typeof process === "undefined") return false;
|
|
32
|
+
if (process.env?.NO_COLOR) return false;
|
|
33
|
+
if (process.env?.FORCE_COLOR) return true;
|
|
34
|
+
return Boolean(process.stdout?.isTTY);
|
|
35
|
+
}
|
|
36
|
+
function serializeMessage(message) {
|
|
37
|
+
if (message instanceof Error) return message.stack || message.message;
|
|
38
|
+
if (typeof message === "string") return message;
|
|
39
|
+
try {
|
|
40
|
+
return JSON.stringify(message, null, 2);
|
|
41
|
+
} catch {
|
|
42
|
+
return String(message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function formatMessage(level, message) {
|
|
46
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
47
|
+
const text = serializeMessage(message);
|
|
48
|
+
if (canUseColors()) {
|
|
49
|
+
const color = levelColors[level];
|
|
50
|
+
const levelUpper = level.toUpperCase();
|
|
51
|
+
return `${colors.dim}${timestamp}${colors.reset} ${color}${levelUpper}${colors.reset} ${colors.bright}[Better Agent]:${colors.reset} ${text}`;
|
|
52
|
+
}
|
|
53
|
+
return `${timestamp} ${level.toUpperCase()} [Better-Agent]: ${text}`;
|
|
54
|
+
}
|
|
55
|
+
var LoggerImpl = class {
|
|
56
|
+
logLevel = "info";
|
|
57
|
+
log(level, message, ...args) {
|
|
58
|
+
if (!shouldPublishLog(this.logLevel, level)) return;
|
|
59
|
+
console.log(formatMessage(level, message), ...args);
|
|
60
|
+
}
|
|
61
|
+
debug = (message, ...args) => this.log("debug", message, ...args);
|
|
62
|
+
info = (message, ...args) => this.log("info", message, ...args);
|
|
63
|
+
success = (message, ...args) => this.log("success", message, ...args);
|
|
64
|
+
warn = (message, ...args) => this.log("warn", message, ...args);
|
|
65
|
+
error = (message, ...args) => this.log("error", message, ...args);
|
|
66
|
+
};
|
|
67
|
+
const logger = new LoggerImpl();
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
export { logger };
|
|
71
|
+
//# sourceMappingURL=logger.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.mjs","names":[],"sources":["../src/logger.ts"],"sourcesContent":["export type LogLevel = \"debug\" | \"info\" | \"success\" | \"warn\" | \"error\";\n\nexport type LogMethod = (message?: unknown, ...args: unknown[]) => void;\n\nexport type InternalLogger = {\n [K in LogLevel]: LogMethod;\n};\n\ndeclare const process:\n | {\n env?: Record<string, string | undefined>;\n stdout?: { isTTY?: boolean };\n }\n | undefined;\n\nconst levels: readonly LogLevel[] = [\"debug\", \"info\", \"success\", \"warn\", \"error\"];\n\nconst colors = {\n reset: \"\\x1b[0m\",\n dim: \"\\x1b[2m\",\n bright: \"\\x1b[1m\",\n blue: \"\\x1b[34m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n red: \"\\x1b[31m\",\n magenta: \"\\x1b[35m\",\n};\n\nconst levelColors: Record<LogLevel, string> = {\n debug: colors.magenta,\n info: colors.blue,\n success: colors.green,\n warn: colors.yellow,\n error: colors.red,\n};\n\nfunction shouldPublishLog(currentLogLevel: LogLevel, logLevel: LogLevel): boolean {\n const currentIndex = levels.indexOf(currentLogLevel);\n const incomingIndex = levels.indexOf(logLevel);\n return incomingIndex >= currentIndex;\n}\n\nfunction canUseColors(): boolean {\n if (typeof process === \"undefined\") return false;\n if (process.env?.NO_COLOR) return false;\n if (process.env?.FORCE_COLOR) return true;\n return Boolean(process.stdout?.isTTY);\n}\n\nfunction serializeMessage(message: unknown): string {\n if (message instanceof Error) {\n return message.stack || message.message;\n }\n if (typeof message === \"string\") {\n return message;\n }\n try {\n return JSON.stringify(message, null, 2);\n } catch {\n return String(message);\n }\n}\n\nfunction formatMessage(level: LogLevel, message: unknown): string {\n const timestamp = new Date().toISOString();\n const text = serializeMessage(message);\n\n if (canUseColors()) {\n const color = levelColors[level];\n const levelUpper = level.toUpperCase();\n return `${colors.dim}${timestamp}${colors.reset} ${color}${levelUpper}${colors.reset} ${colors.bright}[Better Agent]:${colors.reset} ${text}`;\n }\n\n return `${timestamp} ${level.toUpperCase()} [Better-Agent]: ${text}`;\n}\n\nclass LoggerImpl implements InternalLogger {\n private readonly logLevel: LogLevel = \"info\";\n\n private log(level: LogLevel, message?: unknown, ...args: unknown[]) {\n if (!shouldPublishLog(this.logLevel, level)) {\n return;\n }\n\n console.log(formatMessage(level, message), ...args);\n }\n\n debug: LogMethod = (message, ...args) => this.log(\"debug\", message, ...args);\n info: LogMethod = (message, ...args) => this.log(\"info\", message, ...args);\n success: LogMethod = (message, ...args) => this.log(\"success\", message, ...args);\n warn: LogMethod = (message, ...args) => this.log(\"warn\", message, ...args);\n error: LogMethod = (message, ...args) => this.log(\"error\", message, ...args);\n}\n\nexport const logger: InternalLogger = new LoggerImpl();\n"],"mappings":";AAeA,MAAM,SAA8B;CAAC;CAAS;CAAQ;CAAW;CAAQ;CAAQ;AAEjF,MAAM,SAAS;CACX,OAAO;CACP,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;CACR,KAAK;CACL,SAAS;CACZ;AAED,MAAM,cAAwC;CAC1C,OAAO,OAAO;CACd,MAAM,OAAO;CACb,SAAS,OAAO;CAChB,MAAM,OAAO;CACb,OAAO,OAAO;CACjB;AAED,SAAS,iBAAiB,iBAA2B,UAA6B;CAC9E,MAAM,eAAe,OAAO,QAAQ,gBAAgB;AAEpD,QADsB,OAAO,QAAQ,SAAS,IACtB;;AAG5B,SAAS,eAAwB;AAC7B,KAAI,OAAO,YAAY,YAAa,QAAO;AAC3C,KAAI,QAAQ,KAAK,SAAU,QAAO;AAClC,KAAI,QAAQ,KAAK,YAAa,QAAO;AACrC,QAAO,QAAQ,QAAQ,QAAQ,MAAM;;AAGzC,SAAS,iBAAiB,SAA0B;AAChD,KAAI,mBAAmB,MACnB,QAAO,QAAQ,SAAS,QAAQ;AAEpC,KAAI,OAAO,YAAY,SACnB,QAAO;AAEX,KAAI;AACA,SAAO,KAAK,UAAU,SAAS,MAAM,EAAE;SACnC;AACJ,SAAO,OAAO,QAAQ;;;AAI9B,SAAS,cAAc,OAAiB,SAA0B;CAC9D,MAAM,6BAAY,IAAI,MAAM,EAAC,aAAa;CAC1C,MAAM,OAAO,iBAAiB,QAAQ;AAEtC,KAAI,cAAc,EAAE;EAChB,MAAM,QAAQ,YAAY;EAC1B,MAAM,aAAa,MAAM,aAAa;AACtC,SAAO,GAAG,OAAO,MAAM,YAAY,OAAO,MAAM,GAAG,QAAQ,aAAa,OAAO,MAAM,GAAG,OAAO,OAAO,iBAAiB,OAAO,MAAM,GAAG;;AAG3I,QAAO,GAAG,UAAU,GAAG,MAAM,aAAa,CAAC,mBAAmB;;AAGlE,IAAM,aAAN,MAA2C;CACvC,AAAiB,WAAqB;CAEtC,AAAQ,IAAI,OAAiB,SAAmB,GAAG,MAAiB;AAChE,MAAI,CAAC,iBAAiB,KAAK,UAAU,MAAM,CACvC;AAGJ,UAAQ,IAAI,cAAc,OAAO,QAAQ,EAAE,GAAG,KAAK;;CAGvD,SAAoB,SAAS,GAAG,SAAS,KAAK,IAAI,SAAS,SAAS,GAAG,KAAK;CAC5E,QAAmB,SAAS,GAAG,SAAS,KAAK,IAAI,QAAQ,SAAS,GAAG,KAAK;CAC1E,WAAsB,SAAS,GAAG,SAAS,KAAK,IAAI,WAAW,SAAS,GAAG,KAAK;CAChF,QAAmB,SAAS,GAAG,SAAS,KAAK,IAAI,QAAQ,SAAS,GAAG,KAAK;CAC1E,SAAoB,SAAS,GAAG,SAAS,KAAK,IAAI,SAAS,SAAS,GAAG,KAAK;;AAGhF,MAAa,SAAyB,IAAI,YAAY"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"neverthrow.d.mts","names":[],"sources":["../src/neverthrow.ts"],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { n as __reExport, t as __exportAll } from "./chunk-CtajNgzt.mjs";
|
|
2
|
+
|
|
3
|
+
export * from "neverthrow"
|
|
4
|
+
|
|
5
|
+
//#region src/neverthrow.ts
|
|
6
|
+
var neverthrow_exports = /* @__PURE__ */ __exportAll({});
|
|
7
|
+
import * as import_neverthrow from "neverthrow";
|
|
8
|
+
__reExport(neverthrow_exports, import_neverthrow);
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { neverthrow_exports as t };
|
|
12
|
+
//# sourceMappingURL=neverthrow.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"neverthrow.mjs","names":[],"sources":["../src/neverthrow.ts"],"sourcesContent":["export * from \"neverthrow\";\n"],"mappings":""}
|
package/dist/utils.d.mts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as neverthrow_d_exports } from "./neverthrow.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/utils.d.ts
|
|
4
|
+
declare const safeJsonParse: (text: string) => neverthrow_d_exports.Result<unknown, Error>;
|
|
5
|
+
declare const isPlainRecord: (value: unknown) => value is Record<string, unknown>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { isPlainRecord, safeJsonParse };
|
|
8
|
+
//# sourceMappingURL=utils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../src/utils.ts"],"mappings":";;;cAEa,aAAA,GAAa,IAAA,aAAmB,oBAAA,CAAA,MAAA,UAAgB,KAAA;AAAA,cAQhD,aAAA,GAAa,KAAA,cAAqB,KAAA,IAAS,MAAA"}
|
package/dist/utils.mjs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { t as neverthrow_exports } from "./neverthrow.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/utils.ts
|
|
4
|
+
const safeJsonParse = (text) => {
|
|
5
|
+
try {
|
|
6
|
+
return (0, neverthrow_exports.ok)(JSON.parse(text));
|
|
7
|
+
} catch (error) {
|
|
8
|
+
return (0, neverthrow_exports.err)(error instanceof Error ? error : new Error(String(error)));
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const isPlainRecord = (value) => {
|
|
12
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { isPlainRecord, safeJsonParse };
|
|
17
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import { type Result, err, ok } from \"./neverthrow\";\n\nexport const safeJsonParse = (text: string): Result<unknown, Error> => {\n try {\n return ok(JSON.parse(text));\n } catch (error) {\n return err(error instanceof Error ? error : new Error(String(error)));\n }\n};\n\nexport const isPlainRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n"],"mappings":";;;AAEA,MAAa,iBAAiB,SAAyC;AACnE,KAAI;AACA,oCAAU,KAAK,MAAM,KAAK,CAAC;UACtB,OAAO;AACZ,qCAAW,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC,CAAC;;;AAI7E,MAAa,iBAAiB,UAAqD;AAC/E,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM"}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@better-agent/shared",
|
|
3
|
+
"version": "0.1.0-canary.0",
|
|
4
|
+
"description": "Shared utilities for Better Agent",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/better-agent/better-agent.git",
|
|
9
|
+
"directory": "packages/shared"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/better-agent/better-agent/tree/main/packages/shared",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/better-agent/better-agent/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"types": "./dist/errors.d.mts",
|
|
17
|
+
"sideEffects": false,
|
|
18
|
+
"exports": {
|
|
19
|
+
"./neverthrow": {
|
|
20
|
+
"types": "./dist/neverthrow.d.mts",
|
|
21
|
+
"import": "./dist/neverthrow.mjs"
|
|
22
|
+
},
|
|
23
|
+
"./errors": {
|
|
24
|
+
"types": "./dist/errors.d.mts",
|
|
25
|
+
"import": "./dist/errors.mjs"
|
|
26
|
+
},
|
|
27
|
+
"./logger": {
|
|
28
|
+
"types": "./dist/logger.d.mts",
|
|
29
|
+
"import": "./dist/logger.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./utils": {
|
|
32
|
+
"types": "./dist/utils.d.mts",
|
|
33
|
+
"import": "./dist/utils.mjs"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"typesVersions": {
|
|
37
|
+
"*": {
|
|
38
|
+
"neverthrow": ["dist/neverthrow.d.mts"],
|
|
39
|
+
"errors": ["dist/errors.d.mts"],
|
|
40
|
+
"logger": ["dist/logger.d.mts"],
|
|
41
|
+
"utils": ["dist/utils.d.mts"]
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "bunx tsdown",
|
|
46
|
+
"dev": "bunx tsdown --watch --no-clean",
|
|
47
|
+
"lint:package": "bunx publint run --strict",
|
|
48
|
+
"lint:types": "npm_config_cache=../../.npm-cache bunx attw --profile esm-only --pack .",
|
|
49
|
+
"lint": "bunx biome check .",
|
|
50
|
+
"typecheck": "bunx tsc -p tsconfig.json --noEmit",
|
|
51
|
+
"format": "bunx biome format --write .",
|
|
52
|
+
"clean": "bunx rimraf dist"
|
|
53
|
+
},
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
},
|
|
57
|
+
"files": ["dist"],
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"neverthrow": "^8.2.0"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/bun": "^1.2.18",
|
|
63
|
+
"@types/node": "^22.15.30"
|
|
64
|
+
}
|
|
65
|
+
}
|