@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.
- package/CHANGELOG.md +207 -0
- package/README.md +587 -0
- package/package.json +38 -34
- package/src/index.d.ts +6 -6
- package/src/index.js +6 -1
- package/src/index.js.map +1 -1
- package/src/lib/constants/constants.d.ts +4 -0
- package/src/lib/constants/constants.js +12 -1
- package/src/lib/constants/constants.js.map +1 -1
- package/src/lib/constants/reflection.d.ts +2 -0
- package/src/lib/constants/reflection.js +3 -1
- package/src/lib/constants/reflection.js.map +1 -1
- package/src/lib/modules/atomic-operation/atomic-operation.module.js +6 -0
- package/src/lib/modules/atomic-operation/atomic-operation.module.js.map +1 -1
- package/src/lib/modules/atomic-operation/pipes/input-operation.pipe.js +1 -4
- package/src/lib/modules/atomic-operation/pipes/input-operation.pipe.js.map +1 -1
- package/src/lib/modules/atomic-operation/service/execute.service.d.ts +6 -0
- package/src/lib/modules/atomic-operation/service/execute.service.js +46 -2
- package/src/lib/modules/atomic-operation/service/execute.service.js.map +1 -1
- package/src/lib/modules/atomic-operation/service/explorer.service.js +1 -1
- package/src/lib/modules/atomic-operation/service/explorer.service.js.map +1 -1
- package/src/lib/modules/atomic-operation/service/swagger.service.js +2 -2
- package/src/lib/modules/atomic-operation/service/swagger.service.js.map +1 -1
- package/src/lib/modules/atomic-operation/utils/zod/zod-helper.d.ts +35 -680
- package/src/lib/modules/atomic-operation/utils/zod/zod-helper.js +6 -7
- package/src/lib/modules/atomic-operation/utils/zod/zod-helper.js.map +1 -1
- package/src/lib/modules/mixin/config/bindings.js +9 -9
- package/src/lib/modules/mixin/config/bindings.js.map +1 -1
- package/src/lib/modules/mixin/decorators/index.d.ts +1 -0
- package/src/lib/modules/mixin/decorators/index.js +1 -0
- package/src/lib/modules/mixin/decorators/index.js.map +1 -1
- package/src/lib/modules/mixin/decorators/json-api-read-only/json-api-read-only.decorator.d.ts +48 -0
- package/src/lib/modules/mixin/decorators/json-api-read-only/json-api-read-only.decorator.js +83 -0
- package/src/lib/modules/mixin/decorators/json-api-read-only/json-api-read-only.decorator.js.map +1 -0
- package/src/lib/modules/mixin/factory/zod-validate.factory.js +11 -6
- package/src/lib/modules/mixin/factory/zod-validate.factory.js.map +1 -1
- package/src/lib/modules/mixin/helpers/bind-controller.js +10 -3
- package/src/lib/modules/mixin/helpers/bind-controller.js.map +1 -1
- package/src/lib/modules/mixin/helpers/create-controller.js +3 -0
- package/src/lib/modules/mixin/helpers/create-controller.js.map +1 -1
- package/src/lib/modules/mixin/helpers/utils.d.ts +2 -0
- package/src/lib/modules/mixin/helpers/utils.js +10 -0
- package/src/lib/modules/mixin/helpers/utils.js.map +1 -1
- package/src/lib/modules/mixin/mixin.module.js +1 -0
- package/src/lib/modules/mixin/mixin.module.js.map +1 -1
- package/src/lib/modules/mixin/pipe/patch-input/patch-input.pipe.js +1 -4
- package/src/lib/modules/mixin/pipe/patch-input/patch-input.pipe.js.map +1 -1
- package/src/lib/modules/mixin/pipe/patch-relationship/patch-relationship.pipe.js +1 -4
- package/src/lib/modules/mixin/pipe/patch-relationship/patch-relationship.pipe.js.map +1 -1
- package/src/lib/modules/mixin/pipe/post-input/post-input.pipe.d.ts +1 -0
- package/src/lib/modules/mixin/pipe/post-input/post-input.pipe.js +10 -4
- package/src/lib/modules/mixin/pipe/post-input/post-input.pipe.js.map +1 -1
- package/src/lib/modules/mixin/pipe/post-relationship/post-relationship.pipe.js +1 -4
- package/src/lib/modules/mixin/pipe/post-relationship/post-relationship.pipe.js.map +1 -1
- package/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.js +2 -4
- package/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.js.map +1 -1
- package/src/lib/modules/mixin/pipe/query-input/query-input.pipe.js +1 -4
- package/src/lib/modules/mixin/pipe/query-input/query-input.pipe.js.map +1 -1
- package/src/lib/modules/mixin/service/json-api-transformer.service.js +27 -4
- package/src/lib/modules/mixin/service/json-api-transformer.service.js.map +1 -1
- package/src/lib/modules/mixin/swagger/method/delete-relationship.js +3 -3
- package/src/lib/modules/mixin/swagger/method/delete-relationship.js.map +1 -1
- package/src/lib/modules/mixin/swagger/method/index.d.ts +0 -4
- package/src/lib/modules/mixin/swagger/method/index.js.map +1 -1
- package/src/lib/modules/mixin/swagger/method/patch-one.js +6 -3
- package/src/lib/modules/mixin/swagger/method/patch-one.js.map +1 -1
- package/src/lib/modules/mixin/swagger/method/patch-relationship.js +3 -3
- package/src/lib/modules/mixin/swagger/method/patch-relationship.js.map +1 -1
- package/src/lib/modules/mixin/swagger/method/post-one.js +6 -3
- package/src/lib/modules/mixin/swagger/method/post-one.js.map +1 -1
- package/src/lib/modules/mixin/swagger/method/post-relationship.js +3 -3
- package/src/lib/modules/mixin/swagger/method/post-relationship.js.map +1 -1
- package/src/lib/modules/mixin/swagger/utils.d.ts +2 -0
- package/src/lib/modules/mixin/swagger/utils.js +16 -1
- package/src/lib/modules/mixin/swagger/utils.js.map +1 -1
- package/src/lib/modules/mixin/types/decorator-options.type.d.ts +1 -0
- package/src/lib/modules/mixin/types/orm-service.type.d.ts +8 -0
- package/src/lib/modules/mixin/zod/index.d.ts +1 -0
- package/src/lib/modules/mixin/zod/index.js +6 -0
- package/src/lib/modules/mixin/zod/index.js.map +1 -1
- package/src/lib/modules/mixin/zod/map-transform-to-json-shema.d.ts +6 -0
- package/src/lib/modules/mixin/zod/map-transform-to-json-shema.js +27 -0
- package/src/lib/modules/mixin/zod/map-transform-to-json-shema.js.map +1 -0
- package/src/lib/modules/mixin/zod/zod-input-patch-relationship-schema/index.d.ts +4 -44
- package/src/lib/modules/mixin/zod/zod-input-patch-relationship-schema/index.js +2 -3
- package/src/lib/modules/mixin/zod/zod-input-patch-relationship-schema/index.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-input-patch-schema/index.d.ts +16 -5
- package/src/lib/modules/mixin/zod/zod-input-patch-schema/index.js +7 -9
- package/src/lib/modules/mixin/zod/zod-input-patch-schema/index.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-input-post-relationship-schema/index.d.ts +4 -50
- package/src/lib/modules/mixin/zod/zod-input-post-relationship-schema/index.js +2 -3
- package/src/lib/modules/mixin/zod/zod-input-post-relationship-schema/index.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-input-post-schema/index.d.ts +16 -6
- package/src/lib/modules/mixin/zod/zod-input-post-schema/index.js +7 -13
- package/src/lib/modules/mixin/zod/zod-input-post-schema/index.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-input-query-schema/fields.d.ts +13 -27
- package/src/lib/modules/mixin/zod/zod-input-query-schema/fields.js +20 -13
- package/src/lib/modules/mixin/zod/zod-input-query-schema/fields.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-input-query-schema/filter.d.ts +72 -987
- package/src/lib/modules/mixin/zod/zod-input-query-schema/filter.js +11 -7
- package/src/lib/modules/mixin/zod/zod-input-query-schema/filter.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-input-query-schema/include.d.ts +1 -1
- package/src/lib/modules/mixin/zod/zod-input-query-schema/index.d.ts +73 -4933
- package/src/lib/modules/mixin/zod/zod-input-query-schema/index.js +6 -3
- package/src/lib/modules/mixin/zod/zod-input-query-schema/index.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-input-query-schema/sort.d.ts +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/fields.d.ts +3 -3
- package/src/lib/modules/mixin/zod/zod-query-schema/fields.js +6 -2
- package/src/lib/modules/mixin/zod/zod-query-schema/fields.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/filter.d.ts +24 -104
- package/src/lib/modules/mixin/zod/zod-query-schema/filter.js +32 -10
- package/src/lib/modules/mixin/zod/zod-query-schema/filter.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/include.d.ts +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/include.js +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/include.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/index.d.ts +4 -4
- package/src/lib/modules/mixin/zod/zod-query-schema/index.js +3 -4
- package/src/lib/modules/mixin/zod/zod-query-schema/index.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/sort.d.ts +11 -3
- package/src/lib/modules/mixin/zod/zod-query-schema/sort.js +1 -1
- package/src/lib/modules/mixin/zod/zod-query-schema/sort.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-share/attributes.d.ts +15 -14
- package/src/lib/modules/mixin/zod/zod-share/attributes.js +26 -20
- package/src/lib/modules/mixin/zod/zod-share/attributes.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-share/page.d.ts +3 -9
- package/src/lib/modules/mixin/zod/zod-share/rel-data.d.ts +4 -40
- package/src/lib/modules/mixin/zod/zod-share/rel-data.js +2 -2
- package/src/lib/modules/mixin/zod/zod-share/rel-data.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-share/relationships.d.ts +8 -304
- package/src/lib/modules/mixin/zod/zod-share/relationships.js +1 -1
- package/src/lib/modules/mixin/zod/zod-share/relationships.js.map +1 -1
- package/src/lib/modules/mixin/zod/zod-utils.d.ts +2 -1
- package/src/lib/modules/mixin/zod/zod-utils.js +12 -0
- package/src/lib/modules/mixin/zod/zod-utils.js.map +1 -1
- package/src/lib/types/entity-param.type.d.ts +6 -4
- package/src/lib/types/entity-param.type.js +13 -0
- package/src/lib/types/entity-param.type.js.map +1 -1
- package/src/lib/types/error.types.d.ts +3 -3
- package/src/lib/types/index.d.ts +1 -0
- package/src/lib/types/index.js +1 -0
- package/src/lib/types/index.js.map +1 -1
- package/src/lib/types/json-api-read-only.d.ts +51 -0
- package/src/lib/types/json-api-read-only.js +3 -0
- package/src/lib/types/json-api-read-only.js.map +1 -0
- package/src/lib/types/module-options.types.d.ts +5 -1
- package/src/lib/utils/module-helper.js +4 -0
- 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":";;;AAkEA,gDAQC;AAED,4CAUC;AAED,4CAsBC;
|
|
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":";;;
|
|
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 {
|
|
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;
|
package/src/lib/types/index.d.ts
CHANGED
package/src/lib/types/index.js
CHANGED
|
@@ -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 @@
|
|
|
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,
|
|
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"}
|