lemon-core 3.1.1 → 3.1.2

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/README.md +2 -1
  2. package/dist/controllers/dummy-controller.d.ts +1 -1
  3. package/dist/controllers/general-api-controller.d.ts +1 -1
  4. package/dist/controllers/general-api-controller.js.map +1 -1
  5. package/dist/controllers/general-controller.d.ts +1 -1
  6. package/dist/cores/core-services.d.ts +1 -2
  7. package/dist/cores/core-services.js +0 -25
  8. package/dist/cores/core-services.js.map +1 -1
  9. package/dist/cores/dynamo/dynamo-query-service.d.ts +1 -1
  10. package/dist/cores/dynamo/dynamo-scan-service.d.ts +1 -1
  11. package/dist/cores/dynamo/dynamo-service.d.ts +1 -1
  12. package/dist/cores/elastic/elastic6-query-service.d.ts +1 -1
  13. package/dist/cores/elastic/elastic6-service.d.ts +1 -1
  14. package/dist/cores/index.d.ts +1 -1
  15. package/dist/cores/index.js +1 -1
  16. package/dist/cores/index.js.map +1 -1
  17. package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -1
  18. package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +1 -1
  19. package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
  20. package/dist/cores/lambda/lambda-handler.d.ts +2 -1
  21. package/dist/cores/lambda/lambda-handler.js.map +1 -1
  22. package/dist/cores/lambda/lambda-notification-handler.d.ts +1 -1
  23. package/dist/cores/lambda/lambda-sns-handler.d.ts +1 -1
  24. package/dist/cores/lambda/lambda-sqs-handler.d.ts +1 -1
  25. package/dist/cores/lambda/lambda-web-handler.d.ts +2 -2
  26. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  27. package/dist/cores/protocol/protocol-service.d.ts +1 -1
  28. package/dist/cores/storage/model-manager.d.ts +2 -1
  29. package/dist/cores/storage/model-manager.js.map +1 -1
  30. package/dist/cores/storage/proxy-storage-service.d.ts +2 -71
  31. package/dist/cores/storage/proxy-storage-service.js +4 -7
  32. package/dist/cores/storage/proxy-storage-service.js.map +1 -1
  33. package/dist/cores/storage/storage-service.d.ts +5 -17
  34. package/dist/cores/storage/storage-service.js +3 -0
  35. package/dist/cores/storage/storage-service.js.map +1 -1
  36. package/dist/engine/engine.d.ts +1 -1
  37. package/dist/engine/engine.js.map +1 -1
  38. package/dist/extended/abstract-service.d.ts +8 -1
  39. package/dist/extended/abstract-service.js +13 -4
  40. package/dist/extended/abstract-service.js.map +1 -1
  41. package/package.json +3 -2
  42. package/dist/cores/api-service.d.ts +0 -239
  43. package/dist/cores/api-service.js +0 -674
  44. package/dist/cores/api-service.js.map +0 -1
  45. package/dist/cores/cache-service.d.ts +0 -424
  46. package/dist/cores/cache-service.js +0 -948
  47. package/dist/cores/cache-service.js.map +0 -1
  48. package/dist/cores/core-types.d.ts +0 -398
  49. package/dist/cores/core-types.js +0 -15
  50. package/dist/cores/core-types.js.map +0 -1
  51. package/dist/cores/dynamo-query-service.d.ts +0 -52
  52. package/dist/cores/dynamo-query-service.js +0 -127
  53. package/dist/cores/dynamo-query-service.js.map +0 -1
  54. package/dist/cores/dynamo-scan-service.d.ts +0 -70
  55. package/dist/cores/dynamo-scan-service.js +0 -164
  56. package/dist/cores/dynamo-scan-service.js.map +0 -1
  57. package/dist/cores/dynamo-service.d.ts +0 -192
  58. package/dist/cores/dynamo-service.js +0 -525
  59. package/dist/cores/dynamo-service.js.map +0 -1
  60. package/dist/cores/elastic6-query-service.d.ts +0 -104
  61. package/dist/cores/elastic6-query-service.js +0 -510
  62. package/dist/cores/elastic6-query-service.js.map +0 -1
  63. package/dist/cores/elastic6-service.d.ts +0 -273
  64. package/dist/cores/elastic6-service.js +0 -903
  65. package/dist/cores/elastic6-service.js.map +0 -1
  66. package/dist/cores/hangul-service.d.ts +0 -102
  67. package/dist/cores/hangul-service.js +0 -205
  68. package/dist/cores/hangul-service.js.map +0 -1
  69. package/dist/cores/http-storage-service.d.ts +0 -22
  70. package/dist/cores/http-storage-service.js +0 -129
  71. package/dist/cores/http-storage-service.js.map +0 -1
  72. package/dist/cores/model-manager.d.ts +0 -93
  73. package/dist/cores/model-manager.js +0 -192
  74. package/dist/cores/model-manager.js.map +0 -1
  75. package/dist/cores/proxy-storage-service.d.ts +0 -573
  76. package/dist/cores/proxy-storage-service.js +0 -913
  77. package/dist/cores/proxy-storage-service.js.map +0 -1
  78. package/dist/cores/redis-storage-service.d.ts +0 -183
  79. package/dist/cores/redis-storage-service.js +0 -391
  80. package/dist/cores/redis-storage-service.js.map +0 -1
  81. package/dist/cores/storage-service.d.ts +0 -170
  82. package/dist/cores/storage-service.js +0 -389
  83. package/dist/cores/storage-service.js.map +0 -1
