@cqrs-ddd/pipeline-zod 0.5.2 → 0.6.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/dist/http.d.ts CHANGED
@@ -1,10 +1,6 @@
1
+ import type { HttpResponse } from '@cqrs-ddd/pipeline';
1
2
  import type { ZodValidationError } from './errors/zod-validation.error.js';
2
- /** An HTTP answer for an error: status, JSON body and headers. */
3
- export interface HttpResponse {
4
- status: number;
5
- body: Record<string, unknown>;
6
- headers: Record<string, string>;
7
- }
3
+ export type { HttpResponse };
8
4
  /**
9
5
  * The HTTP answer for a {@link ZodValidationError}: `400 Bad Request` with the issue
10
6
  * details.
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAWtE"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAWtE"}
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAWtE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE;YACJ,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAOtE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE;YACJ,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"zod-validation.behavior.d.ts","sourceRoot":"","sources":["../src/zod-validation.behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAM9B,OAAO,EACL,WAAW,EACX,gBAAgB,EAIhB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,cAAc,EAAG,YAAqB,CAAC;AAEpD,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IACvD,MAAM,CACV,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,OAAO,CAAC,CA4BlB;CACF"}
1
+ {"version":3,"file":"zod-validation.behavior.d.ts","sourceRoot":"","sources":["../src/zod-validation.behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAM9B,OAAO,EACL,WAAW,EACX,gBAAgB,EAIhB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,cAAc,EAAG,YAAqB,CAAC;AAEpD,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IACvD,MAAM,CACV,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,OAAO,CAAC,CAelB;CACF"}
@@ -76,30 +76,41 @@ export class ZodValidationBehavior {
76
76
  async handle(context, next) {
77
77
  const declared = context.getBehaviorOptions(ZodValidationBehavior)?.schema;
78
78
  if (declared) {
79
- const parsed = await declared.safeParseAsync(context.request);
80
- if (!parsed.success)
81
- throw new ZodValidationError(parsed.error);
82
- replaceRequest(context, parsed.data);
79
+ await validateCopy(context, declared);
83
80
  return next();
84
81
  }
85
- const schema = context.requestType
82
+ const attached = context.requestType
86
83
  ? untyped(context.requestType)[ZOD_SCHEMA_KEY]
87
84
  : undefined;
88
- if (!schema)
89
- return next();
90
- const request = requireObjectRequest(context);
91
- const state = getValidationState(request);
92
- if (state?.schema === schema && !hasBeenMutated(request, state.snapshot))
93
- return next();
94
- const result = await schema.safeParseAsync(request);
95
- if (!result.success)
96
- throw new ZodValidationError(result.error);
97
- assertPlainRequestOutput(result.data, 'behavior');
98
- applyParsed(request, result.data, state?.snapshot);
99
- setValidatedData(request, schema, result.data);
85
+ if (attached)
86
+ await validateInPlace(context, attached);
100
87
  return next();
101
88
  }
102
89
  }
90
+ /** A schema declared at the call site: the handler receives the parsed copy. */
91
+ async function validateCopy(context, schema) {
92
+ const parsed = await schema.safeParseAsync(context.request);
93
+ if (!parsed.success)
94
+ throw new ZodValidationError(parsed.error);
95
+ replaceRequest(context, parsed.data);
96
+ }
97
+ /**
98
+ * A schema attached to the request class: the parsed fields are written to the
99
+ * request itself, unless it is unchanged since this schema last validated it.
100
+ */
101
+ async function validateInPlace(context, schema) {
102
+ const request = requireObjectRequest(context);
103
+ const state = getValidationState(request);
104
+ const isValidated = state?.schema === schema && !hasBeenMutated(request, state.snapshot);
105
+ if (isValidated)
106
+ return;
107
+ const result = await schema.safeParseAsync(request);
108
+ if (!result.success)
109
+ throw new ZodValidationError(result.error);
110
+ assertPlainRequestOutput(result.data, 'behavior');
111
+ applyParsed(request, result.data, state?.snapshot);
112
+ setValidatedData(request, schema, result.data);
113
+ }
103
114
  function requireObjectRequest(context) {
104
115
  if (!context.request || typeof context.request !== 'object') {
105
116
  throw new TypeError('ZodValidationBehavior requires the pipeline request to be an object when a schema is attached.');
@@ -1 +1 @@
1
- {"version":3,"file":"zod-validation.behavior.js","sourceRoot":"","sources":["../src/zod-validation.behavior.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zod-validation.behavior.js","sourceRoot":"","sources":["../src/zod-validation.behavior.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cqrs-ddd/pipeline-zod",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "Zod validation for @cqrs-ddd/pipeline: validates and parses the input of a command, query, event or wrapped function",
5
5
  "author": "Aristotelis",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -39,17 +39,17 @@
39
39
  "access": "public"
40
40
  },
41
41
  "peerDependencies": {
42
- "@cqrs-ddd/pipeline": "^0.5.2",
42
+ "@cqrs-ddd/pipeline": "^0.6.0",
43
43
  "zod": "^4.3.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@cqrs-ddd/pipeline": "0.5.2",
46
+ "@cqrs-ddd/pipeline": "0.6.0",
47
47
  "@vitest/coverage-v8": "^5.0.5",
48
48
  "vitest": "^5.0.5",
49
49
  "zod": "^4.6.7"
50
50
  },
51
51
  "dependencies": {
52
- "@cqrs-ddd/untyped": "^0.5.2"
52
+ "@cqrs-ddd/untyped": "^0.6.0"
53
53
  },
54
54
  "keywords": [
55
55
  "pipeline",