@klerick/json-api-nestjs 10.0.0-beta.1 → 10.0.0-beta.10

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.
Files changed (147) hide show
  1. package/CHANGELOG.md +207 -0
  2. package/README.md +587 -0
  3. package/package.json +38 -34
  4. package/src/index.d.ts +6 -6
  5. package/src/index.js +6 -1
  6. package/src/index.js.map +1 -1
  7. package/src/lib/constants/constants.d.ts +4 -0
  8. package/src/lib/constants/constants.js +12 -1
  9. package/src/lib/constants/constants.js.map +1 -1
  10. package/src/lib/constants/reflection.d.ts +2 -0
  11. package/src/lib/constants/reflection.js +3 -1
  12. package/src/lib/constants/reflection.js.map +1 -1
  13. package/src/lib/modules/atomic-operation/atomic-operation.module.js +6 -0
  14. package/src/lib/modules/atomic-operation/atomic-operation.module.js.map +1 -1
  15. package/src/lib/modules/atomic-operation/pipes/input-operation.pipe.js +1 -4
  16. package/src/lib/modules/atomic-operation/pipes/input-operation.pipe.js.map +1 -1
  17. package/src/lib/modules/atomic-operation/service/execute.service.d.ts +6 -0
  18. package/src/lib/modules/atomic-operation/service/execute.service.js +46 -2
  19. package/src/lib/modules/atomic-operation/service/execute.service.js.map +1 -1
  20. package/src/lib/modules/atomic-operation/service/explorer.service.js +1 -1
  21. package/src/lib/modules/atomic-operation/service/explorer.service.js.map +1 -1
  22. package/src/lib/modules/atomic-operation/service/swagger.service.js +2 -2
  23. package/src/lib/modules/atomic-operation/service/swagger.service.js.map +1 -1
  24. package/src/lib/modules/atomic-operation/utils/zod/zod-helper.d.ts +35 -680
  25. package/src/lib/modules/atomic-operation/utils/zod/zod-helper.js +6 -7
  26. package/src/lib/modules/atomic-operation/utils/zod/zod-helper.js.map +1 -1
  27. package/src/lib/modules/mixin/config/bindings.js +9 -9
  28. package/src/lib/modules/mixin/config/bindings.js.map +1 -1
  29. package/src/lib/modules/mixin/decorators/index.d.ts +1 -0
  30. package/src/lib/modules/mixin/decorators/index.js +1 -0
  31. package/src/lib/modules/mixin/decorators/index.js.map +1 -1
  32. package/src/lib/modules/mixin/decorators/json-api-read-only/json-api-read-only.decorator.d.ts +48 -0
  33. package/src/lib/modules/mixin/decorators/json-api-read-only/json-api-read-only.decorator.js +83 -0
  34. package/src/lib/modules/mixin/decorators/json-api-read-only/json-api-read-only.decorator.js.map +1 -0
  35. package/src/lib/modules/mixin/factory/zod-validate.factory.js +11 -6
  36. package/src/lib/modules/mixin/factory/zod-validate.factory.js.map +1 -1
  37. package/src/lib/modules/mixin/helpers/bind-controller.js +10 -3
  38. package/src/lib/modules/mixin/helpers/bind-controller.js.map +1 -1
  39. package/src/lib/modules/mixin/helpers/create-controller.js +3 -0
  40. package/src/lib/modules/mixin/helpers/create-controller.js.map +1 -1
  41. package/src/lib/modules/mixin/helpers/utils.d.ts +2 -0
  42. package/src/lib/modules/mixin/helpers/utils.js +10 -0
  43. package/src/lib/modules/mixin/helpers/utils.js.map +1 -1
  44. package/src/lib/modules/mixin/mixin.module.js +1 -0
  45. package/src/lib/modules/mixin/mixin.module.js.map +1 -1
  46. package/src/lib/modules/mixin/pipe/patch-input/patch-input.pipe.js +1 -4
  47. package/src/lib/modules/mixin/pipe/patch-input/patch-input.pipe.js.map +1 -1
  48. package/src/lib/modules/mixin/pipe/patch-relationship/patch-relationship.pipe.js +1 -4
  49. package/src/lib/modules/mixin/pipe/patch-relationship/patch-relationship.pipe.js.map +1 -1
  50. package/src/lib/modules/mixin/pipe/post-input/post-input.pipe.d.ts +1 -0
  51. package/src/lib/modules/mixin/pipe/post-input/post-input.pipe.js +10 -4
  52. package/src/lib/modules/mixin/pipe/post-input/post-input.pipe.js.map +1 -1
  53. package/src/lib/modules/mixin/pipe/post-relationship/post-relationship.pipe.js +1 -4
  54. package/src/lib/modules/mixin/pipe/post-relationship/post-relationship.pipe.js.map +1 -1
  55. package/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.js +2 -4
  56. package/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.js.map +1 -1
  57. package/src/lib/modules/mixin/pipe/query-input/query-input.pipe.js +1 -4
  58. package/src/lib/modules/mixin/pipe/query-input/query-input.pipe.js.map +1 -1
  59. package/src/lib/modules/mixin/service/json-api-transformer.service.js +27 -4
  60. package/src/lib/modules/mixin/service/json-api-transformer.service.js.map +1 -1
  61. package/src/lib/modules/mixin/swagger/method/delete-relationship.js +3 -3
  62. package/src/lib/modules/mixin/swagger/method/delete-relationship.js.map +1 -1
  63. package/src/lib/modules/mixin/swagger/method/index.d.ts +0 -4
  64. package/src/lib/modules/mixin/swagger/method/index.js.map +1 -1
  65. package/src/lib/modules/mixin/swagger/method/patch-one.js +6 -3
  66. package/src/lib/modules/mixin/swagger/method/patch-one.js.map +1 -1
  67. package/src/lib/modules/mixin/swagger/method/patch-relationship.js +3 -3
  68. package/src/lib/modules/mixin/swagger/method/patch-relationship.js.map +1 -1
  69. package/src/lib/modules/mixin/swagger/method/post-one.js +6 -3
  70. package/src/lib/modules/mixin/swagger/method/post-one.js.map +1 -1
  71. package/src/lib/modules/mixin/swagger/method/post-relationship.js +3 -3
  72. package/src/lib/modules/mixin/swagger/method/post-relationship.js.map +1 -1
  73. package/src/lib/modules/mixin/swagger/utils.d.ts +2 -0
  74. package/src/lib/modules/mixin/swagger/utils.js +16 -1
  75. package/src/lib/modules/mixin/swagger/utils.js.map +1 -1
  76. package/src/lib/modules/mixin/types/decorator-options.type.d.ts +1 -0
  77. package/src/lib/modules/mixin/types/orm-service.type.d.ts +8 -0
  78. package/src/lib/modules/mixin/zod/index.d.ts +1 -0
  79. package/src/lib/modules/mixin/zod/index.js +6 -0
  80. package/src/lib/modules/mixin/zod/index.js.map +1 -1
  81. package/src/lib/modules/mixin/zod/map-transform-to-json-shema.d.ts +6 -0
  82. package/src/lib/modules/mixin/zod/map-transform-to-json-shema.js +27 -0
  83. package/src/lib/modules/mixin/zod/map-transform-to-json-shema.js.map +1 -0
  84. package/src/lib/modules/mixin/zod/zod-input-patch-relationship-schema/index.d.ts +4 -44
  85. package/src/lib/modules/mixin/zod/zod-input-patch-relationship-schema/index.js +2 -3
  86. package/src/lib/modules/mixin/zod/zod-input-patch-relationship-schema/index.js.map +1 -1
  87. package/src/lib/modules/mixin/zod/zod-input-patch-schema/index.d.ts +16 -5
  88. package/src/lib/modules/mixin/zod/zod-input-patch-schema/index.js +7 -9
  89. package/src/lib/modules/mixin/zod/zod-input-patch-schema/index.js.map +1 -1
  90. package/src/lib/modules/mixin/zod/zod-input-post-relationship-schema/index.d.ts +4 -50
  91. package/src/lib/modules/mixin/zod/zod-input-post-relationship-schema/index.js +2 -3
  92. package/src/lib/modules/mixin/zod/zod-input-post-relationship-schema/index.js.map +1 -1
  93. package/src/lib/modules/mixin/zod/zod-input-post-schema/index.d.ts +16 -6
  94. package/src/lib/modules/mixin/zod/zod-input-post-schema/index.js +7 -13
  95. package/src/lib/modules/mixin/zod/zod-input-post-schema/index.js.map +1 -1
  96. package/src/lib/modules/mixin/zod/zod-input-query-schema/fields.d.ts +13 -27
  97. package/src/lib/modules/mixin/zod/zod-input-query-schema/fields.js +20 -13
  98. package/src/lib/modules/mixin/zod/zod-input-query-schema/fields.js.map +1 -1
  99. package/src/lib/modules/mixin/zod/zod-input-query-schema/filter.d.ts +72 -987
  100. package/src/lib/modules/mixin/zod/zod-input-query-schema/filter.js +11 -7
  101. package/src/lib/modules/mixin/zod/zod-input-query-schema/filter.js.map +1 -1
  102. package/src/lib/modules/mixin/zod/zod-input-query-schema/include.d.ts +1 -1
  103. package/src/lib/modules/mixin/zod/zod-input-query-schema/index.d.ts +73 -4933
  104. package/src/lib/modules/mixin/zod/zod-input-query-schema/index.js +6 -3
  105. package/src/lib/modules/mixin/zod/zod-input-query-schema/index.js.map +1 -1
  106. package/src/lib/modules/mixin/zod/zod-input-query-schema/sort.d.ts +1 -1
  107. package/src/lib/modules/mixin/zod/zod-query-schema/fields.d.ts +3 -3
  108. package/src/lib/modules/mixin/zod/zod-query-schema/fields.js +6 -2
  109. package/src/lib/modules/mixin/zod/zod-query-schema/fields.js.map +1 -1
  110. package/src/lib/modules/mixin/zod/zod-query-schema/filter.d.ts +24 -104
  111. package/src/lib/modules/mixin/zod/zod-query-schema/filter.js +32 -10
  112. package/src/lib/modules/mixin/zod/zod-query-schema/filter.js.map +1 -1
  113. package/src/lib/modules/mixin/zod/zod-query-schema/include.d.ts +1 -1
  114. package/src/lib/modules/mixin/zod/zod-query-schema/include.js +1 -1
  115. package/src/lib/modules/mixin/zod/zod-query-schema/include.js.map +1 -1
  116. package/src/lib/modules/mixin/zod/zod-query-schema/index.d.ts +4 -4
  117. package/src/lib/modules/mixin/zod/zod-query-schema/index.js +3 -4
  118. package/src/lib/modules/mixin/zod/zod-query-schema/index.js.map +1 -1
  119. package/src/lib/modules/mixin/zod/zod-query-schema/sort.d.ts +11 -3
  120. package/src/lib/modules/mixin/zod/zod-query-schema/sort.js +1 -1
  121. package/src/lib/modules/mixin/zod/zod-query-schema/sort.js.map +1 -1
  122. package/src/lib/modules/mixin/zod/zod-share/attributes.d.ts +15 -14
  123. package/src/lib/modules/mixin/zod/zod-share/attributes.js +26 -20
  124. package/src/lib/modules/mixin/zod/zod-share/attributes.js.map +1 -1
  125. package/src/lib/modules/mixin/zod/zod-share/page.d.ts +3 -9
  126. package/src/lib/modules/mixin/zod/zod-share/rel-data.d.ts +4 -40
  127. package/src/lib/modules/mixin/zod/zod-share/rel-data.js +2 -2
  128. package/src/lib/modules/mixin/zod/zod-share/rel-data.js.map +1 -1
  129. package/src/lib/modules/mixin/zod/zod-share/relationships.d.ts +8 -304
  130. package/src/lib/modules/mixin/zod/zod-share/relationships.js +1 -1
  131. package/src/lib/modules/mixin/zod/zod-share/relationships.js.map +1 -1
  132. package/src/lib/modules/mixin/zod/zod-utils.d.ts +2 -1
  133. package/src/lib/modules/mixin/zod/zod-utils.js +12 -0
  134. package/src/lib/modules/mixin/zod/zod-utils.js.map +1 -1
  135. package/src/lib/types/entity-param.type.d.ts +6 -4
  136. package/src/lib/types/entity-param.type.js +13 -0
  137. package/src/lib/types/entity-param.type.js.map +1 -1
  138. package/src/lib/types/error.types.d.ts +3 -3
  139. package/src/lib/types/index.d.ts +1 -0
  140. package/src/lib/types/index.js +1 -0
  141. package/src/lib/types/index.js.map +1 -1
  142. package/src/lib/types/json-api-read-only.d.ts +51 -0
  143. package/src/lib/types/json-api-read-only.js +3 -0
  144. package/src/lib/types/json-api-read-only.js.map +1 -0
  145. package/src/lib/types/module-options.types.d.ts +5 -1
  146. package/src/lib/utils/module-helper.js +4 -0
  147. package/src/lib/utils/module-helper.js.map +1 -1
