@node-c/persistance-redis 1.0.0-alpha1
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/LICENSE +1 -0
- package/README.md +4 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +573 -0
- package/coverage/common/definitions/common.constants.ts.html +121 -0
- package/coverage/common/definitions/index.html +131 -0
- package/coverage/common/definitions/index.ts.html +88 -0
- package/coverage/coverage-final.json +13 -0
- package/coverage/entityService/index.html +131 -0
- package/coverage/entityService/index.ts.html +91 -0
- package/coverage/entityService/redis.entity.service.ts.html +439 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +176 -0
- package/coverage/module/index.html +131 -0
- package/coverage/module/index.ts.html +91 -0
- package/coverage/module/redis.module.ts.html +169 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/repository/index.html +146 -0
- package/coverage/repository/index.ts.html +94 -0
- package/coverage/repository/redis.repository.module.ts.html +181 -0
- package/coverage/repository/redis.repository.service.ts.html +763 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/store/index.html +146 -0
- package/coverage/store/index.ts.html +94 -0
- package/coverage/store/redis.store.module.ts.html +181 -0
- package/coverage/store/redis.store.service.ts.html +586 -0
- package/dist/common/definitions/common.constants.d.ts +7 -0
- package/dist/common/definitions/common.constants.js +12 -0
- package/dist/common/definitions/common.constants.js.map +1 -0
- package/dist/common/definitions/index.d.ts +1 -0
- package/dist/common/definitions/index.js +18 -0
- package/dist/common/definitions/index.js.map +1 -0
- package/dist/entityService/index.d.ts +2 -0
- package/dist/entityService/index.js +19 -0
- package/dist/entityService/index.js.map +1 -0
- package/dist/entityService/redis.entity.service.d.ts +16 -0
- package/dist/entityService/redis.entity.service.definitions.d.ts +19 -0
- package/dist/entityService/redis.entity.service.definitions.js +3 -0
- package/dist/entityService/redis.entity.service.definitions.js.map +1 -0
- package/dist/entityService/redis.entity.service.js +121 -0
- package/dist/entityService/redis.entity.service.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/module/index.d.ts +2 -0
- package/dist/module/index.js +19 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/redis.module.d.ts +5 -0
- package/dist/module/redis.module.definitions.d.ts +14 -0
- package/dist/module/redis.module.definitions.js +3 -0
- package/dist/module/redis.module.definitions.js.map +1 -0
- package/dist/module/redis.module.js +27 -0
- package/dist/module/redis.module.js.map +1 -0
- package/dist/repository/index.d.ts +3 -0
- package/dist/repository/index.js +20 -0
- package/dist/repository/index.js.map +1 -0
- package/dist/repository/redis.repository.definitions.d.ts +48 -0
- package/dist/repository/redis.repository.definitions.js +17 -0
- package/dist/repository/redis.repository.definitions.js.map +1 -0
- package/dist/repository/redis.repository.module.d.ts +5 -0
- package/dist/repository/redis.repository.module.js +42 -0
- package/dist/repository/redis.repository.module.js.map +1 -0
- package/dist/repository/redis.repository.service.d.ts +18 -0
- package/dist/repository/redis.repository.service.js +216 -0
- package/dist/repository/redis.repository.service.js.map +1 -0
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.js +20 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/redis.store.definitions.d.ts +32 -0
- package/dist/store/redis.store.definitions.js +3 -0
- package/dist/store/redis.store.definitions.js.map +1 -0
- package/dist/store/redis.store.module.d.ts +5 -0
- package/dist/store/redis.store.module.js +50 -0
- package/dist/store/redis.store.module.js.map +1 -0
- package/dist/store/redis.store.service.d.ts +20 -0
- package/dist/store/redis.store.service.js +171 -0
- package/dist/store/redis.store.service.js.map +1 -0
- package/package.json +28 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.RedisRepositoryService = void 0;
|
|
28
|
+
const common_1 = require("@nestjs/common");
|
|
29
|
+
const core_1 = require("@node-c/core");
|
|
30
|
+
const class_validator_1 = require("class-validator");
|
|
31
|
+
const immutable_1 = __importDefault(require("immutable"));
|
|
32
|
+
const ramda_1 = require("ramda");
|
|
33
|
+
const uuid_1 = require("uuid");
|
|
34
|
+
const redis_repository_definitions_1 = require("./redis.repository.definitions");
|
|
35
|
+
const definitions_1 = require("../common/definitions");
|
|
36
|
+
const store_1 = require("../store");
|
|
37
|
+
let RedisRepositoryService = class RedisRepositoryService {
|
|
38
|
+
constructor(configProvider, persistanceModuleName, schema, store) {
|
|
39
|
+
this.configProvider = configProvider;
|
|
40
|
+
this.persistanceModuleName = persistanceModuleName;
|
|
41
|
+
this.schema = schema;
|
|
42
|
+
this.store = store;
|
|
43
|
+
const { storeDelimiter } = configProvider.config.persistance[persistanceModuleName];
|
|
44
|
+
const { columns } = schema;
|
|
45
|
+
const primaryKeys = [];
|
|
46
|
+
for (const columnName in columns) {
|
|
47
|
+
const { primary } = columns[columnName];
|
|
48
|
+
if (primary) {
|
|
49
|
+
primaryKeys.push(columnName);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
this.primaryKeys = primaryKeys;
|
|
53
|
+
this.storeDelimiter = storeDelimiter || definitions_1.Constants.DEFAULT_STORE_DELIMITER;
|
|
54
|
+
}
|
|
55
|
+
find(options) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
const { primaryKeys, schema, store, storeDelimiter } = this;
|
|
58
|
+
const { name: entityName } = schema;
|
|
59
|
+
const { exactSearch, filters, findAll, page, perPage, withValues: optWithValues } = options;
|
|
60
|
+
const paginationOptions = {};
|
|
61
|
+
const withValues = typeof optWithValues === 'undefined' || optWithValues === true ? true : false;
|
|
62
|
+
let storeEntityKey = '';
|
|
63
|
+
if (filters) {
|
|
64
|
+
storeEntityKey =
|
|
65
|
+
storeDelimiter +
|
|
66
|
+
primaryKeys
|
|
67
|
+
.map(field => {
|
|
68
|
+
const value = filters[field];
|
|
69
|
+
if (typeof value !== 'undefined' &&
|
|
70
|
+
typeof value !== 'object' &&
|
|
71
|
+
(typeof value !== 'string' || value.length)) {
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
if (exactSearch) {
|
|
75
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Find Error]: ` +
|
|
76
|
+
`The primary key field ${field} is required when exactSearch is set to true.`);
|
|
77
|
+
}
|
|
78
|
+
return '*';
|
|
79
|
+
})
|
|
80
|
+
.join(storeDelimiter);
|
|
81
|
+
if (!findAll) {
|
|
82
|
+
const count = perPage || 100;
|
|
83
|
+
paginationOptions.count = count;
|
|
84
|
+
paginationOptions.cursor = (page ? page - 1 : 0) * count;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (!findAll) {
|
|
88
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Error]: ` +
|
|
89
|
+
'Either filters or findAll is required when calling the find method.');
|
|
90
|
+
}
|
|
91
|
+
return yield store.scan(`${entityName}${storeEntityKey}`, Object.assign(Object.assign({}, paginationOptions), { scanAll: findAll, withValues }));
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
prepare(data, options) {
|
|
95
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
const { primaryKeys, schema, store, storeDelimiter } = this;
|
|
97
|
+
const { columns, name: entityName } = schema;
|
|
98
|
+
const opt = options || {};
|
|
99
|
+
const { generatePrimaryKeys, onConflict: optOnConflict, validate: optValidate } = opt;
|
|
100
|
+
const onConflict = optOnConflict || redis_repository_definitions_1.SaveOptionsOnConflict.ThrowError;
|
|
101
|
+
let allPKValuesExist = true;
|
|
102
|
+
let preparedData = immutable_1.default.fromJS(data).toJS();
|
|
103
|
+
let storeEntityKey = '';
|
|
104
|
+
for (const columnName of primaryKeys) {
|
|
105
|
+
const { generated, type } = columns[columnName];
|
|
106
|
+
const value = preparedData[columnName];
|
|
107
|
+
const valueExists = !(typeof value === 'undefined' ||
|
|
108
|
+
(typeof value === 'string' && !value.length) ||
|
|
109
|
+
typeof value === 'object');
|
|
110
|
+
if (generated) {
|
|
111
|
+
if (valueExists) {
|
|
112
|
+
storeEntityKey += `${value}`;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (allPKValuesExist) {
|
|
116
|
+
allPKValuesExist = false;
|
|
117
|
+
}
|
|
118
|
+
if (!generatePrimaryKeys) {
|
|
119
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Validation Error]: ` +
|
|
120
|
+
`A value is required for generated PK column ${columnName} when the generatePrimaryKeys is set to false.`);
|
|
121
|
+
}
|
|
122
|
+
if (type === redis_repository_definitions_1.EntitySchemaColumnType.Integer) {
|
|
123
|
+
let currentMaxValue = (yield store.get(`${entityName}${storeDelimiter}increment${storeDelimiter}${columnName}`, {
|
|
124
|
+
parseToJSON: true
|
|
125
|
+
})) || 0;
|
|
126
|
+
currentMaxValue++;
|
|
127
|
+
yield store.set(`${entityName}${storeDelimiter}increment${storeDelimiter}${columnName}`, currentMaxValue);
|
|
128
|
+
preparedData[columnName] = currentMaxValue;
|
|
129
|
+
storeEntityKey += `${currentMaxValue}${storeDelimiter}`;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (type === redis_repository_definitions_1.EntitySchemaColumnType.UUIDV4) {
|
|
133
|
+
let newValue = (0, uuid_1.v4)();
|
|
134
|
+
if (storeDelimiter === '-') {
|
|
135
|
+
newValue = newValue.replace(/-/g, '_');
|
|
136
|
+
}
|
|
137
|
+
preparedData[columnName] = newValue;
|
|
138
|
+
storeEntityKey += `${newValue}${storeDelimiter}`;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Validation Error]: ` +
|
|
142
|
+
`Unrecognized type "${type}" for PK column ${columnName}`);
|
|
143
|
+
}
|
|
144
|
+
if (!valueExists) {
|
|
145
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Validation Error]: ` +
|
|
146
|
+
`A value is required for non-generated PK column ${columnName}`);
|
|
147
|
+
}
|
|
148
|
+
storeEntityKey += `${value}`;
|
|
149
|
+
}
|
|
150
|
+
if (optValidate) {
|
|
151
|
+
const validationErrors = yield (0, class_validator_1.validate)(data);
|
|
152
|
+
if (validationErrors.length) {
|
|
153
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Validation Error]: ${validationErrors.join('\n')}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
storeEntityKey = storeEntityKey.replace(new RegExp(`${storeDelimiter}$`), '');
|
|
157
|
+
if (onConflict !== redis_repository_definitions_1.SaveOptionsOnConflict.DoNothing && allPKValuesExist) {
|
|
158
|
+
const existingValue = yield store.get(storeEntityKey, { parseToJSON: false });
|
|
159
|
+
if (existingValue) {
|
|
160
|
+
if (onConflict === redis_repository_definitions_1.SaveOptionsOnConflict.ThrowError) {
|
|
161
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Unique Error]: An entry already exists for key ${storeEntityKey}.`);
|
|
162
|
+
}
|
|
163
|
+
if (onConflict === redis_repository_definitions_1.SaveOptionsOnConflict.Update) {
|
|
164
|
+
const existingData = JSON.parse(existingValue);
|
|
165
|
+
preparedData = (0, ramda_1.mergeDeepRight)(existingData, preparedData);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
throw new core_1.ApplicationError(`[RedisRepositoryService ${entityName}][Execution Error]: ` +
|
|
169
|
+
`Invalid value "${onConflict}" provided for onConflict.`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { data: preparedData, storeEntityKey };
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
save(data, options) {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
const { schema, store, storeDelimiter } = this;
|
|
179
|
+
const { name: entityName } = schema;
|
|
180
|
+
const { delete: optDelete, onConflict, transactionId } = options || {};
|
|
181
|
+
const actualData = data instanceof Array ? data : [data];
|
|
182
|
+
if (optDelete) {
|
|
183
|
+
const prepareOptions = {
|
|
184
|
+
onConflict: redis_repository_definitions_1.SaveOptionsOnConflict.DoNothing,
|
|
185
|
+
validate: true
|
|
186
|
+
};
|
|
187
|
+
const deleteKeys = [];
|
|
188
|
+
for (const i in actualData) {
|
|
189
|
+
deleteKeys.push((yield this.prepare(actualData[i], prepareOptions)).storeEntityKey);
|
|
190
|
+
}
|
|
191
|
+
yield store.delete(deleteKeys, { transactionId });
|
|
192
|
+
return deleteKeys;
|
|
193
|
+
}
|
|
194
|
+
const prepareOptions = {
|
|
195
|
+
generatePrimaryKeys: true,
|
|
196
|
+
onConflict,
|
|
197
|
+
validate: true
|
|
198
|
+
};
|
|
199
|
+
const results = [];
|
|
200
|
+
for (const i in actualData) {
|
|
201
|
+
const { data: validatedEntity, storeEntityKey } = yield this.prepare(actualData[i], prepareOptions);
|
|
202
|
+
yield store.set(`${entityName}${storeDelimiter}${storeEntityKey}`, validatedEntity, { transactionId });
|
|
203
|
+
results.push(validatedEntity);
|
|
204
|
+
}
|
|
205
|
+
return results;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
RedisRepositoryService = __decorate([
|
|
210
|
+
(0, common_1.Injectable)(),
|
|
211
|
+
__param(1, (0, common_1.Inject)(definitions_1.Constants.REDIS_CLIENT_PERSISTANCE_MODULE_NAME)),
|
|
212
|
+
__param(2, (0, common_1.Inject)(definitions_1.Constants.REDIS_REPOSITORY_SCHEMA)),
|
|
213
|
+
__metadata("design:paramtypes", [core_1.ConfigProviderService, String, Object, store_1.RedisStoreService])
|
|
214
|
+
], RedisRepositoryService);
|
|
215
|
+
exports.RedisRepositoryService = RedisRepositoryService;
|
|
216
|
+
//# sourceMappingURL=redis.repository.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.repository.service.js","sourceRoot":"","sources":["../../src/repository/redis.repository.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./redis.store.definitions"), exports);
|
|
18
|
+
__exportStar(require("./redis.store.module"), exports);
|
|
19
|
+
__exportStar(require("./redis.store.service"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,uDAAqC;AACrC,wDAAsC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { RedisClientType } from 'redis';
|
|
2
|
+
export interface GetOptions {
|
|
3
|
+
parseToJSON?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export type RedisClientScanMethod = (_key: string, _cursor: number, _options?: {
|
|
6
|
+
count?: number;
|
|
7
|
+
match: string;
|
|
8
|
+
}) => Promise<{
|
|
9
|
+
cursor: number;
|
|
10
|
+
keys?: string[];
|
|
11
|
+
tuples?: {
|
|
12
|
+
field: string;
|
|
13
|
+
value: string;
|
|
14
|
+
}[];
|
|
15
|
+
}>;
|
|
16
|
+
export interface RedisStoreModuleOptions {
|
|
17
|
+
persistanceModuleName: string;
|
|
18
|
+
}
|
|
19
|
+
export type RedisTransaction = ReturnType<RedisClientType['multi']>;
|
|
20
|
+
export interface ScanOptions {
|
|
21
|
+
count?: number;
|
|
22
|
+
cursor?: number;
|
|
23
|
+
parseToJSON?: boolean;
|
|
24
|
+
scanAll?: boolean;
|
|
25
|
+
withValues?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface SetOptions {
|
|
28
|
+
transactionId?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface StoreDeleteOptions {
|
|
31
|
+
transactionId?: string;
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.store.definitions.js","sourceRoot":"","sources":["../../src/store/redis.store.definitions.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
var RedisStoreModule_1;
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.RedisStoreModule = void 0;
|
|
20
|
+
const common_1 = require("@nestjs/common");
|
|
21
|
+
const core_1 = require("@node-c/core");
|
|
22
|
+
const redis_store_service_1 = require("./redis.store.service");
|
|
23
|
+
const definitions_1 = require("../common/definitions");
|
|
24
|
+
let RedisStoreModule = RedisStoreModule_1 = class RedisStoreModule {
|
|
25
|
+
static register(options) {
|
|
26
|
+
const { persistanceModuleName } = options;
|
|
27
|
+
const serviceToken = `${persistanceModuleName}${definitions_1.Constants.REDIS_CLIENT_STORE_SERVICE_SUFFIX}`;
|
|
28
|
+
return {
|
|
29
|
+
global: true,
|
|
30
|
+
module: RedisStoreModule_1,
|
|
31
|
+
providers: [
|
|
32
|
+
{
|
|
33
|
+
provide: definitions_1.Constants.REDIS_CLIENT,
|
|
34
|
+
useFactory: (configProvider) => __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
return yield redis_store_service_1.RedisStoreService.createClient(configProvider.config, { persistanceModuleName });
|
|
36
|
+
}),
|
|
37
|
+
inject: [core_1.ConfigProviderService]
|
|
38
|
+
},
|
|
39
|
+
{ provide: definitions_1.Constants.REDIS_CLIENT_PERSISTANCE_MODULE_NAME, useValue: persistanceModuleName },
|
|
40
|
+
{ provide: serviceToken, useClass: redis_store_service_1.RedisStoreService }
|
|
41
|
+
],
|
|
42
|
+
exports: [{ provide: serviceToken, useClass: redis_store_service_1.RedisStoreService }]
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
RedisStoreModule = RedisStoreModule_1 = __decorate([
|
|
47
|
+
(0, common_1.Module)({})
|
|
48
|
+
], RedisStoreModule);
|
|
49
|
+
exports.RedisStoreModule = RedisStoreModule;
|
|
50
|
+
//# sourceMappingURL=redis.store.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.store.module.js","sourceRoot":"","sources":["../../src/store/redis.store.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,2CAAuD;AAEvD,uCAAqD;AAGrD,+DAA0D;AAE1D,uDAAkD;AAG3C,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,OAAgC;QAC9C,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAC1C,MAAM,YAAY,GAAG,GAAG,qBAAqB,GAAG,uBAAS,CAAC,iCAAiC,EAAE,CAAC;QAC9F,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,kBAAgB;YACxB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAS,CAAC,YAAY;oBAC/B,UAAU,EAAE,CAAO,cAAqC,EAAE,EAAE;wBAC1D,OAAO,MAAM,uCAAiB,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC;oBAChG,CAAC,CAAA;oBACD,MAAM,EAAE,CAAC,4BAAqB,CAAC;iBAChC;gBACD,EAAE,OAAO,EAAE,uBAAS,CAAC,oCAAoC,EAAE,QAAQ,EAAE,qBAAqB,EAAE;gBAC5F,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,uCAAiB,EAAE;aACvD;YACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,uCAAiB,EAAE,CAAC;SAClE,CAAC;IACJ,CAAC;CACF,CAAA;AArBY,gBAAgB;IAD5B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,gBAAgB,CAqB5B;AArBY,4CAAgB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AppConfig, ConfigProviderService, GenericObject } from '@node-c/core';
|
|
2
|
+
import { RedisClientType } from 'redis';
|
|
3
|
+
import { GetOptions, RedisTransaction, ScanOptions, SetOptions, StoreDeleteOptions } from './redis.store.definitions';
|
|
4
|
+
export declare class RedisStoreService {
|
|
5
|
+
protected configProvider: ConfigProviderService;
|
|
6
|
+
protected client: RedisClientType;
|
|
7
|
+
protected persistanceModuleName: string;
|
|
8
|
+
protected storeKey: string;
|
|
9
|
+
protected transactions: GenericObject<RedisTransaction>;
|
|
10
|
+
constructor(configProvider: ConfigProviderService, client: RedisClientType, persistanceModuleName: string);
|
|
11
|
+
static createClient(config: AppConfig, options: {
|
|
12
|
+
persistanceModuleName: string;
|
|
13
|
+
}): Promise<RedisClientType>;
|
|
14
|
+
createTransaction(): string;
|
|
15
|
+
delete(handle: string | string[], options?: StoreDeleteOptions): Promise<number>;
|
|
16
|
+
endTransaction(transactionId: string): Promise<void>;
|
|
17
|
+
get<Value = unknown>(handle: string, options?: GetOptions): Promise<Value>;
|
|
18
|
+
scan<Values = unknown[]>(handle: string, options: ScanOptions): Promise<Values>;
|
|
19
|
+
set<Entry = unknown>(handle: string, entry: Entry, options?: SetOptions): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.RedisStoreService = void 0;
|
|
25
|
+
const common_1 = require("@nestjs/common");
|
|
26
|
+
const core_1 = require("@node-c/core");
|
|
27
|
+
const redis_1 = require("redis");
|
|
28
|
+
const uuid_1 = require("uuid");
|
|
29
|
+
const definitions_1 = require("../common/definitions");
|
|
30
|
+
let RedisStoreService = class RedisStoreService {
|
|
31
|
+
constructor(configProvider, client, persistanceModuleName) {
|
|
32
|
+
this.configProvider = configProvider;
|
|
33
|
+
this.client = client;
|
|
34
|
+
this.persistanceModuleName = persistanceModuleName;
|
|
35
|
+
const { storeKey } = configProvider.config.persistance[persistanceModuleName];
|
|
36
|
+
this.storeKey = storeKey;
|
|
37
|
+
this.transactions = {};
|
|
38
|
+
}
|
|
39
|
+
static createClient(config, options) {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const { persistanceModuleName } = options;
|
|
42
|
+
const { password, host, port } = config.persistance[persistanceModuleName];
|
|
43
|
+
const client = (0, redis_1.createClient)({
|
|
44
|
+
password: password || undefined,
|
|
45
|
+
socket: { host: host || '0.0.0.0', port: port || 6379 },
|
|
46
|
+
username: 'default'
|
|
47
|
+
});
|
|
48
|
+
yield client.connect();
|
|
49
|
+
return client;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
createTransaction() {
|
|
53
|
+
const transactionId = (0, uuid_1.v4)();
|
|
54
|
+
this.transactions[transactionId] = this.client.multi();
|
|
55
|
+
return transactionId;
|
|
56
|
+
}
|
|
57
|
+
delete(handle, options) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
const { transactions } = this;
|
|
60
|
+
const { transactionId } = options || {};
|
|
61
|
+
if (transactionId) {
|
|
62
|
+
const transaction = transactions[transactionId];
|
|
63
|
+
if (!transaction) {
|
|
64
|
+
throw new core_1.ApplicationError(`[RedisStoreService][Error]: Transaction with id "${transactionId}" not found.`);
|
|
65
|
+
}
|
|
66
|
+
transactions[transactionId] = transaction.hDel(this.storeKey, handle);
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
return yield this.client.hDel(this.storeKey, handle);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
endTransaction(transactionId) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
const { transactions } = this;
|
|
75
|
+
const transaction = transactions[transactionId];
|
|
76
|
+
if (!transaction) {
|
|
77
|
+
throw new core_1.ApplicationError(`[RedisStoreService][Error]: Transaction with id "${transactionId}" not found.`);
|
|
78
|
+
}
|
|
79
|
+
yield transaction.exec();
|
|
80
|
+
delete transactions[transactionId];
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
get(handle, options) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
const { parseToJSON } = options || {};
|
|
86
|
+
const value = yield this.client.hGet(this.storeKey, handle);
|
|
87
|
+
return parseToJSON && typeof value === 'string' ? JSON.parse(value) : value;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
scan(handle, options) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
const { client, storeKey } = this;
|
|
93
|
+
const { count, cursor: optCursor, parseToJSON, scanAll, withValues } = options;
|
|
94
|
+
const method = (typeof withValues === 'undefined' || withValues === true
|
|
95
|
+
? client.hScan.bind(client)
|
|
96
|
+
: client.hScanNoValues.bind(client));
|
|
97
|
+
let keys = [];
|
|
98
|
+
let parsedValues = [];
|
|
99
|
+
let values = [];
|
|
100
|
+
if (scanAll) {
|
|
101
|
+
let cursor = 0;
|
|
102
|
+
while (true) {
|
|
103
|
+
const { cursor: newCursor, keys: newKeys, tuples: newValues } = yield method(storeKey, 0, { count, match: handle });
|
|
104
|
+
cursor = newCursor;
|
|
105
|
+
if (newValues) {
|
|
106
|
+
values = values.concat(newValues);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
keys = keys.concat(newKeys);
|
|
110
|
+
}
|
|
111
|
+
if (cursor === 0) {
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
if (typeof count === 'undefined') {
|
|
118
|
+
throw new core_1.ApplicationError('The "count" options is required when the "findAll" options is not positive.');
|
|
119
|
+
}
|
|
120
|
+
const { keys: newKeys, tuples: newValues } = yield method(storeKey, optCursor || 0, { count, match: handle });
|
|
121
|
+
if (newValues) {
|
|
122
|
+
values = values.concat(newValues);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
keys = keys.concat(newKeys);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (parseToJSON) {
|
|
129
|
+
for (const i in values) {
|
|
130
|
+
const { value } = values[i];
|
|
131
|
+
if (typeof value === 'string') {
|
|
132
|
+
parsedValues.push(JSON.parse(value));
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
parsedValues.push(value);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
parsedValues = values.map(({ value }) => value);
|
|
140
|
+
}
|
|
141
|
+
return parsedValues;
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
set(handle, entry, options) {
|
|
145
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
+
const { transactions } = this;
|
|
147
|
+
const { transactionId } = options || {};
|
|
148
|
+
const valueToSet = typeof entry !== 'string' ? JSON.stringify(entry) : entry;
|
|
149
|
+
if (transactionId) {
|
|
150
|
+
const transaction = transactions[transactionId];
|
|
151
|
+
if (!transaction) {
|
|
152
|
+
throw new core_1.ApplicationError(`[RedisStoreService][Error]: Transaction with id "${transactionId}" not found.`);
|
|
153
|
+
}
|
|
154
|
+
transactions[transactionId] = transaction.hSet(this.storeKey, handle, valueToSet);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const result = (yield this.client.hSet(this.storeKey, handle, valueToSet));
|
|
158
|
+
if (result !== 'OK' && result !== 1) {
|
|
159
|
+
throw new core_1.ApplicationError(`[RedisStoreService][Error]: Value not set for handle "${handle}". Result: ${result}`);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
RedisStoreService = __decorate([
|
|
165
|
+
(0, common_1.Injectable)(),
|
|
166
|
+
__param(1, (0, common_1.Inject)(definitions_1.Constants.REDIS_CLIENT)),
|
|
167
|
+
__param(2, (0, common_1.Inject)(definitions_1.Constants.REDIS_CLIENT_PERSISTANCE_MODULE_NAME)),
|
|
168
|
+
__metadata("design:paramtypes", [core_1.ConfigProviderService, Object, String])
|
|
169
|
+
], RedisStoreService);
|
|
170
|
+
exports.RedisStoreService = RedisStoreService;
|
|
171
|
+
//# sourceMappingURL=redis.store.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.store.service.js","sourceRoot":"","sources":["../../src/store/redis.store.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,uCAMsB;AAEtB,iCAAsD;AACtD,+BAAkC;AAWlC,uDAAkD;AAI3C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAI5B,YAEY,cAAqC,EAGrC,MAAuB,EAEvB,qBAA6B;QAL7B,mBAAc,GAAd,cAAc,CAAuB;QAGrC,WAAM,GAAN,MAAM,CAAiB;QAEvB,0BAAqB,GAArB,qBAAqB,CAAQ;QAEvC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAA8B,CAAC;QAC3G,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAO,YAAY,CAAC,MAAiB,EAAE,OAA0C;;YACrF,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;YAC1C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAA8B,CAAC;YACxG,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC;gBAC1B,QAAQ,EAAE,QAAQ,IAAI,SAAS;gBAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;gBACvD,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,MAAyB,CAAC;QACnC,CAAC;KAAA;IAED,iBAAiB;QACf,MAAM,aAAa,GAAG,IAAA,SAAI,GAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACvD,OAAO,aAAa,CAAC;IACvB,CAAC;IAEK,MAAM,CAAC,MAAyB,EAAE,OAA4B;;YAClE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,IAAK,EAAyB,CAAC;YAChE,IAAI,aAAa,EAAE;gBACjB,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,EAAE;oBAChB,MAAM,IAAI,uBAAgB,CAAC,oDAAoD,aAAa,cAAc,CAAC,CAAC;iBAC7G;gBACD,YAAY,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAEtE,OAAO,CAAC,CAAC;aACV;YACD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;KAAA;IAEK,cAAc,CAAC,aAAqB;;YACxC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;YAC9B,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,EAAE;gBAChB,MAAM,IAAI,uBAAgB,CAAC,oDAAoD,aAAa,cAAc,CAAC,CAAC;aAC7G;YAED,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;KAAA;IAGK,GAAG,CAAkB,MAAc,EAAE,OAAoB;;YAC7D,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,IAAK,EAAiB,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5D,OAAO,WAAW,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,CAAC;KAAA;IAGK,IAAI,CAAqB,MAAc,EAAE,OAAoB;;YACjE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YAClC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAC/E,MAAM,MAAM,GAAG,CAAC,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,IAAI;gBACtE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC3B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAqC,CAAC;YAC3E,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,YAAY,GAAc,EAAE,CAAC;YACjC,IAAI,MAAM,GAAuC,EAAE,CAAC;YACpD,IAAI,OAAO,EAAE;gBACX,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,OAAO,IAAI,EAAE;oBACX,MAAM,EACJ,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,SAAS,EAClB,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACxD,MAAM,GAAG,SAAS,CAAC;oBACnB,IAAI,SAAS,EAAE;wBACb,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;qBACnC;yBAAM;wBACL,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAC;qBAC9B;oBACD,IAAI,MAAM,KAAK,CAAC,EAAE;wBAChB,MAAM;qBACP;iBACF;aACF;iBAAM;gBACL,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;oBAChC,MAAM,IAAI,uBAAgB,CAAC,6EAA6E,CAAC,CAAC;iBAC3G;gBACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9G,IAAI,SAAS,EAAE;oBACb,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;iBACnC;qBAAM;oBACL,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAC;iBAC9B;aACF;YACD,IAAI,WAAW,EAAE;gBACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;oBACtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBAC7B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBACrC,SAAS;qBACV;oBACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC1B;aACF;iBAAM;gBACL,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;aACjD;YACD,OAAO,YAAsB,CAAC;QAChC,CAAC;KAAA;IAEK,GAAG,CAAkB,MAAc,EAAE,KAAY,EAAE,OAAoB;;YAC3E,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,IAAK,EAAiB,CAAC;YACxD,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7E,IAAI,aAAa,EAAE;gBACjB,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,EAAE;oBAChB,MAAM,IAAI,uBAAgB,CAAC,oDAAoD,aAAa,cAAc,CAAC,CAAC;iBAC7G;gBACD,YAAY,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;gBAClF,OAAO;aACR;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAY,CAAC;YACtF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,CAAC,EAAE;gBACnC,MAAM,IAAI,uBAAgB,CAAC,yDAAyD,MAAM,cAAc,MAAM,EAAE,CAAC,CAAC;aACnH;QACH,CAAC;KAAA;CACF,CAAA;AA5IY,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAQR,WAAA,IAAA,eAAM,EAAC,uBAAS,CAAC,YAAY,CAAC,CAAA;IAG9B,WAAA,IAAA,eAAM,EAAC,uBAAS,CAAC,oCAAoC,CAAC,CAAA;qCAJ7B,4BAAqB;GANtC,iBAAiB,CA4I7B;AA5IY,8CAAiB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@node-c/persistance-redis",
|
|
3
|
+
"version": "1.0.0-alpha1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "tsc -p tsconfig.build.json",
|
|
8
|
+
"check-types": "tsc -p tsconfig.build.json --noEmit",
|
|
9
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
10
|
+
"publish-package": "rm -rf dist/* && rm -f *.tsbuildinfo && npm run build && npm publish --access public",
|
|
11
|
+
"test": "vitest --config src/vitest.config.ts",
|
|
12
|
+
"test:coverage": "vitest --config src/vitest.config.ts --coverage"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@nestjs/common": "^10.4.9",
|
|
16
|
+
"class-validator": "^0.14.1",
|
|
17
|
+
"immutable": "^5.0.3",
|
|
18
|
+
"ramda": "^0.30.1",
|
|
19
|
+
"redis": "^4.7.0",
|
|
20
|
+
"uuid": "^11.0.5"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@nestjs/testing": "^10.4.15"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@node-c/core": "^1.0.0-alpha1"
|
|
27
|
+
}
|
|
28
|
+
}
|