@zola_do/crud 0.2.5 → 0.2.7
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/README.md +599 -155
- package/dist/controller/entity-crud.controller.d.ts +6 -0
- package/dist/controller/entity-crud.controller.js +78 -6
- package/dist/controller/entity-crud.controller.js.map +1 -1
- package/dist/service/entity-crud.service.d.ts +5 -1
- package/dist/service/entity-crud.service.js +116 -35
- package/dist/service/entity-crud.service.js.map +1 -1
- package/dist/service/extra-crud.service.js +2 -28
- package/dist/service/extra-crud.service.js.map +1 -1
- package/dist/service/relation-crud.service.js +0 -12
- package/dist/service/relation-crud.service.js.map +1 -1
- package/dist/shared/exceptions/global-exception.filter.js +32 -10
- package/dist/shared/exceptions/global-exception.filter.js.map +1 -1
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/tokens/crud-idempotency.token.d.ts +1 -0
- package/dist/shared/tokens/crud-idempotency.token.js +5 -0
- package/dist/shared/tokens/crud-idempotency.token.js.map +1 -0
- package/dist/shared/types/crud-idempotency-store.interface.d.ts +4 -0
- package/dist/shared/types/crud-idempotency-store.interface.js +3 -0
- package/dist/shared/types/crud-idempotency-store.interface.js.map +1 -0
- package/dist/shared/types/crud-option.type.d.ts +22 -2
- package/dist/shared/utils/collection-query-merge.d.ts +3 -0
- package/dist/shared/utils/collection-query-merge.js +19 -0
- package/dist/shared/utils/collection-query-merge.js.map +1 -0
- package/dist/shared/utils/crud-hooks.helper.d.ts +1 -1
- package/dist/shared/utils/crud-hooks.helper.js +22 -3
- package/dist/shared/utils/crud-hooks.helper.js.map +1 -1
- package/dist/shared/utils/in-memory-idempotency.store.d.ts +6 -0
- package/dist/shared/utils/in-memory-idempotency.store.js +24 -0
- package/dist/shared/utils/in-memory-idempotency.store.js.map +1 -0
- package/dist/shared/utils/index.d.ts +2 -0
- package/dist/shared/utils/index.js +2 -0
- package/dist/shared/utils/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -9,32 +9,54 @@ var GlobalExceptionFilter_1;
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.GlobalExceptionFilter = void 0;
|
|
11
11
|
const common_1 = require("@nestjs/common");
|
|
12
|
+
function normalizeHttpExceptionMessage(exception) {
|
|
13
|
+
const res = exception.getResponse();
|
|
14
|
+
if (typeof res === 'string') {
|
|
15
|
+
return res;
|
|
16
|
+
}
|
|
17
|
+
if (res && typeof res === 'object' && 'message' in res) {
|
|
18
|
+
const m = res.message;
|
|
19
|
+
if (Array.isArray(m)) {
|
|
20
|
+
return m;
|
|
21
|
+
}
|
|
22
|
+
if (typeof m === 'string') {
|
|
23
|
+
return m;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return exception.message;
|
|
27
|
+
}
|
|
12
28
|
let GlobalExceptionFilter = GlobalExceptionFilter_1 = class GlobalExceptionFilter {
|
|
13
29
|
constructor() {
|
|
14
30
|
this.logger = new common_1.Logger(GlobalExceptionFilter_1.name);
|
|
15
31
|
}
|
|
16
32
|
catch(exception, host) {
|
|
17
|
-
var _a, _b;
|
|
33
|
+
var _a, _b, _c, _d, _e;
|
|
18
34
|
const ctx = host.switchToHttp();
|
|
19
35
|
const response = ctx.getResponse();
|
|
20
36
|
const request = ctx.getRequest();
|
|
21
|
-
const
|
|
37
|
+
const isHttp = exception instanceof common_1.HttpException;
|
|
38
|
+
const status = isHttp
|
|
22
39
|
? exception.getStatus()
|
|
23
|
-
: common_1.HttpStatus.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
40
|
+
: common_1.HttpStatus.INTERNAL_SERVER_ERROR;
|
|
41
|
+
const isProd = process.env.NODE_ENV === 'production';
|
|
42
|
+
let message;
|
|
43
|
+
if (isHttp) {
|
|
44
|
+
message = normalizeHttpExceptionMessage(exception);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const err = exception;
|
|
48
|
+
message = isProd
|
|
49
|
+
? 'Internal server error'
|
|
50
|
+
: (err === null || err === void 0 ? void 0 : err.message) || 'Internal server error';
|
|
29
51
|
}
|
|
30
52
|
const responseData = {
|
|
31
53
|
statusCode: status,
|
|
32
54
|
message,
|
|
33
55
|
path: request.url,
|
|
34
56
|
timestamp: new Date().toISOString(),
|
|
35
|
-
exception,
|
|
36
57
|
};
|
|
37
|
-
|
|
58
|
+
const err = exception instanceof Error ? exception : undefined;
|
|
59
|
+
this.logger.error(Object.assign(Object.assign({}, responseData), { exceptionMessage: err === null || err === void 0 ? void 0 : err.message, stack: err === null || err === void 0 ? void 0 : err.stack, name: err === null || err === void 0 ? void 0 : err.name, remoteAddress: (_b = (_a = request.socket) === null || _a === void 0 ? void 0 : _a.remoteAddress) !== null && _b !== void 0 ? _b : (_c = request.connection) === null || _c === void 0 ? void 0 : _c.remoteAddress, ip: request.ip, ips: request.ips, forward: (_d = request.headers['x-forwarded-for']) !== null && _d !== void 0 ? _d : '', real: (_e = request.headers['x-Real-IP']) !== null && _e !== void 0 ? _e : '' }));
|
|
38
60
|
response.status(status).json(responseData);
|
|
39
61
|
return;
|
|
40
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-exception.filter.js","sourceRoot":"","sources":["../../../src/shared/exceptions/global-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAOwB;
|
|
1
|
+
{"version":3,"file":"global-exception.filter.js","sourceRoot":"","sources":["../../../src/shared/exceptions/global-exception.filter.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/index.d.ts
CHANGED
package/dist/shared/index.js
CHANGED
|
@@ -22,4 +22,6 @@ __exportStar(require("./guards/crud-operation-disabled.guard"), exports);
|
|
|
22
22
|
__exportStar(require("./request-context"), exports);
|
|
23
23
|
__exportStar(require("./types"), exports);
|
|
24
24
|
__exportStar(require("./utils"), exports);
|
|
25
|
+
__exportStar(require("./tokens/crud-idempotency.token"), exports);
|
|
26
|
+
__exportStar(require("./types/crud-idempotency-store.interface"), exports);
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
package/dist/shared/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,iDAA+B;AAC/B,yEAAuD;AACvD,oDAAkC;AAClC,0CAAwB;AACxB,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,iDAA+B;AAC/B,yEAAuD;AACvD,oDAAkC;AAClC,0CAAwB;AACxB,0CAAwB;AACxB,kEAAgD;AAChD,2EAAyD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CRUD_IDEMPOTENCY_STORE: unique symbol;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-idempotency.token.js","sourceRoot":"","sources":["../../../src/shared/tokens/crud-idempotency.token.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-idempotency-store.interface.js","sourceRoot":"","sources":["../../../src/shared/types/crud-idempotency-store.interface.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type CrudContextPayload = Record<string, any>;
|
|
2
2
|
export type CrudWherePayload = Record<string, any>;
|
|
3
|
-
export type CrudEntityOperationHookName = 'create' | 'findAll' | 'findOne' | 'update' | 'delete' | 'restore';
|
|
3
|
+
export type CrudEntityOperationHookName = 'create' | 'findAll' | 'findOne' | 'update' | 'delete' | 'restore' | 'bulkCreate' | 'bulkDelete';
|
|
4
4
|
export type CrudAuthorizeResult = boolean | void | Promise<boolean | void>;
|
|
5
5
|
export type CrudHookContext = {
|
|
6
6
|
req?: any;
|
|
@@ -54,7 +54,7 @@ export type CrudEndpointDisableConfig = CrudEndpointDisableMode | {
|
|
|
54
54
|
mode: CrudEndpointDisableMode;
|
|
55
55
|
reason?: string;
|
|
56
56
|
};
|
|
57
|
-
export type CrudEntityOperationName = 'create' | 'findAll' | 'findOne' | 'update' | 'delete' | 'restore' | 'findAllArchived';
|
|
57
|
+
export type CrudEntityOperationName = 'create' | 'findAll' | 'findOne' | 'update' | 'delete' | 'restore' | 'findAllArchived' | 'bulkCreate' | 'bulkDelete';
|
|
58
58
|
export type CrudExtraOperationName = CrudEntityOperationName;
|
|
59
59
|
export type CrudRelationOperationName = 'bulkSaveFirst' | 'bulkSaveSecond' | 'findAllFirst' | 'findAllSecond';
|
|
60
60
|
export type EntityCrudOptions = {
|
|
@@ -95,6 +95,26 @@ export type EntityCrudOptions = {
|
|
|
95
95
|
canFindOne?: CrudOperationAuthorizeHook;
|
|
96
96
|
canUpdate?: CrudOperationAuthorizeHook;
|
|
97
97
|
canDelete?: CrudOperationAuthorizeHook;
|
|
98
|
+
collectionQueryDefaults?: {
|
|
99
|
+
allowedFilterColumns?: string[];
|
|
100
|
+
allowedSortColumns?: string[];
|
|
101
|
+
};
|
|
102
|
+
optimisticConcurrency?: boolean;
|
|
103
|
+
idempotency?: {
|
|
104
|
+
enabled?: boolean;
|
|
105
|
+
headerName?: string;
|
|
106
|
+
ttlMs?: number;
|
|
107
|
+
};
|
|
108
|
+
enableBulkCreate?: boolean;
|
|
109
|
+
enableBulkDelete?: boolean;
|
|
110
|
+
bulkCreatePermission?: string;
|
|
111
|
+
bulkDeletePermission?: string;
|
|
112
|
+
beforeBulkCreate?: CrudOperationHook;
|
|
113
|
+
afterBulkCreate?: CrudOperationHook;
|
|
114
|
+
beforeBulkDelete?: CrudOperationHook;
|
|
115
|
+
afterBulkDelete?: CrudOperationHook;
|
|
116
|
+
canBulkCreate?: CrudOperationAuthorizeHook;
|
|
117
|
+
canBulkDelete?: CrudOperationAuthorizeHook;
|
|
98
118
|
canRestore?: CrudOperationAuthorizeHook;
|
|
99
119
|
operations?: Partial<Record<CrudEntityOperationName, CrudEndpointDisableConfig>>;
|
|
100
120
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeEntityCrudCollectionQuery = mergeEntityCrudCollectionQuery;
|
|
4
|
+
function mergeEntityCrudCollectionQuery(query, options) {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
const d = options === null || options === void 0 ? void 0 : options.collectionQueryDefaults;
|
|
7
|
+
if (!d) {
|
|
8
|
+
return query;
|
|
9
|
+
}
|
|
10
|
+
const q = query;
|
|
11
|
+
if ((_a = d.allowedFilterColumns) === null || _a === void 0 ? void 0 : _a.length) {
|
|
12
|
+
q.allowedFilterColumns = d.allowedFilterColumns;
|
|
13
|
+
}
|
|
14
|
+
if ((_b = d.allowedSortColumns) === null || _b === void 0 ? void 0 : _b.length) {
|
|
15
|
+
q.allowedSortColumns = d.allowedSortColumns;
|
|
16
|
+
}
|
|
17
|
+
return query;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=collection-query-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-query-merge.js","sourceRoot":"","sources":["../../../src/shared/utils/collection-query-merge.ts"],"names":[],"mappings":";;AAMA,wEAgBC;AAhBD,SAAgB,8BAA8B,CAC5C,KAAsB,EACtB,OAA2B;;IAE3B,MAAM,CAAC,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB,CAAC;IAC3C,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,KAAY,CAAC;IACvB,IAAI,MAAA,CAAC,CAAC,oBAAoB,0CAAE,MAAM,EAAE,CAAC;QACnC,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,oBAAoB,CAAC;IAClD,CAAC;IACD,IAAI,MAAA,CAAC,CAAC,kBAAkB,0CAAE,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CollectionQuery } from '@zola_do/collection-query';
|
|
2
2
|
import { CrudContextPayload, CrudEntityOperationHookName, CrudHookContext, CrudWherePayload, CrudWriteFilterOptions, EntityCrudOptions, ExtraCrudOptions } from '../types';
|
|
3
3
|
import { CrudRequestContextResolver } from '../request-context';
|
|
4
|
-
type HookName = 'beforeCreate' | 'afterCreate' | 'beforeFindAll' | 'afterFindAll' | 'beforeFindOne' | 'afterFindOne' | 'beforeUpdate' | 'afterUpdate' | 'beforeDelete' | 'afterDelete' | 'beforeSoftDelete' | 'afterSoftDelete' | 'beforeRestore' | 'afterRestore' | 'beforeAssignFirst' | 'afterAssignFirst' | 'beforeAssignSecond' | 'afterAssignSecond';
|
|
4
|
+
type HookName = 'beforeCreate' | 'afterCreate' | 'beforeFindAll' | 'afterFindAll' | 'beforeFindOne' | 'afterFindOne' | 'beforeUpdate' | 'afterUpdate' | 'beforeDelete' | 'afterDelete' | 'beforeSoftDelete' | 'afterSoftDelete' | 'beforeRestore' | 'afterRestore' | 'beforeBulkCreate' | 'afterBulkCreate' | 'beforeBulkDelete' | 'afterBulkDelete' | 'beforeAssignFirst' | 'afterAssignFirst' | 'beforeAssignSecond' | 'afterAssignSecond';
|
|
5
5
|
export declare const runCrudHook: (options: Record<string, any> | undefined, hookName: HookName, params: {
|
|
6
6
|
id?: string;
|
|
7
7
|
itemData?: CrudContextPayload;
|
|
@@ -50,6 +50,16 @@ const OPERATION_HOOK_NAMES = {
|
|
|
50
50
|
after: ['afterRestore'],
|
|
51
51
|
can: 'canRestore',
|
|
52
52
|
},
|
|
53
|
+
bulkCreate: {
|
|
54
|
+
before: ['beforeBulkCreate'],
|
|
55
|
+
after: ['afterBulkCreate'],
|
|
56
|
+
can: 'canBulkCreate',
|
|
57
|
+
},
|
|
58
|
+
bulkDelete: {
|
|
59
|
+
before: ['beforeBulkDelete'],
|
|
60
|
+
after: ['afterBulkDelete'],
|
|
61
|
+
can: 'canBulkDelete',
|
|
62
|
+
},
|
|
53
63
|
};
|
|
54
64
|
const hasOperationHookResultKeys = (value) => 'itemData' in value ||
|
|
55
65
|
'where' in value ||
|
|
@@ -119,14 +129,22 @@ const runOperationHook = async (options, hookName, context) => {
|
|
|
119
129
|
mergeOperationHookResult(context, hookResult);
|
|
120
130
|
};
|
|
121
131
|
const runBeforeOperationHooks = async (options, context) => {
|
|
122
|
-
const
|
|
132
|
+
const entry = OPERATION_HOOK_NAMES[context.operation];
|
|
133
|
+
if (!entry) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const hookNames = entry.before;
|
|
123
137
|
for (const hookName of hookNames) {
|
|
124
138
|
await runOperationHook(options, hookName, context);
|
|
125
139
|
}
|
|
126
140
|
};
|
|
127
141
|
exports.runBeforeOperationHooks = runBeforeOperationHooks;
|
|
128
142
|
const runAfterOperationHooks = async (options, context) => {
|
|
129
|
-
const
|
|
143
|
+
const entry = OPERATION_HOOK_NAMES[context.operation];
|
|
144
|
+
if (!entry) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const hookNames = entry.after;
|
|
130
148
|
for (const hookName of hookNames) {
|
|
131
149
|
await runOperationHook(options, hookName, context);
|
|
132
150
|
}
|
|
@@ -138,12 +156,13 @@ const assertAuthorized = (allowed) => {
|
|
|
138
156
|
}
|
|
139
157
|
};
|
|
140
158
|
const runOperationAuthorization = async (options, context) => {
|
|
159
|
+
var _a;
|
|
141
160
|
const authorize = options === null || options === void 0 ? void 0 : options.authorize;
|
|
142
161
|
if (authorize) {
|
|
143
162
|
const allowed = await authorize(context);
|
|
144
163
|
assertAuthorized(allowed);
|
|
145
164
|
}
|
|
146
|
-
const canKey = OPERATION_HOOK_NAMES[context.operation].can;
|
|
165
|
+
const canKey = (_a = OPERATION_HOOK_NAMES[context.operation]) === null || _a === void 0 ? void 0 : _a.can;
|
|
147
166
|
const canHook = canKey
|
|
148
167
|
? options === null || options === void 0 ? void 0 : options[canKey]
|
|
149
168
|
: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud-hooks.helper.js","sourceRoot":"","sources":["../../../src/shared/utils/crud-hooks.helper.ts"],"names":[],"mappings":";;;AAAA,2CAAyE;AACzE,gEAA6E;AAY7E,wDAG4B;
|
|
1
|
+
{"version":3,"file":"crud-hooks.helper.js","sourceRoot":"","sources":["../../../src/shared/utils/crud-hooks.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CrudIdempotencyStore } from '../types/crud-idempotency-store.interface';
|
|
2
|
+
export declare class InMemoryCrudIdempotencyStore implements CrudIdempotencyStore {
|
|
3
|
+
private readonly entries;
|
|
4
|
+
get(key: string): Promise<any | undefined>;
|
|
5
|
+
set(key: string, body: any, ttlMs?: number): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InMemoryCrudIdempotencyStore = void 0;
|
|
4
|
+
class InMemoryCrudIdempotencyStore {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.entries = new Map();
|
|
7
|
+
}
|
|
8
|
+
async get(key) {
|
|
9
|
+
const e = this.entries.get(key);
|
|
10
|
+
if (!e)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (e.exp !== undefined && Date.now() > e.exp) {
|
|
13
|
+
this.entries.delete(key);
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return e.val;
|
|
17
|
+
}
|
|
18
|
+
async set(key, body, ttlMs) {
|
|
19
|
+
const exp = ttlMs !== undefined && ttlMs > 0 ? Date.now() + ttlMs : undefined;
|
|
20
|
+
this.entries.set(key, { val: body, exp });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.InMemoryCrudIdempotencyStore = InMemoryCrudIdempotencyStore;
|
|
24
|
+
//# sourceMappingURL=in-memory-idempotency.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-idempotency.store.js","sourceRoot":"","sources":["../../../src/shared/utils/in-memory-idempotency.store.ts"],"names":[],"mappings":";;;AAOA,MAAa,4BAA4B;IAAzC;QACmB,YAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IAiBtD,CAAC;IAfC,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAAS,EAAE,KAAc;QAC9C,MAAM,GAAG,GACP,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF;AAlBD,oEAkBC"}
|
|
@@ -18,4 +18,6 @@ __exportStar(require("./numeric.transformer"), exports);
|
|
|
18
18
|
__exportStar(require("./validate-dto"), exports);
|
|
19
19
|
__exportStar(require("./crud-hooks.helper"), exports);
|
|
20
20
|
__exportStar(require("./cursor-query.helper"), exports);
|
|
21
|
+
__exportStar(require("./collection-query-merge"), exports);
|
|
22
|
+
__exportStar(require("./in-memory-idempotency.store"), exports);
|
|
21
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,iDAA+B;AAC/B,sDAAoC;AACpC,wDAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,iDAA+B;AAC/B,sDAAoC;AACpC,wDAAsC;AACtC,2DAAyC;AACzC,gEAA8C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zola_do/crud",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"description": "Generic CRUD controllers and services for NestJS",
|
|
5
5
|
"author": "zolaDO",
|
|
6
6
|
"license": "ISC",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@zola_do/collection-query": "^0.2.
|
|
78
|
+
"@zola_do/collection-query": "^0.2.5",
|
|
79
79
|
"@zola_do/authorization": "^0.2.0"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|