@@ -4,6 +4,7 @@ exports.elementOfArrayMustBe = exports.stringMustBe = exports.arrayItemStringLon
4
4
  exports.guardIsKeyOfObject = guardIsKeyOfObject;
5
5
  exports.getRelationProps = getRelationProps;
6
6
  exports.setOptionalOrNot = setOptionalOrNot;
7
+ exports.memoize = memoize;
7
8
  const json_api_nestjs_shared_1 = require("@klerick/json-api-nestjs-shared");
8
9
  const types_1 = require("../../../types");
9
10
  const nonEmptyObject = () => (object) => !!(typeof object === 'object' && object && Object.keys(object).length > 0);
@@ -69,4 +70,15 @@ function setOptionalOrNot(schema, isNullable, isPatch) {
69
70
  return (isNullable ? schema.nullable().optional() : schema);
70
71
  }
71
72
  }
73
+ function memoize(fn) {
74
+ const cache = new Map();
75
+ return ((...args) => {
76
+ const key = args.join('-'); // Для скаляров достаточно
77
+ if (cache.has(key))
78
+ return cache.get(key);
79
+ const result = fn(...args);
80
+ cache.set(key, result);
81
+ return result;
82
+ });
83
+ }
72
84
  //# sourceMappingURL=zod-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zod-utils.js","sourceRoot":"","sources":["../../../../../../../../../libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zod-utils.js","sourceRoot":"","sources":["../../../../../../../../../libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-utils.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { Union, Object } from 'ts-toolbelt';
