@outfoxx/sunday 2.0.0-beta.14 → 2.0.0-beta.16
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/build/fetch.js +16 -8
- package/build/fetch.js.map +1 -1
- package/build/problem.d.ts +39 -16
- package/build/problem.js +86 -31
- package/build/problem.js.map +1 -1
- package/build/util/nullify.js +1 -1
- package/build/util/nullify.js.map +1 -1
- package/build/util/status-title.d.ts +2 -0
- package/build/util/status-title.js +83 -0
- package/build/util/status-title.js.map +1 -0
- package/package.json +1 -1
package/build/fetch.js
CHANGED
|
@@ -17,6 +17,7 @@ import { ArrayBufferEncoding, createSchemaRuntime, DateEncoding, NumericDateDeco
|
|
|
17
17
|
import { SundayError } from './sunday-error.js';
|
|
18
18
|
import { errorToMessage } from './util/errors.js';
|
|
19
19
|
import { encodeBase64 } from './util/base64.js';
|
|
20
|
+
import { statusTitle } from './util/status-title.js';
|
|
20
21
|
const problemRuntime = createSchemaRuntime({
|
|
21
22
|
format: 'json',
|
|
22
23
|
dateEncoding: DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH,
|
|
@@ -32,7 +33,8 @@ export async function validate(response, dataExpected, problemTypes, logger) {
|
|
|
32
33
|
}
|
|
33
34
|
const problemData = normalizeProblemData(await response.json(), response, logger);
|
|
34
35
|
const type = readProblemType(problemData);
|
|
35
|
-
const problemSchema = (type ? problemTypes?.get(type) : undefined) ??
|
|
36
|
+
const problemSchema = (type !== undefined ? problemTypes?.get(type) : undefined) ??
|
|
37
|
+
ProblemSchema;
|
|
36
38
|
let error;
|
|
37
39
|
try {
|
|
38
40
|
error = problemRuntime.resolveSchema(problemSchema).decode(problemData);
|
|
@@ -51,14 +53,20 @@ function normalizeProblemData(value, response, logger) {
|
|
|
51
53
|
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
52
54
|
return value;
|
|
53
55
|
}
|
|
54
|
-
const problemData = {
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
const problemData = {
|
|
57
|
+
...value,
|
|
58
|
+
};
|
|
59
|
+
if (typeof problemData.status !== 'number') {
|
|
60
|
+
logger?.warn?.('problem response payload missing "status"; backfilling from HTTP response status', { status: response.status, statusText: response.statusText });
|
|
57
61
|
problemData.status = response.status;
|
|
58
62
|
}
|
|
59
|
-
if (problemData.title
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
if (typeof problemData.title !== 'string' &&
|
|
64
|
+
readProblemType(problemData) === 'about:blank') {
|
|
65
|
+
logger?.warn?.('problem response payload missing "title"; backfilling from HTTP response status text', { status: response.status, statusText: response.statusText });
|
|
66
|
+
problemData.title =
|
|
67
|
+
problemData.status === response.status && response.statusText
|
|
68
|
+
? response.statusText
|
|
69
|
+
: statusTitle(problemData.status);
|
|
62
70
|
}
|
|
63
71
|
return problemData;
|
|
64
72
|
}
|
|
@@ -67,7 +75,7 @@ function readProblemType(value) {
|
|
|
67
75
|
return undefined;
|
|
68
76
|
}
|
|
69
77
|
const rec = value;
|
|
70
|
-
return typeof rec.type === 'string' ? rec.type :
|
|
78
|
+
return typeof rec.type === 'string' ? rec.type : 'about:blank';
|
|
71
79
|
}
|
|
72
80
|
export var ResponseExample;
|
|
73
81
|
(function (ResponseExample) {
|
package/build/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"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"}
|
package/build/problem.d.ts
CHANGED
|
@@ -1,35 +1,58 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { SchemaLike } from './schema-runtime.js';
|
|
3
3
|
export interface Problem {
|
|
4
|
-
type: URL;
|
|
5
|
-
title
|
|
6
|
-
status
|
|
4
|
+
type: URL | string;
|
|
5
|
+
title?: string;
|
|
6
|
+
status?: number;
|
|
7
7
|
detail?: string;
|
|
8
|
-
instance?: URL;
|
|
8
|
+
instance?: URL | string;
|
|
9
9
|
[key: string]: unknown;
|
|
10
10
|
}
|
|
11
|
+
/** RFC 9457 strings accept only string tokens; null and other categories are absent. */
|
|
12
|
+
export declare const ProblemStringSchema: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>;
|
|
13
|
+
/** Exact integral status values, without scalar coercion or numeric truncation. */
|
|
14
|
+
export declare const ProblemStatusSchema: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodNumber>>;
|
|
15
|
+
/** Compose string constraints/defaults with Problem URI conversion at a single property. */
|
|
16
|
+
export declare function createProblemReferenceCodec(schema?: z.ZodType<string | undefined, string | undefined>, defaultType?: boolean): z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>;
|
|
17
|
+
/** URI references use URLs only when conversion preserves the original string exactly. */
|
|
18
|
+
export declare const ProblemReferenceSchema: z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>;
|
|
19
|
+
/** Normalize absence before applying the RFC default, including subtype dispatch. */
|
|
20
|
+
export declare const ProblemTypeSchema: z.ZodPipe<z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>, z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>;
|
|
21
|
+
/** Category/default interpretation for subtype selection, before branch-specific validation. */
|
|
22
|
+
export declare const ProblemDispatchSchema: z.ZodObject<{
|
|
23
|
+
type: z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>, z.ZodPrefault<z.ZodString>>>;
|
|
24
|
+
}, z.core.$loose>;
|
|
25
|
+
/** Normalize the type property before a generated union chooses its branch. */
|
|
26
|
+
export declare function createProblemUnionCodec<T extends z.ZodType>(schema: T): z.ZodCodec<z.ZodRecord<z.ZodString, z.ZodUnknown>, T>;
|
|
11
27
|
export declare const ProblemWireSchema: z.ZodObject<{
|
|
12
|
-
type: z.ZodOptional<z.ZodUnion<readonly [z.
|
|
13
|
-
title: z.ZodString
|
|
14
|
-
status: z.ZodNumber
|
|
15
|
-
detail: z.ZodOptional<z.ZodString
|
|
16
|
-
instance: z.ZodOptional<z.
|
|
28
|
+
type: z.ZodPipe<z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>, z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>;
|
|
29
|
+
title: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>;
|
|
30
|
+
status: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodNumber>>;
|
|
31
|
+
detail: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>;
|
|
32
|
+
instance: z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>;
|
|
17
33
|
}, z.core.$loose>;
|
|
18
|
-
|
|
34
|
+
/** Constructor input accepts URI strings as well as decoded URL values. */
|
|
35
|
+
export interface ProblemSpec {
|
|
36
|
+
type?: string | URL;
|
|
37
|
+
title?: string;
|
|
38
|
+
status?: number;
|
|
39
|
+
detail?: string;
|
|
40
|
+
instance?: string | URL;
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
19
43
|
export declare class Problem extends Error implements Problem {
|
|
20
44
|
static readonly BLANK_URL: URL;
|
|
21
|
-
type: URL;
|
|
22
|
-
title
|
|
23
|
-
status
|
|
45
|
+
type: URL | string;
|
|
46
|
+
title?: string;
|
|
47
|
+
status?: number;
|
|
24
48
|
detail?: string;
|
|
25
|
-
instance?: URL;
|
|
49
|
+
instance?: URL | string;
|
|
26
50
|
private readonly _parameters?;
|
|
27
51
|
get parameters(): Record<string, unknown> | undefined;
|
|
28
52
|
constructor(spec: ProblemSpec);
|
|
29
53
|
toString(): string;
|
|
30
54
|
static fromStatus(status: number, title: string): Problem;
|
|
31
55
|
static fromResponse(response: Response): Promise<Problem>;
|
|
32
|
-
private static parseURL;
|
|
33
56
|
}
|
|
34
|
-
export declare function createProblemCodec<TProblem extends Problem, TWire extends
|
|
57
|
+
export declare function createProblemCodec<TProblem extends Problem, TWire extends ProblemSpec>(problemType: new (spec: TWire) => TProblem, wireSchema: z.ZodType<TWire>): z.ZodType<TProblem>;
|
|
35
58
|
export declare const ProblemSchema: SchemaLike<Problem>;
|
package/build/problem.js
CHANGED
|
@@ -14,13 +14,80 @@
|
|
|
14
14
|
import { constructValidatedModel } from './model-construction.js';
|
|
15
15
|
import { z } from 'zod';
|
|
16
16
|
import { ResponseExample } from './fetch.js';
|
|
17
|
-
import { defineSchema
|
|
17
|
+
import { defineSchema } from './schema-runtime.js';
|
|
18
|
+
/** RFC 9457 strings accept only string tokens; null and other categories are absent. */
|
|
19
|
+
export const ProblemStringSchema = z.codec(z.unknown().optional(), z.string().optional(), {
|
|
20
|
+
decode: (value) => (typeof value === 'string' ? value : undefined),
|
|
21
|
+
encode: (value) => value,
|
|
22
|
+
});
|
|
23
|
+
/** Exact integral status values, without scalar coercion or numeric truncation. */
|
|
24
|
+
export const ProblemStatusSchema = z.codec(z.unknown().optional(), z.number().int().optional(), {
|
|
25
|
+
decode: (value) => (typeof value === 'number' ? value : undefined),
|
|
26
|
+
encode: (value) => value,
|
|
27
|
+
});
|
|
28
|
+
const ProblemURI = z.union([
|
|
29
|
+
z.instanceof(URL),
|
|
30
|
+
z
|
|
31
|
+
.string()
|
|
32
|
+
.refine((value) => (!/^[a-z][a-z0-9+.-]*:/i.test(value) || URL.canParse(value)) &&
|
|
33
|
+
![...value].some((character) => /\s/.test(character) || character.codePointAt(0) < 32) &&
|
|
34
|
+
!/%(?![0-9a-f]{2})/i.test(value), 'Invalid Problem URI reference'),
|
|
35
|
+
]);
|
|
36
|
+
/** Compose string constraints/defaults with Problem URI conversion at a single property. */
|
|
37
|
+
export function createProblemReferenceCodec(schema = z
|
|
38
|
+
.string()
|
|
39
|
+
.optional(), defaultType = false) {
|
|
40
|
+
const defaults = z
|
|
41
|
+
.string()
|
|
42
|
+
.optional()
|
|
43
|
+
.prefault(defaultType ? 'about:blank' : undefined);
|
|
44
|
+
const constrained = z.codec(z.unknown().optional(), schema, {
|
|
45
|
+
decode: (value) => defaults.parse(ProblemStringSchema.decode(value)),
|
|
46
|
+
encode: (value) => value,
|
|
47
|
+
});
|
|
48
|
+
const reference = constrained.pipe(z.codec(z.string().optional(), ProblemURI.optional(), {
|
|
49
|
+
decode: (value, ctx) => {
|
|
50
|
+
if (value === undefined || !/^[a-z][a-z0-9+.-]*:/i.test(value))
|
|
51
|
+
return value;
|
|
52
|
+
try {
|
|
53
|
+
const url = new URL(value);
|
|
54
|
+
// URL canonicalization must not change a literal, pattern, or enum constraint on the wire value.
|
|
55
|
+
return url.toString() === value ? url : value;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
ctx.issues.push({
|
|
59
|
+
code: 'custom',
|
|
60
|
+
input: value,
|
|
61
|
+
message: 'Invalid Problem URI',
|
|
62
|
+
});
|
|
63
|
+
return z.NEVER;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
encode: (value) => value?.toString(),
|
|
67
|
+
}));
|
|
68
|
+
return reference.prefault(defaultType ? 'about:blank' : undefined);
|
|
69
|
+
}
|
|
70
|
+
/** URI references use URLs only when conversion preserves the original string exactly. */
|
|
71
|
+
export const ProblemReferenceSchema = createProblemReferenceCodec();
|
|
72
|
+
/** Normalize absence before applying the RFC default, including subtype dispatch. */
|
|
73
|
+
export const ProblemTypeSchema = createProblemReferenceCodec(z.string(), true).pipe(ProblemURI);
|
|
74
|
+
/** Category/default interpretation for subtype selection, before branch-specific validation. */
|
|
75
|
+
export const ProblemDispatchSchema = z.looseObject({
|
|
76
|
+
type: ProblemStringSchema.pipe(z.string().prefault('about:blank')).prefault('about:blank'),
|
|
77
|
+
});
|
|
78
|
+
/** Normalize the type property before a generated union chooses its branch. */
|
|
79
|
+
export function createProblemUnionCodec(schema) {
|
|
80
|
+
return z.codec(z.record(z.string(), z.unknown()), schema, {
|
|
81
|
+
decode: (value) => ProblemDispatchSchema.decode(value),
|
|
82
|
+
encode: (value) => value,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
18
85
|
export const ProblemWireSchema = z.looseObject({
|
|
19
|
-
type:
|
|
20
|
-
title:
|
|
21
|
-
status:
|
|
22
|
-
detail:
|
|
23
|
-
instance:
|
|
86
|
+
type: ProblemTypeSchema,
|
|
87
|
+
title: ProblemStringSchema,
|
|
88
|
+
status: ProblemStatusSchema,
|
|
89
|
+
detail: ProblemStringSchema,
|
|
90
|
+
instance: ProblemReferenceSchema,
|
|
24
91
|
});
|
|
25
92
|
export class Problem extends Error {
|
|
26
93
|
static BLANK_URL = new URL('about:blank');
|
|
@@ -34,14 +101,16 @@ export class Problem extends Error {
|
|
|
34
101
|
return this._parameters;
|
|
35
102
|
}
|
|
36
103
|
constructor(spec) {
|
|
37
|
-
super(`${spec.status
|
|
104
|
+
super(`${spec.status ?? ''} ${spec.type} - ${spec.title}`);
|
|
38
105
|
const { type, title, status, detail, instance, ...parameters } = spec;
|
|
39
|
-
|
|
40
|
-
this.type = Problem.parseURL(type) ?? Problem.BLANK_URL;
|
|
106
|
+
this.type = type instanceof URL ? type : ProblemTypeSchema.decode(type);
|
|
41
107
|
this.status = status;
|
|
42
108
|
this.title = title;
|
|
43
109
|
this.detail = detail;
|
|
44
|
-
this.instance =
|
|
110
|
+
this.instance =
|
|
111
|
+
instance instanceof URL
|
|
112
|
+
? instance
|
|
113
|
+
: ProblemReferenceSchema.decode(instance);
|
|
45
114
|
this._parameters = Object.keys(parameters).length ? parameters : undefined;
|
|
46
115
|
}
|
|
47
116
|
toString() {
|
|
@@ -85,34 +154,20 @@ export class Problem extends Error {
|
|
|
85
154
|
},
|
|
86
155
|
});
|
|
87
156
|
}
|
|
88
|
-
static parseURL(value) {
|
|
89
|
-
if (value == null) {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
if (value instanceof URL) {
|
|
93
|
-
return value;
|
|
94
|
-
}
|
|
95
|
-
if (typeof value === 'string') {
|
|
96
|
-
try {
|
|
97
|
-
return new URL(value);
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
return undefined;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return undefined;
|
|
104
|
-
}
|
|
105
157
|
}
|
|
106
158
|
export function createProblemCodec(problemType, wireSchema) {
|
|
107
|
-
return z.codec(
|
|
159
|
+
return z.codec(z.codec(z.record(z.string(), z.unknown()), wireSchema, {
|
|
160
|
+
decode: (value) => value,
|
|
161
|
+
encode: (value) => Object.fromEntries(Object.entries(value).filter(([, member]) => member !== undefined)),
|
|
162
|
+
}), z.instanceof(problemType), {
|
|
108
163
|
decode: (value) => constructValidatedModel(problemType, value),
|
|
109
164
|
encode: (value) => ({
|
|
110
|
-
|
|
165
|
+
...value.parameters,
|
|
166
|
+
type: value.type,
|
|
111
167
|
title: value.title,
|
|
112
168
|
status: value.status,
|
|
113
169
|
detail: value.detail,
|
|
114
|
-
instance: value.instance
|
|
115
|
-
...value.parameters,
|
|
170
|
+
instance: value.instance,
|
|
116
171
|
}),
|
|
117
172
|
});
|
|
118
173
|
}
|
package/build/problem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"problem.js","sourceRoot":"","sources":["../src/problem.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"problem.js","sourceRoot":"","sources":["../src/problem.ts"],"names":[],"mappings":"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"}
|
package/build/util/nullify.js
CHANGED
|
@@ -27,7 +27,7 @@ export async function nullifyProblem(promise, statuses, problemTypes) {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
function matchesProblem(error, statuses, problemTypes) {
|
|
30
|
-
if (statuses.includes(error.status)) {
|
|
30
|
+
if (error.status !== undefined && statuses.includes(error.status)) {
|
|
31
31
|
return true;
|
|
32
32
|
}
|
|
33
33
|
return problemTypes.some((matcher) => typeof matcher === 'function'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nullify.js","sourceRoot":"","sources":["../../src/util/nullify.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAI,OAAmB;IAC1D,OAAO,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAmB,EACnB,QAAkB,EAClB,YAA8B;IAE9B,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,QAAkB,EAClB,YAA8B;IAE9B,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"nullify.js","sourceRoot":"","sources":["../../src/util/nullify.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAI,OAAmB;IAC1D,OAAO,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAmB,EACnB,QAAkB,EAClB,YAA8B;IAE9B,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,QAAkB,EAClB,YAA8B;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,OAAO,OAAO,KAAK,UAAU;QAC3B,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAChB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Copyright 2020 Outfox, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
// Standard HTTP reason phrases for about:blank when the body status differs from the response.
|
|
15
|
+
const titles = {
|
|
16
|
+
100: 'Continue',
|
|
17
|
+
101: 'Switching Protocols',
|
|
18
|
+
102: 'Processing',
|
|
19
|
+
103: 'Early Hints',
|
|
20
|
+
200: 'OK',
|
|
21
|
+
201: 'Created',
|
|
22
|
+
202: 'Accepted',
|
|
23
|
+
203: 'Non-Authoritative Information',
|
|
24
|
+
204: 'No Content',
|
|
25
|
+
205: 'Reset Content',
|
|
26
|
+
206: 'Partial Content',
|
|
27
|
+
207: 'Multi-Status',
|
|
28
|
+
208: 'Already Reported',
|
|
29
|
+
226: 'IM Used',
|
|
30
|
+
300: 'Multiple Choices',
|
|
31
|
+
301: 'Moved Permanently',
|
|
32
|
+
302: 'Found',
|
|
33
|
+
303: 'See Other',
|
|
34
|
+
304: 'Not Modified',
|
|
35
|
+
305: 'Use Proxy',
|
|
36
|
+
307: 'Temporary Redirect',
|
|
37
|
+
308: 'Permanent Redirect',
|
|
38
|
+
400: 'Bad Request',
|
|
39
|
+
401: 'Unauthorized',
|
|
40
|
+
402: 'Payment Required',
|
|
41
|
+
403: 'Forbidden',
|
|
42
|
+
404: 'Not Found',
|
|
43
|
+
405: 'Method Not Allowed',
|
|
44
|
+
406: 'Not Acceptable',
|
|
45
|
+
407: 'Proxy Authentication Required',
|
|
46
|
+
408: 'Request Timeout',
|
|
47
|
+
409: 'Conflict',
|
|
48
|
+
410: 'Gone',
|
|
49
|
+
411: 'Length Required',
|
|
50
|
+
412: 'Precondition Failed',
|
|
51
|
+
413: 'Content Too Large',
|
|
52
|
+
414: 'URI Too Long',
|
|
53
|
+
415: 'Unsupported Media Type',
|
|
54
|
+
416: 'Range Not Satisfiable',
|
|
55
|
+
417: 'Expectation Failed',
|
|
56
|
+
418: "I'm a Teapot",
|
|
57
|
+
421: 'Misdirected Request',
|
|
58
|
+
422: 'Unprocessable Content',
|
|
59
|
+
423: 'Locked',
|
|
60
|
+
424: 'Failed Dependency',
|
|
61
|
+
425: 'Too Early',
|
|
62
|
+
426: 'Upgrade Required',
|
|
63
|
+
428: 'Precondition Required',
|
|
64
|
+
429: 'Too Many Requests',
|
|
65
|
+
431: 'Request Header Fields Too Large',
|
|
66
|
+
451: 'Unavailable For Legal Reasons',
|
|
67
|
+
500: 'Internal Server Error',
|
|
68
|
+
501: 'Not Implemented',
|
|
69
|
+
502: 'Bad Gateway',
|
|
70
|
+
503: 'Service Unavailable',
|
|
71
|
+
504: 'Gateway Timeout',
|
|
72
|
+
505: 'HTTP Version Not Supported',
|
|
73
|
+
506: 'Variant Also Negotiates',
|
|
74
|
+
507: 'Insufficient Storage',
|
|
75
|
+
508: 'Loop Detected',
|
|
76
|
+
510: 'Not Extended',
|
|
77
|
+
511: 'Network Authentication Required',
|
|
78
|
+
};
|
|
79
|
+
/** Returns the standard title for a recognized HTTP status. */
|
|
80
|
+
export function statusTitle(status) {
|
|
81
|
+
return titles[status];
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=status-title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-title.js","sourceRoot":"","sources":["../../src/util/status-title.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,+FAA+F;AAC/F,MAAM,MAAM,GAAqC;IAC/C,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,wBAAwB;IAC7B,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,iCAAiC;IACtC,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,4BAA4B;IACjC,GAAG,EAAE,yBAAyB;IAC9B,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,iCAAiC;CACvC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
|