@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.
Files changed (83) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +4 -0
  3. package/coverage/base.css +224 -0
  4. package/coverage/block-navigation.js +87 -0
  5. package/coverage/clover.xml +573 -0
  6. package/coverage/common/definitions/common.constants.ts.html +121 -0
  7. package/coverage/common/definitions/index.html +131 -0
  8. package/coverage/common/definitions/index.ts.html +88 -0
  9. package/coverage/coverage-final.json +13 -0
  10. package/coverage/entityService/index.html +131 -0
  11. package/coverage/entityService/index.ts.html +91 -0
  12. package/coverage/entityService/redis.entity.service.ts.html +439 -0
  13. package/coverage/favicon.png +0 -0
  14. package/coverage/index.html +176 -0
  15. package/coverage/module/index.html +131 -0
  16. package/coverage/module/index.ts.html +91 -0
  17. package/coverage/module/redis.module.ts.html +169 -0
  18. package/coverage/prettify.css +1 -0
  19. package/coverage/prettify.js +2 -0
  20. package/coverage/repository/index.html +146 -0
  21. package/coverage/repository/index.ts.html +94 -0
  22. package/coverage/repository/redis.repository.module.ts.html +181 -0
  23. package/coverage/repository/redis.repository.service.ts.html +763 -0
  24. package/coverage/sort-arrow-sprite.png +0 -0
  25. package/coverage/sorter.js +196 -0
  26. package/coverage/store/index.html +146 -0
  27. package/coverage/store/index.ts.html +94 -0
  28. package/coverage/store/redis.store.module.ts.html +181 -0
  29. package/coverage/store/redis.store.service.ts.html +586 -0
  30. package/dist/common/definitions/common.constants.d.ts +7 -0
  31. package/dist/common/definitions/common.constants.js +12 -0
  32. package/dist/common/definitions/common.constants.js.map +1 -0
  33. package/dist/common/definitions/index.d.ts +1 -0
  34. package/dist/common/definitions/index.js +18 -0
  35. package/dist/common/definitions/index.js.map +1 -0
  36. package/dist/entityService/index.d.ts +2 -0
  37. package/dist/entityService/index.js +19 -0
  38. package/dist/entityService/index.js.map +1 -0
  39. package/dist/entityService/redis.entity.service.d.ts +16 -0
  40. package/dist/entityService/redis.entity.service.definitions.d.ts +19 -0
  41. package/dist/entityService/redis.entity.service.definitions.js +3 -0
  42. package/dist/entityService/redis.entity.service.definitions.js.map +1 -0
  43. package/dist/entityService/redis.entity.service.js +121 -0
  44. package/dist/entityService/redis.entity.service.js.map +1 -0
  45. package/dist/index.d.ts +5 -0
  46. package/dist/index.js +22 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/module/index.d.ts +2 -0
  49. package/dist/module/index.js +19 -0
  50. package/dist/module/index.js.map +1 -0
  51. package/dist/module/redis.module.d.ts +5 -0
  52. package/dist/module/redis.module.definitions.d.ts +14 -0
  53. package/dist/module/redis.module.definitions.js +3 -0
  54. package/dist/module/redis.module.definitions.js.map +1 -0
  55. package/dist/module/redis.module.js +27 -0
  56. package/dist/module/redis.module.js.map +1 -0
  57. package/dist/repository/index.d.ts +3 -0
  58. package/dist/repository/index.js +20 -0
  59. package/dist/repository/index.js.map +1 -0
  60. package/dist/repository/redis.repository.definitions.d.ts +48 -0
  61. package/dist/repository/redis.repository.definitions.js +17 -0
  62. package/dist/repository/redis.repository.definitions.js.map +1 -0
  63. package/dist/repository/redis.repository.module.d.ts +5 -0
  64. package/dist/repository/redis.repository.module.js +42 -0
  65. package/dist/repository/redis.repository.module.js.map +1 -0
  66. package/dist/repository/redis.repository.service.d.ts +18 -0
  67. package/dist/repository/redis.repository.service.js +216 -0
  68. package/dist/repository/redis.repository.service.js.map +1 -0
  69. package/dist/store/index.d.ts +3 -0
  70. package/dist/store/index.js +20 -0
  71. package/dist/store/index.js.map +1 -0
  72. package/dist/store/redis.store.definitions.d.ts +32 -0
  73. package/dist/store/redis.store.definitions.js +3 -0
  74. package/dist/store/redis.store.definitions.js.map +1 -0
  75. package/dist/store/redis.store.module.d.ts +5 -0
  76. package/dist/store/redis.store.module.js +50 -0
  77. package/dist/store/redis.store.module.js.map +1 -0
  78. package/dist/store/redis.store.service.d.ts +20 -0
  79. package/dist/store/redis.store.service.js +171 -0
  80. package/dist/store/redis.store.service.js.map +1 -0
  81. package/package.json +28 -0
  82. package/tsconfig.build.json +9 -0
  83. 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,uCAAkG;AAElG,qDAA2C;AAC3C,0DAAkC;AAClC,iCAAuC;AACvC,+BAAkC;AAElC,iFAOwC;AAExC,uDAAkD;AAClD,oCAA6C;AAOtC,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAIjC,YACY,cAAqC,EAErC,qBAA6B,EAG7B,MAAoB,EAEpB,KAAwB;QAPxB,mBAAc,GAAd,cAAc,CAAuB;QAErC,0BAAqB,GAArB,qBAAqB,CAAQ;QAG7B,WAAM,GAAN,MAAM,CAAc;QAEpB,UAAK,GAAL,KAAK,CAAmB;QAElC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAA8B,CAAC;QACjH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE;YAChC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,OAAO,EAAE;gBACX,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC9B;SACF;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,uBAAS,CAAC,uBAAuB,CAAC;IAC5E,CAAC;IAEK,IAAI,CAA8C,OAA8B;;YACpF,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAC5D,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YACpC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;YAC5F,MAAM,iBAAiB,GAAwC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YACjG,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,OAAO,EAAE;gBACX,cAAc;oBACZ,cAAc;wBACd,WAAW;6BACR,GAAG,CAAC,KAAK,CAAC,EAAE;4BACX,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;4BAC7B,IACE,OAAO,KAAK,KAAK,WAAW;gCAC5B,OAAO,KAAK,KAAK,QAAQ;gCACzB,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,EAC3C;gCACA,OAAO,KAAK,CAAC;6BACd;4BACD,IAAI,WAAW,EAAE;gCACf,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,iBAAiB;oCACpD,yBAAyB,KAAK,+CAA+C,CAChF,CAAC;6BACH;4BACD,OAAO,GAAG,CAAC;wBACb,CAAC,CAAC;6BACD,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC1B,IAAI,CAAC,OAAO,EAAE;oBACZ,MAAM,KAAK,GAAG,OAAO,IAAI,GAAG,CAAC;oBAC7B,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;oBAChC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;iBAC1D;aACF;iBAAM,IAAI,CAAC,OAAO,EAAE;gBACnB,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,YAAY;oBAC/C,qEAAqE,CACxE,CAAC;aACH;YACD,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,cAAc,EAAE,kCAAO,iBAAiB,KAAE,OAAO,EAAE,OAAO,EAAE,UAAU,IAAG,CAAC;QACpH,CAAC;KAAA;IAEe,OAAO,CAAC,IAAY,EAAE,OAAwB;;YAC5D,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAC5D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAC7C,MAAM,GAAG,GAAG,OAAO,IAAK,EAAqB,CAAC;YAC9C,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;YACtF,MAAM,UAAU,GAAG,aAAa,IAAI,oDAAqB,CAAC,UAAU,CAAC;YACrE,IAAI,gBAAgB,GAAG,IAAI,CAAC;YAC5B,IAAI,YAAY,GAAG,mBAAS,CAAC,MAAM,CAAC,IAAK,CAAC,CAAC,IAAI,EAA6B,CAAC;YAC7E,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;gBACpC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gBACvC,MAAM,WAAW,GAAG,CAAC,CACnB,OAAO,KAAK,KAAK,WAAW;oBAC5B,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC5C,OAAO,KAAK,KAAK,QAAQ,CAC1B,CAAC;gBACF,IAAI,SAAS,EAAE;oBACb,IAAI,WAAW,EAAE;wBACf,cAAc,IAAI,GAAG,KAAK,EAAE,CAAC;wBAC7B,SAAS;qBACV;oBACD,IAAI,gBAAgB,EAAE;wBACpB,gBAAgB,GAAG,KAAK,CAAC;qBAC1B;oBACD,IAAI,CAAC,mBAAmB,EAAE;wBACxB,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,uBAAuB;4BAC1D,+CAA+C,UAAU,gDAAgD,CAC5G,CAAC;qBACH;oBACD,IAAI,IAAI,KAAK,qDAAsB,CAAC,OAAO,EAAE;wBAC3C,IAAI,eAAe,GACjB,CAAC,MAAM,KAAK,CAAC,GAAG,CAAS,GAAG,UAAU,GAAG,cAAc,YAAY,cAAc,GAAG,UAAU,EAAE,EAAE;4BAChG,WAAW,EAAE,IAAI;yBAClB,CAAC,CAAC,IAAI,CAAC,CAAC;wBACX,eAAe,EAAE,CAAC;wBAClB,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,cAAc,YAAY,cAAc,GAAG,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;wBAC1G,YAAY,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC;wBAC3C,cAAc,IAAI,GAAG,eAAe,GAAG,cAAc,EAAE,CAAC;wBACxD,SAAS;qBACV;oBACD,IAAI,IAAI,KAAK,qDAAsB,CAAC,MAAM,EAAE;wBAC1C,IAAI,QAAQ,GAAG,IAAA,SAAI,GAAE,CAAC;wBACtB,IAAI,cAAc,KAAK,GAAG,EAAE;4BAC1B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;yBACxC;wBACD,YAAY,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;wBACpC,cAAc,IAAI,GAAG,QAAQ,GAAG,cAAc,EAAE,CAAC;wBACjD,SAAS;qBACV;oBACD,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,uBAAuB;wBAC1D,sBAAsB,IAAI,mBAAmB,UAAU,EAAE,CAC5D,CAAC;iBACH;gBACD,IAAI,CAAC,WAAW,EAAE;oBAChB,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,uBAAuB;wBAC1D,mDAAmD,UAAU,EAAE,CAClE,CAAC;iBACH;gBACD,cAAc,IAAI,GAAG,KAAK,EAAE,CAAC;aAC9B;YACD,IAAI,WAAW,EAAE;gBACf,MAAM,gBAAgB,GAAG,MAAM,IAAA,0BAAQ,EAAC,IAA+B,CAAC,CAAC;gBACzE,IAAI,gBAAgB,CAAC,MAAM,EAAE;oBAC3B,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,wBAAwB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CAAC;iBACH;aACF;YAED,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9E,IAAI,UAAU,KAAK,oDAAqB,CAAC,SAAS,IAAI,gBAAgB,EAAE;gBACtE,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,CAAqB,cAAc,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClG,IAAI,aAAa,EAAE;oBACjB,IAAI,UAAU,KAAK,oDAAqB,CAAC,UAAU,EAAE;wBACnD,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,oDAAoD,cAAc,GAAG,CAC3G,CAAC;qBACH;oBACD,IAAI,UAAU,KAAK,oDAAqB,CAAC,MAAM,EAAE;wBAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAA4B,CAAC;wBAC1E,YAAY,GAAG,IAAA,sBAAc,EAAC,YAAY,EAAE,YAAY,CAAC,CAAC;qBAC3D;yBAAM;wBACL,MAAM,IAAI,uBAAgB,CACxB,2BAA2B,UAAU,sBAAsB;4BACzD,kBAAkB,UAAU,4BAA4B,CAC3D,CAAC;qBACH;iBACF;aACF;YACD,OAAO,EAAE,IAAI,EAAE,YAAiC,EAAE,cAAc,EAAE,CAAC;QACrE,CAAC;KAAA;IAEK,IAAI,CACR,IAAuB,EACvB,OAAqB;;YAErB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAC/C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YACpC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO,IAAK,EAAkB,CAAC;YACxF,MAAM,UAAU,GAAG,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,SAAS,EAAE;gBACb,MAAM,cAAc,GAAmB;oBACrC,UAAU,EAAE,oDAAqB,CAAC,SAAS;oBAC3C,QAAQ,EAAE,IAAI;iBACf,CAAC;gBACF,MAAM,UAAU,GAAa,EAAE,CAAC;gBAChC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;oBAC1B,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;iBACrF;gBACD,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;gBAClD,OAAO,UAA0B,CAAC;aACnC;YACD,MAAM,cAAc,GAAmB;gBACrC,mBAAmB,EAAE,IAAI;gBACzB,UAAU;gBACV,QAAQ,EAAE,IAAI;aACf,CAAC;YACF,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;gBAC1B,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;gBACpG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,EAAE,EAAE,eAAe,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;gBACvG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aAC/B;YACD,OAAO,OAAuB,CAAC;QACjC,CAAC;KAAA;CACF,CAAA;AAvMY,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,uBAAS,CAAC,oCAAoC,CAAC,CAAA;IAEtD,WAAA,IAAA,eAAM,EAAC,uBAAS,CAAC,uBAAuB,CAAC,CAAA;qCAHhB,4BAAqB,kBAO9B,yBAAiB;GAZzB,sBAAsB,CAuMlC;AAvMY,wDAAsB"}
@@ -0,0 +1,3 @@
1
+ export * from './redis.store.definitions';
2
+ export * from './redis.store.module';
3
+ export * from './redis.store.service';
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=redis.store.definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.store.definitions.js","sourceRoot":"","sources":["../../src/store/redis.store.definitions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { RedisStoreModuleOptions } from './redis.store.definitions';
3
+ export declare class RedisStoreModule {
4
+ static register(options: RedisStoreModuleOptions): DynamicModule;
5
+ }
@@ -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":"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"}
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
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src"
6
+ },
7
+ "include": ["src"],
8
+ "exclude": ["node_modules", "dist", "src/**/*/*.spec.ts", "src/*.spec.ts", "src/vitest.config.ts"]
9
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src"
6
+ },
7
+ "include": ["src"],
8
+ "exclude": ["node_modules", "dist"]
9
+ }