@model-ts/graphql 7.1.0 → 7.3.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/CHANGELOG.md +10 -0
- package/README.md +15 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/Builder.js +4 -0
- package/dist/Builder.js.map +1 -1
- package/dist/Errors.d.ts +8 -0
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js +8 -5
- package/dist/Errors.js.map +1 -1
- package/package.json +1 -1
- package/src/Builder.ts +4 -0
- package/src/Errors.ts +22 -5
package/dist/Builder.js
CHANGED
|
@@ -27,6 +27,10 @@ function make(policy, maxPageSize, defaultPageSize) {
|
|
|
27
27
|
internal: [...policy.internal, ...(options.internal ?? [])],
|
|
28
28
|
public: [...policy.public, ...(options.public ?? [])],
|
|
29
29
|
publicCodes: { ...policy.publicCodes, ...options.publicCodes },
|
|
30
|
+
publicMessages: {
|
|
31
|
+
...policy.publicMessages,
|
|
32
|
+
...options.publicMessages,
|
|
33
|
+
},
|
|
30
34
|
}, maxPageSize, defaultPageSize),
|
|
31
35
|
schema: (module) => ({
|
|
32
36
|
schema: assemble(module),
|
package/dist/Builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.js","sourceRoot":"","sources":["../src/Builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EACL,eAAe,GAGhB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAA6C,MAAM,aAAa,CAAA;AACvE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAKjB,SAAS,EACT,OAAO,GACR,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAkC,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAA0C,MAAM,eAAe,CAAA;AACtE,OAAO,EAAmC,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAwC5D,MAAM,UAAU,aAAa,CAC3B,OAAO,GAAmB,EAAE;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAA;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QACvC,OAAO,CAAC,iDAAiD,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG;QACvD,OAAO,CACL,gFAAgF,CACjF,CAAA;IACH,OAAO,IAAI,CAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACvE,CAAC;AAED,SAAS,IAAI,CACX,MAAmB,EACnB,WAAmB,EACnB,eAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CACtC,MAAM,EACN,WAAW,EACX,eAAe,CAChB,CAAA;IACD,OAAO;QACL,GAAG,MAAM;QACT,GAAG,eAAe,CAAc,SAAS,CAAC;QAC1C,KAAK;QACL,OAAO,EAAE,SAAS;QAClB,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,IAAI,CACF;YACE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACrD,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"Builder.js","sourceRoot":"","sources":["../src/Builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EACL,eAAe,GAGhB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAA6C,MAAM,aAAa,CAAA;AACvE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAKjB,SAAS,EACT,OAAO,GACR,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAkC,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAA0C,MAAM,eAAe,CAAA;AACtE,OAAO,EAAmC,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAwC5D,MAAM,UAAU,aAAa,CAC3B,OAAO,GAAmB,EAAE;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAA;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QACvC,OAAO,CAAC,iDAAiD,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG;QACvD,OAAO,CACL,gFAAgF,CACjF,CAAA;IACH,OAAO,IAAI,CAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACvE,CAAC;AAED,SAAS,IAAI,CACX,MAAmB,EACnB,WAAmB,EACnB,eAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CACtC,MAAM,EACN,WAAW,EACX,eAAe,CAChB,CAAA;IACD,OAAO;QACL,GAAG,MAAM;QACT,GAAG,eAAe,CAAc,SAAS,CAAC;QAC1C,KAAK;QACL,OAAO,EAAE,SAAS;QAClB,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,IAAI,CACF;YACE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACrD,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE;YAC9D,cAAc,EAAE;gBACd,GAAG,MAAM,CAAC,cAAc;gBACxB,GAAG,OAAO,CAAC,cAAc;aAC1B;SACF,EACD,WAAW,EACX,eAAe,CAChB;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;YACxB,CAAC,iBAAiB,CAAC,EAAE,MAAM;YAC3B,CAAC,kBAAkB,CAAC,EAAE,SAAS;SAChC,CAAC;QACF,SAAS;QACT,OAAO;KACR,CAAA;AACH,CAAC"}
|
package/dist/Errors.d.ts
CHANGED
|
@@ -8,11 +8,19 @@ export interface ErrorPolicyOptions<I extends readonly ErrorSchema[], P extends
|
|
|
8
8
|
readonly public?: P;
|
|
9
9
|
/** Preserve an existing API's codes; unspecified tags use their own name. */
|
|
10
10
|
readonly publicCodes?: [P[number]] extends [never] ? never : Partial<Record<ErrorsOf<NoInfer<P>>["_tag"], string>>;
|
|
11
|
+
/**
|
|
12
|
+
* A fixed message for a public error. Clients get only this message and the
|
|
13
|
+
* error's code: neither its own message nor any declared field is exposed.
|
|
14
|
+
* Use it to expose errors whose fields are internal, such as a not-found
|
|
15
|
+
* error that carries a storage key.
|
|
16
|
+
*/
|
|
17
|
+
readonly publicMessages?: [P[number]] extends [never] ? never : Partial<Record<ErrorsOf<NoInfer<P>>["_tag"], string>>;
|
|
11
18
|
}
|
|
12
19
|
export interface ErrorPolicy {
|
|
13
20
|
readonly internal: readonly ErrorSchema[];
|
|
14
21
|
readonly public: readonly ErrorSchema[];
|
|
15
22
|
readonly publicCodes?: Readonly<Record<string, string>>;
|
|
23
|
+
readonly publicMessages?: Readonly<Record<string, string>>;
|
|
16
24
|
}
|
|
17
25
|
export declare const defaultErrorPolicy: ErrorPolicy;
|
|
18
26
|
export interface ErrorReport {
|
package/dist/Errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAkB,MAAM,QAAQ,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAGd,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,kBAAkB,CACjC,CAAC,SAAS,SAAS,WAAW,EAAE,EAChC,CAAC,SAAS,SAAS,WAAW,EAAE;IAEhC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACrB,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACnB,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC9C,KAAK,GACL,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"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"}
|
package/dist/Errors.js
CHANGED
|
@@ -46,15 +46,18 @@ function visibleFailure(error, members, policy) {
|
|
|
46
46
|
}
|
|
47
47
|
const visible = policy.public.find(matches);
|
|
48
48
|
if (visible) {
|
|
49
|
-
const { _tag, message, ...extensions } = declaredFields(visible, error);
|
|
50
49
|
const tag = errorName(visible);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
const code = entry(policy.publicCodes, tag) ?? tag;
|
|
51
|
+
const fixed = entry(policy.publicMessages, tag);
|
|
52
|
+
if (fixed !== undefined)
|
|
53
|
+
return fieldError(fixed, { code });
|
|
54
|
+
const { _tag, message, ...extensions } = declaredFields(visible, error);
|
|
55
|
+
return fieldError(String(message ?? tag), { ...extensions, code });
|
|
55
56
|
}
|
|
56
57
|
return undefined;
|
|
57
58
|
}
|
|
59
|
+
// Own entries only, so a tag such as "constructor" never reads the prototype.
|
|
60
|
+
const entry = (record, tag) => record && Object.hasOwn(record, tag) ? record[tag] : undefined;
|
|
58
61
|
export const recoverCause = (cause, members, policy, location) => Effect.gen(function* () {
|
|
59
62
|
// Do not turn cancellation into an error response or a telemetry incident.
|
|
60
63
|
if (Cause.hasInterruptsOnly(cause))
|
package/dist/Errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAGL,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Builder.ts
CHANGED
|
@@ -95,6 +95,10 @@ function make<Types, G, C>(
|
|
|
95
95
|
internal: [...policy.internal, ...(options.internal ?? [])],
|
|
96
96
|
public: [...policy.public, ...(options.public ?? [])],
|
|
97
97
|
publicCodes: { ...policy.publicCodes, ...options.publicCodes },
|
|
98
|
+
publicMessages: {
|
|
99
|
+
...policy.publicMessages,
|
|
100
|
+
...options.publicMessages,
|
|
101
|
+
},
|
|
98
102
|
},
|
|
99
103
|
maxPageSize,
|
|
100
104
|
defaultPageSize,
|
package/src/Errors.ts
CHANGED
|
@@ -19,12 +19,22 @@ export interface ErrorPolicyOptions<
|
|
|
19
19
|
readonly publicCodes?: [P[number]] extends [never]
|
|
20
20
|
? never
|
|
21
21
|
: Partial<Record<ErrorsOf<NoInfer<P>>["_tag"], string>>
|
|
22
|
+
/**
|
|
23
|
+
* A fixed message for a public error. Clients get only this message and the
|
|
24
|
+
* error's code: neither its own message nor any declared field is exposed.
|
|
25
|
+
* Use it to expose errors whose fields are internal, such as a not-found
|
|
26
|
+
* error that carries a storage key.
|
|
27
|
+
*/
|
|
28
|
+
readonly publicMessages?: [P[number]] extends [never]
|
|
29
|
+
? never
|
|
30
|
+
: Partial<Record<ErrorsOf<NoInfer<P>>["_tag"], string>>
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
export interface ErrorPolicy {
|
|
25
34
|
readonly internal: readonly ErrorSchema[]
|
|
26
35
|
readonly public: readonly ErrorSchema[]
|
|
27
36
|
readonly publicCodes?: Readonly<Record<string, string>>
|
|
37
|
+
readonly publicMessages?: Readonly<Record<string, string>>
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
export const defaultErrorPolicy: ErrorPolicy = { internal: [], public: [] }
|
|
@@ -97,16 +107,23 @@ function visibleFailure(
|
|
|
97
107
|
}
|
|
98
108
|
const visible = policy.public.find(matches)
|
|
99
109
|
if (visible) {
|
|
100
|
-
const { _tag, message, ...extensions } = declaredFields(visible, error)
|
|
101
110
|
const tag = errorName(visible)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
})
|
|
111
|
+
const code = entry(policy.publicCodes, tag) ?? tag
|
|
112
|
+
const fixed = entry(policy.publicMessages, tag)
|
|
113
|
+
if (fixed !== undefined) return fieldError(fixed, { code })
|
|
114
|
+
const { _tag, message, ...extensions } = declaredFields(visible, error)
|
|
115
|
+
return fieldError(String(message ?? tag), { ...extensions, code })
|
|
106
116
|
}
|
|
107
117
|
return undefined
|
|
108
118
|
}
|
|
109
119
|
|
|
120
|
+
// Own entries only, so a tag such as "constructor" never reads the prototype.
|
|
121
|
+
const entry = (
|
|
122
|
+
record: Readonly<Record<string, string>> | undefined,
|
|
123
|
+
tag: string,
|
|
124
|
+
): string | undefined =>
|
|
125
|
+
record && Object.hasOwn(record, tag) ? record[tag] : undefined
|
|
126
|
+
|
|
110
127
|
export const recoverCause = (
|
|
111
128
|
cause: Cause.Cause<unknown>,
|
|
112
129
|
members: readonly ErrorSchema[],
|