@autofleet/sadot 1.6.18-beta.2 → 1.6.18-beta.21

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 (162) hide show
  1. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs +11 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js +10 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs +8 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js +7 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +43 -0
  6. package/dist/{chunk-DJulfCLt.js → _virtual/rolldown_runtime.js} +1 -2
  7. package/dist/api/index.cjs +12 -0
  8. package/dist/api/index.js +11 -0
  9. package/dist/api/v1/definition/index.cjs +113 -0
  10. package/dist/api/v1/definition/index.js +112 -0
  11. package/dist/api/v1/definition/validations.cjs +128 -0
  12. package/dist/api/v1/definition/validations.js +125 -0
  13. package/dist/api/v1/errors.cjs +14 -0
  14. package/dist/api/v1/errors.js +13 -0
  15. package/dist/api/v1/field-policies/index.cjs +104 -0
  16. package/dist/api/v1/field-policies/index.js +103 -0
  17. package/dist/api/v1/index.cjs +16 -0
  18. package/dist/api/v1/index.js +15 -0
  19. package/dist/api/v1/validator/index.cjs +132 -0
  20. package/dist/api/v1/validator/index.js +131 -0
  21. package/dist/api/v1/validator/validations.cjs +40 -0
  22. package/dist/api/v1/validator/validations.d.cts +22 -0
  23. package/dist/api/v1/validator/validations.d.ts +22 -0
  24. package/dist/api/v1/validator/validations.js +38 -0
  25. package/dist/errors/index.cjs +62 -0
  26. package/dist/errors/index.js +55 -0
  27. package/dist/events/index.cjs +52 -0
  28. package/dist/events/index.js +50 -0
  29. package/dist/hooks/enrich.cjs +175 -0
  30. package/dist/hooks/enrich.js +175 -0
  31. package/dist/hooks/find.cjs +22 -0
  32. package/dist/hooks/find.js +22 -0
  33. package/dist/hooks/hooks.cjs +310 -0
  34. package/dist/hooks/hooks.js +302 -0
  35. package/dist/hooks/index.cjs +3 -0
  36. package/dist/hooks/index.js +5 -0
  37. package/dist/hooks/utils/updateInstanceValues.cjs +27 -0
  38. package/dist/hooks/utils/updateInstanceValues.js +27 -0
  39. package/dist/index.cjs +48 -33508
  40. package/dist/index.d.cts +13 -396
  41. package/dist/index.d.ts +14 -394
  42. package/dist/index.js +21 -33435
  43. package/dist/init-state.cjs +56 -0
  44. package/dist/init-state.d.cts +35 -0
  45. package/dist/init-state.d.ts +35 -0
  46. package/dist/init-state.js +55 -0
  47. package/dist/mat-path-state.cjs +10 -0
  48. package/dist/mat-path-state.js +9 -0
  49. package/dist/migrations/001-create-core-tables.cjs +70 -0
  50. package/dist/migrations/001-create-core-tables.js +68 -0
  51. package/dist/migrations/002-create-custom-field-entries.cjs +27 -0
  52. package/dist/migrations/002-create-custom-field-entries.js +25 -0
  53. package/dist/migrations/003-create-custom-field-model-type-map.cjs +35 -0
  54. package/dist/migrations/003-create-custom-field-model-type-map.js +33 -0
  55. package/dist/migrations/004-create-field-policy-tables.cjs +29 -0
  56. package/dist/migrations/004-create-field-policy-tables.js +27 -0
  57. package/dist/migrations/005-add-entity-type-to-field-policies.cjs +20 -0
  58. package/dist/migrations/005-add-entity-type-to-field-policies.js +18 -0
  59. package/dist/migrations/index.cjs +94 -0
  60. package/dist/migrations/index.js +95 -0
  61. package/dist/models/CustomFieldDefinition.cjs +147 -0
  62. package/dist/models/CustomFieldDefinition.d.cts +40 -0
  63. package/dist/models/CustomFieldDefinition.d.ts +40 -0
  64. package/dist/models/CustomFieldDefinition.js +146 -0
  65. package/dist/models/CustomFieldEntries.cjs +71 -0
  66. package/dist/models/CustomFieldEntries.d.cts +15 -0
  67. package/dist/models/CustomFieldEntries.d.ts +15 -0
  68. package/dist/models/CustomFieldEntries.js +70 -0
  69. package/dist/models/CustomFieldModelTypeMap.cjs +62 -0
  70. package/dist/models/CustomFieldModelTypeMap.d.cts +14 -0
  71. package/dist/models/CustomFieldModelTypeMap.d.ts +14 -0
  72. package/dist/models/CustomFieldModelTypeMap.js +61 -0
  73. package/dist/models/CustomFieldValue.cjs +109 -0
  74. package/dist/models/CustomFieldValue.d.cts +20 -0
  75. package/dist/models/CustomFieldValue.d.ts +20 -0
  76. package/dist/models/CustomFieldValue.js +108 -0
  77. package/dist/models/CustomValidator.cjs +68 -0
  78. package/dist/models/CustomValidator.d.cts +18 -0
  79. package/dist/models/CustomValidator.d.ts +18 -0
  80. package/dist/models/CustomValidator.js +67 -0
  81. package/dist/models/FieldPolicy.cjs +54 -0
  82. package/dist/models/FieldPolicy.d.cts +25 -0
  83. package/dist/models/FieldPolicy.d.ts +25 -0
  84. package/dist/models/FieldPolicy.js +53 -0
  85. package/dist/models/index.cjs +163 -0
  86. package/dist/models/index.d.ts +11 -0
  87. package/dist/models/index.js +161 -0
  88. package/dist/models/tests/AssociatedTestModel.cjs +51 -0
  89. package/dist/models/tests/AssociatedTestModel.d.ts +2 -0
  90. package/dist/models/tests/AssociatedTestModel.js +50 -0
  91. package/dist/models/tests/TestModel.cjs +43 -0
  92. package/dist/models/tests/TestModel.d.ts +2 -0
  93. package/dist/models/tests/TestModel.js +42 -0
  94. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs +35 -0
  95. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.d.ts +2 -0
  96. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js +34 -0
  97. package/dist/models/tests/contextAwareModels/ContextTestModel.cjs +33 -0
  98. package/dist/models/tests/contextAwareModels/ContextTestModel.d.ts +1 -0
  99. package/dist/models/tests/contextAwareModels/ContextTestModel.js +32 -0
  100. package/dist/repository/definition.cjs +221 -0
  101. package/dist/repository/definition.js +212 -0
  102. package/dist/repository/entries.cjs +69 -0
  103. package/dist/repository/entries.js +67 -0
  104. package/dist/repository/field-policy.cjs +69 -0
  105. package/dist/repository/field-policy.d.cts +35 -0
  106. package/dist/repository/field-policy.d.ts +35 -0
  107. package/dist/repository/field-policy.js +59 -0
  108. package/dist/repository/utils/formatValues.cjs +14 -0
  109. package/dist/repository/utils/formatValues.js +14 -0
  110. package/dist/repository/validator.cjs +85 -0
  111. package/dist/repository/validator.js +78 -0
  112. package/dist/repository/value.cjs +77 -0
  113. package/dist/repository/value.js +76 -0
  114. package/dist/scopes/filter.cjs +56 -0
  115. package/dist/scopes/filter.d.cts +22 -0
  116. package/dist/scopes/filter.d.ts +22 -0
  117. package/dist/scopes/filter.js +54 -0
  118. package/dist/scopes/helpers/filter.helpers.cjs +152 -0
  119. package/dist/scopes/helpers/filter.helpers.d.cts +16 -0
  120. package/dist/scopes/helpers/filter.helpers.d.ts +16 -0
  121. package/dist/scopes/helpers/filter.helpers.js +147 -0
  122. package/dist/scopes/index.cjs +1 -0
  123. package/dist/scopes/index.js +3 -0
  124. package/dist/types/index.d.cts +75 -0
  125. package/dist/types/index.d.ts +76 -0
  126. package/dist/utils/constants/index.cjs +32 -0
  127. package/dist/utils/constants/index.d.cts +23 -0
  128. package/dist/utils/constants/index.d.ts +23 -0
  129. package/dist/utils/constants/index.js +29 -0
  130. package/dist/utils/db/index.cjs +15 -0
  131. package/dist/utils/db/index.js +14 -0
  132. package/dist/utils/helpers/index.cjs +23 -0
  133. package/dist/utils/helpers/index.d.cts +30 -0
  134. package/dist/utils/helpers/index.d.ts +30 -0
  135. package/dist/utils/helpers/index.js +21 -0
  136. package/dist/utils/init.cjs +115 -0
  137. package/dist/utils/init.js +111 -0
  138. package/dist/utils/logger/index.cjs +15 -0
  139. package/dist/utils/logger/index.js +12 -0
  140. package/dist/utils/scopeAttributes.cjs +12 -0
  141. package/dist/utils/scopeAttributes.js +11 -0
  142. package/dist/utils/validations/index.cjs +34 -0
  143. package/dist/utils/validations/index.js +32 -0
  144. package/dist/utils/validations/schema/custom-fields.cjs +9 -0
  145. package/dist/utils/validations/schema/custom-fields.d.cts +6 -0
  146. package/dist/utils/validations/schema/custom-fields.d.ts +6 -0
  147. package/dist/utils/validations/schema/custom-fields.js +7 -0
  148. package/dist/utils/validations/schema/validator-schema.cjs +102 -0
  149. package/dist/utils/validations/schema/validator-schema.js +99 -0
  150. package/dist/utils/validations/validators/index.cjs +45 -0
  151. package/dist/utils/validations/validators/index.js +42 -0
  152. package/dist/utils/validations/validators/multi-select-dropdown.validator.cjs +7 -0
  153. package/dist/utils/validations/validators/multi-select-dropdown.validator.js +7 -0
  154. package/dist/utils/validations/validators/multi-select-status.validator.cjs +10 -0
  155. package/dist/utils/validations/validators/multi-select-status.validator.js +10 -0
  156. package/dist/utils/validations/validators/multi-select.helpers.cjs +12 -0
  157. package/dist/utils/validations/validators/multi-select.helpers.js +10 -0
  158. package/dist/utils/validations/validators/select.validator.cjs +12 -0
  159. package/dist/utils/validations/validators/select.validator.js +10 -0
  160. package/dist/utils/validations/validators/status.validator.cjs +12 -0
  161. package/dist/utils/validations/validators/status.validator.js +10 -0
  162. package/package.json +4 -4
