@hypequery/protocol 0.24.0 → 0.24.1

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.
@@ -15,7 +15,9 @@ export type ProtocolClientContractErrorCode = keyof typeof CLIENT_ERROR_MESSAGES
15
15
  export declare class ProtocolClientContractError extends TypeError {
16
16
  readonly code: ProtocolClientContractErrorCode;
17
17
  readonly path: string;
18
- constructor(code: ProtocolClientContractErrorCode, path?: string);
18
+ /** For `HQ_CLIENT_UNKNOWN_FIELD`, the first member at `path` this version doesn't know. */
19
+ readonly field?: string;
20
+ constructor(code: ProtocolClientContractErrorCode, path?: string, field?: string);
19
21
  }
20
- export declare function clientError(code: ProtocolClientContractErrorCode, path?: string): never;
22
+ export declare function clientError(code: ProtocolClientContractErrorCode, path?: string, field?: string): never;
21
23
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client-contract/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAYhC,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,MAAM,OAAO,qBAAqB,CAAC;AACjF,qBAAa,2BAA4B,SAAQ,SAAS;IACxD,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,+BAA+B,EAAE,IAAI,SAAK;CAM7D;AACD,wBAAgB,WAAW,CAAC,IAAI,EAAE,+BAA+B,EAAE,IAAI,SAAK,GAAG,KAAK,CAEnF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client-contract/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAYhC,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,MAAM,OAAO,qBAAqB,CAAC;AACjF,qBAAa,2BAA4B,SAAQ,SAAS;IACxD,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;gBACZ,IAAI,EAAE,+BAA+B,EAAE,IAAI,SAAK,EAAE,KAAK,CAAC,EAAE,MAAM;CAO7E;AACD,wBAAgB,WAAW,CAAC,IAAI,EAAE,+BAA+B,EAAE,IAAI,SAAK,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAEnG"}
@@ -14,13 +14,17 @@ export const CLIENT_ERROR_MESSAGES = Object.freeze({
14
14
  export class ProtocolClientContractError extends TypeError {
15
15
  code;
16
16
  path;
17
- constructor(code, path = '') {
17
+ /** For `HQ_CLIENT_UNKNOWN_FIELD`, the first member at `path` this version doesn't know. */
18
+ field;
19
+ constructor(code, path = '', field) {
18
20
  super(CLIENT_ERROR_MESSAGES[code]);
19
21
  this.name = 'ProtocolClientContractError';
20
22
  this.code = code;
21
23
  this.path = path;
24
+ if (field !== undefined)
25
+ this.field = field;
22
26
  }
23
27
  }
24
- export function clientError(code, path = '') {
25
- throw new ProtocolClientContractError(code, path);
28
+ export function clientError(code, path = '', field) {
29
+ throw new ProtocolClientContractError(code, path, field);
26
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/client-contract/primitives.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,eAAO,MAAM,kBAAkB,uDAAwD,CAAC;AACxF,eAAO,MAAM,aAAa,wEAAyE,CAAC;AACpG,eAAO,MAAM,gBAAgB,UAAmG,CAAC;AACjI,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAElE;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAGjE;AACD,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAKjG;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAKzF;AACD,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAG/F;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AACD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvF;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,MAAM,CAO5E;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAOzF;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED,6FAA6F;AAC7F,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD;AACD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7D"}
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/client-contract/primitives.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,eAAO,MAAM,kBAAkB,uDAAwD,CAAC;AACxF,eAAO,MAAM,aAAa,wEAAyE,CAAC;AACpG,eAAO,MAAM,gBAAgB,UAAmG,CAAC;AACjI,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAElE;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAGjE;AAMD,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAKjG;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAKzF;AACD,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAG/F;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AACD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvF;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,MAAM,CAO5E;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAOzF;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED,6FAA6F;AAC7F,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD;AACD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7D"}
@@ -12,19 +12,23 @@ export function record(input, path) {
12
12
  clientError('HQ_CLIENT_SHAPE', path);
13
13
  return input;
14
14
  }
15
+ /** The error keeps the shared fixtures' parent path and names the first unlisted member as `field`. */
16
+ function rejectUnknownField(value, keys, path) {
17
+ const unknown = Object.keys(value).find(key => !keys.includes(key));
18
+ if (unknown !== undefined)
19
+ clientError('HQ_CLIENT_UNKNOWN_FIELD', path, unknown);
20
+ }
15
21
  /** Closed object whose listed members are all optional; at least one is required. */
16
22
  export function optionalShape(input, keys, path) {
17
23
  const value = record(input, path);
18
- if (Object.keys(value).some(key => !keys.includes(key)))
19
- clientError('HQ_CLIENT_UNKNOWN_FIELD', path);
24
+ rejectUnknownField(value, keys, path);
20
25
  if (!keys.some(key => Object.hasOwn(value, key)))
21
26
  clientError('HQ_CLIENT_SHAPE', path);
22
27
  return value;
23
28
  }
24
29
  export function shape(input, keys, path) {
25
30
  const value = record(input, path);
26
- if (Object.keys(value).some(key => !keys.includes(key)))
27
- clientError('HQ_CLIENT_UNKNOWN_FIELD', path);
31
+ rejectUnknownField(value, keys, path);
28
32
  if (keys.some(key => !Object.hasOwn(value, key)))
29
33
  clientError('HQ_CLIENT_SHAPE', path);
30
34
  return value;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hypequery/protocol",
3
- "version": "0.24.0",
3
+ "version": "0.24.1",
4
4
  "description": "Portable analytics contracts and TypeScript reference implementation for Hypequery",
5
5
  "keywords": [
6
6
  "hypequery",