2
2
  import { PropertyKeys, RelationKeys, IsIterator, Constructor } from '@klerick/json-api-nestjs-shared';
3
3
  import { CastIteratorType, UnionToTuple, IsArray, CastArrayType } from './utils-type';
4
+ type ExtractBaseType<T> = T extends Date ? Date : T extends boolean ? boolean : T extends number ? number : T extends string ? string : T extends null ? null : T extends undefined ? undefined : T extends (infer U)[] ? U[] : object;
4
5
  export declare enum TypeField {
5
6
  array = "array",
6
7
  date = "date",
@@ -11,15 +12,15 @@ export declare enum TypeField {
11
12
  null = "null"
12
13
  }
13
14
  export type TypeForId = Extract<TypeField, TypeField.number | TypeField.string>;
14
- type TypeProps<T> = T extends Date ? TypeField.date : T extends any[] ? TypeField.array : T extends object ? TypeField.object : T extends boolean ? TypeField.boolean : T extends number ? TypeField.number : T extends string ? TypeField.string : TypeField.object;
15
+ type TypeProps<T> = T extends Date ? TypeField.date : T extends any[] ? TypeField.array : T extends object ? TypeField.object : T extends boolean ? TypeField.boolean : T extends number ? TypeField.number : T extends string ? TypeField.string : T extends undefined ? never : TypeField.object;
15
16
  export type PropertyWithType<E extends object, IdKey extends string = 'id'> = {
16
- [K in PropertyKeys<E, IdKey>]: Exclude<E[K], null> extends never ? TypeField.null : TypeProps<Exclude<E[K], null>>;
17
+ [K in PropertyKeys<E, IdKey>]: Exclude<E[K], null | undefined> extends never ? TypeField.null : TypeProps<ExtractBaseType<Exclude<E[K], null | undefined>>>;
17
18
  };
18
19
  export type ArrayProperty<E extends object, IdKey extends string = 'id'> = {
19
- [K in PropertyKeys<E, IdKey>]: Exclude<E[K], null> extends never ? never : IsArray<Exclude<E[K], null>> extends 1 ? K : never;
20
+ [K in PropertyKeys<E, IdKey>]: Exclude<E[K], null | undefined> extends never ? never : IsArray<Exclude<E[K], null | undefined>> extends 1 ? K : never;
20
21
  }[PropertyKeys<E, IdKey>];
21
22
  export type ArrayPropertyType<E extends object, IdKey extends string = 'id'> = {
22
- [K in ArrayProperty<E, IdKey>]: TypeProps<CastArrayType<Exclude<E[K], null>>>;
23
+ [K in ArrayProperty<E, IdKey>]: TypeProps<CastArrayType<Exclude<E[K], null | undefined>>>;
23
24
  };
24
25
  export type NullableProperty<E extends object, IdKey extends string = 'id'> = Union.Intersect<Object.NullableKeys<E>, PropertyKeys<E, IdKey>>;
25
26
  export type RelationProperty<E extends object, IdKey extends string = 'id'> = {
@@ -41,6 +42,7 @@ export type EntityParam<E extends object, IdKey extends string = 'id'> = {
41
42
  className: string;
42
43
  relations: UnionToTuple<RelationKeys<E, IdKey>>;
43
44
  relationProperty: RelationProperty<E>;
45
+ relationFkField: Partial<Record<RelationKeys<E, IdKey>, string>>;
44
46
  };
45
47
  type RelationType<E extends object, IdKey extends string, K extends keyof EntityParam<E, IdKey>['relationProperty']> = EntityParam<E, IdKey>['relationProperty'][K]['entityClass'] extends Constructor<infer T> ? Exclude<T, null> : never;
46
48
  export type EntityRelationProps<E extends object, IdKey extends string = 'id'> = {
@@ -1,6 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TypeField = void 0;
4
+ // import {
5
+ // JsonApiReadOnlyField,
6
+ // JsonApiImmutableField,
7
+ // } from './json-api-read-only';
8
+ // // Remove marker types from value type
9
+ // type CleanMarkerTypes<T> = T extends JsonApiReadOnlyField &
10
+ // JsonApiImmutableField
11
+ // ? Omit<T, keyof JsonApiReadOnlyField | keyof JsonApiImmutableField>
12
+ // : T extends JsonApiReadOnlyField
13
+ // ? Omit<T, keyof JsonApiReadOnlyField>
14
+ // : T extends JsonApiImmutableField
15
+ // ? Omit<T, keyof JsonApiImmutableField>
16
+ // : T;
4
17
  var TypeField;
5
18
  (function (TypeField) {
6
19
  TypeField["array"] = "array";
@@ -1 +1 @@
1
- {"version":3,"file":"entity-param.type.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/types/entity-param.type.ts"],"names":[],"mappings":";;;AAcA,IAAY,SAQX;AARD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,0BAAa,CAAA;IACb,8BAAiB,CAAA;IACjB,gCAAmB,CAAA;IACnB,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;IACjB,0BAAa,CAAA;AACf,CAAC,EARW,SAAS,yBAAT,SAAS,QAQpB"}
1
+ {"version":3,"file":"entity-param.type.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/types/entity-param.type.ts"],"names":[],"mappings":";;;AAyBA,WAAW;AACX,0BAA0B;AAC1B,2BAA2B;AAC3B,iCAAiC;AAEjC,yCAAyC;AACzC,8DAA8D;AAC9D,0BAA0B;AAC1B,wEAAwE;AACxE,qCAAqC;AACrC,0CAA0C;AAC1C,sCAAsC;AACtC,2CAA2C;AAC3C,SAAS;AAET,IAAY,SAQX;AARD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,0BAAa,CAAA;IACb,8BAAiB,CAAA;IACjB,gCAAmB,CAAA;IACnB,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;IACjB,0BAAa,CAAA;AACf,CAAC,EARW,SAAS,yBAAT,SAAS,QAQpB"}
@@ -1,5 +1,5 @@
1
- import { ZodIssue } from 'zod';
2
- export type InnerErrorType = 'invalid_arguments' | 'unrecognized_keys' | 'internal_error';
1
+ import { z } from 'zod';
2
+ export type InnerErrorType = 'invalid_arguments' | 'unrecognized_keys' | 'internal_error' | 'invalid_intersection_types';
3
3
  export type InnerError = {
4
4
  code: InnerErrorType;
5
5
  message: string;
@@ -7,4 +7,4 @@ export type InnerError = {
7
7
  keys?: string[];
8
8
  error?: Error;
9
9
  };
10
- export type ValidateQueryError = ZodIssue | InnerError;
10
+ export type ValidateQueryError = z.core.$ZodIssue | InnerError;
@@ -3,3 +3,4 @@ export * from './module-options.types';
3
3
  export * from './utils-type';
4
4
  export * from './entity-param.type';
5
5
  export * from './error.types';
6
+ export * from './json-api-read-only';
@@ -6,4 +6,5 @@ tslib_1.__exportStar(require("./module-options.types"), exports);
6
6
  tslib_1.__exportStar(require("./utils-type"), exports);
7
7
  tslib_1.__exportStar(require("./entity-param.type"), exports);
8
8
  tslib_1.__exportStar(require("./error.types"), exports);
9
+ tslib_1.__exportStar(require("./json-api-read-only"), exports);
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/types/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,iEAAuC;AACvC,uDAA6B;AAC7B,8DAAoC;AACpC,wDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/types/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,iEAAuC;AACvC,uDAA6B;AAC7B,8DAAoC;AACpC,wDAA8B;AAC9B,+DAAqC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Marker type for fields that should be excluded from POST/PATCH input.
3
+ * Use with @JsonApiReadOnly() decorator for runtime exclusion.
4
+ *
5
+ * For FK fields (relationFkField), only the type marker is needed
6
+ * since runtime exclusion is handled automatically.
7
+ *
8
+ * @example
9
+ * // FK field - only type marker needed
10
+ * @Property({ persist: false })
11
+ * public createdById!: number & Opt & JsonApiReadOnlyField;
12
+ *
13
+ * // Other read-only fields - decorator + type marker
14
+ * @Property()
15
+ * @JsonApiReadOnly()
16
+ * public createdAt!: Date & JsonApiReadOnlyField;
17
+ */
18
+ export type JsonApiReadOnlyField = {
19
+ readonly __jsonApiReadOnly?: never;
20
+ };
21
+ /**
22
+ * Extracts keys of fields marked as JsonApiReadOnlyField
23
+ */
24
+ export type ExtractJsonApiReadOnlyKeys<T> = {
25
+ [K in keyof T]: T[K] extends JsonApiReadOnlyField ? K : never;
26
+ }[keyof T];
27
+ /**
28
+ * Omits JsonApiReadOnlyField fields from type
29
+ */
30
+ export type OmitJsonApiReadOnly<T> = Omit<T, ExtractJsonApiReadOnlyKeys<T>>;
31
+ /**
32
+ * Marker type for fields that can be set on POST (optional) but excluded from PATCH.
33
+ * Use with @JsonApiImmutable() decorator for runtime behavior.
34
+ *
35
+ * Use case: fields that are computed by business logic for regular users,
36
+ * but can be set by admins during creation. Cannot be modified after creation.
37
+ *
38
+ * @example
39
+ * @Property()
40
+ * @JsonApiImmutable()
41
+ * public score!: number & JsonApiImmutableField;
42
+ */
43
+ export type JsonApiImmutableField = {
44
+ readonly __jsonApiImmutable?: never;
45
+ };
46
+ /**
47
+ * Extracts keys of fields marked as JsonApiImmutableField
48
+ */
49
+ export type ExtractJsonApiImmutableKeys<T> = {
50
+ [K in keyof T]: T[K] extends JsonApiImmutableField ? K : never;
51
+ }[keyof T];
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=json-api-read-only.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-api-read-only.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/types/json-api-read-only.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { DynamicModule } from '@nestjs/common';
1
+ import { DynamicModule, Type } from '@nestjs/common';
2
2
  import { NonEmptyArray } from 'zod-validation-error';
3
3
  import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared';
4
4
  import { NestController, NestImport, NestProvider, PipeMixin } from './common-type';
@@ -9,12 +9,16 @@ type ModuleCommonParams = {
9
9
  controllers?: NestController;
10
10
  providers?: NestProvider;
11
11
  imports?: NestImport;
12
+ hooks?: {
13
+ afterCreateController: (controller: Type<any>) => void;
14
+ };
12
15
  };
13
16
  type ModuleCommonOptions = {
14
17
  requiredSelectField?: boolean;
15
18
  debug?: boolean;
16
19
  pipeForId?: PipeMixin;
17
20
  operationUrl?: string;
21
+ allowSetId?: boolean;
18
22
  };
19
23
  type ModuleOptionsParams<OrmParams = NonNullable<unknown>> = IfEquals<OrmParams, NonNullable<unknown>, {
20
24
  options?: OptionOfConfig<OrmParams>;
@@ -18,7 +18,11 @@ function prepareConfig(moduleParams) {
18
18
  requiredSelectField: !!options['requiredSelectField'],
19
19
  debug: !!options['debug'],
20
20
  pipeForId: options['pipeForId'] || common_1.ParseIntPipe,
21
+ allowSetId: !!options['allowSetId']
21
22
  },
23
+ hooks: {
24
+ afterCreateController: moduleParams['hooks'] && moduleParams['hooks']['afterCreateController'] || (() => void 0)
25
+ }
22
26
  };
23
27
  }
24
28
  function getController(entity, controllers) {
@@ -1 +1 @@
1
- {"version":3,"file":"module-helper.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts"],"names":[],"mappings":";;AAcA,sCAmBC;AAED,sCAQC;AA3CD,2CAA8C;AAS9C,4CAGsB;AAEtB,SAAgB,aAAa,CAC3B,YAA+B;IAE/B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,IAAK,EAAgC,CAAC;IAE7E,OAAO;QACL,cAAc,EAAE,YAAY,CAAC,gBAAgB,CAAC,IAAI,mCAAuB;QACzE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE;QACtC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;QAC1C,WAAW,EAAE,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE;QAC9C,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC;QAClC,OAAO,EAAE;YACP,GAAG,OAAO;YACV,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,SAAS;YAClD,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;YACrD,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACzB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,qBAAY;SAChD;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAC3B,MAA8B,EAC9B,WAA2B;IAE3B,OAAO,WAAW,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,qCAAyB,EAAE,IAAI,CAAC,KAAK,MAAM,CAC1E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"module-helper.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts"],"names":[],"mappings":";;AAcA,sCAuBC;AAED,sCAQC;AA/CD,2CAA8C;AAS9C,4CAGsB;AAEtB,SAAgB,aAAa,CAC3B,YAA+B;IAE/B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,IAAK,EAAgC,CAAC;IAE7E,OAAO;QACL,cAAc,EAAE,YAAY,CAAC,gBAAgB,CAAC,IAAI,mCAAuB;QACzE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE;QACtC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;QAC1C,WAAW,EAAE,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE;QAC9C,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC;QAClC,OAAO,EAAE;YACP,GAAG,OAAO;YACV,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,SAAS;YAClD,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;YACrD,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACzB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,qBAAY;YAC/C,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;SACpC;QACD,KAAK,EAAE;YACL,qBAAqB,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;SACjH;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAC3B,MAA8B,EAC9B,WAA2B;IAE3B,OAAO,WAAW,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,qCAAyB,EAAE,IAAI,CAAC,KAAK,MAAM,CAC1E,CAAC;AACJ,CAAC"}