@@ -0,0 +1,25 @@
1
+ import { Model } from "sequelize-typescript";
2
+
3
+ //#region src/models/FieldPolicy.d.ts
4
+ type EntityType = "vehicle" | "driver";
5
+ type ModelMode = "full" | "partial";
6
+ type ModelInclusion = {
7
+ name: string;
8
+ mode: "full";
9
+ } | {
10
+ name: string;
11
+ mode: "partial";
12
+ fields: string[];
13
+ };
14
+ declare class FieldPolicy extends Model {
15
+ id: string;
16
+ contextId: string;
17
+ entityType: EntityType | null;
18
+ name: string;
19
+ /** Base-level field names to include */
20
+ fields: string[];
21
+ /** Model inclusions; full = all fields, partial = only listed fields */
22
+ models: ModelInclusion[];
23
+ }
24
+ //#endregion
25
+ export { EntityType, FieldPolicy, ModelInclusion, ModelMode };
@@ -0,0 +1,25 @@
1
+ import { Model } from "sequelize-typescript";
2
+
3
+ //#region src/models/FieldPolicy.d.ts
4
+ type EntityType = "vehicle" | "driver";
5
+ type ModelMode = "full" | "partial";
6
+ type ModelInclusion = {
7
+ name: string;
8
+ mode: "full";
9
+ } | {
10
+ name: string;
11
+ mode: "partial";
12
+ fields: string[];
13
+ };
14
+ declare class FieldPolicy extends Model {
15
+ id: string;
16
+ contextId: string;
17
+ entityType: EntityType | null;
18
+ name: string;
19
+ /** Base-level field names to include */
20
+ fields: string[];
21
+ /** Model inclusions; full = all fields, partial = only listed fields */
22
+ models: ModelInclusion[];
23
+ }
24
+ //#endregion
25
+ export { EntityType, FieldPolicy, ModelInclusion, ModelMode };
@@ -0,0 +1,53 @@
1
+ import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";
2
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";
3
+ import { Column, DataType, Default, Model, PrimaryKey, Table } from "sequelize-typescript";
4
+ import { randomUUID } from "node:crypto";
5
+
6
+ //#region src/models/FieldPolicy.ts
7
+ let FieldPolicy = class FieldPolicy$1 extends Model {};
8
+ __decorate([
9
+ PrimaryKey,
10
+ Default(() => randomUUID()),
11
+ Column({
12
+ type: DataType.UUID,
13
+ allowNull: false
14
+ }),
15
+ __decorateMetadata("design:type", String)
16
+ ], FieldPolicy.prototype, "id", void 0);
17
+ __decorate([Column({
18
+ type: DataType.UUID,
19
+ allowNull: false
20
+ }), __decorateMetadata("design:type", String)], FieldPolicy.prototype, "contextId", void 0);
21
+ __decorate([Column({
22
+ type: DataType.STRING,
23
+ allowNull: true
24
+ }), __decorateMetadata("design:type", Object)], FieldPolicy.prototype, "entityType", void 0);
25
+ __decorate([Column({
26
+ type: DataType.STRING,
27
+ allowNull: false
28
+ }), __decorateMetadata("design:type", String)], FieldPolicy.prototype, "name", void 0);
29
+ __decorate([Column({
30
+ type: DataType.JSONB,
31
+ allowNull: false,
32
+ defaultValue: []
33
+ }), __decorateMetadata("design:type", Array)], FieldPolicy.prototype, "fields", void 0);
34
+ __decorate([Column({
35
+ type: DataType.JSONB,
36
+ allowNull: false,
37
+ defaultValue: []
38
+ }), __decorateMetadata("design:type", Array)], FieldPolicy.prototype, "models", void 0);
39
+ FieldPolicy = __decorate([Table({
40
+ tableName: "field_policies",
41
+ modelName: "FieldPolicy",
42
+ timestamps: true,
43
+ underscored: true,
44
+ indexes: [{
45
+ name: "unique_context_policy",
46
+ fields: ["context_id", "name"],
47
+ unique: true
48
+ }]
49
+ })], FieldPolicy);
50
+ var FieldPolicy_default = FieldPolicy;
51
+
52
+ //#endregion
53
+ export { FieldPolicy_default as default };
@@ -0,0 +1,163 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_index = require('../utils/logger/index.cjs');
3
+ const require_CustomFieldValue = require('./CustomFieldValue.cjs');
4
+ const require_CustomFieldDefinition = require('./CustomFieldDefinition.cjs');
5
+ const require_AssociatedTestModel = require('./tests/AssociatedTestModel.cjs');
6
+ const require_TestModel = require('./tests/TestModel.cjs');
7
+ const require_ContextTestModel = require('./tests/contextAwareModels/ContextTestModel.cjs');
8
+ const require_ContextAwareTestModel = require('./tests/contextAwareModels/ContextAwareTestModel.cjs');
9
+ const require_CustomFieldEntries = require('./CustomFieldEntries.cjs');
10
+ const require_CustomValidator = require('./CustomValidator.cjs');
11
+ const require_CustomFieldModelTypeMap = require('./CustomFieldModelTypeMap.cjs');
12
+ const require_index$1 = require('../migrations/index.cjs');
13
+ let sequelize = require("sequelize");
14
+
15
+ //#region src/models/index.ts
16
+ const testModels = [
17
+ require_TestModel.default,
18
+ require_AssociatedTestModel.default,
19
+ require_ContextAwareTestModel.default,
20
+ require_ContextTestModel.default
21
+ ];
22
+ const SADOT_MIGRATION_PREFIX = "sadot-migration";
23
+ const SCHEMA_VERSION = "5f8e4a7c-9b2d-4e1f-8c3a-b6d9e2f7a4c1";
24
+ /**
25
+ * Legacy migration approach using sequelize.sync({ alter: true }).
26
+ * TODO: Remove this function once all consumers have migrated to umzug.
27
+ */
28
+ const legacySyncMigrations = async (sequelize$1, { schemaPrefix, schemaVersion, useCustomFieldsEntries, useModelTypeMapping }) => {
29
+ const SequelizeMeta = sequelize$1.define("SequelizeMeta", { name: {
30
+ type: sequelize.DataTypes.STRING,
31
+ allowNull: false,
32
+ unique: true,
33
+ primaryKey: true,
34
+ autoIncrement: false
35
+ } }, {
36
+ tableName: "SequelizeMeta",
37
+ timestamps: false,
38
+ schema: "public"
39
+ });
40
+ require_index.default.info("custom-fields: starting migrations");
41
+ const migrations = await SequelizeMeta.findAll({
42
+ where: { name: { [sequelize.Op.like]: `${schemaPrefix}%` } },
43
+ raw: true
44
+ });
45
+ const currentSadotSchemaVersion = migrations.at(-1);
46
+ const expectedSchemaVersionIndex = migrations.findIndex((m) => m.name === schemaVersion);
47
+ require_index.default.info("custom-fields: migrations", {
48
+ currentMigrations: migrations,
49
+ currentSadotSchemaVersion,
50
+ newSadotSchemaVersion: schemaVersion,
51
+ expectedSchemaVersionIndex
52
+ });
53
+ if (!currentSadotSchemaVersion || currentSadotSchemaVersion.name !== schemaVersion) {
54
+ require_index.default.info("custom-fields: syncing models");
55
+ try {
56
+ await require_CustomFieldDefinition.default.sync({ alter: true });
57
+ require_index.default.info("custom-fields: CustomFieldDefinition synced successfully");
58
+ await require_CustomFieldValue.default.sync({ alter: true });
59
+ require_index.default.info("custom-fields: CustomFieldValue synced successfully");
60
+ await require_CustomValidator.default.sync({ alter: true });
61
+ require_index.default.info("custom-fields: CustomValidator synced successfully");
62
+ if (useCustomFieldsEntries) {
63
+ await require_CustomFieldEntries.default.sync({ alter: true });
64
+ require_index.default.info("custom-fields: CustomFieldEntries synced successfully");
65
+ }
66
+ if (useModelTypeMapping) {
67
+ await require_CustomFieldModelTypeMap.default.sync({ alter: true });
68
+ require_index.default.info("custom-fields: CustomFieldModelTypeMap synced successfully");
69
+ }
70
+ if (expectedSchemaVersionIndex === -1) {
71
+ await SequelizeMeta.create({ name: schemaVersion });
72
+ require_index.default.info("custom-fields: SequelizeMeta entry created successfully");
73
+ }
74
+ require_index.default.info("custom-fields: models synced");
75
+ if (migrations.length && expectedSchemaVersionIndex !== -1 && expectedSchemaVersionIndex < migrations.length - 1) {
76
+ const migrationsToDelete = migrations.slice(expectedSchemaVersionIndex + 1);
77
+ require_index.default.info("custom-fields: deleting newer migrations during down migration", { count: migrationsToDelete.length });
78
+ await SequelizeMeta.destroy({ where: { name: { [sequelize.Op.in]: migrationsToDelete.map((m) => m.name) } } });
79
+ require_index.default.info("custom-fields: newer migrations deleted successfully");
80
+ }
81
+ } catch (error) {
82
+ require_index.default.error("custom-fields: failed to sync models", { error });
83
+ throw error;
84
+ }
85
+ }
86
+ };
87
+ const initTables = async (sequelize$1, getUser, { schemaPrefix = SADOT_MIGRATION_PREFIX, schemaVersion = SCHEMA_VERSION, useCustomFieldsEntries = false, useModelTypeMapping = false, runLegacyMigrations = false, isMatPathEnabled } = {}) => {
88
+ const CUSTOM_FIELDS_SCHEMA_VERSION = `${schemaPrefix}_${schemaVersion}${useCustomFieldsEntries ? "_withEntries" : ""}${useModelTypeMapping ? "_withTypeMapping" : ""}`;
89
+ require_index.default.info("custom-fields: initialize custom-fields tables");
90
+ if (!sequelize$1.addModels) throw new Error("sequelize instance must have addModels function");
91
+ const productionModels = [
92
+ require_CustomFieldDefinition.default,
93
+ require_CustomFieldValue.default,
94
+ require_CustomValidator.default,
95
+ ...useCustomFieldsEntries ? [require_CustomFieldEntries.default] : [],
96
+ ...useModelTypeMapping ? [require_CustomFieldModelTypeMap.default] : []
97
+ ];
98
+ sequelize$1.addModels(productionModels);
99
+ if (useModelTypeMapping) {
100
+ require_CustomFieldDefinition.default.hasMany(require_CustomFieldModelTypeMap.default, {
101
+ foreignKey: "customFieldDefinitionId",
102
+ as: "modelTypeMappings"
103
+ });
104
+ require_CustomFieldModelTypeMap.default.belongsTo(require_CustomFieldDefinition.default, {
105
+ foreignKey: "customFieldDefinitionId",
106
+ as: "customFieldDefinition"
107
+ });
108
+ }
109
+ require_CustomFieldDefinition.default.addScope("userScope", () => {
110
+ if (isMatPathEnabled?.()) return {};
111
+ const user = getUser();
112
+ if (!user?.permissions) return {};
113
+ return { where: { entityId: [
114
+ ...Object.keys(user.permissions.fleets),
115
+ ...Object.keys(user.permissions.businessModels),
116
+ ...Object.keys(user.permissions.demandSources)
117
+ ] } };
118
+ });
119
+ require_CustomValidator.default.addScope("userScope", () => {
120
+ if (isMatPathEnabled?.()) return {};
121
+ const user = getUser();
122
+ if (!user?.permissions) return {};
123
+ return { where: { entityId: [
124
+ ...Object.keys(user.permissions.fleets),
125
+ ...Object.keys(user.permissions.businessModels),
126
+ ...Object.keys(user.permissions.demandSources)
127
+ ] } };
128
+ });
129
+ require_index.default.info("custom-fields: models added");
130
+ if (runLegacyMigrations) {
131
+ require_index.default.info("custom-fields: running legacy sync migrations");
132
+ await legacySyncMigrations(sequelize$1, {
133
+ schemaPrefix,
134
+ schemaVersion: CUSTOM_FIELDS_SCHEMA_VERSION,
135
+ useCustomFieldsEntries,
136
+ useModelTypeMapping
137
+ });
138
+ return;
139
+ }
140
+ require_index.default.info("custom-fields: starting umzug migrations");
141
+ await require_index$1.runSadotMigrations(sequelize$1, {
142
+ useCustomFieldsEntries,
143
+ useModelTypeMapping
144
+ });
145
+ require_index.default.info("custom-fields: umzug migrations complete");
146
+ };
147
+ const initTestModels = async (sequelize$1) => {
148
+ require_index.default.info("custom-fields: initialize custom-fields test models");
149
+ if (!sequelize$1.addModels) throw new Error("sequelize instance must have addModels function");
150
+ sequelize$1.addModels(testModels);
151
+ await sequelize$1.dropSchema("custom-fields", { logging: false });
152
+ await sequelize$1.createSchema("custom-fields", { logging: false });
153
+ require_index.default.info("custom-fields: test models added");
154
+ await require_TestModel.default.sync({ alter: true });
155
+ await require_AssociatedTestModel.default.sync({ alter: true });
156
+ await require_ContextTestModel.default.sync({ alter: true });
157
+ await require_ContextAwareTestModel.default.sync({ alter: true });
158
+ require_index.default.info("custom-fields: test models synced");
159
+ };
160
+
161
+ //#endregion
162
+ exports.initTables = initTables;
163
+ exports.initTestModels = initTestModels;
@@ -0,0 +1,11 @@
1
+ import { CustomFieldValue } from "./CustomFieldValue.js";
2
+ import { CustomFieldModelTypeMap } from "./CustomFieldModelTypeMap.js";
3
+ import { CustomFieldDefinition } from "./CustomFieldDefinition.js";
4
+ import { CustomValidator } from "./CustomValidator.js";
5
+ import "../types/index.js";
6
+ import "./tests/AssociatedTestModel.js";
7
+ import "./tests/TestModel.js";
8
+ import "./tests/contextAwareModels/ContextTestModel.js";
9
+ import "./tests/contextAwareModels/ContextAwareTestModel.js";
10
+ import { CustomFieldEntries } from "./CustomFieldEntries.js";
11
+ import { Sequelize } from "sequelize-typescript";
@@ -0,0 +1,161 @@
1
+ import logger_default from "../utils/logger/index.js";
2
+ import CustomFieldValue_default from "./CustomFieldValue.js";
3
+ import CustomFieldDefinition_default from "./CustomFieldDefinition.js";
4
+ import AssociatedTestModel_default from "./tests/AssociatedTestModel.js";
5
+ import TestModel_default from "./tests/TestModel.js";
6
+ import ContextTestModel_default from "./tests/contextAwareModels/ContextTestModel.js";
7
+ import ContextAwareTestModel_default from "./tests/contextAwareModels/ContextAwareTestModel.js";
8
+ import CustomFieldEntries_default from "./CustomFieldEntries.js";
9
+ import CustomValidator_default from "./CustomValidator.js";
10
+ import CustomFieldModelTypeMap_default from "./CustomFieldModelTypeMap.js";
11
+ import { runSadotMigrations } from "../migrations/index.js";
12
+ import { DataTypes, Op } from "sequelize";
13
+
14
+ //#region src/models/index.ts
15
+ const testModels = [
16
+ TestModel_default,
17
+ AssociatedTestModel_default,
18
+ ContextAwareTestModel_default,
19
+ ContextTestModel_default
20
+ ];
21
+ const SADOT_MIGRATION_PREFIX = "sadot-migration";
22
+ const SCHEMA_VERSION = "5f8e4a7c-9b2d-4e1f-8c3a-b6d9e2f7a4c1";
23
+ /**
24
+ * Legacy migration approach using sequelize.sync({ alter: true }).
25
+ * TODO: Remove this function once all consumers have migrated to umzug.
26
+ */
27
+ const legacySyncMigrations = async (sequelize, { schemaPrefix, schemaVersion, useCustomFieldsEntries, useModelTypeMapping }) => {
28
+ const SequelizeMeta = sequelize.define("SequelizeMeta", { name: {
29
+ type: DataTypes.STRING,
30
+ allowNull: false,
31
+ unique: true,
32
+ primaryKey: true,
33
+ autoIncrement: false
34
+ } }, {
35
+ tableName: "SequelizeMeta",
36
+ timestamps: false,
37
+ schema: "public"
38
+ });
39
+ logger_default.info("custom-fields: starting migrations");
40
+ const migrations = await SequelizeMeta.findAll({
41
+ where: { name: { [Op.like]: `${schemaPrefix}%` } },
42
+ raw: true
43
+ });
44
+ const currentSadotSchemaVersion = migrations.at(-1);
45
+ const expectedSchemaVersionIndex = migrations.findIndex((m) => m.name === schemaVersion);
46
+ logger_default.info("custom-fields: migrations", {
47
+ currentMigrations: migrations,
48
+ currentSadotSchemaVersion,
49
+ newSadotSchemaVersion: schemaVersion,
50
+ expectedSchemaVersionIndex
51
+ });
52
+ if (!currentSadotSchemaVersion || currentSadotSchemaVersion.name !== schemaVersion) {
53
+ logger_default.info("custom-fields: syncing models");
54
+ try {
55
+ await CustomFieldDefinition_default.sync({ alter: true });
56
+ logger_default.info("custom-fields: CustomFieldDefinition synced successfully");
57
+ await CustomFieldValue_default.sync({ alter: true });
58
+ logger_default.info("custom-fields: CustomFieldValue synced successfully");
59
+ await CustomValidator_default.sync({ alter: true });
60
+ logger_default.info("custom-fields: CustomValidator synced successfully");
61
+ if (useCustomFieldsEntries) {
62
+ await CustomFieldEntries_default.sync({ alter: true });
63
+ logger_default.info("custom-fields: CustomFieldEntries synced successfully");
64
+ }
65
+ if (useModelTypeMapping) {
66
+ await CustomFieldModelTypeMap_default.sync({ alter: true });
67
+ logger_default.info("custom-fields: CustomFieldModelTypeMap synced successfully");
68
+ }
69
+ if (expectedSchemaVersionIndex === -1) {
70
+ await SequelizeMeta.create({ name: schemaVersion });
71
+ logger_default.info("custom-fields: SequelizeMeta entry created successfully");
72
+ }
73
+ logger_default.info("custom-fields: models synced");
74
+ if (migrations.length && expectedSchemaVersionIndex !== -1 && expectedSchemaVersionIndex < migrations.length - 1) {
75
+ const migrationsToDelete = migrations.slice(expectedSchemaVersionIndex + 1);
76
+ logger_default.info("custom-fields: deleting newer migrations during down migration", { count: migrationsToDelete.length });
77
+ await SequelizeMeta.destroy({ where: { name: { [Op.in]: migrationsToDelete.map((m) => m.name) } } });
78
+ logger_default.info("custom-fields: newer migrations deleted successfully");
79
+ }
80
+ } catch (error) {
81
+ logger_default.error("custom-fields: failed to sync models", { error });
82
+ throw error;
83
+ }
84
+ }
85
+ };
86
+ const initTables = async (sequelize, getUser, { schemaPrefix = SADOT_MIGRATION_PREFIX, schemaVersion = SCHEMA_VERSION, useCustomFieldsEntries = false, useModelTypeMapping = false, runLegacyMigrations = false, isMatPathEnabled } = {}) => {
87
+ const CUSTOM_FIELDS_SCHEMA_VERSION = `${schemaPrefix}_${schemaVersion}${useCustomFieldsEntries ? "_withEntries" : ""}${useModelTypeMapping ? "_withTypeMapping" : ""}`;
88
+ logger_default.info("custom-fields: initialize custom-fields tables");
89
+ if (!sequelize.addModels) throw new Error("sequelize instance must have addModels function");
90
+ const productionModels = [
91
+ CustomFieldDefinition_default,
92
+ CustomFieldValue_default,
93
+ CustomValidator_default,
94
+ ...useCustomFieldsEntries ? [CustomFieldEntries_default] : [],
95
+ ...useModelTypeMapping ? [CustomFieldModelTypeMap_default] : []
96
+ ];
97
+ sequelize.addModels(productionModels);
98
+ if (useModelTypeMapping) {
99
+ CustomFieldDefinition_default.hasMany(CustomFieldModelTypeMap_default, {
100
+ foreignKey: "customFieldDefinitionId",
101
+ as: "modelTypeMappings"
102
+ });
103
+ CustomFieldModelTypeMap_default.belongsTo(CustomFieldDefinition_default, {
104
+ foreignKey: "customFieldDefinitionId",
105
+ as: "customFieldDefinition"
106
+ });
107
+ }
108
+ CustomFieldDefinition_default.addScope("userScope", () => {
109
+ if (isMatPathEnabled?.()) return {};
110
+ const user = getUser();
111
+ if (!user?.permissions) return {};
112
+ return { where: { entityId: [
113
+ ...Object.keys(user.permissions.fleets),
114
+ ...Object.keys(user.permissions.businessModels),
115
+ ...Object.keys(user.permissions.demandSources)
116
+ ] } };
117
+ });
118
+ CustomValidator_default.addScope("userScope", () => {
119
+ if (isMatPathEnabled?.()) return {};
120
+ const user = getUser();
121
+ if (!user?.permissions) return {};
122
+ return { where: { entityId: [
123
+ ...Object.keys(user.permissions.fleets),
124
+ ...Object.keys(user.permissions.businessModels),
125
+ ...Object.keys(user.permissions.demandSources)
126
+ ] } };
127
+ });
128
+ logger_default.info("custom-fields: models added");
129
+ if (runLegacyMigrations) {
130
+ logger_default.info("custom-fields: running legacy sync migrations");
131
+ await legacySyncMigrations(sequelize, {
132
+ schemaPrefix,
133
+ schemaVersion: CUSTOM_FIELDS_SCHEMA_VERSION,
134
+ useCustomFieldsEntries,
135
+ useModelTypeMapping
136
+ });
137
+ return;
138
+ }
139
+ logger_default.info("custom-fields: starting umzug migrations");
140
+ await runSadotMigrations(sequelize, {
141
+ useCustomFieldsEntries,
142
+ useModelTypeMapping
143
+ });
144
+ logger_default.info("custom-fields: umzug migrations complete");
145
+ };
146
+ const initTestModels = async (sequelize) => {
147
+ logger_default.info("custom-fields: initialize custom-fields test models");
148
+ if (!sequelize.addModels) throw new Error("sequelize instance must have addModels function");
149
+ sequelize.addModels(testModels);
150
+ await sequelize.dropSchema("custom-fields", { logging: false });
151
+ await sequelize.createSchema("custom-fields", { logging: false });
152
+ logger_default.info("custom-fields: test models added");
153
+ await TestModel_default.sync({ alter: true });
154
+ await AssociatedTestModel_default.sync({ alter: true });
155
+ await ContextTestModel_default.sync({ alter: true });
156
+ await ContextAwareTestModel_default.sync({ alter: true });
157
+ logger_default.info("custom-fields: test models synced");
158
+ };
159
+
160
+ //#endregion
161
+ export { initTables, initTestModels };
@@ -0,0 +1,51 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_decorateMetadata = require('../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs');
3
+ const require_decorate = require('../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs');
4
+ const require_TestModel = require('./TestModel.cjs');
5
+ let sequelize_typescript = require("sequelize-typescript");
6
+
7
+ //#region src/models/tests/AssociatedTestModel.ts
8
+ var _ref;
9
+ let AssociatedTestModel = class AssociatedTestModel$1 extends sequelize_typescript.Model {};
10
+ require_decorate.__decorate([
11
+ sequelize_typescript.PrimaryKey,
12
+ (0, sequelize_typescript.Column)({
13
+ type: sequelize_typescript.DataType.UUID,
14
+ defaultValue: sequelize_typescript.DataType.UUIDV4,
15
+ allowNull: false
16
+ }),
17
+ require_decorateMetadata.__decorateMetadata("design:type", String)
18
+ ], AssociatedTestModel.prototype, "id", void 0);
19
+ require_decorate.__decorate([
20
+ (0, sequelize_typescript.ForeignKey)(() => require_TestModel.default),
21
+ (0, sequelize_typescript.Column)({
22
+ type: sequelize_typescript.DataType.UUID,
23
+ allowNull: false
24
+ }),
25
+ require_decorateMetadata.__decorateMetadata("design:type", String)
26
+ ], AssociatedTestModel.prototype, "testModelId", void 0);
27
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({
28
+ type: sequelize_typescript.DataType.UUID,
29
+ allowNull: false
30
+ }), require_decorateMetadata.__decorateMetadata("design:type", String)], AssociatedTestModel.prototype, "fleetId", void 0);
31
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({
32
+ type: sequelize_typescript.DataType.UUID,
33
+ allowNull: true
34
+ }), require_decorateMetadata.__decorateMetadata("design:type", String)], AssociatedTestModel.prototype, "businessModelId", void 0);
35
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({
36
+ type: sequelize_typescript.DataType.UUID,
37
+ allowNull: true
38
+ }), require_decorateMetadata.__decorateMetadata("design:type", String)], AssociatedTestModel.prototype, "demandSourceId", void 0);
39
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({ type: sequelize_typescript.DataType.BOOLEAN }), require_decorateMetadata.__decorateMetadata("design:type", Boolean)], AssociatedTestModel.prototype, "anotherAttribute", void 0);
40
+ require_decorate.__decorate([(0, sequelize_typescript.BelongsTo)(() => require_TestModel.default), require_decorateMetadata.__decorateMetadata("design:type", typeof (_ref = typeof require_TestModel.default !== "undefined" && require_TestModel.default) === "function" ? _ref : Object)], AssociatedTestModel.prototype, "testModel", void 0);
41
+ AssociatedTestModel = require_decorate.__decorate([(0, sequelize_typescript.Table)({
42
+ schema: "custom-fields",
43
+ tableName: "associated_test_models",
44
+ createdAt: false,
45
+ updatedAt: false,
46
+ modelName: "AssociatedTestModel"
47
+ })], AssociatedTestModel);
48
+ var AssociatedTestModel_default = AssociatedTestModel;
49
+
50
+ //#endregion
51
+ exports.default = AssociatedTestModel_default;
@@ -0,0 +1,2 @@
1
+ import "./TestModel.js";
2
+ import { Model } from "sequelize-typescript";
@@ -0,0 +1,50 @@
1
+ import { __decorateMetadata } from "../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";
2
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";
3
+ import TestModel_default from "./TestModel.js";
4
+ import { BelongsTo, Column, DataType, ForeignKey, Model, PrimaryKey, Table } from "sequelize-typescript";
5
+
6
+ //#region src/models/tests/AssociatedTestModel.ts
7
+ var _ref;
8
+ let AssociatedTestModel = class AssociatedTestModel$1 extends Model {};
9
+ __decorate([
10
+ PrimaryKey,
11
+ Column({
12
+ type: DataType.UUID,
13
+ defaultValue: DataType.UUIDV4,
14
+ allowNull: false
15
+ }),
16
+ __decorateMetadata("design:type", String)
17
+ ], AssociatedTestModel.prototype, "id", void 0);
18
+ __decorate([
19
+ ForeignKey(() => TestModel_default),
20
+ Column({
21
+ type: DataType.UUID,
22
+ allowNull: false
23
+ }),
24
+ __decorateMetadata("design:type", String)
25
+ ], AssociatedTestModel.prototype, "testModelId", void 0);
26
+ __decorate([Column({
27
+ type: DataType.UUID,
28
+ allowNull: false
29
+ }), __decorateMetadata("design:type", String)], AssociatedTestModel.prototype, "fleetId", void 0);
30
+ __decorate([Column({
31
+ type: DataType.UUID,
32
+ allowNull: true
33
+ }), __decorateMetadata("design:type", String)], AssociatedTestModel.prototype, "businessModelId", void 0);
34
+ __decorate([Column({
35
+ type: DataType.UUID,
36
+ allowNull: true
37
+ }), __decorateMetadata("design:type", String)], AssociatedTestModel.prototype, "demandSourceId", void 0);
38
+ __decorate([Column({ type: DataType.BOOLEAN }), __decorateMetadata("design:type", Boolean)], AssociatedTestModel.prototype, "anotherAttribute", void 0);
39
+ __decorate([BelongsTo(() => TestModel_default), __decorateMetadata("design:type", typeof (_ref = typeof TestModel_default !== "undefined" && TestModel_default) === "function" ? _ref : Object)], AssociatedTestModel.prototype, "testModel", void 0);
40
+ AssociatedTestModel = __decorate([Table({
41
+ schema: "custom-fields",
42
+ tableName: "associated_test_models",
43
+ createdAt: false,
44
+ updatedAt: false,
45
+ modelName: "AssociatedTestModel"
46
+ })], AssociatedTestModel);
47
+ var AssociatedTestModel_default = AssociatedTestModel;
48
+
49
+ //#endregion
50
+ export { AssociatedTestModel_default as default };
@@ -0,0 +1,43 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_decorateMetadata = require('../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs');
3
+ const require_decorate = require('../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs');
4
+ const require_AssociatedTestModel = require('./AssociatedTestModel.cjs');
5
+ let sequelize_typescript = require("sequelize-typescript");
6
+
7
+ //#region src/models/tests/TestModel.ts
8
+ let TestModel = class TestModel$1 extends sequelize_typescript.Model {};
9
+ require_decorate.__decorate([
10
+ sequelize_typescript.PrimaryKey,
11
+ (0, sequelize_typescript.Column)({
12
+ type: sequelize_typescript.DataType.UUID,
13
+ defaultValue: sequelize_typescript.DataType.UUIDV4,
14
+ allowNull: false
15
+ }),
16
+ require_decorateMetadata.__decorateMetadata("design:type", String)
17
+ ], TestModel.prototype, "id", void 0);
18
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({
19
+ type: sequelize_typescript.DataType.UUID,
20
+ allowNull: false
21
+ }), require_decorateMetadata.__decorateMetadata("design:type", String)], TestModel.prototype, "fleetId", void 0);
22
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({
23
+ type: sequelize_typescript.DataType.UUID,
24
+ allowNull: true
25
+ }), require_decorateMetadata.__decorateMetadata("design:type", String)], TestModel.prototype, "businessModelId", void 0);
26
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({
27
+ type: sequelize_typescript.DataType.UUID,
28
+ allowNull: true
29
+ }), require_decorateMetadata.__decorateMetadata("design:type", String)], TestModel.prototype, "demandSourceId", void 0);
30
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({ type: sequelize_typescript.DataType.BOOLEAN }), require_decorateMetadata.__decorateMetadata("design:type", Boolean)], TestModel.prototype, "coolAttribute", void 0);
31
+ require_decorate.__decorate([(0, sequelize_typescript.HasMany)(() => require_AssociatedTestModel.default), require_decorateMetadata.__decorateMetadata("design:type", Array)], TestModel.prototype, "associatedModels", void 0);
32
+ require_decorate.__decorate([(0, sequelize_typescript.Column)({ type: sequelize_typescript.DataType.VIRTUAL }), require_decorateMetadata.__decorateMetadata("design:type", Object)], TestModel.prototype, "customFields", void 0);
33
+ TestModel = require_decorate.__decorate([(0, sequelize_typescript.Table)({
34
+ schema: "custom-fields",
35
+ tableName: "test_models",
36
+ createdAt: false,
37
+ updatedAt: false,
38
+ modelName: "TestModel"
39
+ })], TestModel);
40
+ var TestModel_default = TestModel;
41
+
42
+ //#endregion
43
+ exports.default = TestModel_default;
@@ -0,0 +1,2 @@
1
+ import "./AssociatedTestModel.js";
2
+ import { Model } from "sequelize-typescript";
@@ -0,0 +1,42 @@
1
+ import { __decorateMetadata } from "../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";
2
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";
3
+ import AssociatedTestModel_default from "./AssociatedTestModel.js";
4
+ import { Column, DataType, HasMany, Model, PrimaryKey, Table } from "sequelize-typescript";
5
+
6
+ //#region src/models/tests/TestModel.ts
7
+ let TestModel = class TestModel$1 extends Model {};
8
+ __decorate([
9
+ PrimaryKey,
10
+ Column({
11
+ type: DataType.UUID,
12
+ defaultValue: DataType.UUIDV4,
13
+ allowNull: false
14
+ }),
15
+ __decorateMetadata("design:type", String)
16
+ ], TestModel.prototype, "id", void 0);
17
+ __decorate([Column({
18
+ type: DataType.UUID,
19
+ allowNull: false
20
+ }), __decorateMetadata("design:type", String)], TestModel.prototype, "fleetId", void 0);
21
+ __decorate([Column({
22
+ type: DataType.UUID,
23
+ allowNull: true
24
+ }), __decorateMetadata("design:type", String)], TestModel.prototype, "businessModelId", void 0);
25
+ __decorate([Column({
26
+ type: DataType.UUID,
27
+ allowNull: true
28
+ }), __decorateMetadata("design:type", String)], TestModel.prototype, "demandSourceId", void 0);
29
+ __decorate([Column({ type: DataType.BOOLEAN }), __decorateMetadata("design:type", Boolean)], TestModel.prototype, "coolAttribute", void 0);
30
+ __decorate([HasMany(() => AssociatedTestModel_default), __decorateMetadata("design:type", Array)], TestModel.prototype, "associatedModels", void 0);
31
+ __decorate([Column({ type: DataType.VIRTUAL }), __decorateMetadata("design:type", Object)], TestModel.prototype, "customFields", void 0);
32
+ TestModel = __decorate([Table({
33
+ schema: "custom-fields",
34
+ tableName: "test_models",
35
+ createdAt: false,
36
+ updatedAt: false,
37
+ modelName: "TestModel"
38
+ })], TestModel);
39
+ var TestModel_default = TestModel;
40
+
41
+ //#endregion
42
+ export { TestModel_default as default };