@@ -1,192 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AbstractManager = void 0;
13
- /**
14
- * `model-manager.ts`
15
- * - base model manager
16
- *
17
- * @author Tim Hong <tim@lemoncloud.io>
18
- * @date 2020-06-05 initial version
19
- *
20
- * @copyright (C) 2020 LemonCloud Co Ltd. - All Rights Reserved.
21
- */
22
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
23
- const engine_1 = require("../engine/");
24
- const proxy_storage_service_1 = require("./proxy-storage-service");
25
- const NS = engine_1.$U.NS('MMGR', 'cyan'); // default namespace name
26
- /**
27
- * class: `AbstractManager`
28
- * - abstract model manager to cover all models which extend CoreModel.
29
- * - feature to handle 'name' like unique value in same type.
30
- * - typed-storage based.
31
- * @abstract
32
- */
33
- class AbstractManager extends proxy_storage_service_1.GeneralModelFilter {
34
- /**
35
- * default constructor
36
- * @param type model type string
37
- * @param parent service instance which implements StorageMakeable interface
38
- * @param fields list of model field names
39
- * @param uniqueField (optional) unique field name
40
- * @param ns (optional) namespace to be printed. pass NULL to suppress all logs.
41
- * global NS value will be used if not specified or undefined.
42
- */
43
- constructor(type, parent, fields, uniqueField, ns) {
44
- super(fields);
45
- /**
46
- * hello of this service-identity
47
- */
48
- this.hello = () => this.storage.hello();
49
- this.NS = ns === undefined ? NS : ns;
50
- this.parent = parent;
51
- this.storage = parent.makeStorageService(type, fields, this);
52
- this.$unique = uniqueField ? this.storage.makeUniqueFieldManager(uniqueField) : null;
53
- }
54
- /**
55
- * type getter
56
- */
57
- get type() {
58
- return this.storage.type;
59
- }
60
- /**
61
- * callback invoked just before the model is saved
62
- * - override this to customize default behavior to perform model validation, cleansing or normalization
63
- * @param model model object
64
- * @param origin original model currently in the storage
65
- */
66
- onBeforeSave(model, origin) {
67
- return super.onBeforeSave(model, origin);
68
- }
69
- /**
70
- * default implementation of 'preparing' model
71
- * - prepare model w/ safe creation
72
- * @param id model-id to prepare
73
- * @param $def default model value
74
- * @param isCreate (optional) flag to allow creating a new model (default: true)
75
- */
76
- prepare(id, $def, isCreate = true) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- if (!id)
79
- throw new Error(`404 NOT FOUND - id is not valid!`);
80
- // if 'isCreate' flag is set, read existing model or create initial model by calling abstract method 'prepareDefault'
81
- if (isCreate)
82
- return this.storage.readOrCreate(id, this.prepareDefault($def));
83
- // otherwise just try to read model and throw 404 if it does not exist
84
- return this.storage.read(id).catch(e => {
85
- if (`${e.message || e}`.startsWith('404 NOT FOUND'))
86
- e = new Error(`404 NOT FOUND - ${this.type}:${id}`);
87
- throw e;
88
- });
89
- });
90
- }
91
- /**
92
- * default implementation of 'inserting' model
93
- * @param model model object
94
- */
95
- insert(model) {
96
- return __awaiter(this, void 0, void 0, function* () {
97
- this.NS && (0, engine_1._inf)(this.NS, `insert(${this.type})...`);
98
- if (!model)
99
- throw new Error(`@model (${this.type}-model) is required!`);
100
- const $def = this.prepareDefault(null);
101
- const created = yield this.storage.insert($def);
102
- const id = `${(created && created.id) || ''}`;
103
- if (!id)
104
- throw new Error('.id (string) is missing - insert() failed!');
105
- this.NS && (0, engine_1._log)(this.NS, `> model.base =`, engine_1.$U.json(model));
106
- const $saves = Object.assign({}, model); // clone
107
- delete $saves.id; // ensure there is no 'id' field
108
- const saved = yield this.storage.save(id, $saves);
109
- this.NS && (0, engine_1._log)(this.NS, `> model.saved =`, engine_1.$U.json(saved));
110
- return Object.assign(Object.assign(Object.assign({}, created), saved), { id });
111
- });
112
- }
113
- /**
114
- * default implementation of 'retrieving' model
115
- * @param id model id
116
- */
117
- retrieve(id) {
118
- return __awaiter(this, void 0, void 0, function* () {
119
- this.NS && (0, engine_1._inf)(this.NS, `retrieve(${this.type}/${id})...`);
120
- if (!id)
121
- throw new Error(`@id is required!`);
122
- return this.storage.read(id).catch(e => {
123
- if (`${e.message}`.startsWith('404 NOT FOUND'))
124
- e = new Error(`404 NOT FOUND - ${this.type}:${id}`);
125
- throw e;
126
- });
127
- });
128
- }
129
- /**
130
- * default implementation of updating model
131
- * @param id model id
132
- * @param model model object
133
- * @param $inc (optional) incremental set
134
- */
135
- update(id, model, $inc) {
136
- return __awaiter(this, void 0, void 0, function* () {
137
- this.NS && (0, engine_1._inf)(this.NS, `update(${this.type}/${id})...`);
138
- return this._updateModel(id, model, $inc, false);
139
- });
140
- }
141
- /**
142
- * default implementation of 'upserting' model
143
- * @param id model id
144
- * @param model model object
145
- * @param $inc (optional) incremental set
146
- */
147
- updateOrCreate(id, model, $inc) {
148
- return __awaiter(this, void 0, void 0, function* () {
149
- this.NS && (0, engine_1._inf)(this.NS, `updateOrCreate(${this.type}/${id})...`);
150
- return this._updateModel(id, model, $inc, true);
151
- });
152
- }
153
- /**
154
- * default implementation of deleting model
155
- * @param id model id
156
- * @param destroy flag for hard delete or soft delete (by setting 'deletedAt' field)
157
- */
158
- delete(id, destroy = true) {
159
- return __awaiter(this, void 0, void 0, function* () {
160
- this.NS && (0, engine_1._inf)(this.NS, `delete(${this.type}/${id})...`);
161
- if (!id)
162
- throw new Error(`@id is required!`);
163
- const $org = yield this.prepare(id, null, false);
164
- this.NS && (0, engine_1._log)(this.NS, `> model.org =`, engine_1.$U.json($org));
165
- const deleted = yield this.storage.delete(id, destroy);
166
- this.NS && (0, engine_1._log)(this.NS, `> model.deleted =`, engine_1.$U.json(deleted));
167
- return Object.assign(Object.assign(Object.assign({}, $org), deleted), { id });
168
- });
169
- }
170
- /**
171
- * internal implementation for 'update' and 'updateOrCreate'
172
- * @param id model id
173
- * @param model model object
174
- * @param $inc (optional) incremental set
175
- * @param isCreate (optional) flag to allow creating a new model (default: true)
176
- * @private
177
- */
178
- _updateModel(id, model, $inc, isCreate = true) {
179
- return __awaiter(this, void 0, void 0, function* () {
180
- if (!id)
181
- throw new Error(`@id is required!`);
182
- const $org = yield this.prepare(id, null, isCreate);
183
- this.NS && (0, engine_1._log)(this.NS, `> model.org =`, engine_1.$U.json($org));
184
- const $ups = Object.assign({}, model);
185
- const updated = yield this.storage.update(id, $ups, $inc);
186
- this.NS && (0, engine_1._log)(this.NS, `> model.updated =`, engine_1.$U.json(updated));
187
- return Object.assign(Object.assign(Object.assign({}, $org), updated), { id });
188
- });
189
- }
190
- }
191
- exports.AbstractManager = AbstractManager;
192
- //# sourceMappingURL=model-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-manager.js","sourceRoot":"","sources":["../../src/cores/model-manager.ts"],"names":[],"mappings":"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"}