@fjell/lib-sequelize 4.3.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 (91) hide show
  1. package/LICENSE +202 -0
  2. package/dist/src/Coordinate.d.ts +4 -0
  3. package/dist/src/Coordinate.js +7 -0
  4. package/dist/src/Coordinate.js.map +1 -0
  5. package/dist/src/Definition.d.ts +7 -0
  6. package/dist/src/Definition.js +16 -0
  7. package/dist/src/Definition.js.map +1 -0
  8. package/dist/src/EventCoordinator.d.ts +5 -0
  9. package/dist/src/EventCoordinator.js +56 -0
  10. package/dist/src/EventCoordinator.js.map +1 -0
  11. package/dist/src/Instance.d.ts +8 -0
  12. package/dist/src/Instance.js +14 -0
  13. package/dist/src/Instance.js.map +1 -0
  14. package/dist/src/KeyMaster.d.ts +4 -0
  15. package/dist/src/KeyMaster.js +58 -0
  16. package/dist/src/KeyMaster.js.map +1 -0
  17. package/dist/src/Operations.d.ts +5 -0
  18. package/dist/src/Operations.js +22 -0
  19. package/dist/src/Operations.js.map +1 -0
  20. package/dist/src/Options.d.ts +7 -0
  21. package/dist/src/Options.js +16 -0
  22. package/dist/src/Options.js.map +1 -0
  23. package/dist/src/QueryBuilder.d.ts +11 -0
  24. package/dist/src/QueryBuilder.js +161 -0
  25. package/dist/src/QueryBuilder.js.map +1 -0
  26. package/dist/src/RowProcessor.d.ts +3 -0
  27. package/dist/src/RowProcessor.js +11 -0
  28. package/dist/src/RowProcessor.js.map +1 -0
  29. package/dist/src/contained/Instance.d.ts +8 -0
  30. package/dist/src/contained/Instance.js +14 -0
  31. package/dist/src/contained/Instance.js.map +1 -0
  32. package/dist/src/contained/index.d.ts +1 -0
  33. package/dist/src/contained/index.js +2 -0
  34. package/dist/src/contained/index.js.map +1 -0
  35. package/dist/src/index.d.ts +7 -0
  36. package/dist/src/index.js +8 -0
  37. package/dist/src/index.js.map +1 -0
  38. package/dist/src/logger.d.ts +2 -0
  39. package/dist/src/logger.js +4 -0
  40. package/dist/src/logger.js.map +1 -0
  41. package/dist/src/ops/all.d.ts +4 -0
  42. package/dist/src/ops/all.js +47 -0
  43. package/dist/src/ops/all.js.map +1 -0
  44. package/dist/src/ops/create.d.ts +10 -0
  45. package/dist/src/ops/create.js +14 -0
  46. package/dist/src/ops/create.js.map +1 -0
  47. package/dist/src/ops/find.d.ts +4 -0
  48. package/dist/src/ops/find.js +26 -0
  49. package/dist/src/ops/find.js.map +1 -0
  50. package/dist/src/ops/get.d.ts +4 -0
  51. package/dist/src/ops/get.js +36 -0
  52. package/dist/src/ops/get.js.map +1 -0
  53. package/dist/src/ops/one.d.ts +4 -0
  54. package/dist/src/ops/one.js +17 -0
  55. package/dist/src/ops/one.js.map +1 -0
  56. package/dist/src/ops/remove.d.ts +5 -0
  57. package/dist/src/ops/remove.js +56 -0
  58. package/dist/src/ops/remove.js.map +1 -0
  59. package/dist/src/ops/update.d.ts +4 -0
  60. package/dist/src/ops/update.js +49 -0
  61. package/dist/src/ops/update.js.map +1 -0
  62. package/dist/src/primary/Instance.d.ts +8 -0
  63. package/dist/src/primary/Instance.js +17 -0
  64. package/dist/src/primary/Instance.js.map +1 -0
  65. package/dist/src/primary/index.d.ts +1 -0
  66. package/dist/src/primary/index.js +2 -0
  67. package/dist/src/primary/index.js.map +1 -0
  68. package/eslint.config.mjs +70 -0
  69. package/package.json +61 -0
  70. package/src/Coordinate.ts +16 -0
  71. package/src/Definition.ts +49 -0
  72. package/src/EventCoordinator.ts +103 -0
  73. package/src/Instance.ts +45 -0
  74. package/src/KeyMaster.ts +90 -0
  75. package/src/Operations.ts +42 -0
  76. package/src/Options.ts +41 -0
  77. package/src/QueryBuilder.ts +208 -0
  78. package/src/RowProcessor.ts +23 -0
  79. package/src/contained/Instance.ts +45 -0
  80. package/src/contained/index.ts +1 -0
  81. package/src/index.ts +7 -0
  82. package/src/logger.ts +5 -0
  83. package/src/ops/all.ts +76 -0
  84. package/src/ops/create.ts +40 -0
  85. package/src/ops/find.ts +49 -0
  86. package/src/ops/get.ts +67 -0
  87. package/src/ops/one.ts +37 -0
  88. package/src/ops/remove.ts +81 -0
  89. package/src/ops/update.ts +78 -0
  90. package/src/primary/Instance.ts +41 -0
  91. package/src/primary/index.ts +1 -0
