@danceroutine/tango-core 1.11.1 → 1.11.2
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/dist/{TangoError-DdQVQNZU.js → TangoError-Cvgnm026.js} +8 -4
- package/dist/TangoError-Cvgnm026.js.map +1 -0
- package/dist/TangoError-ptR2iApz.d.ts +45 -0
- package/dist/chunk-D7D4PA-g.js +13 -0
- package/dist/errors/index.d.ts +3 -15
- package/dist/errors/index.js +3 -5
- package/dist/{errors-VacGsSaj.js → errors-DpI5Dxmr.js} +45 -36
- package/dist/errors-DpI5Dxmr.js.map +1 -0
- package/dist/http/index.d.ts +2 -10
- package/dist/http/index.js +2 -5
- package/dist/{http-63cMANMG.js → http-6e0y_vd6.js} +95 -79
- package/dist/{http-63cMANMG.js.map → http-6e0y_vd6.js.map} +1 -1
- package/dist/index-B5PoK4LH.d.ts +86 -0
- package/dist/index-D8o4DOOG.d.ts +824 -0
- package/dist/index-DFWodYLS.d.ts +161 -0
- package/dist/index-DPABSINz.d.ts +114 -0
- package/dist/index-MZzjIxgD.d.ts +59 -0
- package/dist/index.d.ts +7 -20
- package/dist/index.js +13 -7
- package/dist/index.js.map +1 -0
- package/dist/logging/index.d.ts +2 -3
- package/dist/logging/index.js +2 -3
- package/dist/logging-UC5uXHET.js +68 -0
- package/dist/logging-UC5uXHET.js.map +1 -0
- package/dist/runtime/index.d.ts +2 -14
- package/dist/runtime/index.js +2 -3
- package/dist/{runtime-B8KkgD3R.js → runtime-BAG_EKuM.js} +44 -35
- package/dist/runtime-BAG_EKuM.js.map +1 -0
- package/dist/sql/index.d.ts +2 -13
- package/dist/sql/index.js +2 -3
- package/dist/{sql-BI3ptL9-.js → sql-CIPnuTYO.js} +21 -16
- package/dist/{sql-BI3ptL9-.js.map → sql-CIPnuTYO.js.map} +1 -1
- package/package.json +2 -2
- package/dist/TangoError-DdQVQNZU.js.map +0 -1
- package/dist/chunk-BkvOhyD0.js +0 -12
- package/dist/errors/AuthenticationError.d.ts +0 -15
- package/dist/errors/ConflictError.d.ts +0 -15
- package/dist/errors/HttpError.d.ts +0 -7
- package/dist/errors/MultipleObjectsReturned.d.ts +0 -11
- package/dist/errors/NotFoundError.d.ts +0 -15
- package/dist/errors/PermissionDenied.d.ts +0 -15
- package/dist/errors/TangoError.d.ts +0 -33
- package/dist/errors/ValidationError.d.ts +0 -14
- package/dist/errors/factories/HttpErrorFactory.d.ts +0 -59
- package/dist/errors/factories/index.d.ts +0 -4
- package/dist/errors-VacGsSaj.js.map +0 -1
- package/dist/http/TangoBody.d.ts +0 -110
- package/dist/http/TangoHeaders.d.ts +0 -191
- package/dist/http/TangoQueryParams.d.ts +0 -81
- package/dist/http/TangoRequest.d.ts +0 -130
- package/dist/http/TangoResponse.d.ts +0 -305
- package/dist/logging/ConsoleLogger.d.ts +0 -15
- package/dist/logging/Logger.d.ts +0 -13
- package/dist/logging/getLogger.d.ts +0 -23
- package/dist/logging-BWeD4HOO.js +0 -48
- package/dist/logging-BWeD4HOO.js.map +0 -1
- package/dist/runtime/binary/index.d.ts +0 -6
- package/dist/runtime/binary/isArrayBuffer.d.ts +0 -4
- package/dist/runtime/binary/isBlob.d.ts +0 -4
- package/dist/runtime/binary/isUint8Array.d.ts +0 -4
- package/dist/runtime/date/index.d.ts +0 -4
- package/dist/runtime/date/isDate.d.ts +0 -4
- package/dist/runtime/error/index.d.ts +0 -4
- package/dist/runtime/error/isError.d.ts +0 -4
- package/dist/runtime/internal/hasTag.d.ts +0 -1
- package/dist/runtime/object/index.d.ts +0 -5
- package/dist/runtime/object/isNil.d.ts +0 -4
- package/dist/runtime/object/isObject.d.ts +0 -4
- package/dist/runtime/web/index.d.ts +0 -7
- package/dist/runtime/web/isFile.d.ts +0 -4
- package/dist/runtime/web/isFormData.d.ts +0 -4
- package/dist/runtime/web/isReadableStream.d.ts +0 -4
- package/dist/runtime/web/isURLSearchParams.d.ts +0 -4
- package/dist/runtime-B8KkgD3R.js.map +0 -1
- package/dist/sql/SqlDialect.d.ts +0 -5
- package/dist/sql/SqlIdentifierRole.d.ts +0 -13
- package/dist/sql/SqlSafetyEngine.d.ts +0 -50
- package/dist/sql/TrustedSqlFragment.d.ts +0 -5
- package/dist/sql/ValidatedSqlIdentifier.d.ts +0 -7
- package/dist/sql/isTrustedSqlFragment.d.ts +0 -5
- package/dist/sql/quoteSqlIdentifier.d.ts +0 -6
- package/dist/sql/trustedSql.d.ts +0 -5
- package/dist/sql/validateSqlIdentifier.d.ts +0 -6
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
2
1
|
//#region src/errors/TangoError.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base branded framework error.
|
|
4
|
+
*
|
|
5
|
+
* Subclasses provide HTTP status, stable code, and structured details.
|
|
6
|
+
*/
|
|
3
7
|
var TangoError = class extends Error {
|
|
4
8
|
__tangoErrorBrand = "tango.error";
|
|
5
9
|
/** Runtime guard for Tango-branded errors. */
|
|
@@ -29,7 +33,7 @@ var TangoError = class extends Error {
|
|
|
29
33
|
};
|
|
30
34
|
}
|
|
31
35
|
};
|
|
32
|
-
|
|
33
36
|
//#endregion
|
|
34
|
-
export { TangoError };
|
|
35
|
-
|
|
37
|
+
export { TangoError as t };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=TangoError-Cvgnm026.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TangoError-Cvgnm026.js","names":[],"sources":["../src/errors/TangoError.ts"],"sourcesContent":["import type { HttpError } from './HttpError';\n\n/** Structured error detail payload for API responses. */\nexport type ErrorDetails = Record<string, string[]> | null | undefined;\n\n/** Canonical error payload shape used by Tango HTTP error responses. */\nexport type ProblemDetails<TDetails extends ErrorDetails = null> = {\n code: string;\n message: string;\n details?: TDetails;\n fields?: Record<string, string[]>;\n};\n\n/** Envelope shape for serialized error responses. */\nexport type ErrorEnvelope<TDetails extends ErrorDetails = null> = {\n error: ProblemDetails<TDetails>;\n};\n\n/**\n * Base branded framework error.\n *\n * Subclasses provide HTTP status, stable code, and structured details.\n */\nexport abstract class TangoError extends Error {\n // String brand avoids instanceof and survives cross-package boundaries.\n readonly __tangoErrorBrand = 'tango.error' as const;\n abstract status: number;\n\n protected abstract getDetails(): ErrorDetails;\n\n protected abstract getErrorName(): string;\n\n /** Runtime guard for Tango-branded errors. */\n static isTangoError(err: unknown): err is TangoError {\n return !!err && (err as { __tangoErrorBrand?: string }).__tangoErrorBrand === 'tango.error';\n }\n\n /** Runtime guard for plain problem-details objects. */\n static isProblemDetails(err: unknown): err is ProblemDetails {\n return (\n !!err &&\n typeof err === 'object' &&\n err !== null &&\n 'code' in err &&\n typeof (err as { code: unknown }).code === 'string' &&\n 'message' in err &&\n typeof (err as { message: unknown }).message === 'string'\n );\n }\n\n /** Convert this error to wire-level envelope format. */\n toErrorEnvelope(): ErrorEnvelope<ErrorDetails> {\n return {\n error: {\n code: this.getErrorName(),\n message: this.message,\n details: this.getDetails(),\n },\n };\n }\n\n /** Convert this error to legacy `HttpError` shape. */\n toHttpError(): HttpError {\n return {\n status: this.status,\n body: {\n error: this.message,\n details: this.getDetails(),\n },\n };\n }\n}\n"],"mappings":";;;;;;AAuBA,IAAsB,aAAtB,cAAyC,MAAM;CAE3C,oBAA6B;;CAQ7B,OAAO,aAAa,KAAiC;EACjD,OAAO,CAAC,CAAC,OAAQ,IAAuC,sBAAsB;CAClF;;CAGA,OAAO,iBAAiB,KAAqC;EACzD,OACI,CAAC,CAAC,OACF,OAAO,QAAQ,YACf,QAAQ,QACR,UAAU,OACV,OAAQ,IAA0B,SAAS,YAC3C,aAAa,OACb,OAAQ,IAA6B,YAAY;CAEzD;;CAGA,kBAA+C;EAC3C,OAAO,EACH,OAAO;GACH,MAAM,KAAK,aAAa;GACxB,SAAS,KAAK;GACd,SAAS,KAAK,WAAW;EAC7B,EACJ;CACJ;;CAGA,cAAyB;EACrB,OAAO;GACH,QAAQ,KAAK;GACb,MAAM;IACF,OAAO,KAAK;IACZ,SAAS,KAAK,WAAW;GAC7B;EACJ;CACJ;AACJ"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/errors/HttpError.d.ts
|
|
2
|
+
interface HttpError {
|
|
3
|
+
status: number;
|
|
4
|
+
body: {
|
|
5
|
+
error: string;
|
|
6
|
+
details?: Record<string, string[]> | null;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/errors/TangoError.d.ts
|
|
11
|
+
/** Structured error detail payload for API responses. */
|
|
12
|
+
type ErrorDetails = Record<string, string[]> | null | undefined;
|
|
13
|
+
/** Canonical error payload shape used by Tango HTTP error responses. */
|
|
14
|
+
type ProblemDetails<TDetails extends ErrorDetails = null> = {
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
details?: TDetails;
|
|
18
|
+
fields?: Record<string, string[]>;
|
|
19
|
+
};
|
|
20
|
+
/** Envelope shape for serialized error responses. */
|
|
21
|
+
type ErrorEnvelope<TDetails extends ErrorDetails = null> = {
|
|
22
|
+
error: ProblemDetails<TDetails>;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Base branded framework error.
|
|
26
|
+
*
|
|
27
|
+
* Subclasses provide HTTP status, stable code, and structured details.
|
|
28
|
+
*/
|
|
29
|
+
declare abstract class TangoError extends Error {
|
|
30
|
+
readonly __tangoErrorBrand: "tango.error";
|
|
31
|
+
abstract status: number;
|
|
32
|
+
protected abstract getDetails(): ErrorDetails;
|
|
33
|
+
protected abstract getErrorName(): string;
|
|
34
|
+
/** Runtime guard for Tango-branded errors. */
|
|
35
|
+
static isTangoError(err: unknown): err is TangoError;
|
|
36
|
+
/** Runtime guard for plain problem-details objects. */
|
|
37
|
+
static isProblemDetails(err: unknown): err is ProblemDetails;
|
|
38
|
+
/** Convert this error to wire-level envelope format. */
|
|
39
|
+
toErrorEnvelope(): ErrorEnvelope<ErrorDetails>;
|
|
40
|
+
/** Convert this error to legacy `HttpError` shape. */
|
|
41
|
+
toHttpError(): HttpError;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { HttpError as a, TangoError as i, ErrorEnvelope as n, ProblemDetails as r, ErrorDetails as t };
|
|
45
|
+
//# sourceMappingURL=TangoError-ptR2iApz.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) __defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true
|
|
8
|
+
});
|
|
9
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { __exportAll as t };
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import type { HttpError } from './HttpError';
|
|
5
|
-
import * as factories from './factories/index';
|
|
6
|
-
import { TangoError, type ErrorDetails, type ErrorEnvelope, type ProblemDetails } from './TangoError';
|
|
7
|
-
import { ConflictError } from './ConflictError';
|
|
8
|
-
import { ValidationError } from './ValidationError';
|
|
9
|
-
import { MultipleObjectsReturned } from './MultipleObjectsReturned';
|
|
10
|
-
import { NotFoundError } from './NotFoundError';
|
|
11
|
-
import { PermissionDenied } from './PermissionDenied';
|
|
12
|
-
import { AuthenticationError } from './AuthenticationError';
|
|
13
|
-
import { HttpErrorFactory, type HttpErrorFactoryConfig } from './factories/HttpErrorFactory';
|
|
14
|
-
export { AuthenticationError, ConflictError, HttpErrorFactory, MultipleObjectsReturned, NotFoundError, PermissionDenied, TangoError, ValidationError, factories, };
|
|
15
|
-
export type { ErrorDetails, ErrorEnvelope, HttpError, HttpErrorFactoryConfig, ProblemDetails };
|
|
1
|
+
import { a as HttpError, i as TangoError, n as ErrorEnvelope, r as ProblemDetails, t as ErrorDetails } from "../TangoError-ptR2iApz.js";
|
|
2
|
+
import { a as MultipleObjectsReturned, c as index_d_exports, i as NotFoundError, l as HttpErrorFactory, n as AuthenticationError, o as ValidationError, r as PermissionDenied, s as ConflictError, u as HttpErrorFactoryConfig } from "../index-DFWodYLS.js";
|
|
3
|
+
export { AuthenticationError, ConflictError, type ErrorDetails, type ErrorEnvelope, type HttpError, HttpErrorFactory, type HttpErrorFactoryConfig, MultipleObjectsReturned, NotFoundError, PermissionDenied, type ProblemDetails, TangoError, ValidationError, index_d_exports as factories };
|
package/dist/errors/index.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { TangoError } from "../TangoError-
|
|
2
|
-
import "../
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export { AuthenticationError, ConflictError, HttpErrorFactory, MultipleObjectsReturned, NotFoundError, PermissionDenied, TangoError, ValidationError, factories_exports as factories };
|
|
1
|
+
import { t as TangoError } from "../TangoError-Cvgnm026.js";
|
|
2
|
+
import { a as MultipleObjectsReturned, c as factories_exports, i as NotFoundError, l as HttpErrorFactory, n as AuthenticationError, o as ValidationError, r as PermissionDenied, s as ConflictError } from "../errors-DpI5Dxmr.js";
|
|
3
|
+
export { AuthenticationError, ConflictError, HttpErrorFactory, MultipleObjectsReturned, NotFoundError, PermissionDenied, TangoError, ValidationError, factories_exports as factories };
|
|
@@ -1,12 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { TangoError } from "./TangoError-
|
|
3
|
-
import { isError, isObject } from "./runtime-
|
|
4
|
-
|
|
1
|
+
import { t as __exportAll } from "./chunk-D7D4PA-g.js";
|
|
2
|
+
import { t as TangoError } from "./TangoError-Cvgnm026.js";
|
|
3
|
+
import { a as isError, s as isObject } from "./runtime-BAG_EKuM.js";
|
|
5
4
|
//#region src/errors/factories/HttpErrorFactory.ts
|
|
5
|
+
/**
|
|
6
|
+
* Converts errors into structured HTTP error responses.
|
|
7
|
+
* Supports TangoError subclasses out of the box, and custom error handlers
|
|
8
|
+
* can be registered for third-party or application-specific error types.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Development (default) — exposes real error messages
|
|
13
|
+
* const devFactory = new HttpErrorFactory();
|
|
14
|
+
*
|
|
15
|
+
* // Production — hides internal error details
|
|
16
|
+
* const prodFactory = new HttpErrorFactory({ exposeErrors: false });
|
|
17
|
+
*
|
|
18
|
+
* // Register a custom handler for a third-party error
|
|
19
|
+
* prodFactory.registerHandler(ZodError, (err) => ({
|
|
20
|
+
* status: 400,
|
|
21
|
+
* body: { error: 'Validation failed', details: err.flatten().fieldErrors },
|
|
22
|
+
* }));
|
|
23
|
+
*
|
|
24
|
+
* // Quick one-shot conversion with dev defaults
|
|
25
|
+
* const httpError = HttpErrorFactory.toHttpError(new NotFoundError('missing'));
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
6
28
|
var HttpErrorFactory = class HttpErrorFactory {
|
|
7
29
|
static BRAND = "tango.error_factory.http";
|
|
8
30
|
__tangoBrand = HttpErrorFactory.BRAND;
|
|
9
|
-
handlers = new Map();
|
|
31
|
+
handlers = /* @__PURE__ */ new Map();
|
|
10
32
|
exposeErrors;
|
|
11
33
|
constructor(config = {}) {
|
|
12
34
|
this.exposeErrors = config.exposeErrors ?? true;
|
|
@@ -34,7 +56,7 @@ var HttpErrorFactory = class HttpErrorFactory {
|
|
|
34
56
|
const message = typeof issue.message === "string" ? issue.message : "Invalid value";
|
|
35
57
|
const existing = details[key];
|
|
36
58
|
if (existing) existing.push(message);
|
|
37
|
-
else details[key] = [message];
|
|
59
|
+
else details[key] = [message];
|
|
38
60
|
}
|
|
39
61
|
return details;
|
|
40
62
|
}
|
|
@@ -84,14 +106,12 @@ else details[key] = [message];
|
|
|
84
106
|
return false;
|
|
85
107
|
}
|
|
86
108
|
};
|
|
87
|
-
|
|
88
109
|
//#endregion
|
|
89
110
|
//#region src/errors/factories/index.ts
|
|
90
|
-
var factories_exports = {};
|
|
91
|
-
__export(factories_exports, { HttpErrorFactory: () => HttpErrorFactory });
|
|
92
|
-
|
|
111
|
+
var factories_exports = /* @__PURE__ */ __exportAll({ HttpErrorFactory: () => HttpErrorFactory });
|
|
93
112
|
//#endregion
|
|
94
113
|
//#region src/errors/ConflictError.ts
|
|
114
|
+
/** Error for conflicting resource state (HTTP 409). */
|
|
95
115
|
var ConflictError = class ConflictError extends TangoError {
|
|
96
116
|
static BRAND = "tango.error.conflict";
|
|
97
117
|
__tangoBrand = ConflictError.BRAND;
|
|
@@ -111,14 +131,13 @@ var ConflictError = class ConflictError extends TangoError {
|
|
|
111
131
|
getErrorName() {
|
|
112
132
|
return "conflict";
|
|
113
133
|
}
|
|
114
|
-
getDetails() {
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
134
|
+
getDetails() {}
|
|
117
135
|
};
|
|
118
|
-
|
|
119
136
|
//#endregion
|
|
120
137
|
//#region src/errors/ValidationError.ts
|
|
138
|
+
/** Error for request validation failures (HTTP 400). */
|
|
121
139
|
var ValidationError = class ValidationError extends TangoError {
|
|
140
|
+
details;
|
|
122
141
|
__tangoValidationErrorBrand = "tango.error.validation";
|
|
123
142
|
status = 400;
|
|
124
143
|
constructor(message, details) {
|
|
@@ -140,9 +159,9 @@ var ValidationError = class ValidationError extends TangoError {
|
|
|
140
159
|
return this.details;
|
|
141
160
|
}
|
|
142
161
|
};
|
|
143
|
-
|
|
144
162
|
//#endregion
|
|
145
163
|
//#region src/errors/MultipleObjectsReturned.ts
|
|
164
|
+
/** Error when a queryset lookup returns more than one row (HTTP 409). */
|
|
146
165
|
var MultipleObjectsReturned = class MultipleObjectsReturned extends TangoError {
|
|
147
166
|
static BRAND = "tango.error.multiple_objects_returned";
|
|
148
167
|
__tangoBrand = MultipleObjectsReturned.BRAND;
|
|
@@ -158,13 +177,11 @@ var MultipleObjectsReturned = class MultipleObjectsReturned extends TangoError {
|
|
|
158
177
|
getErrorName() {
|
|
159
178
|
return "multiple_objects_returned";
|
|
160
179
|
}
|
|
161
|
-
getDetails() {
|
|
162
|
-
return undefined;
|
|
163
|
-
}
|
|
180
|
+
getDetails() {}
|
|
164
181
|
};
|
|
165
|
-
|
|
166
182
|
//#endregion
|
|
167
183
|
//#region src/errors/NotFoundError.ts
|
|
184
|
+
/** Error for missing resources (HTTP 404). */
|
|
168
185
|
var NotFoundError = class NotFoundError extends TangoError {
|
|
169
186
|
static BRAND = "tango.error.not_found";
|
|
170
187
|
__tangoBrand = NotFoundError.BRAND;
|
|
@@ -184,13 +201,11 @@ var NotFoundError = class NotFoundError extends TangoError {
|
|
|
184
201
|
getErrorName() {
|
|
185
202
|
return "not_found";
|
|
186
203
|
}
|
|
187
|
-
getDetails() {
|
|
188
|
-
return undefined;
|
|
189
|
-
}
|
|
204
|
+
getDetails() {}
|
|
190
205
|
};
|
|
191
|
-
|
|
192
206
|
//#endregion
|
|
193
207
|
//#region src/errors/PermissionDenied.ts
|
|
208
|
+
/** Error for authorization failures (HTTP 403). */
|
|
194
209
|
var PermissionDenied = class PermissionDenied extends TangoError {
|
|
195
210
|
static BRAND = "tango.error.permission_denied";
|
|
196
211
|
__tangoBrand = PermissionDenied.BRAND;
|
|
@@ -210,13 +225,11 @@ var PermissionDenied = class PermissionDenied extends TangoError {
|
|
|
210
225
|
getErrorName() {
|
|
211
226
|
return "permission_denied";
|
|
212
227
|
}
|
|
213
|
-
getDetails() {
|
|
214
|
-
return undefined;
|
|
215
|
-
}
|
|
228
|
+
getDetails() {}
|
|
216
229
|
};
|
|
217
|
-
|
|
218
230
|
//#endregion
|
|
219
231
|
//#region src/errors/AuthenticationError.ts
|
|
232
|
+
/** Error for missing/invalid authentication (HTTP 401). */
|
|
220
233
|
var AuthenticationError = class AuthenticationError extends TangoError {
|
|
221
234
|
static BRAND = "tango.error.authentication";
|
|
222
235
|
__tangoBrand = AuthenticationError.BRAND;
|
|
@@ -236,15 +249,11 @@ var AuthenticationError = class AuthenticationError extends TangoError {
|
|
|
236
249
|
getErrorName() {
|
|
237
250
|
return "authentication_error";
|
|
238
251
|
}
|
|
239
|
-
getDetails() {
|
|
240
|
-
return undefined;
|
|
241
|
-
}
|
|
252
|
+
getDetails() {}
|
|
242
253
|
};
|
|
243
|
-
|
|
244
254
|
//#endregion
|
|
245
255
|
//#region src/errors/index.ts
|
|
246
|
-
var errors_exports = {
|
|
247
|
-
__export(errors_exports, {
|
|
256
|
+
var errors_exports = /* @__PURE__ */ __exportAll({
|
|
248
257
|
AuthenticationError: () => AuthenticationError,
|
|
249
258
|
ConflictError: () => ConflictError,
|
|
250
259
|
HttpErrorFactory: () => HttpErrorFactory,
|
|
@@ -255,7 +264,7 @@ __export(errors_exports, {
|
|
|
255
264
|
ValidationError: () => ValidationError,
|
|
256
265
|
factories: () => factories_exports
|
|
257
266
|
});
|
|
258
|
-
|
|
259
267
|
//#endregion
|
|
260
|
-
export {
|
|
261
|
-
|
|
268
|
+
export { MultipleObjectsReturned as a, factories_exports as c, NotFoundError as i, HttpErrorFactory as l, AuthenticationError as n, ValidationError as o, PermissionDenied as r, ConflictError as s, errors_exports as t };
|
|
269
|
+
|
|
270
|
+
//# sourceMappingURL=errors-DpI5Dxmr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors-DpI5Dxmr.js","names":[],"sources":["../src/errors/factories/HttpErrorFactory.ts","../src/errors/factories/index.ts","../src/errors/ConflictError.ts","../src/errors/ValidationError.ts","../src/errors/MultipleObjectsReturned.ts","../src/errors/NotFoundError.ts","../src/errors/PermissionDenied.ts","../src/errors/AuthenticationError.ts","../src/errors/index.ts"],"sourcesContent":["import { TangoError } from '../TangoError';\nimport type { HttpError } from '../HttpError';\nimport { isError, isObject } from '../../runtime/index';\n\nexport interface HttpErrorFactoryConfig {\n /**\n * When true, raw error messages are included in HTTP responses.\n * When false, generic messages are returned for non-TangoError exceptions.\n * Defaults to true (dev-friendly). Set to false in production.\n */\n exposeErrors?: boolean;\n}\n\ntype ZodLikeIssue = {\n path?: unknown[];\n message?: unknown;\n};\n\ntype ZodLikeError = Error & {\n issues: ZodLikeIssue[];\n};\n\n/**\n * Converts errors into structured HTTP error responses.\n * Supports TangoError subclasses out of the box, and custom error handlers\n * can be registered for third-party or application-specific error types.\n *\n * @example\n * ```typescript\n * // Development (default) — exposes real error messages\n * const devFactory = new HttpErrorFactory();\n *\n * // Production — hides internal error details\n * const prodFactory = new HttpErrorFactory({ exposeErrors: false });\n *\n * // Register a custom handler for a third-party error\n * prodFactory.registerHandler(ZodError, (err) => ({\n * status: 400,\n * body: { error: 'Validation failed', details: err.flatten().fieldErrors },\n * }));\n *\n * // Quick one-shot conversion with dev defaults\n * const httpError = HttpErrorFactory.toHttpError(new NotFoundError('missing'));\n * ```\n */\nexport class HttpErrorFactory {\n static readonly BRAND = 'tango.error_factory.http' as const;\n readonly __tangoBrand: typeof HttpErrorFactory.BRAND = HttpErrorFactory.BRAND;\n\n // oxlint-disable-next-line typescript/no-explicit-any\n private handlers = new Map<new (...args: any[]) => Error, (error: Error) => HttpError>();\n private exposeErrors: boolean;\n\n constructor(config: HttpErrorFactoryConfig = {}) {\n this.exposeErrors = config.exposeErrors ?? true;\n }\n\n /**\n * Narrow an unknown value to `HttpErrorFactory`.\n */\n static isHttpErrorFactory(value: unknown): value is HttpErrorFactory {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === HttpErrorFactory.BRAND\n );\n }\n\n /**\n * Convert an unknown error into an `HttpError` using dev-friendly defaults.\n * Shorthand for `new HttpErrorFactory().create(error)`.\n */\n static toHttpError(error: unknown): HttpError {\n return new HttpErrorFactory().create(error);\n }\n\n private static isZodLikeValidationError(error: unknown): error is ZodLikeError {\n return (\n isError(error) &&\n isObject(error) &&\n Array.isArray((error as { issues?: unknown }).issues) &&\n (error as { name?: unknown }).name === 'ZodError'\n );\n }\n\n private static zodLikeErrorDetails(error: ZodLikeError): Record<string, string[]> {\n const details: Record<string, string[]> = {};\n\n for (const issue of error.issues) {\n const key = Array.isArray(issue.path) && issue.path.length > 0 ? String(issue.path.join('.')) : '_schema';\n const message = typeof issue.message === 'string' ? issue.message : 'Invalid value';\n\n const existing = details[key];\n if (existing) {\n existing.push(message);\n } else {\n details[key] = [message];\n }\n }\n\n return details;\n }\n\n /**\n * Register a custom mapper for an application or third-party error type.\n */\n\n // oxlint-disable-next-line typescript/no-explicit-any\n registerHandler<T extends Error>(errorClass: new (...args: any[]) => T, handler: (error: T) => HttpError): this {\n this.handlers.set(errorClass, handler as (error: Error) => HttpError);\n return this;\n }\n\n /**\n * Convert an unknown error into the normalized HTTP error shape Tango uses.\n */\n create(error: unknown): HttpError {\n if (TangoError.isTangoError(error)) {\n return error.toHttpError();\n }\n\n if (HttpErrorFactory.isZodLikeValidationError(error)) {\n return {\n status: 400,\n body: {\n error: error.message || 'Validation failed',\n details: HttpErrorFactory.zodLikeErrorDetails(error),\n },\n };\n }\n\n for (const [ErrorClass, handler] of this.handlers) {\n if (this.isErrorClassInstance(error, ErrorClass)) {\n return handler(error);\n }\n }\n\n if (isError(error)) {\n return {\n status: 500,\n body: {\n error: this.exposeErrors ? error.message : 'Internal Server Error',\n details: null,\n },\n };\n }\n\n return {\n status: 500,\n body: {\n error: 'Unknown error occurred',\n details: null,\n },\n };\n }\n\n // oxlint-disable-next-line typescript/no-explicit-any\n private isErrorClassInstance(error: unknown, ErrorClass: new (...args: any[]) => Error): error is Error {\n if (!isError(error)) {\n return false;\n }\n\n const expectedBrand = (ErrorClass as { BRAND?: unknown }).BRAND;\n if (\n typeof expectedBrand === 'string' &&\n isObject(error) &&\n (error as { __tangoBrand?: unknown }).__tangoBrand === expectedBrand\n ) {\n return true;\n }\n\n const constructorName = (error as { constructor?: { name?: unknown } }).constructor?.name;\n if (typeof constructorName === 'string' && constructorName === ErrorClass.name) {\n return true;\n }\n\n const errorName = (error as { name?: unknown }).name;\n if (typeof errorName === 'string' && errorName === ErrorClass.name) {\n return true;\n }\n\n return false;\n }\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { HttpErrorFactory, type HttpErrorFactoryConfig } from './HttpErrorFactory';\n","import { TangoError, type ErrorDetails } from './TangoError';\n\n/** Error for conflicting resource state (HTTP 409). */\nexport class ConflictError extends TangoError {\n static readonly BRAND = 'tango.error.conflict' as const;\n readonly __tangoBrand: typeof ConflictError.BRAND = ConflictError.BRAND;\n status = 409;\n\n /** Create a conflict error with optional custom message. */\n constructor(message: string = 'Resource conflict') {\n super(message);\n this.name = 'ConflictError';\n Object.setPrototypeOf(this, ConflictError.prototype);\n }\n\n /**\n * Narrow an unknown value to `ConflictError`.\n */\n static isConflictError(value: unknown): value is ConflictError {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === ConflictError.BRAND\n );\n }\n\n protected override getErrorName(): string {\n return 'conflict';\n }\n\n protected override getDetails(): ErrorDetails {\n return undefined;\n }\n}\n","import { TangoError, type ErrorDetails } from './TangoError';\n\n/** Error for request validation failures (HTTP 400). */\nexport class ValidationError extends TangoError {\n readonly __tangoValidationErrorBrand = 'tango.error.validation' as const;\n status = 400;\n\n constructor(\n message: string,\n public details?: ErrorDetails\n ) {\n super(message);\n this.name = 'ValidationError';\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n\n /**\n * Narrow an unknown value to `ValidationError`, including common legacy shapes.\n */\n static isValidationError(err: unknown): err is ValidationError {\n return (\n (!!err &&\n typeof err === 'object' &&\n (err as { __tangoValidationErrorBrand?: string }).__tangoValidationErrorBrand ===\n 'tango.error.validation') ||\n (typeof err === 'object' &&\n err !== null &&\n 'fields' in err &&\n typeof (err as { fields: unknown }).fields === 'object')\n );\n }\n\n protected override getErrorName(): string {\n return 'ValidationError';\n }\n\n protected override getDetails(): ErrorDetails {\n return this.details;\n }\n}\n","import { TangoError, type ErrorDetails } from './TangoError';\n\n/** Error when a queryset lookup returns more than one row (HTTP 409). */\nexport class MultipleObjectsReturned extends TangoError {\n static readonly BRAND = 'tango.error.multiple_objects_returned' as const;\n readonly __tangoBrand: typeof MultipleObjectsReturned.BRAND = MultipleObjectsReturned.BRAND;\n status = 409;\n\n constructor(message: string = 'Multiple objects returned') {\n super(message);\n this.name = 'MultipleObjectsReturned';\n Object.setPrototypeOf(this, MultipleObjectsReturned.prototype);\n }\n\n static isMultipleObjectsReturned(value: unknown): value is MultipleObjectsReturned {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === MultipleObjectsReturned.BRAND\n );\n }\n\n protected override getErrorName(): string {\n return 'multiple_objects_returned';\n }\n\n protected override getDetails(): ErrorDetails {\n return undefined;\n }\n}\n","import { TangoError, type ErrorDetails } from './TangoError';\n\n/** Error for missing resources (HTTP 404). */\nexport class NotFoundError extends TangoError {\n static readonly BRAND = 'tango.error.not_found' as const;\n readonly __tangoBrand: typeof NotFoundError.BRAND = NotFoundError.BRAND;\n status = 404;\n\n /** Create a not-found error with optional custom message. */\n constructor(message: string = 'Resource not found') {\n super(message);\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n\n /**\n * Narrow an unknown value to `NotFoundError`.\n */\n static isNotFoundError(value: unknown): value is NotFoundError {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === NotFoundError.BRAND\n );\n }\n\n protected override getErrorName(): string {\n return 'not_found';\n }\n\n protected override getDetails(): ErrorDetails {\n return undefined;\n }\n}\n","import { TangoError, type ErrorDetails } from './TangoError';\n\n/** Error for authorization failures (HTTP 403). */\nexport class PermissionDenied extends TangoError {\n static readonly BRAND = 'tango.error.permission_denied' as const;\n readonly __tangoBrand: typeof PermissionDenied.BRAND = PermissionDenied.BRAND;\n status = 403;\n\n /** Create a permission-denied error with optional custom message. */\n constructor(message: string = 'Permission denied') {\n super(message);\n this.name = 'PermissionDenied';\n Object.setPrototypeOf(this, PermissionDenied.prototype);\n }\n\n /**\n * Narrow an unknown value to `PermissionDenied`.\n */\n static isPermissionDenied(value: unknown): value is PermissionDenied {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === PermissionDenied.BRAND\n );\n }\n\n protected override getErrorName(): string {\n return 'permission_denied';\n }\n\n protected override getDetails(): ErrorDetails {\n return undefined;\n }\n}\n","import { TangoError, type ErrorDetails } from './TangoError';\n\n/** Error for missing/invalid authentication (HTTP 401). */\nexport class AuthenticationError extends TangoError {\n static readonly BRAND = 'tango.error.authentication' as const;\n readonly __tangoBrand: typeof AuthenticationError.BRAND = AuthenticationError.BRAND;\n status = 401;\n\n /** Create an authentication error with optional custom message. */\n constructor(message: string = 'Authentication required') {\n super(message);\n this.name = 'AuthenticationError';\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n\n /**\n * Narrow an unknown value to `AuthenticationError`.\n */\n static isAuthenticationError(value: unknown): value is AuthenticationError {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === AuthenticationError.BRAND\n );\n }\n\n protected override getErrorName(): string {\n return 'authentication_error';\n }\n\n protected override getDetails(): ErrorDetails {\n return undefined;\n }\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nimport type { HttpError } from './HttpError';\nimport * as factories from './factories/index';\nimport { TangoError, type ErrorDetails, type ErrorEnvelope, type ProblemDetails } from './TangoError';\nimport { ConflictError } from './ConflictError';\nimport { ValidationError } from './ValidationError';\nimport { MultipleObjectsReturned } from './MultipleObjectsReturned';\nimport { NotFoundError } from './NotFoundError';\nimport { PermissionDenied } from './PermissionDenied';\nimport { AuthenticationError } from './AuthenticationError';\nimport { HttpErrorFactory, type HttpErrorFactoryConfig } from './factories/HttpErrorFactory';\n\nexport {\n AuthenticationError,\n ConflictError,\n HttpErrorFactory,\n MultipleObjectsReturned,\n NotFoundError,\n PermissionDenied,\n TangoError,\n ValidationError,\n factories,\n};\n\nexport type { ErrorDetails, ErrorEnvelope, HttpError, HttpErrorFactoryConfig, ProblemDetails };\n"],"mappings":"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"}
|
package/dist/http/index.d.ts
CHANGED
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
import { TangoBody, type JsonValue } from './TangoBody';
|
|
5
|
-
import { TangoHeaders } from './TangoHeaders';
|
|
6
|
-
import { TangoQueryParams } from './TangoQueryParams';
|
|
7
|
-
import { TangoRequest } from './TangoRequest';
|
|
8
|
-
import { TangoResponse } from './TangoResponse';
|
|
9
|
-
export { TangoBody, TangoHeaders, TangoQueryParams, TangoRequest, TangoResponse };
|
|
10
|
-
export type { JsonValue };
|
|
1
|
+
import { a as TangoHeaders, i as TangoRequest, n as TangoResponse, o as JsonValue, r as TangoQueryParams, s as TangoBody } from "../index-D8o4DOOG.js";
|
|
2
|
+
export { type JsonValue, TangoBody, TangoHeaders, TangoQueryParams, TangoRequest, TangoResponse };
|
package/dist/http/index.js
CHANGED
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
|
|
3
|
-
import { TangoBody, TangoHeaders, TangoQueryParams, TangoRequest, TangoResponse } from "../http-63cMANMG.js";
|
|
4
|
-
|
|
5
|
-
export { TangoBody, TangoHeaders, TangoQueryParams, TangoRequest, TangoResponse };
|
|
1
|
+
import { a as TangoHeaders, i as TangoQueryParams, n as TangoResponse, o as TangoBody, r as TangoRequest } from "../http-6e0y_vd6.js";
|
|
2
|
+
export { TangoBody, TangoHeaders, TangoQueryParams, TangoRequest, TangoResponse };
|