@fjell/lib-sequelize 4.3.4 → 4.4.1

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 (150) hide show
  1. package/dist/cjs/AggregationBuilder.cjs +31 -0
  2. package/dist/cjs/Coordinate.cjs +37 -0
  3. package/dist/cjs/Definition.cjs +46 -0
  4. package/dist/cjs/EventCoordinator.cjs +35 -0
  5. package/dist/cjs/Instance.cjs +40 -0
  6. package/dist/cjs/KeyMaster.cjs +91 -0
  7. package/dist/cjs/Operations.cjs +29 -0
  8. package/dist/cjs/Options.cjs +39 -0
  9. package/dist/cjs/QueryBuilder.cjs +188 -0
  10. package/dist/cjs/ReferenceBuilder.cjs +34 -0
  11. package/dist/cjs/RowProcessor.cjs +41 -0
  12. package/dist/cjs/contained/Instance.cjs +21 -0
  13. package/dist/cjs/contained/index.cjs +10 -0
  14. package/dist/cjs/index.cjs +23 -0
  15. package/dist/cjs/logger.cjs +10 -0
  16. package/dist/cjs/ops/all.cjs +62 -0
  17. package/dist/cjs/ops/create.cjs +23 -0
  18. package/dist/cjs/ops/find.cjs +45 -0
  19. package/dist/cjs/ops/get.cjs +49 -0
  20. package/dist/cjs/ops/one.cjs +26 -0
  21. package/dist/cjs/ops/remove.cjs +72 -0
  22. package/dist/cjs/ops/update.cjs +59 -0
  23. package/dist/cjs/primary/Instance.cjs +31 -0
  24. package/dist/cjs/primary/index.cjs +10 -0
  25. package/dist/cjs/util/general.cjs +52 -0
  26. package/dist/es/AggregationBuilder.js +27 -0
  27. package/dist/es/Coordinate.js +13 -0
  28. package/dist/es/Definition.js +23 -0
  29. package/dist/es/EventCoordinator.js +30 -0
  30. package/dist/es/Instance.js +17 -0
  31. package/dist/es/KeyMaster.js +86 -0
  32. package/dist/es/Operations.js +25 -0
  33. package/dist/es/Options.js +16 -0
  34. package/dist/{src → es}/QueryBuilder.js +67 -46
  35. package/dist/es/ReferenceBuilder.js +30 -0
  36. package/dist/es/RowProcessor.js +37 -0
  37. package/dist/es/contained/Instance.js +17 -0
  38. package/dist/es/contained/index.js +2 -0
  39. package/dist/es/index.js +10 -0
  40. package/dist/es/logger.js +6 -0
  41. package/dist/{src → es}/ops/all.js +25 -14
  42. package/dist/es/ops/create.js +19 -0
  43. package/dist/es/ops/find.js +41 -0
  44. package/dist/es/ops/get.js +45 -0
  45. package/dist/es/ops/one.js +22 -0
  46. package/dist/es/ops/remove.js +68 -0
  47. package/dist/es/ops/update.js +55 -0
  48. package/dist/es/primary/Instance.js +27 -0
  49. package/dist/es/primary/index.js +2 -0
  50. package/dist/es/util/general.js +47 -0
  51. package/dist/index.cjs +810 -0
  52. package/dist/index.cjs.map +1 -0
  53. package/dist/types/AggregationBuilder.d.ts +4 -0
  54. package/dist/{src → types}/Definition.d.ts +2 -2
  55. package/dist/{src → types}/Instance.d.ts +2 -2
  56. package/dist/{src → types}/KeyMaster.d.ts +1 -2
  57. package/dist/{src → types}/Operations.d.ts +4 -4
  58. package/dist/{src → types}/Options.d.ts +15 -4
  59. package/dist/types/ReferenceBuilder.d.ts +3 -0
  60. package/dist/types/RowProcessor.d.ts +5 -0
  61. package/dist/{src → types}/contained/Instance.d.ts +2 -1
  62. package/dist/types/logger.d.ts +2 -0
  63. package/dist/types/ops/all.d.ts +5 -0
  64. package/dist/{src → types}/ops/create.d.ts +5 -4
  65. package/dist/types/ops/find.d.ts +5 -0
  66. package/dist/{src → types}/ops/get.d.ts +2 -1
  67. package/dist/types/ops/one.d.ts +5 -0
  68. package/dist/types/ops/remove.d.ts +5 -0
  69. package/dist/types/ops/update.d.ts +5 -0
  70. package/dist/{src → types}/primary/Instance.d.ts +2 -1
  71. package/dist/types/util/general.d.ts +4 -0
  72. package/package.json +45 -35
  73. package/dist/src/Coordinate.js +0 -7
  74. package/dist/src/Coordinate.js.map +0 -1
  75. package/dist/src/Definition.js +0 -16
  76. package/dist/src/Definition.js.map +0 -1
  77. package/dist/src/EventCoordinator.js +0 -56
  78. package/dist/src/EventCoordinator.js.map +0 -1
  79. package/dist/src/Instance.js +0 -14
  80. package/dist/src/Instance.js.map +0 -1
  81. package/dist/src/KeyMaster.js +0 -58
  82. package/dist/src/KeyMaster.js.map +0 -1
  83. package/dist/src/Operations.js +0 -22
  84. package/dist/src/Operations.js.map +0 -1
  85. package/dist/src/Options.js +0 -16
  86. package/dist/src/Options.js.map +0 -1
  87. package/dist/src/QueryBuilder.js.map +0 -1
  88. package/dist/src/RowProcessor.d.ts +0 -3
  89. package/dist/src/RowProcessor.js +0 -11
  90. package/dist/src/RowProcessor.js.map +0 -1
  91. package/dist/src/contained/Instance.js +0 -14
  92. package/dist/src/contained/Instance.js.map +0 -1
  93. package/dist/src/contained/index.js +0 -2
  94. package/dist/src/contained/index.js.map +0 -1
  95. package/dist/src/index.js +0 -8
  96. package/dist/src/index.js.map +0 -1
  97. package/dist/src/logger.d.ts +0 -2
  98. package/dist/src/logger.js +0 -4
  99. package/dist/src/logger.js.map +0 -1
  100. package/dist/src/ops/all.d.ts +0 -4
  101. package/dist/src/ops/all.js.map +0 -1
  102. package/dist/src/ops/create.js +0 -14
  103. package/dist/src/ops/create.js.map +0 -1
  104. package/dist/src/ops/find.d.ts +0 -4
  105. package/dist/src/ops/find.js +0 -26
  106. package/dist/src/ops/find.js.map +0 -1
  107. package/dist/src/ops/get.js +0 -36
  108. package/dist/src/ops/get.js.map +0 -1
  109. package/dist/src/ops/one.d.ts +0 -4
  110. package/dist/src/ops/one.js +0 -17
  111. package/dist/src/ops/one.js.map +0 -1
  112. package/dist/src/ops/remove.d.ts +0 -5
  113. package/dist/src/ops/remove.js +0 -56
  114. package/dist/src/ops/remove.js.map +0 -1
  115. package/dist/src/ops/update.d.ts +0 -4
  116. package/dist/src/ops/update.js +0 -49
  117. package/dist/src/ops/update.js.map +0 -1
  118. package/dist/src/primary/Instance.js +0 -17
  119. package/dist/src/primary/Instance.js.map +0 -1
  120. package/dist/src/primary/index.js +0 -2
  121. package/dist/src/primary/index.js.map +0 -1
  122. package/eslint.config.mjs +0 -70
  123. package/src/Coordinate.ts +0 -16
  124. package/src/Definition.ts +0 -49
  125. package/src/EventCoordinator.ts +0 -103
  126. package/src/Instance.ts +0 -45
  127. package/src/KeyMaster.ts +0 -90
  128. package/src/Operations.ts +0 -42
  129. package/src/Options.ts +0 -41
  130. package/src/QueryBuilder.ts +0 -208
  131. package/src/RowProcessor.ts +0 -23
  132. package/src/contained/Instance.ts +0 -45
  133. package/src/contained/index.ts +0 -1
  134. package/src/index.ts +0 -7
  135. package/src/logger.ts +0 -5
  136. package/src/ops/all.ts +0 -76
  137. package/src/ops/create.ts +0 -40
  138. package/src/ops/find.ts +0 -49
  139. package/src/ops/get.ts +0 -67
  140. package/src/ops/one.ts +0 -37
  141. package/src/ops/remove.ts +0 -81
  142. package/src/ops/update.ts +0 -78
  143. package/src/primary/Instance.ts +0 -41
  144. package/src/primary/index.ts +0 -1
  145. /package/dist/{src → types}/Coordinate.d.ts +0 -0
  146. /package/dist/{src → types}/EventCoordinator.d.ts +0 -0
  147. /package/dist/{src → types}/QueryBuilder.d.ts +0 -0
  148. /package/dist/{src → types}/contained/index.d.ts +0 -0
  149. /package/dist/{src → types}/index.d.ts +0 -0
  150. /package/dist/{src → types}/primary/index.d.ts +0 -0
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const core = require('@fjell/core');
6
+
7
+ const buildAggregation = async (item, aggregationDefinition, registry)=>{
8
+ const location = core.ikToLKA(item.key);
9
+ // Get the library instance from the registry using the key type array
10
+ const libraryInstance = registry.get(aggregationDefinition.kta);
11
+ if (!libraryInstance) {
12
+ throw new Error(`Library instance not found for key type array: ${aggregationDefinition.kta.join(', ')}`);
13
+ }
14
+ // Based on cardinality, use either one or all operation
15
+ if (aggregationDefinition.cardinality === 'one') {
16
+ // For one-to-one relationship, use the one operation
17
+ return libraryInstance.operations.one({}, location).then((result)=>{
18
+ item[aggregationDefinition.property] = result;
19
+ return item;
20
+ });
21
+ } else {
22
+ // For one-to-many relationship, use the all operation
23
+ return libraryInstance.operations.all({}, location).then((results)=>{
24
+ item[aggregationDefinition.property] = results;
25
+ return item;
26
+ });
27
+ }
28
+ };
29
+
30
+ exports.buildAggregation = buildAggregation;
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdncmVnYXRpb25CdWlsZGVyLmNqcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const Library = require('@fjell/lib');
6
+
7
+ function _interopNamespaceDefault(e) {
8
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
9
+ if (e) {
10
+ for (const k in e) {
11
+ if (k !== 'default') {
12
+ const d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: () => e[k]
16
+ });
17
+ }
18
+ }
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ const Library__namespace = /*#__PURE__*/_interopNamespaceDefault(Library);
25
+
26
+ const SCOPE_SEQUELIZE = 'sequelize';
27
+ const createCoordinate = (kta, scopes)=>{
28
+ const coordinate = Library__namespace.createCoordinate(kta, [
29
+ SCOPE_SEQUELIZE,
30
+ ...scopes || []
31
+ ]);
32
+ return coordinate;
33
+ };
34
+
35
+ exports.SCOPE_SEQUELIZE = SCOPE_SEQUELIZE;
36
+ exports.createCoordinate = createCoordinate;
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29vcmRpbmF0ZS5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const Library = require('@fjell/lib');
6
+ const Coordinate = require('./Coordinate.cjs');
7
+ const Options = require('./Options.cjs');
8
+ const logger$1 = require('./logger.cjs');
9
+
10
+ function _interopNamespaceDefault(e) {
11
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
12
+ if (e) {
13
+ for (const k in e) {
14
+ if (k !== 'default') {
15
+ const d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: () => e[k]
19
+ });
20
+ }
21
+ }
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ const Library__namespace = /*#__PURE__*/_interopNamespaceDefault(Library);
28
+
29
+ const logger = logger$1.default.get('lib-sequelize', 'Definition');
30
+ function createDefinition(kta, scopes, libOptions) {
31
+ logger.debug('createDefinition', {
32
+ kta,
33
+ scopes,
34
+ libOptions
35
+ });
36
+ const coordinate = Coordinate.createCoordinate(kta, scopes);
37
+ const options = Options.createOptions(libOptions);
38
+ const definition = Library__namespace.createDefinition(coordinate, options);
39
+ return {
40
+ ...definition,
41
+ options
42
+ };
43
+ }
44
+
45
+ exports.createDefinition = createDefinition;
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmaW5pdGlvbi5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ require('deepmerge');
6
+ const logger$1 = require('./logger.cjs');
7
+
8
+ const logger = logger$1.default.get("sequelize", "EventCoordinator");
9
+ //#endregion
10
+ const populateEvents = (item)=>{
11
+ const events = {
12
+ created: {
13
+ at: item.createdAt || null
14
+ },
15
+ updated: {
16
+ at: item.updatedAt || null
17
+ },
18
+ deleted: {
19
+ at: null
20
+ }
21
+ };
22
+ item.events = events;
23
+ return item;
24
+ };
25
+ const removeEvents = (item)=>{
26
+ logger.default('Removing Events', {
27
+ item
28
+ });
29
+ delete item.events;
30
+ return item;
31
+ };
32
+
33
+ exports.populateEvents = populateEvents;
34
+ exports.removeEvents = removeEvents;
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRDb29yZGluYXRvci5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const Library = require('@fjell/lib');
6
+ const Definition = require('./Definition.cjs');
7
+ const Operations = require('./Operations.cjs');
8
+
9
+ function _interopNamespaceDefault(e) {
10
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
11
+ if (e) {
12
+ for (const k in e) {
13
+ if (k !== 'default') {
14
+ const d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: () => e[k]
18
+ });
19
+ }
20
+ }
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ const Library__namespace = /*#__PURE__*/_interopNamespaceDefault(Library);
27
+
28
+ function createInstance(keyTypes, models, libOptions = {}, scopes = [], registry) {
29
+ const definition = Definition.createDefinition(keyTypes, scopes, libOptions);
30
+ const operations = Operations.createOperations(models, definition, registry);
31
+ return {
32
+ definition,
33
+ operations: Library__namespace.wrapOperations(operations, definition, registry),
34
+ models,
35
+ registry
36
+ };
37
+ }
38
+
39
+ exports.createInstance = createInstance;
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zdGFuY2UuY2pzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==
@@ -0,0 +1,91 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const logger$1 = require('./logger.cjs');
6
+
7
+ const logger = logger$1.default.get('sequelize', 'KeyMaster');
8
+ const removeKey = (item)=>{
9
+ logger.default('Removing Key', {
10
+ item
11
+ });
12
+ delete item.key;
13
+ return item;
14
+ };
15
+ // export const populateKey = <
16
+ // S extends string,
17
+ // L1 extends string = never,
18
+ // L2 extends string = never,
19
+ // L3 extends string = never,
20
+ // L4 extends string = never,
21
+ // L5 extends string = never
22
+ // >(
23
+ // item: ItemProperties<S, L1, L2, L3, L4, L5>,
24
+ // keyTypes: AllItemTypeArrays<S, L1, L2, L3, L4, L5>
25
+ // ): ItemProperties<S, L1, L2, L3, L4, L5> => {
26
+ // if (keyTypes.length === 1) {
27
+ // item.key = { kt: keyTypes[0], pk: item.id };
28
+ // delete item.id;
29
+ // } else if (keyTypes.length === 2) {
30
+ // item.key = {
31
+ // kt: keyTypes[0], pk: item.id,
32
+ // // TODO: Shouldn't this be inspecting the model to get the primary key type?
33
+ // loc: [{ kt: keyTypes[1], lk: item[keyTypes[1] + 'Id'] }],
34
+ // };
35
+ // delete item.id;
36
+ // delete item[keyTypes[1] + 'Id'];
37
+ // } else {
38
+ // throw new Error('Not implemented');
39
+ // }
40
+ // return item;
41
+ // }
42
+ const addKey = (item, keyTypes)=>{
43
+ logger.default('Adding Key', {
44
+ item
45
+ });
46
+ const key = {};
47
+ if (Array.isArray(keyTypes) && keyTypes.length > 1) {
48
+ const type = [
49
+ ...keyTypes
50
+ ];
51
+ const pkType = type.shift();
52
+ Object.assign(key, {
53
+ kt: pkType,
54
+ pk: item.id
55
+ });
56
+ // TODO: This is really just for primary items
57
+ if (type.length === 1) {
58
+ // TODO: This should be looking at the model to get the primary key of the reference item or association
59
+ const locKeyTypeId = type[0] + 'Id';
60
+ Object.assign(key, {
61
+ loc: [
62
+ {
63
+ kt: type[0],
64
+ lk: item[locKeyTypeId]
65
+ }
66
+ ]
67
+ });
68
+ } else if (type.length === 2) {
69
+ throw new Error('Not implemented');
70
+ } else if (type.length === 3) {
71
+ throw new Error('Not implemented');
72
+ } else if (type.length === 4) {
73
+ throw new Error('Not implemented');
74
+ } else if (type.length === 5) {
75
+ throw new Error('Not implemented');
76
+ }
77
+ } else {
78
+ Object.assign(key, {
79
+ kt: keyTypes[0],
80
+ pk: item.id
81
+ });
82
+ }
83
+ Object.assign(item, {
84
+ key
85
+ });
86
+ return item;
87
+ };
88
+
89
+ exports.addKey = addKey;
90
+ exports.removeKey = removeKey;
91
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5TWFzdGVyLmNqcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const all = require('./ops/all.cjs');
6
+ const create = require('./ops/create.cjs');
7
+ const find = require('./ops/find.cjs');
8
+ const get = require('./ops/get.cjs');
9
+ const one = require('./ops/one.cjs');
10
+ const remove = require('./ops/remove.cjs');
11
+ const update = require('./ops/update.cjs');
12
+
13
+ const createOperations = (models, definition, registry)=>{
14
+ const operations = {};
15
+ operations.all = all.getAllOperation(models, definition, registry);
16
+ operations.one = one.getOneOperation(models, definition, registry);
17
+ operations.create = create.getCreateOperation();
18
+ operations.update = update.getUpdateOperation(models, definition, registry);
19
+ operations.get = get.getGetOperation(models, definition, registry);
20
+ operations.remove = remove.getRemoveOperation(models, definition);
21
+ operations.find = find.getFindOperation(models, definition, registry);
22
+ operations.upsert = ()=>{
23
+ throw new Error('Not implemented');
24
+ };
25
+ return operations;
26
+ };
27
+
28
+ exports.createOperations = createOperations;
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9ucy5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const Library = require('@fjell/lib');
6
+ const deepmerge = require('deepmerge');
7
+ const general = require('./util/general.cjs');
8
+
9
+ function _interopNamespaceDefault(e) {
10
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
11
+ if (e) {
12
+ for (const k in e) {
13
+ if (k !== 'default') {
14
+ const d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: () => e[k]
18
+ });
19
+ }
20
+ }
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ const Library__namespace = /*#__PURE__*/_interopNamespaceDefault(Library);
27
+
28
+ const DEFAULT_OPTIONS = {
29
+ deleteOnRemove: false,
30
+ references: [],
31
+ aggregations: []
32
+ };
33
+ const createOptions = (libOptions)=>{
34
+ const options = Library__namespace.createOptions(libOptions);
35
+ return deepmerge(DEFAULT_OPTIONS, general.clean(options));
36
+ };
37
+
38
+ exports.createOptions = createOptions;
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3B0aW9ucy5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
@@ -0,0 +1,188 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const core = require('@fjell/core');
6
+ const sequelize = require('sequelize');
7
+ const logger$1 = require('./logger.cjs');
8
+
9
+ const logger = logger$1.default.get('sequelize', 'QueryBuilder');
10
+ const addDeleteQuery = (options, model)=>{
11
+ logger.default('Adding Delete Query', {
12
+ options
13
+ });
14
+ if (model.getAttributes().deletedAt) {
15
+ options.where['deletedAt'] = {
16
+ [sequelize.Op.eq]: null
17
+ };
18
+ } else if (model.getAttributes().isDeleted) {
19
+ options.where['isDeleted'] = {
20
+ [sequelize.Op.eq]: false
21
+ };
22
+ }
23
+ return options;
24
+ };
25
+ const addEventQueries = (options, events, model)=>{
26
+ logger.default('Adding Event Queries', {
27
+ options,
28
+ events
29
+ });
30
+ Object.keys(events).forEach((key)=>{
31
+ if (!model.getAttributes()[`${key}At`]) {
32
+ throw new Error(`Event ${key} is not supported on this model, column ${key}At not found`);
33
+ }
34
+ let whereClauses = {};
35
+ const event = events[key];
36
+ if (event.start) {
37
+ whereClauses = {
38
+ ...whereClauses,
39
+ [sequelize.Op.gte]: new Date(event.start)
40
+ };
41
+ }
42
+ if (event.end) {
43
+ whereClauses = {
44
+ ...whereClauses,
45
+ [sequelize.Op.lt]: new Date(event.end)
46
+ };
47
+ }
48
+ if (event.by) {
49
+ if (!model.getAttributes()[`${key}By`]) {
50
+ throw new Error(`Event ${key} is not supported on this model, column ${key}By not found`);
51
+ }
52
+ whereClauses = {
53
+ ...whereClauses,
54
+ [sequelize.Op.eq]: event.by
55
+ };
56
+ }
57
+ options.where[`${key}At`] = whereClauses;
58
+ });
59
+ return options;
60
+ };
61
+ // Add the references to the query
62
+ const addReferenceQueries = (options, references, model)=>{
63
+ logger.default('Adding Reference Queries', {
64
+ options,
65
+ references
66
+ });
67
+ Object.keys(references).forEach((key)=>{
68
+ logger.default('Adding Reference Query', {
69
+ key,
70
+ references
71
+ });
72
+ if (!model.getAttributes()[`${key}Id`]) {
73
+ throw new Error(`Reference ${key} is not supported on this model, column ${key}Id not found`);
74
+ }
75
+ if (core.isPriKey(references[key])) {
76
+ const priKey = references[key];
77
+ options.where[`${key}Id`] = {
78
+ [sequelize.Op.eq]: priKey.pk
79
+ };
80
+ } else if (core.isComKey(references[key])) {
81
+ throw new Error('ComKeys are not supported in Sequelize');
82
+ }
83
+ });
84
+ return options;
85
+ };
86
+ const addCompoundCondition = (options, compoundCondition, model)=>{
87
+ const where = {};
88
+ let compoundOp;
89
+ const compoundType = compoundCondition.compoundType;
90
+ if (compoundType === "AND") {
91
+ compoundOp = sequelize.Op.and;
92
+ } else {
93
+ compoundOp = sequelize.Op.or;
94
+ }
95
+ let conditions = {};
96
+ compoundCondition.conditions.forEach((condition)=>{
97
+ if (core.isCondition(condition)) {
98
+ conditions = addCondition(conditions, condition, model);
99
+ } else {
100
+ throw new Error('Nest Compound conditions not supported');
101
+ }
102
+ });
103
+ where[compoundOp] = conditions;
104
+ options.where = where;
105
+ return options;
106
+ };
107
+ const addCondition = (conditions, condition, model)=>{
108
+ let conditionOp;
109
+ const conditionColumn = condition.column;
110
+ if (!model.getAttributes()[conditionColumn]) {
111
+ throw new Error(`Condition column ${conditionColumn} not found on model ${model.name}`);
112
+ }
113
+ if (condition.operator === '==') {
114
+ conditionOp = sequelize.Op.eq;
115
+ } else if (condition.operator === '<') {
116
+ conditionOp = sequelize.Op.lt;
117
+ } else if (condition.operator === '>') {
118
+ conditionOp = sequelize.Op.gt;
119
+ } else if (condition.operator === '<=') {
120
+ conditionOp = sequelize.Op.lte;
121
+ } else if (condition.operator === '>=') {
122
+ conditionOp = sequelize.Op.gte;
123
+ } else if (condition.operator === 'in') {
124
+ conditionOp = sequelize.Op.in;
125
+ } else {
126
+ throw new Error(`Operator ${condition.operator} not supported`);
127
+ }
128
+ conditions[conditionColumn] = {
129
+ [conditionOp]: condition.value
130
+ };
131
+ return conditions;
132
+ };
133
+ const buildQuery = (itemQuery, model)=>{
134
+ logger.default('build', {
135
+ itemQuery
136
+ });
137
+ let options = {
138
+ where: {}
139
+ };
140
+ if (itemQuery.compoundCondition) {
141
+ logger.default('Adding Conditions', {
142
+ compoundCondition: itemQuery.compoundCondition
143
+ });
144
+ options = addCompoundCondition(options, itemQuery.compoundCondition, model);
145
+ }
146
+ // If the model has a deletedAt column, we need to add a delete query
147
+ if (model.getAttributes().deletedAt || model.getAttributes().isDeleted) {
148
+ options = addDeleteQuery(options, model);
149
+ }
150
+ if (itemQuery.refs) {
151
+ options = addReferenceQueries(options, itemQuery.refs, model);
152
+ }
153
+ if (itemQuery.events) {
154
+ options = addEventQueries(options, itemQuery.events, model);
155
+ }
156
+ // TODO: Once we start to support Aggs on the server-side, we'll need to parse agg queries
157
+ // Apply a limit to the result set
158
+ if (itemQuery.limit) {
159
+ logger.default('Limiting to', {
160
+ limit: itemQuery.limit
161
+ });
162
+ options.limit = itemQuery.limit;
163
+ }
164
+ // Apply an offset to the result set
165
+ if (itemQuery.offset) {
166
+ options.offset = itemQuery.offset;
167
+ }
168
+ // Add orderBy to the query
169
+ if (itemQuery.orderBy) {
170
+ itemQuery.orderBy.forEach((orderBy)=>{
171
+ if (!model.getAttributes()[orderBy.field]) {
172
+ throw new Error(`Order by field ${orderBy.field} not found on model ${model.name}`);
173
+ }
174
+ options.order = [
175
+ [
176
+ orderBy.field,
177
+ orderBy.direction
178
+ ]
179
+ ];
180
+ });
181
+ }
182
+ return options;
183
+ };
184
+
185
+ exports.addCompoundCondition = addCompoundCondition;
186
+ exports.addCondition = addCondition;
187
+ exports.buildQuery = buildQuery;
188
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlCdWlsZGVyLmNqcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const buildReference = async (item, referenceDefinition, registry)=>{
6
+ // Check if there is more than one key type
7
+ if (referenceDefinition.kta.length > 1) {
8
+ throw new Error("The ReferenceBuilder doesn't work with more than one key type yet");
9
+ }
10
+ // Check if dependencies exist
11
+ if (!registry) {
12
+ throw new Error("This model definition has a reference definition, but the registry is not present");
13
+ }
14
+ // Find the Library.Instance for the key type
15
+ const library = registry.get(referenceDefinition.kta);
16
+ if (!library) {
17
+ throw new Error("This model definition has a reference definition, but the dependency is not present");
18
+ }
19
+ // Create a PriKey using the column value from item
20
+ const priKey = {
21
+ kt: referenceDefinition.kta[0],
22
+ pk: item[referenceDefinition.column]
23
+ };
24
+ // Get the referenced item using the Library.Operations get method
25
+ const referencedItem = await library.operations.get(priKey);
26
+ // TODO: In a Fjell-compliant implementation, this value should be stored in the ref property
27
+ // For now, we'll just populate the property directly
28
+ // Store the result in the property on item
29
+ item[referenceDefinition.property] = referencedItem;
30
+ return item;
31
+ };
32
+
33
+ exports.buildReference = buildReference;
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVmZXJlbmNlQnVpbGRlci5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const logger$1 = require('./logger.cjs');
6
+ const KeyMaster = require('./KeyMaster.cjs');
7
+ const ReferenceBuilder = require('./ReferenceBuilder.cjs');
8
+ const AggregationBuilder = require('./AggregationBuilder.cjs');
9
+ const general = require('./util/general.cjs');
10
+ const EventCoordinator = require('./EventCoordinator.cjs');
11
+
12
+ const logger = logger$1.default.get('sequelize', 'RowProcessor');
13
+ const processRow = async (row, keyTypes, referenceDefinitions, aggregationDefinitions, registry)=>{
14
+ logger.default('Processing Row', {
15
+ row
16
+ });
17
+ let item = row.get({
18
+ plain: true
19
+ });
20
+ logger.default('Adding Key to Item with Key Types: %s', general.stringifyJSON(keyTypes));
21
+ item = KeyMaster.addKey(item, keyTypes);
22
+ item = EventCoordinator.populateEvents(item);
23
+ logger.default('Key Added to Item: %s', general.stringifyJSON(item.key));
24
+ if (referenceDefinitions && referenceDefinitions.length > 0) {
25
+ for (const referenceDefinition of referenceDefinitions){
26
+ logger.default('Processing Reference for %s to %s', item.key.kt, general.stringifyJSON(referenceDefinition.kta));
27
+ item = await ReferenceBuilder.buildReference(item, referenceDefinition, registry);
28
+ }
29
+ }
30
+ if (aggregationDefinitions && aggregationDefinitions.length > 0) {
31
+ for (const aggregationDefinition of aggregationDefinitions){
32
+ logger.default('Processing Aggregation for %s from %s', item.key.kt, general.stringifyJSON(aggregationDefinition.kta));
33
+ item = await AggregationBuilder.buildAggregation(item, aggregationDefinition, registry);
34
+ }
35
+ }
36
+ logger.default('Processed Row: %j', general.stringifyJSON(item));
37
+ return item;
38
+ };
39
+
40
+ exports.processRow = processRow;
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm93UHJvY2Vzc29yLmNqcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const Library = require('@fjell/lib');
6
+ const Definition = require('../Definition.cjs');
7
+ const Operations = require('../Operations.cjs');
8
+
9
+ function createInstance(keyTypes, models, libOptions = {}, scopes = [], registry) {
10
+ const definition = Definition.createDefinition(keyTypes, scopes, libOptions);
11
+ const operations = Operations.createOperations(models, definition, registry);
12
+ return {
13
+ definition,
14
+ operations: Library.Contained.wrapOperations(operations, definition, registry),
15
+ models,
16
+ registry
17
+ };
18
+ }
19
+
20
+ exports.createInstance = createInstance;
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zdGFuY2UuY2pzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const Instance = require('./Instance.cjs');
6
+
7
+
8
+
9
+ exports.createInstance = Instance.createInstance;
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7In0=
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const Coordinate = require('./Coordinate.cjs');
6
+ const Definition = require('./Definition.cjs');
7
+ const Instance = require('./Instance.cjs');
8
+ const Options = require('./Options.cjs');
9
+ const Operations = require('./Operations.cjs');
10
+ const index = require('./contained/index.cjs');
11
+ const index$1 = require('./primary/index.cjs');
12
+
13
+
14
+
15
+ exports.SCOPE_SEQUELIZE = Coordinate.SCOPE_SEQUELIZE;
16
+ exports.createCoordinate = Coordinate.createCoordinate;
17
+ exports.createDefinition = Definition.createDefinition;
18
+ exports.createInstance = Instance.createInstance;
19
+ exports.createOptions = Options.createOptions;
20
+ exports.createOperations = Operations.createOperations;
21
+ exports.Contained = index;
22
+ exports.Primary = index$1;
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9