@@ -0,0 +1,161 @@
1
+ import { isComKey, isCondition, isPriKey } from '@fjell/core';
2
+ import { Op } from 'sequelize';
3
+ import LibLogger from './logger';
4
+ const logger = LibLogger.get('sequelize', 'QueryBuilder');
5
+ const addDeleteQuery = (options, model) => {
6
+ logger.default('Adding Delete Query', { options });
7
+ if (model.getAttributes().deletedAt) {
8
+ options.where['deletedAt'] = {
9
+ [Op.eq]: null
10
+ };
11
+ }
12
+ else if (model.getAttributes().isDeleted) {
13
+ options.where['isDeleted'] = {
14
+ [Op.eq]: false
15
+ };
16
+ }
17
+ return options;
18
+ };
19
+ const addEventQueries = (options, events, model) => {
20
+ logger.default('Adding Event Queries', { options, events });
21
+ Object.keys(events).forEach((key) => {
22
+ if (!model.getAttributes()[`${key}At`]) {
23
+ throw new Error(`Event ${key} is not supported on this model, column ${key}At not found`);
24
+ }
25
+ let whereClauses = {};
26
+ const event = events[key];
27
+ if (event.start) {
28
+ whereClauses = { ...whereClauses, [Op.gte]: new Date(event.start) };
29
+ }
30
+ if (event.end) {
31
+ whereClauses = { ...whereClauses, [Op.lt]: new Date(event.end) };
32
+ }
33
+ if (event.by) {
34
+ if (!model.getAttributes()[`${key}By`]) {
35
+ throw new Error(`Event ${key} is not supported on this model, column ${key}By not found`);
36
+ }
37
+ whereClauses = { ...whereClauses, [Op.eq]: event.by };
38
+ }
39
+ options.where[`${key}At`] = whereClauses;
40
+ });
41
+ return options;
42
+ };
43
+ // Add the references to the query
44
+ const addReferenceQueries = (options, references, model) => {
45
+ logger.default('Adding Reference Queries', { options, references });
46
+ Object.keys(references).forEach((key) => {
47
+ logger.default('Adding Reference Query', { key, references });
48
+ if (!model.getAttributes()[`${key}Id`]) {
49
+ throw new Error(`Reference ${key} is not supported on this model, column ${key}Id not found`);
50
+ }
51
+ if (isPriKey(references[key])) {
52
+ const priKey = references[key];
53
+ options.where[`${key}Id`] = {
54
+ [Op.eq]: priKey.pk
55
+ };
56
+ }
57
+ else if (isComKey(references[key])) {
58
+ throw new Error('ComKeys are not supported in Sequelize');
59
+ }
60
+ });
61
+ return options;
62
+ };
63
+ export const addCompoundCondition = (options, compoundCondition, model) => {
64
+ const where = {};
65
+ let compoundOp;
66
+ const compoundType = compoundCondition.compoundType;
67
+ if (compoundType === "AND") {
68
+ compoundOp = Op.and;
69
+ }
70
+ else {
71
+ compoundOp = Op.or;
72
+ }
73
+ ;
74
+ let conditions = {};
75
+ compoundCondition.conditions.forEach((condition) => {
76
+ if (isCondition(condition)) {
77
+ conditions = addCondition(conditions, condition, model);
78
+ }
79
+ else {
80
+ throw new Error('Nest Compound conditions not supported');
81
+ }
82
+ });
83
+ where[compoundOp] = conditions;
84
+ options.where = where;
85
+ return options;
86
+ };
87
+ export const addCondition = (conditions, condition, model) => {
88
+ let conditionOp;
89
+ const conditionColumn = condition.column;
90
+ if (!model.getAttributes()[conditionColumn]) {
91
+ throw new Error(`Condition column ${conditionColumn} not found on model ${model.name}`);
92
+ }
93
+ if (condition.operator === '==') {
94
+ conditionOp = Op.eq;
95
+ }
96
+ else if (condition.operator === '<') {
97
+ conditionOp = Op.lt;
98
+ }
99
+ else if (condition.operator === '>') {
100
+ conditionOp = Op.gt;
101
+ }
102
+ else if (condition.operator === '<=') {
103
+ conditionOp = Op.lte;
104
+ }
105
+ else if (condition.operator === '>=') {
106
+ conditionOp = Op.gte;
107
+ }
108
+ else if (condition.operator === 'in') {
109
+ conditionOp = Op.in;
110
+ }
111
+ else {
112
+ throw new Error(`Operator ${condition.operator} not supported`);
113
+ }
114
+ conditions[conditionColumn] = {
115
+ [conditionOp]: condition.value
116
+ };
117
+ return conditions;
118
+ };
119
+ export const buildQuery = (itemQuery, model) => {
120
+ logger.default('build', { itemQuery });
121
+ let options = {
122
+ where: {},
123
+ };
124
+ if (itemQuery.compoundCondition) {
125
+ logger.default('Adding Conditions', { compoundCondition: itemQuery.compoundCondition });
126
+ options = addCompoundCondition(options, itemQuery.compoundCondition, model);
127
+ }
128
+ // If the model has a deletedAt column, we need to add a delete query
129
+ if (model.getAttributes().deletedAt || model.getAttributes().isDeleted) {
130
+ options = addDeleteQuery(options, model);
131
+ }
132
+ if (itemQuery.refs) {
133
+ options = addReferenceQueries(options, itemQuery.refs, model);
134
+ }
135
+ if (itemQuery.events) {
136
+ options = addEventQueries(options, itemQuery.events, model);
137
+ }
138
+ // TODO: Once we start to support Aggs on the server-side, we'll need to parse agg queries
139
+ // Apply a limit to the result set
140
+ if (itemQuery.limit) {
141
+ logger.default('Limiting to', { limit: itemQuery.limit });
142
+ options.limit = itemQuery.limit;
143
+ }
144
+ // Apply an offset to the result set
145
+ if (itemQuery.offset) {
146
+ options.offset = itemQuery.offset;
147
+ }
148
+ // Add orderBy to the query
149
+ if (itemQuery.orderBy) {
150
+ itemQuery.orderBy.forEach((orderBy) => {
151
+ if (!model.getAttributes()[orderBy.field]) {
152
+ throw new Error(`Order by field ${orderBy.field} not found on model ${model.name}`);
153
+ }
154
+ options.order = [
155
+ [orderBy.field, orderBy.direction]
156
+ ];
157
+ });
158
+ }
159
+ return options;
160
+ };
161
+ //# sourceMappingURL=QueryBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/QueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AllItemTypeArrays, Item } from "@fjell/core";
2
+ import { Model } from "sequelize";
3
+ export declare const processRow: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(row: Model<any, any>, keyTypes: AllItemTypeArrays<S, L1, L2, L3, L4, L5>) => Item<S, L1, L2, L3, L4, L5>;
@@ -0,0 +1,11 @@
1
+ import LibLogger from "./logger";
2
+ import { addKey } from "./KeyMaster";
3
+ const logger = LibLogger.get('sequelize', 'RowProcessor');
4
+ export const processRow = (row, keyTypes) => {
5
+ logger.default('Processing Row', { row });
6
+ const item = row.get({ plain: true });
7
+ addKey(item, keyTypes);
8
+ logger.default('Processed Row: ' + JSON.stringify(item));
9
+ return item;
10
+ };
11
+ //# sourceMappingURL=RowProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RowProcessor.js","sourceRoot":"","sources":["../../src/RowProcessor.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,UAAU,GAAG,CAMtB,GAAoB,EACpB,QAAkD,EACrB,EAAE;IACjC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAQ,CAAC;IAC7C,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvB,MAAM,CAAC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,OAAO,IAAmC,CAAC;AAC7C,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Instance as AbstractSequelizeInstance } from '../Instance';
2
+ import { Item, ItemTypeArray } from '@fjell/core';
3
+ import { Contained } from '@fjell/lib';
4
+ import { ModelStatic } from 'sequelize';
5
+ export interface Instance<V extends Item<S>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends AbstractSequelizeInstance<V, S, L1, L2, L3, L4, L5> {
6
+ models: ModelStatic<any>[];
7
+ }
8
+ export declare function createInstance<V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(keyTypes: ItemTypeArray<S, L1, L2, L3, L4, L5>, models: ModelStatic<any>[], libOptions?: Contained.Options<V, S, L1, L2, L3, L4, L5>, scopes?: string[]): Instance<V, S, L1, L2, L3, L4, L5>;
@@ -0,0 +1,14 @@
1
+ import { Contained } from '@fjell/lib';
2
+ import { createDefinition } from '../Definition';
3
+ import { createOperations } from '../Operations';
4
+ // eslint-disable-next-line max-params
5
+ export function createInstance(keyTypes, models, libOptions = {}, scopes = []) {
6
+ const definition = createDefinition(keyTypes, scopes, libOptions);
7
+ const operations = createOperations(models, definition);
8
+ return {
9
+ definition,
10
+ operations: Contained.wrapOperations(operations, definition),
11
+ models
12
+ };
13
+ }
14
+ //# sourceMappingURL=Instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Instance.js","sourceRoot":"","sources":["../../../src/contained/Instance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAehD,sCAAsC;AACtC,MAAM,UAAU,cAAc,CAS5B,QAA8C,EAC9C,MAA0B,EAC1B,aAA0D,EAAE,EAC5D,SAAmB,EAAE;IAGrB,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAExD,OAAO;QACL,UAAU;QACV,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC;QAC5D,MAAM;KAC+B,CAAC;AAE1C,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './Instance';
@@ -0,0 +1,2 @@
1
+ export * from './Instance';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contained/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './Coordinate';
2
+ export * from './Definition';
3
+ export * from './Instance';
4
+ export * from './Options';
5
+ export * from './Operations';
6
+ export * as Contained from './contained';
7
+ export * as Primary from './primary';
@@ -0,0 +1,8 @@
1
+ export * from './Coordinate';
2
+ export * from './Definition';
3
+ export * from './Instance';
4
+ export * from './Options';
5
+ export * from './Operations';
6
+ export * as Contained from './contained';
7
+ export * as Primary from './primary';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const LibLogger: import("@fjell/logging").Logger;
2
+ export default LibLogger;
@@ -0,0 +1,4 @@
1
+ import Logging from '@fjell/logging';
2
+ const LibLogger = Logging.getLogger('@fjell/lib-sequelize');
3
+ export default LibLogger;
4
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAE5D,eAAe,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Definition } from "../Definition";
2
+ import { Item, ItemQuery, LocKeyArray } from "@fjell/core";
3
+ import { ModelStatic } from "sequelize";
4
+ export declare const getAllOperation: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(models: ModelStatic<any>[], definition: Definition<V, S, L1, L2, L3, L4, L5>) => (itemQuery: ItemQuery, locations?: LocKeyArray<L1, L2, L3, L4, L5> | [] | undefined) => Promise<V[]>;
@@ -0,0 +1,47 @@
1
+ import { validateKeys } from "@fjell/core";
2
+ import { buildQuery } from "../QueryBuilder";
3
+ import LibLogger from '../logger';
4
+ import { processRow } from "../RowProcessor";
5
+ import { Op } from "sequelize";
6
+ const logger = LibLogger.get('sequelize', 'ops', 'all');
7
+ export const getAllOperation = (models, definition) => {
8
+ const { coordinate } = definition;
9
+ //#region Query
10
+ const all = async (itemQuery, locations) => {
11
+ logger.default('All', { itemQuery, locations });
12
+ const loc = locations || [];
13
+ // SQ Libs don't support locations
14
+ if (loc.length > 1) {
15
+ throw new Error('Not implemented for more than one location key');
16
+ }
17
+ // We have the model here?
18
+ // @ts-ignore
19
+ const model = models[0];
20
+ // We have the model here?
21
+ const options = buildQuery(itemQuery, model);
22
+ // If this has a location array, we need to add a where clause
23
+ if (loc.length === 1) {
24
+ const locKeyType = loc[0].kt;
25
+ if (model.associations[locKeyType]) {
26
+ const association = model.associations[locKeyType];
27
+ options.where = {
28
+ ...options.where,
29
+ [association.foreignKey]: {
30
+ [Op.eq]: loc[0].lk
31
+ }
32
+ };
33
+ }
34
+ else {
35
+ logger.error('Location key type not found in sequelize model association for: %s', locKeyType);
36
+ throw new Error('Location key type not found in model');
37
+ }
38
+ }
39
+ logger.default('Configured this Item Query', { itemQuery, options });
40
+ const matchingItems = await model.findAll(options);
41
+ // this.logger.default('Matching Items', { matchingItems });
42
+ // TODO: Move this Up!
43
+ return matchingItems.map((row) => validateKeys(processRow(row, coordinate.kta), coordinate.kta));
44
+ };
45
+ return all;
46
+ };
47
+ //# sourceMappingURL=all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all.js","sourceRoot":"","sources":["../../../src/ops/all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,SAAS,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAA4B,EAAE,EAAE,MAAM,WAAW,CAAC;AAEzD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,CAQ7B,MAA0B,EAAE,UAAgD,EAAE,EAAE;IAEhF,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC;IAElC,eAAe;IACf,MAAM,GAAG,GAAG,KAAK,EACf,SAAoB,EACpB,SAA4D,EAE9C,EAAE;QAChB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAyC,SAAS,IAAI,EAAE,CAAC;QAElE,kCAAkC;QAClC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAG,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,0BAA0B;QAC1B,aAAa;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB,0BAA0B;QAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAE7C,8DAA8D;QAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAG,CAAC;YACtB,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAG,CAAC;gBACpC,MAAM,WAAW,GAA0B,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC1E,OAAO,CAAC,KAAK,GAAG;oBACd,GAAG,OAAO,CAAC,KAAK;oBAChB,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;wBACxB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;qBACnB;iBACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,oEAAoE,EAAE,UAAU,CAAC,CAAC;gBAC/F,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAErE,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnD,4DAA4D;QAE5D,sBAAsB;QACtB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAQ,CAAC;IAC/G,CAAC,CAAA;IAED,OAAO,GAAG,CAAC;AAEb,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { ComKey, Item, LocKeyArray, PriKey, TypesProperties } from "@fjell/core";
2
+ import { ModelStatic } from "sequelize";
3
+ import { Definition } from "../Definition";
4
+ export declare const getCreateOperation: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(models: ModelStatic<any>[], definition: Definition<V, S, L1, L2, L3, L4, L5>) => (item: TypesProperties<V, S, L1, L2, L3, L4, L5>, options?: {
5
+ key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>;
6
+ locations?: never;
7
+ } | {
8
+ key?: never;
9
+ locations: LocKeyArray<L1, L2, L3, L4, L5>;
10
+ }) => Promise<V>;
@@ -0,0 +1,14 @@
1
+ import LibLogger from '../logger';
2
+ const logger = LibLogger.get('sequelize', 'ops', 'create');
3
+ export const getCreateOperation = (
4
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
+ models,
6
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
7
+ definition) => {
8
+ const create = async (item, options) => {
9
+ logger.default('Create', { item, options });
10
+ throw new Error('Not implemented');
11
+ };
12
+ return create;
13
+ };
14
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/ops/create.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,UAAU,CAAC;AAIjC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAG;AAS9B,6DAA6D;AAC7D,MAA0B;AAC1B,6DAA6D;AAC7D,UAAgD,EAChD,EAAE;IAEJ,MAAM,MAAM,GAAG,KAAK,EAClB,IAA+C,EAC/C,OAMC,EACW,EAAE;QACd,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAE5C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC,CAAA;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Item, LocKeyArray } from "@fjell/core";
2
+ import { Definition } from "../Definition";
3
+ import { ModelStatic } from "sequelize";
4
+ export declare const getFindOperation: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(models: ModelStatic<any>[], definition: Definition<V, S, L1, L2, L3, L4, L5>) => (finder: string, finderParams: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<V[]>;
@@ -0,0 +1,26 @@
1
+ import LibLogger from '../logger';
2
+ const logger = LibLogger.get('sequelize', 'ops', 'find');
3
+ export const getFindOperation = (models, definition) => {
4
+ const { options } = definition;
5
+ const find = async (finder, finderParams, locations) => {
6
+ logger.default('Find', { finder, finderParams, locations });
7
+ // Note that we execute the createFinders function here because we want to make sure we're always getting the
8
+ // most up to date methods.
9
+ if (options.finders && options.finders[finder]) {
10
+ const finderMethod = options.finders[finder];
11
+ if (finderMethod) {
12
+ return finderMethod(finderParams, locations);
13
+ }
14
+ else {
15
+ logger.error(`Finder %s not found`, finder);
16
+ throw new Error(`Finder ${finder} not found`);
17
+ }
18
+ }
19
+ else {
20
+ logger.error(`No finders have been defined for this lib`);
21
+ throw new Error(`No finders found`);
22
+ }
23
+ };
24
+ return find;
25
+ };
26
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/ops/find.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,UAAU,CAAC;AAGjC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAS5B,MAA0B,EAC1B,UAAgD,EAChD,EAAE;IAEJ,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAE/B,MAAM,IAAI,GAAG,KAAK,EAChB,MAAc,EACd,YAAwG,EACxG,SAAgD,EAElC,EAAE;QAChB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5D,6GAA6G;QAC7G,2BAA2B;QAC3B,IAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,YAAY,CAAC,YAAY,EAAE,SAAS,CAAiB,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,YAAY,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAA;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { ComKey, Item, PriKey } from '@fjell/core';
2
+ import { ModelStatic } from 'sequelize';
3
+ import { Definition } from '../Definition';
4
+ export declare const getGetOperation: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(models: Array<ModelStatic<any>>, definition: Definition<V, S, L1, L2, L3, L4, L5>) => (key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>) => Promise<V>;
@@ -0,0 +1,36 @@
1
+ import { isComKey, isPriKey, isValidItemKey, validateKeys } from '@fjell/core';
2
+ import LibLogger from '../logger';
3
+ import { processRow } from '../RowProcessor';
4
+ import { NotFoundError } from '@fjell/lib';
5
+ const logger = LibLogger.get('sequelize', 'ops', 'get');
6
+ export const getGetOperation = (models, definition) => {
7
+ const { coordinate } = definition;
8
+ const { kta } = coordinate;
9
+ const get = async (key) => {
10
+ logger.default('Get', { key });
11
+ if (!isValidItemKey(key)) {
12
+ logger.error('Key for Get is not a valid ItemKey: %j', key);
13
+ throw new Error('Key for Get is not a valid ItemKey');
14
+ }
15
+ const itemKey = key;
16
+ // @ts-ignore
17
+ const model = models[0];
18
+ let item;
19
+ if (isPriKey(itemKey)) {
20
+ item = await model.findByPk(itemKey.pk);
21
+ }
22
+ else if (isComKey(itemKey)) {
23
+ const comKey = itemKey;
24
+ // TODO: This should probably interrogate the model?
25
+ item = await model.findOne({ where: { id: comKey.pk, [comKey?.loc[0]?.kt + 'Id']: comKey?.loc[0]?.lk } });
26
+ }
27
+ if (!item) {
28
+ throw new NotFoundError('get', coordinate, key);
29
+ }
30
+ else {
31
+ return validateKeys(processRow(item, kta), kta);
32
+ }
33
+ };
34
+ return get;
35
+ };
36
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/ops/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,QAAQ,EACR,cAAc,EAGd,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,OAAO,SAAS,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,CAS3B,MAA+B,EAC/B,UAAgD,EAChD,EAAE;IAEJ,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC;IAClC,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;IAE3B,MAAM,GAAG,GAAG,KAAK,EACf,GAA8C,EAClC,EAAE;QACd,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC;QAEpB,aAAa;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,IAAI,CAAC;QAET,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAG,CAAC;YACvB,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAE,OAAqB,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAG,CAAC;YAC9B,MAAM,MAAM,GAAG,OAAwC,CAAC;YACxD,oDAAoD;YACpD,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,aAAa,CAAwB,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAM,CAAC;QACvD,CAAC;IACH,CAAC,CAAA;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Item, ItemQuery, LocKeyArray } from "@fjell/core";
2
+ import { Definition } from "../Definition";
3
+ import { ModelStatic } from "sequelize";
4
+ export declare const getOneOperation: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(models: ModelStatic<any>[], definition: Definition<V, S, L1, L2, L3, L4, L5>) => (itemQuery: ItemQuery, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<V | null>;
@@ -0,0 +1,17 @@
1
+ import LibLogger from '../logger';
2
+ import { getAllOperation } from "./all";
3
+ const logger = LibLogger.get('sequelize', 'ops', 'one');
4
+ export const getOneOperation = (models, definition) => {
5
+ const one = async (itemQuery, locations = []) => {
6
+ logger.default('One', { itemQuery, locations });
7
+ const items = await getAllOperation(models, definition)(itemQuery, locations);
8
+ if (items.length > 0) {
9
+ return items[0];
10
+ }
11
+ else {
12
+ return null;
13
+ }
14
+ };
15
+ return one;
16
+ };
17
+ //# sourceMappingURL=one.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"one.js","sourceRoot":"","sources":["../../../src/ops/one.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,CAS3B,MAA0B,EAC1B,UAAgD,EAChD,EAAE;IACJ,MAAM,GAAG,GAAG,KAAK,EACf,SAAoB,EACpB,YAAkD,EAAE,EACjC,EAAE;QACrB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,CAAC,CAAM,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAA;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { ComKey, PriKey } from "@fjell/core";
2
+ import { Item } from "@fjell/core";
3
+ import { Definition } from "../Definition";
4
+ import { ModelStatic } from "sequelize";
5
+ export declare const getRemoveOperation: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(models: ModelStatic<any>[], definition: Definition<V, S, L1, L2, L3, L4, L5>) => (key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>) => Promise<V>;
@@ -0,0 +1,56 @@
1
+ import { isValidItemKey } from "@fjell/core";
2
+ import { abbrevIK, isComKey, isPriKey } from "@fjell/core";
3
+ import { populateEvents } from "../EventCoordinator";
4
+ import { populateKey } from "../KeyMaster";
5
+ import LibLogger from '../logger';
6
+ const logger = LibLogger.get('sequelize', 'ops', 'remove');
7
+ export const getRemoveOperation = (models, definition) => {
8
+ const { coordinate, options } = definition;
9
+ const { kta } = coordinate;
10
+ const remove = async (key) => {
11
+ logger.default('Remove', { key });
12
+ if (!isValidItemKey(key)) {
13
+ logger.error('Key for Remove is not a valid ItemKey: %j', key);
14
+ throw new Error('Key for Remove is not a valid ItemKey');
15
+ }
16
+ // @ts-ignore
17
+ const model = models[0];
18
+ let item;
19
+ let returnItem;
20
+ logger.debug('remove: %s', abbrevIK(key));
21
+ if (isPriKey(key)) {
22
+ item = await model.findByPk(key.pk);
23
+ }
24
+ else if (isComKey(key)) {
25
+ const comKey = key;
26
+ item = await model.findOne({ where: { id: comKey.pk, [comKey?.loc[0]?.kt + 'Id']: comKey?.loc[0]?.lk } });
27
+ }
28
+ const isDeletedAttribute = model.getAttributes().isDeleted;
29
+ const deletedAtAttribute = model.getAttributes().deletedAt;
30
+ if (isDeletedAttribute || deletedAtAttribute) {
31
+ if (model.getAttributes().isDeleted) {
32
+ item.isDeleted = true;
33
+ }
34
+ if (model.getAttributes().deletedAt) {
35
+ item.deletedAt = new Date();
36
+ }
37
+ // Save the object
38
+ await item?.save();
39
+ returnItem = item?.get({ plain: true });
40
+ returnItem = populateKey(returnItem, kta);
41
+ returnItem = populateEvents(returnItem);
42
+ }
43
+ else if (options.deleteOnRemove) {
44
+ await item?.destroy();
45
+ returnItem = item?.get({ plain: true });
46
+ returnItem = populateKey(returnItem, kta);
47
+ returnItem = populateEvents(returnItem);
48
+ }
49
+ else {
50
+ throw new Error('No deletedAt or isDeleted attribute found in model, and deleteOnRemove is not set');
51
+ }
52
+ return returnItem;
53
+ };
54
+ return remove;
55
+ };
56
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/ops/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ComKey, Item, PriKey, TypesProperties } from "@fjell/core";
2
+ import { Definition } from "../Definition";
3
+ import { ModelStatic } from "sequelize";
4
+ export declare const getUpdateOperation: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(models: ModelStatic<any>[], definition: Definition<V, S, L1, L2, L3, L4, L5>) => (key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>, item: TypesProperties<V, S, L1, L2, L3, L4, L5>) => Promise<V>;
@@ -0,0 +1,49 @@
1
+ import { abbrevIK, isComKey } from "@fjell/core";
2
+ import { isPriKey } from "@fjell/core";
3
+ import { populateEvents, removeEvents } from "../EventCoordinator";
4
+ import { populateKey, removeKey } from "../KeyMaster";
5
+ import LibLogger from '../logger';
6
+ import { NotFoundError } from "@fjell/lib";
7
+ const logger = LibLogger.get('sequelize', 'ops', 'update');
8
+ export const getUpdateOperation = (models, definition) => {
9
+ const update = async (key, item) => {
10
+ const { coordinate } = definition;
11
+ const { kta } = coordinate;
12
+ logger.debug('update: %s, %j', abbrevIK(key), item);
13
+ // Find the object we're updating
14
+ // @ts-ignore
15
+ const model = models[0];
16
+ let response;
17
+ if (isPriKey(key)) {
18
+ // Find the model by using the PK
19
+ const priKey = key;
20
+ response = await model.findByPk(priKey.pk);
21
+ }
22
+ else if (isComKey(key)) {
23
+ const comKey = key;
24
+ // Find the model by using both of the identifiers.
25
+ response = await model.findOne({ where: {
26
+ [comKey?.loc[0]?.kt + 'Id']: comKey?.loc[0]?.lk,
27
+ id: comKey?.pk
28
+ } });
29
+ }
30
+ if (response) {
31
+ // Remove the key and events
32
+ let updateProps = removeKey(item);
33
+ updateProps = removeEvents(item);
34
+ // Update the object
35
+ response = { ...response, ...updateProps };
36
+ await response?.save();
37
+ // Populate the key and events
38
+ let returnItem = response?.get({ plain: true });
39
+ returnItem = populateKey(returnItem, kta);
40
+ returnItem = populateEvents(returnItem);
41
+ return returnItem;
42
+ }
43
+ else {
44
+ throw new NotFoundError('update', coordinate, key);
45
+ }
46
+ };
47
+ return update;
48
+ };
49
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/ops/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAkB,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKvC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,SAAS,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAS9B,MAA0B,EAC1B,UAAgD,EAChD,EAAE;IAEJ,MAAM,MAAM,GAAG,KAAK,EAClB,GAA8C,EAC9C,IAA+C,EACnC,EAAE;QACd,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC;QAClC,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;QAE3B,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,iCAAiC;QACjC,aAAa;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,QAAQ,CAAC;QAEb,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAG,CAAC;YACrB,iCAAiC;YAC/B,MAAM,MAAM,GAAG,GAAgB,CAAC;YAChC,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAG,CAAC;YAC1B,MAAM,MAAM,GAAG,GAAoC,CAAC;YACpD,mDAAmD;YACnD,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;oBACtC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC/C,EAAE,EAAE,MAAM,EAAE,EAAE;iBACf,EAAE,CAAC,CAAC;QACP,CAAC;QAED,IAAI,QAAQ,EAAG,CAAC;YAEd,4BAA4B;YAC5B,IAAI,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;YACjC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAEjC,oBAAoB;YACpB,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;YAC3C,MAAM,QAAQ,EAAE,IAAI,EAAE,CAAC;YAEvB,8BAA8B;YAC9B,IAAI,UAAU,GAAG,QAAQ,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAA0C,CAAC;YACzF,UAAU,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC1C,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO,UAAe,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,aAAa,CAAwB,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;IAEH,CAAC,CAAA;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Instance as AbstractSequelizeInstance } from '../Instance';
2
+ import { Item } from '@fjell/core';
3
+ import { ModelStatic } from 'sequelize';
4
+ import { Options } from '../Options';
5
+ export interface Instance<V extends Item<S>, S extends string> extends AbstractSequelizeInstance<V, S> {
6
+ models: ModelStatic<any>[];
7
+ }
8
+ export declare function createInstance<V extends Item<S>, S extends string>(keyType: S, models: ModelStatic<any>[], libOptions?: Options<V, S>, scopes?: string[]): Instance<V, S>;