@autofleet/sadot 1.6.18-beta.7 → 1.6.18
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.
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs +1 -11
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js +1 -10
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs +1 -8
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js +1 -7
- package/dist/_virtual/rolldown_runtime.cjs +1 -43
- package/dist/_virtual/rolldown_runtime.js +1 -21
- package/dist/api/index.cjs +2 -12
- package/dist/api/index.cjs.map +1 -0
- package/dist/api/index.js +2 -11
- package/dist/api/index.js.map +1 -0
- package/dist/api/v1/definition/index.cjs +2 -113
- package/dist/api/v1/definition/index.cjs.map +1 -0
- package/dist/api/v1/definition/index.js +2 -112
- package/dist/api/v1/definition/index.js.map +1 -0
- package/dist/api/v1/definition/validations.cjs +2 -128
- package/dist/api/v1/definition/validations.cjs.map +1 -0
- package/dist/api/v1/definition/validations.js +2 -125
- package/dist/api/v1/definition/validations.js.map +1 -0
- package/dist/api/v1/errors.cjs +2 -14
- package/dist/api/v1/errors.cjs.map +1 -0
- package/dist/api/v1/errors.js +2 -13
- package/dist/api/v1/errors.js.map +1 -0
- package/dist/api/v1/index.cjs +2 -16
- package/dist/api/v1/index.cjs.map +1 -0
- package/dist/api/v1/index.js +2 -15
- package/dist/api/v1/index.js.map +1 -0
- package/dist/api/v1/validator/index.cjs +2 -115
- package/dist/api/v1/validator/index.cjs.map +1 -0
- package/dist/api/v1/validator/index.js +2 -114
- package/dist/api/v1/validator/index.js.map +1 -0
- package/dist/api/v1/validator/validations.cjs +2 -40
- package/dist/api/v1/validator/validations.cjs.map +1 -0
- package/dist/api/v1/validator/validations.d.cts +2 -1
- package/dist/api/v1/validator/validations.d.ts +2 -1
- package/dist/api/v1/validator/validations.js +2 -38
- package/dist/api/v1/validator/validations.js.map +1 -0
- package/dist/errors/index.cjs +3 -62
- package/dist/errors/index.cjs.map +1 -0
- package/dist/errors/index.js +3 -55
- package/dist/errors/index.js.map +1 -0
- package/dist/events/index.cjs +2 -52
- package/dist/events/index.cjs.map +1 -0
- package/dist/events/index.js +2 -50
- package/dist/events/index.js.map +1 -0
- package/dist/hooks/enrich.cjs +2 -175
- package/dist/hooks/enrich.cjs.map +1 -0
- package/dist/hooks/enrich.js +2 -175
- package/dist/hooks/enrich.js.map +1 -0
- package/dist/hooks/find.cjs +2 -22
- package/dist/hooks/find.cjs.map +1 -0
- package/dist/hooks/find.js +2 -22
- package/dist/hooks/find.js.map +1 -0
- package/dist/hooks/hooks.cjs +2 -310
- package/dist/hooks/hooks.cjs.map +1 -0
- package/dist/hooks/hooks.js +2 -302
- package/dist/hooks/hooks.js.map +1 -0
- package/dist/hooks/index.cjs +1 -3
- package/dist/hooks/index.js +1 -5
- package/dist/hooks/utils/updateInstanceValues.cjs +2 -27
- package/dist/hooks/utils/updateInstanceValues.cjs.map +1 -0
- package/dist/hooks/utils/updateInstanceValues.js +2 -27
- package/dist/hooks/utils/updateInstanceValues.js.map +1 -0
- package/dist/index.cjs +2 -83
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +2 -62
- package/dist/index.js.map +1 -0
- package/dist/init-state.cjs +2 -56
- package/dist/init-state.cjs.map +1 -0
- package/dist/init-state.d.cts +2 -1
- package/dist/init-state.d.ts +2 -1
- package/dist/init-state.js +2 -55
- package/dist/init-state.js.map +1 -0
- package/dist/mat-path-state.cjs +2 -10
- package/dist/mat-path-state.cjs.map +1 -0
- package/dist/mat-path-state.js +2 -9
- package/dist/mat-path-state.js.map +1 -0
- package/dist/migrations/001-create-core-tables.cjs +7 -25
- package/dist/migrations/001-create-core-tables.cjs.map +1 -0
- package/dist/migrations/001-create-core-tables.js +7 -23
- package/dist/migrations/001-create-core-tables.js.map +1 -0
- package/dist/migrations/002-create-custom-field-entries.cjs +4 -16
- package/dist/migrations/002-create-custom-field-entries.cjs.map +1 -0
- package/dist/migrations/002-create-custom-field-entries.js +4 -14
- package/dist/migrations/002-create-custom-field-entries.js.map +1 -0
- package/dist/migrations/003-create-custom-field-model-type-map.cjs +6 -20
- package/dist/migrations/003-create-custom-field-model-type-map.cjs.map +1 -0
- package/dist/migrations/003-create-custom-field-model-type-map.js +6 -18
- package/dist/migrations/003-create-custom-field-model-type-map.js.map +1 -0
- package/dist/migrations/index.cjs +2 -88
- package/dist/migrations/index.cjs.map +1 -0
- package/dist/migrations/index.js +2 -89
- package/dist/migrations/index.js.map +1 -0
- package/dist/models/CustomFieldDefinition.cjs +2 -147
- package/dist/models/CustomFieldDefinition.cjs.map +1 -0
- package/dist/models/CustomFieldDefinition.d.cts +2 -1
- package/dist/models/CustomFieldDefinition.d.ts +2 -1
- package/dist/models/CustomFieldDefinition.js +2 -146
- package/dist/models/CustomFieldDefinition.js.map +1 -0
- package/dist/models/CustomFieldEntries.cjs +2 -71
- package/dist/models/CustomFieldEntries.cjs.map +1 -0
- package/dist/models/CustomFieldEntries.d.cts +2 -1
- package/dist/models/CustomFieldEntries.d.ts +2 -1
- package/dist/models/CustomFieldEntries.js +2 -70
- package/dist/models/CustomFieldEntries.js.map +1 -0
- package/dist/models/CustomFieldModelTypeMap.cjs +2 -62
- package/dist/models/CustomFieldModelTypeMap.cjs.map +1 -0
- package/dist/models/CustomFieldModelTypeMap.d.cts +2 -1
- package/dist/models/CustomFieldModelTypeMap.d.ts +2 -1
- package/dist/models/CustomFieldModelTypeMap.js +2 -61
- package/dist/models/CustomFieldModelTypeMap.js.map +1 -0
- package/dist/models/CustomFieldValue.cjs +2 -109
- package/dist/models/CustomFieldValue.cjs.map +1 -0
- package/dist/models/CustomFieldValue.d.cts +2 -1
- package/dist/models/CustomFieldValue.d.ts +2 -1
- package/dist/models/CustomFieldValue.js +2 -108
- package/dist/models/CustomFieldValue.js.map +1 -0
- package/dist/models/CustomValidator.cjs +2 -68
- package/dist/models/CustomValidator.cjs.map +1 -0
- package/dist/models/CustomValidator.d.cts +2 -1
- package/dist/models/CustomValidator.d.ts +2 -1
- package/dist/models/CustomValidator.js +2 -67
- package/dist/models/CustomValidator.js.map +1 -0
- package/dist/models/index.cjs +2 -163
- package/dist/models/index.cjs.map +1 -0
- package/dist/models/index.d.cts +7 -0
- package/dist/models/index.d.ts +0 -4
- package/dist/models/index.js +2 -161
- package/dist/models/index.js.map +1 -0
- package/dist/models/tests/AssociatedTestModel.cjs +2 -51
- package/dist/models/tests/AssociatedTestModel.cjs.map +1 -0
- package/dist/models/tests/AssociatedTestModel.js +2 -50
- package/dist/models/tests/AssociatedTestModel.js.map +1 -0
- package/dist/models/tests/TestModel.cjs +2 -43
- package/dist/models/tests/TestModel.cjs.map +1 -0
- package/dist/models/tests/TestModel.js +2 -42
- package/dist/models/tests/TestModel.js.map +1 -0
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs +2 -35
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs.map +1 -0
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js +2 -34
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js.map +1 -0
- package/dist/models/tests/contextAwareModels/ContextTestModel.cjs +2 -33
- package/dist/models/tests/contextAwareModels/ContextTestModel.cjs.map +1 -0
- package/dist/models/tests/contextAwareModels/ContextTestModel.js +2 -32
- package/dist/models/tests/contextAwareModels/ContextTestModel.js.map +1 -0
- package/dist/repository/definition.cjs +2 -221
- package/dist/repository/definition.cjs.map +1 -0
- package/dist/repository/definition.js +2 -212
- package/dist/repository/definition.js.map +1 -0
- package/dist/repository/entries.cjs +2 -69
- package/dist/repository/entries.cjs.map +1 -0
- package/dist/repository/entries.js +2 -67
- package/dist/repository/entries.js.map +1 -0
- package/dist/repository/utils/formatValues.cjs +2 -14
- package/dist/repository/utils/formatValues.cjs.map +1 -0
- package/dist/repository/utils/formatValues.js +2 -14
- package/dist/repository/utils/formatValues.js.map +1 -0
- package/dist/repository/validator.cjs +2 -58
- package/dist/repository/validator.cjs.map +1 -0
- package/dist/repository/validator.js +2 -54
- package/dist/repository/validator.js.map +1 -0
- package/dist/repository/value.cjs +2 -77
- package/dist/repository/value.cjs.map +1 -0
- package/dist/repository/value.js +2 -76
- package/dist/repository/value.js.map +1 -0
- package/dist/scopes/filter.cjs +2 -56
- package/dist/scopes/filter.cjs.map +1 -0
- package/dist/scopes/filter.d.cts +2 -1
- package/dist/scopes/filter.d.ts +2 -1
- package/dist/scopes/filter.js +2 -54
- package/dist/scopes/filter.js.map +1 -0
- package/dist/scopes/helpers/filter.helpers.cjs +25 -131
- package/dist/scopes/helpers/filter.helpers.cjs.map +1 -0
- package/dist/scopes/helpers/filter.helpers.d.cts +2 -1
- package/dist/scopes/helpers/filter.helpers.d.ts +2 -1
- package/dist/scopes/helpers/filter.helpers.js +25 -126
- package/dist/scopes/helpers/filter.helpers.js.map +1 -0
- package/dist/scopes/index.cjs +1 -1
- package/dist/scopes/index.js +1 -3
- package/dist/types/index.d.cts +4 -2
- package/dist/types/index.d.ts +4 -2
- package/dist/utils/constants/index.cjs +2 -32
- package/dist/utils/constants/index.cjs.map +1 -0
- package/dist/utils/constants/index.d.cts +2 -1
- package/dist/utils/constants/index.d.ts +2 -1
- package/dist/utils/constants/index.js +2 -29
- package/dist/utils/constants/index.js.map +1 -0
- package/dist/utils/db/index.cjs +2 -15
- package/dist/utils/db/index.cjs.map +1 -0
- package/dist/utils/db/index.js +2 -14
- package/dist/utils/db/index.js.map +1 -0
- package/dist/utils/helpers/index.cjs +2 -23
- package/dist/utils/helpers/index.cjs.map +1 -0
- package/dist/utils/helpers/index.d.cts +2 -1
- package/dist/utils/helpers/index.d.ts +2 -1
- package/dist/utils/helpers/index.js +2 -21
- package/dist/utils/helpers/index.js.map +1 -0
- package/dist/utils/init.cjs +2 -115
- package/dist/utils/init.cjs.map +1 -0
- package/dist/utils/init.js +2 -111
- package/dist/utils/init.js.map +1 -0
- package/dist/utils/logger/index.cjs +2 -15
- package/dist/utils/logger/index.cjs.map +1 -0
- package/dist/utils/logger/index.js +2 -12
- package/dist/utils/logger/index.js.map +1 -0
- package/dist/utils/scopeAttributes.cjs +2 -12
- package/dist/utils/scopeAttributes.cjs.map +1 -0
- package/dist/utils/scopeAttributes.js +2 -11
- package/dist/utils/scopeAttributes.js.map +1 -0
- package/dist/utils/validations/index.cjs +2 -34
- package/dist/utils/validations/index.cjs.map +1 -0
- package/dist/utils/validations/index.js +2 -32
- package/dist/utils/validations/index.js.map +1 -0
- package/dist/utils/validations/schema/custom-fields.cjs +2 -9
- package/dist/utils/validations/schema/custom-fields.cjs.map +1 -0
- package/dist/utils/validations/schema/custom-fields.d.cts +2 -1
- package/dist/utils/validations/schema/custom-fields.d.ts +2 -1
- package/dist/utils/validations/schema/custom-fields.js +2 -7
- package/dist/utils/validations/schema/custom-fields.js.map +1 -0
- package/dist/utils/validations/schema/validator-schema.cjs +2 -102
- package/dist/utils/validations/schema/validator-schema.cjs.map +1 -0
- package/dist/utils/validations/schema/validator-schema.js +2 -99
- package/dist/utils/validations/schema/validator-schema.js.map +1 -0
- package/dist/utils/validations/validators/index.cjs +2 -45
- package/dist/utils/validations/validators/index.cjs.map +1 -0
- package/dist/utils/validations/validators/index.js +2 -42
- package/dist/utils/validations/validators/index.js.map +1 -0
- package/dist/utils/validations/validators/multi-select-dropdown.validator.cjs +2 -7
- package/dist/utils/validations/validators/multi-select-dropdown.validator.cjs.map +1 -0
- package/dist/utils/validations/validators/multi-select-dropdown.validator.js +2 -7
- package/dist/utils/validations/validators/multi-select-dropdown.validator.js.map +1 -0
- package/dist/utils/validations/validators/multi-select-status.validator.cjs +2 -10
- package/dist/utils/validations/validators/multi-select-status.validator.cjs.map +1 -0
- package/dist/utils/validations/validators/multi-select-status.validator.js +2 -10
- package/dist/utils/validations/validators/multi-select-status.validator.js.map +1 -0
- package/dist/utils/validations/validators/multi-select.helpers.cjs +2 -12
- package/dist/utils/validations/validators/multi-select.helpers.cjs.map +1 -0
- package/dist/utils/validations/validators/multi-select.helpers.js +2 -10
- package/dist/utils/validations/validators/multi-select.helpers.js.map +1 -0
- package/dist/utils/validations/validators/select.validator.cjs +2 -12
- package/dist/utils/validations/validators/select.validator.cjs.map +1 -0
- package/dist/utils/validations/validators/select.validator.js +2 -10
- package/dist/utils/validations/validators/select.validator.js.map +1 -0
- package/dist/utils/validations/validators/status.validator.cjs +2 -12
- package/dist/utils/validations/validators/status.validator.cjs.map +1 -0
- package/dist/utils/validations/validators/status.validator.js +2 -10
- package/dist/utils/validations/validators/status.validator.js.map +1 -0
- package/package.json +3 -3
- package/dist/api/v1/field-policies/index.cjs +0 -84
- package/dist/api/v1/field-policies/index.js +0 -83
- package/dist/migrations/004-create-field-policy-tables.cjs +0 -29
- package/dist/migrations/004-create-field-policy-tables.js +0 -27
- package/dist/models/FieldPolicy.cjs +0 -50
- package/dist/models/FieldPolicy.d.cts +0 -23
- package/dist/models/FieldPolicy.d.ts +0 -23
- package/dist/models/FieldPolicy.js +0 -49
- package/dist/models/tests/AssociatedTestModel.d.ts +0 -2
- package/dist/models/tests/TestModel.d.ts +0 -2
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.d.ts +0 -2
- package/dist/models/tests/contextAwareModels/ContextTestModel.d.ts +0 -1
- package/dist/repository/field-policy.cjs +0 -46
- package/dist/repository/field-policy.d.cts +0 -31
- package/dist/repository/field-policy.d.ts +0 -31
- package/dist/repository/field-policy.js +0 -37
|
@@ -1,88 +1,2 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
const require_002_create_custom_field_entries = require('./002-create-custom-field-entries.cjs');
|
|
4
|
-
const require_003_create_custom_field_model_type_map = require('./003-create-custom-field-model-type-map.cjs');
|
|
5
|
-
const require_004_create_field_policy_tables = require('./004-create-field-policy-tables.cjs');
|
|
6
|
-
|
|
7
|
-
//#region src/migrations/index.ts
|
|
8
|
-
const { Umzug, SequelizeStorage } = require("umzug");
|
|
9
|
-
const buildMigrationList = (options) => {
|
|
10
|
-
const { useCustomFieldsEntries = false, useModelTypeMapping = false } = options;
|
|
11
|
-
return [
|
|
12
|
-
{
|
|
13
|
-
name: "001-create-core-tables",
|
|
14
|
-
up: require_001_create_core_tables.up,
|
|
15
|
-
down: require_001_create_core_tables.down
|
|
16
|
-
},
|
|
17
|
-
...useCustomFieldsEntries ? [{
|
|
18
|
-
name: "002-create-custom-field-entries",
|
|
19
|
-
up: require_002_create_custom_field_entries.up,
|
|
20
|
-
down: require_002_create_custom_field_entries.down
|
|
21
|
-
}] : [],
|
|
22
|
-
...useModelTypeMapping ? [{
|
|
23
|
-
name: "003-create-custom-field-model-type-map",
|
|
24
|
-
up: require_003_create_custom_field_model_type_map.up,
|
|
25
|
-
down: require_003_create_custom_field_model_type_map.down
|
|
26
|
-
}] : [],
|
|
27
|
-
{
|
|
28
|
-
name: "004-create-field-policy-tables",
|
|
29
|
-
up: require_004_create_field_policy_tables.up,
|
|
30
|
-
down: require_004_create_field_policy_tables.down
|
|
31
|
-
}
|
|
32
|
-
];
|
|
33
|
-
};
|
|
34
|
-
const SADOT_MIGRATION_LOCK_ID = 839274628;
|
|
35
|
-
/**
|
|
36
|
-
* Runs sadot migrations via umzug. All migrations use IF NOT EXISTS / IF EXISTS,
|
|
37
|
-
* so they are fully idempotent — safe to run against both fresh and existing
|
|
38
|
-
* databases (including DBs previously managed by the legacy sync() path).
|
|
39
|
-
*
|
|
40
|
-
* A PostgreSQL advisory lock is acquired before running migrations so that when
|
|
41
|
-
* multiple pods start concurrently only one of them executes the migrations.
|
|
42
|
-
* The remaining pods block until the lock is released, then proceed — Umzug will
|
|
43
|
-
* see the migrations have already been applied and skip them.
|
|
44
|
-
*/
|
|
45
|
-
const runSadotMigrations = async (sequelize, options = {}) => {
|
|
46
|
-
const queryInterface = sequelize.getQueryInterface();
|
|
47
|
-
const storage = new SequelizeStorage({
|
|
48
|
-
sequelize,
|
|
49
|
-
tableName: "sadot_migrations"
|
|
50
|
-
});
|
|
51
|
-
const migrator = new Umzug({
|
|
52
|
-
migrations: buildMigrationList(options),
|
|
53
|
-
context: queryInterface,
|
|
54
|
-
storage,
|
|
55
|
-
logger: {
|
|
56
|
-
info: (msg) => require_index.default.info(`[sadot] ${JSON.stringify(msg)}`),
|
|
57
|
-
warn: (msg) => require_index.default.warn(`[sadot] ${JSON.stringify(msg)}`),
|
|
58
|
-
error: (msg) => require_index.default.error(`[sadot] ${JSON.stringify(msg)}`),
|
|
59
|
-
debug: (msg) => require_index.default.debug(`[sadot] ${JSON.stringify(msg)}`)
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
const pending = await migrator.pending();
|
|
63
|
-
if (pending.length === 0) {
|
|
64
|
-
require_index.default.info("[sadot] no pending migrations, skipping");
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
require_index.default.info("[sadot] pending migrations detected", { pending: pending.map((m) => m.name) });
|
|
68
|
-
if ((sequelize.options?.pool?.max ?? 5) < 2) {
|
|
69
|
-
require_index.default.info("[sadot] connection pool too small for advisory lock, running migrations directly");
|
|
70
|
-
await migrator.up();
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
require_index.default.info("[sadot] acquiring advisory lock");
|
|
74
|
-
const transaction = await sequelize.transaction();
|
|
75
|
-
try {
|
|
76
|
-
await sequelize.query(`SELECT pg_advisory_lock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });
|
|
77
|
-
require_index.default.info("[sadot] advisory lock acquired");
|
|
78
|
-
if ((await migrator.pending()).length > 0) await migrator.up();
|
|
79
|
-
else require_index.default.info("[sadot] migrations already applied by another instance, skipping");
|
|
80
|
-
} finally {
|
|
81
|
-
await sequelize.query(`SELECT pg_advisory_unlock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });
|
|
82
|
-
await transaction.commit();
|
|
83
|
-
require_index.default.info("[sadot] advisory lock released");
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
//#endregion
|
|
88
|
-
exports.runSadotMigrations = runSadotMigrations;
|
|
1
|
+
const e=require(`../utils/logger/index.cjs`),t=require(`./001-create-core-tables.cjs`),n=require(`./002-create-custom-field-entries.cjs`),r=require(`./003-create-custom-field-model-type-map.cjs`),{Umzug:i,SequelizeStorage:a}=require(`umzug`),o=e=>{let{useCustomFieldsEntries:i=!1,useModelTypeMapping:a=!1}=e;return[{name:`001-create-core-tables`,up:t.up,down:t.down},...i?[{name:`002-create-custom-field-entries`,up:n.up,down:n.down}]:[],...a?[{name:`003-create-custom-field-model-type-map`,up:r.up,down:r.down}]:[]]},s=839274628,c=async(t,n={})=>{let r=t.getQueryInterface(),c=new a({sequelize:t,tableName:`sadot_migrations`}),l=new i({migrations:o(n),context:r,storage:c,logger:{info:t=>e.default.info(`[sadot] ${JSON.stringify(t)}`),warn:t=>e.default.warn(`[sadot] ${JSON.stringify(t)}`),error:t=>e.default.error(`[sadot] ${JSON.stringify(t)}`),debug:t=>e.default.debug(`[sadot] ${JSON.stringify(t)}`)}}),u=await l.pending();if(u.length===0){e.default.info(`[sadot] no pending migrations, skipping`);return}if(e.default.info(`[sadot] pending migrations detected`,{pending:u.map(e=>e.name)}),(t.options?.pool?.max??5)<2){e.default.info(`[sadot] connection pool too small for advisory lock, running migrations directly`),await l.up();return}e.default.info(`[sadot] acquiring advisory lock`);let d=await t.transaction();try{await t.query(`SELECT pg_advisory_lock(${s})`,{transaction:d}),e.default.info(`[sadot] advisory lock acquired`),(await l.pending()).length>0?await l.up():e.default.info(`[sadot] migrations already applied by another instance, skipping`)}finally{await t.query(`SELECT pg_advisory_unlock(${s})`,{transaction:d}),await d.commit(),e.default.info(`[sadot] advisory lock released`)}};exports.runSadotMigrations=c;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["logger"],"sources":["../../src/migrations/index.ts"],"sourcesContent":["import type { InputMigrations } from 'umzug';\nimport type { QueryInterface } from 'sequelize';\nimport type { Sequelize } from 'sequelize-typescript';\nimport logger from '../utils/logger';\nimport * as migration001 from './001-create-core-tables';\nimport * as migration002 from './002-create-custom-field-entries';\nimport * as migration003 from './003-create-custom-field-model-type-map';\n\n// umzug is CJS. Static ESM named imports break in vitest after vi.resetModules()\n// because Vite's SSR transform re-evaluates the module outside the inline bundle.\n// require() goes through Node's native CJS loader and is stable across resets.\n\n// eslint-disable-next-line import/no-commonjs, @typescript-eslint/no-require-imports\nconst { Umzug, SequelizeStorage } = require('umzug') as typeof import('umzug');\n\ninterface MigratorOptions {\n useCustomFieldsEntries?: boolean;\n useModelTypeMapping?: boolean;\n}\n\nconst buildMigrationList = (options: MigratorOptions): InputMigrations<QueryInterface> => {\n const { useCustomFieldsEntries = false, useModelTypeMapping = false } = options;\n return [\n { name: '001-create-core-tables', up: migration001.up, down: migration001.down },\n ...(useCustomFieldsEntries ? [{ name: '002-create-custom-field-entries', up: migration002.up, down: migration002.down }] : []),\n ...(useModelTypeMapping ? [{ name: '003-create-custom-field-model-type-map', up: migration003.up, down: migration003.down }] : []),\n ];\n};\n\n// Stable advisory-lock ID for sadot migrations. Chosen arbitrarily; must not\n// collide with other advisory locks in the same database.\nconst SADOT_MIGRATION_LOCK_ID = 839274628;\n\n/**\n * Runs sadot migrations via umzug. All migrations use IF NOT EXISTS / IF EXISTS,\n * so they are fully idempotent — safe to run against both fresh and existing\n * databases (including DBs previously managed by the legacy sync() path).\n *\n * A PostgreSQL advisory lock is acquired before running migrations so that when\n * multiple pods start concurrently only one of them executes the migrations.\n * The remaining pods block until the lock is released, then proceed — Umzug will\n * see the migrations have already been applied and skip them.\n */\nconst runSadotMigrations = async (sequelize: Sequelize, options: MigratorOptions = {}): Promise<void> => {\n // Need to add a new migration? full migration guide here; https://www.notion.so/autofleet/How-to-Add-a-New-Migration-to-Sadot-36db603f40b98023b239d3c61aa22b00\n const queryInterface = sequelize.getQueryInterface() as unknown as QueryInterface;\n const storage = new SequelizeStorage({ sequelize: sequelize as never, tableName: 'sadot_migrations' });\n\n const umzugLogger = {\n info: (msg: Record<string, unknown>) => logger.info(`[sadot] ${JSON.stringify(msg)}`),\n warn: (msg: Record<string, unknown>) => logger.warn(`[sadot] ${JSON.stringify(msg)}`),\n error: (msg: Record<string, unknown>) => logger.error(`[sadot] ${JSON.stringify(msg)}`),\n debug: (msg: Record<string, unknown>) => logger.debug(`[sadot] ${JSON.stringify(msg)}`),\n };\n\n const migrator = new Umzug<QueryInterface>({\n migrations: buildMigrationList(options),\n context: queryInterface,\n storage,\n logger: umzugLogger,\n });\n\n const pending = await migrator.pending();\n if (pending.length === 0) {\n logger.info('[sadot] no pending migrations, skipping');\n return;\n }\n\n logger.info('[sadot] pending migrations detected', { pending: pending.map(m => m.name) });\n\n // The advisory lock holds a connection for its entire duration while\n // migrator.up() needs additional pool connections for queries. With\n // pool.max < 2 (common in test environments) this deadlocks.\n // Migrations are idempotent (IF NOT EXISTS / IF EXISTS) so running\n // without the lock is safe — just potentially duplicated work.\n const poolMax = (sequelize.options as any)?.pool?.max ?? 5;\n if (poolMax < 2) {\n logger.info('[sadot] connection pool too small for advisory lock, running migrations directly');\n await migrator.up();\n return;\n }\n\n // Use a transaction to pin lock/unlock to the same pool connection.\n // pg_advisory_lock (session-level) is used so the lock remains held while\n // migrator.up() runs its own queries on other pool connections.\n logger.info('[sadot] acquiring advisory lock');\n const transaction = await sequelize.transaction();\n try {\n await sequelize.query(`SELECT pg_advisory_lock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });\n logger.info('[sadot] advisory lock acquired');\n\n // Re-check after acquiring the lock — another pod may have already\n // applied the migrations while we were waiting.\n const stillPending = await migrator.pending();\n if (stillPending.length > 0) {\n await migrator.up();\n } else {\n logger.info('[sadot] migrations already applied by another instance, skipping');\n }\n } finally {\n await sequelize.query(`SELECT pg_advisory_unlock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });\n await transaction.commit();\n logger.info('[sadot] advisory lock released');\n }\n};\n\nexport { runSadotMigrations };\n"],"mappings":"oMAaM,CAAE,QAAO,oBAAqB,QAAQ,QAAQ,CAO9C,EAAsB,GAA8D,CACxF,GAAM,CAAE,yBAAyB,GAAO,sBAAsB,IAAU,EACxE,MAAO,CACL,CAAE,KAAM,yBAA0B,GAAA,EAAA,GAAqB,KAAA,EAAA,KAAyB,CAChF,GAAI,EAAyB,CAAC,CAAE,KAAM,kCAAmC,GAAA,EAAA,GAAqB,KAAA,EAAA,KAAyB,CAAC,CAAG,EAAE,CAC7H,GAAI,EAAsB,CAAC,CAAE,KAAM,yCAA0C,GAAA,EAAA,GAAqB,KAAA,EAAA,KAAyB,CAAC,CAAG,EAAE,CAClI,EAKG,EAA0B,UAY1B,EAAqB,MAAO,EAAsB,EAA2B,EAAE,GAAoB,CAEvG,IAAM,EAAiB,EAAU,mBAAmB,CAC9C,EAAU,IAAI,EAAiB,CAAa,YAAoB,UAAW,mBAAoB,CAAC,CAShG,EAAW,IAAI,EAAsB,CACzC,WAAY,EAAmB,EAAQ,CACvC,QAAS,EACT,UACA,OAXkB,CAClB,KAAO,GAAiCA,EAAAA,QAAO,KAAK,WAAW,KAAK,UAAU,EAAI,GAAG,CACrF,KAAO,GAAiCA,EAAAA,QAAO,KAAK,WAAW,KAAK,UAAU,EAAI,GAAG,CACrF,MAAQ,GAAiCA,EAAAA,QAAO,MAAM,WAAW,KAAK,UAAU,EAAI,GAAG,CACvF,MAAQ,GAAiCA,EAAAA,QAAO,MAAM,WAAW,KAAK,UAAU,EAAI,GAAG,CACxF,CAOA,CAAC,CAEI,EAAU,MAAM,EAAS,SAAS,CACxC,GAAI,EAAQ,SAAW,EAAG,CACxB,EAAA,QAAO,KAAK,0CAA0C,CACtD,OAWF,GARA,EAAA,QAAO,KAAK,sCAAuC,CAAE,QAAS,EAAQ,IAAI,GAAK,EAAE,KAAK,CAAE,CAAC,EAOxE,EAAU,SAAiB,MAAM,KAAO,GAC3C,EAAG,CACf,EAAA,QAAO,KAAK,mFAAmF,CAC/F,MAAM,EAAS,IAAI,CACnB,OAMF,EAAA,QAAO,KAAK,kCAAkC,CAC9C,IAAM,EAAc,MAAM,EAAU,aAAa,CACjD,GAAI,CACF,MAAM,EAAU,MAAM,2BAA2B,EAAwB,GAAI,CAAE,cAAa,CAAC,CAC7F,EAAA,QAAO,KAAK,iCAAiC,EAIxB,MAAM,EAAS,SAAS,EAC5B,OAAS,EACxB,MAAM,EAAS,IAAI,CAEnB,EAAA,QAAO,KAAK,mEAAmE,QAEzE,CACR,MAAM,EAAU,MAAM,6BAA6B,EAAwB,GAAI,CAAE,cAAa,CAAC,CAC/F,MAAM,EAAY,QAAQ,CAC1B,EAAA,QAAO,KAAK,iCAAiC"}
|
package/dist/migrations/index.js
CHANGED
|
@@ -1,89 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { down, up } from "./001-create-core-tables.js";
|
|
4
|
-
import { down as down$1, up as up$1 } from "./002-create-custom-field-entries.js";
|
|
5
|
-
import { down as down$2, up as up$2 } from "./003-create-custom-field-model-type-map.js";
|
|
6
|
-
import { down as down$3, up as up$3 } from "./004-create-field-policy-tables.js";
|
|
7
|
-
|
|
8
|
-
//#region src/migrations/index.ts
|
|
9
|
-
const { Umzug, SequelizeStorage } = __require("umzug");
|
|
10
|
-
const buildMigrationList = (options) => {
|
|
11
|
-
const { useCustomFieldsEntries = false, useModelTypeMapping = false } = options;
|
|
12
|
-
return [
|
|
13
|
-
{
|
|
14
|
-
name: "001-create-core-tables",
|
|
15
|
-
up,
|
|
16
|
-
down
|
|
17
|
-
},
|
|
18
|
-
...useCustomFieldsEntries ? [{
|
|
19
|
-
name: "002-create-custom-field-entries",
|
|
20
|
-
up: up$1,
|
|
21
|
-
down: down$1
|
|
22
|
-
}] : [],
|
|
23
|
-
...useModelTypeMapping ? [{
|
|
24
|
-
name: "003-create-custom-field-model-type-map",
|
|
25
|
-
up: up$2,
|
|
26
|
-
down: down$2
|
|
27
|
-
}] : [],
|
|
28
|
-
{
|
|
29
|
-
name: "004-create-field-policy-tables",
|
|
30
|
-
up: up$3,
|
|
31
|
-
down: down$3
|
|
32
|
-
}
|
|
33
|
-
];
|
|
34
|
-
};
|
|
35
|
-
const SADOT_MIGRATION_LOCK_ID = 839274628;
|
|
36
|
-
/**
|
|
37
|
-
* Runs sadot migrations via umzug. All migrations use IF NOT EXISTS / IF EXISTS,
|
|
38
|
-
* so they are fully idempotent — safe to run against both fresh and existing
|
|
39
|
-
* databases (including DBs previously managed by the legacy sync() path).
|
|
40
|
-
*
|
|
41
|
-
* A PostgreSQL advisory lock is acquired before running migrations so that when
|
|
42
|
-
* multiple pods start concurrently only one of them executes the migrations.
|
|
43
|
-
* The remaining pods block until the lock is released, then proceed — Umzug will
|
|
44
|
-
* see the migrations have already been applied and skip them.
|
|
45
|
-
*/
|
|
46
|
-
const runSadotMigrations = async (sequelize, options = {}) => {
|
|
47
|
-
const queryInterface = sequelize.getQueryInterface();
|
|
48
|
-
const storage = new SequelizeStorage({
|
|
49
|
-
sequelize,
|
|
50
|
-
tableName: "sadot_migrations"
|
|
51
|
-
});
|
|
52
|
-
const migrator = new Umzug({
|
|
53
|
-
migrations: buildMigrationList(options),
|
|
54
|
-
context: queryInterface,
|
|
55
|
-
storage,
|
|
56
|
-
logger: {
|
|
57
|
-
info: (msg) => logger_default.info(`[sadot] ${JSON.stringify(msg)}`),
|
|
58
|
-
warn: (msg) => logger_default.warn(`[sadot] ${JSON.stringify(msg)}`),
|
|
59
|
-
error: (msg) => logger_default.error(`[sadot] ${JSON.stringify(msg)}`),
|
|
60
|
-
debug: (msg) => logger_default.debug(`[sadot] ${JSON.stringify(msg)}`)
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
const pending = await migrator.pending();
|
|
64
|
-
if (pending.length === 0) {
|
|
65
|
-
logger_default.info("[sadot] no pending migrations, skipping");
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
logger_default.info("[sadot] pending migrations detected", { pending: pending.map((m) => m.name) });
|
|
69
|
-
if ((sequelize.options?.pool?.max ?? 5) < 2) {
|
|
70
|
-
logger_default.info("[sadot] connection pool too small for advisory lock, running migrations directly");
|
|
71
|
-
await migrator.up();
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
logger_default.info("[sadot] acquiring advisory lock");
|
|
75
|
-
const transaction = await sequelize.transaction();
|
|
76
|
-
try {
|
|
77
|
-
await sequelize.query(`SELECT pg_advisory_lock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });
|
|
78
|
-
logger_default.info("[sadot] advisory lock acquired");
|
|
79
|
-
if ((await migrator.pending()).length > 0) await migrator.up();
|
|
80
|
-
else logger_default.info("[sadot] migrations already applied by another instance, skipping");
|
|
81
|
-
} finally {
|
|
82
|
-
await sequelize.query(`SELECT pg_advisory_unlock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });
|
|
83
|
-
await transaction.commit();
|
|
84
|
-
logger_default.info("[sadot] advisory lock released");
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
//#endregion
|
|
89
|
-
export { runSadotMigrations };
|
|
1
|
+
import{__require as e}from"../_virtual/rolldown_runtime.js";import t from"../utils/logger/index.js";import{down as n,up as r}from"./001-create-core-tables.js";import{down as i,up as a}from"./002-create-custom-field-entries.js";import{down as o,up as s}from"./003-create-custom-field-model-type-map.js";const{Umzug:c,SequelizeStorage:l}=e(`umzug`),u=e=>{let{useCustomFieldsEntries:t=!1,useModelTypeMapping:c=!1}=e;return[{name:`001-create-core-tables`,up:r,down:n},...t?[{name:`002-create-custom-field-entries`,up:a,down:i}]:[],...c?[{name:`003-create-custom-field-model-type-map`,up:s,down:o}]:[]]},d=839274628,f=async(e,n={})=>{let r=e.getQueryInterface(),i=new l({sequelize:e,tableName:`sadot_migrations`}),a=new c({migrations:u(n),context:r,storage:i,logger:{info:e=>t.info(`[sadot] ${JSON.stringify(e)}`),warn:e=>t.warn(`[sadot] ${JSON.stringify(e)}`),error:e=>t.error(`[sadot] ${JSON.stringify(e)}`),debug:e=>t.debug(`[sadot] ${JSON.stringify(e)}`)}}),o=await a.pending();if(o.length===0){t.info(`[sadot] no pending migrations, skipping`);return}if(t.info(`[sadot] pending migrations detected`,{pending:o.map(e=>e.name)}),(e.options?.pool?.max??5)<2){t.info(`[sadot] connection pool too small for advisory lock, running migrations directly`),await a.up();return}t.info(`[sadot] acquiring advisory lock`);let s=await e.transaction();try{await e.query(`SELECT pg_advisory_lock(${d})`,{transaction:s}),t.info(`[sadot] advisory lock acquired`),(await a.pending()).length>0?await a.up():t.info(`[sadot] migrations already applied by another instance, skipping`)}finally{await e.query(`SELECT pg_advisory_unlock(${d})`,{transaction:s}),await s.commit(),t.info(`[sadot] advisory lock released`)}};export{f as runSadotMigrations};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["migration001.up","migration001.down","migration002.up","migration002.down","migration003.up","migration003.down","logger"],"sources":["../../src/migrations/index.ts"],"sourcesContent":["import type { InputMigrations } from 'umzug';\nimport type { QueryInterface } from 'sequelize';\nimport type { Sequelize } from 'sequelize-typescript';\nimport logger from '../utils/logger';\nimport * as migration001 from './001-create-core-tables';\nimport * as migration002 from './002-create-custom-field-entries';\nimport * as migration003 from './003-create-custom-field-model-type-map';\n\n// umzug is CJS. Static ESM named imports break in vitest after vi.resetModules()\n// because Vite's SSR transform re-evaluates the module outside the inline bundle.\n// require() goes through Node's native CJS loader and is stable across resets.\n\n// eslint-disable-next-line import/no-commonjs, @typescript-eslint/no-require-imports\nconst { Umzug, SequelizeStorage } = require('umzug') as typeof import('umzug');\n\ninterface MigratorOptions {\n useCustomFieldsEntries?: boolean;\n useModelTypeMapping?: boolean;\n}\n\nconst buildMigrationList = (options: MigratorOptions): InputMigrations<QueryInterface> => {\n const { useCustomFieldsEntries = false, useModelTypeMapping = false } = options;\n return [\n { name: '001-create-core-tables', up: migration001.up, down: migration001.down },\n ...(useCustomFieldsEntries ? [{ name: '002-create-custom-field-entries', up: migration002.up, down: migration002.down }] : []),\n ...(useModelTypeMapping ? [{ name: '003-create-custom-field-model-type-map', up: migration003.up, down: migration003.down }] : []),\n ];\n};\n\n// Stable advisory-lock ID for sadot migrations. Chosen arbitrarily; must not\n// collide with other advisory locks in the same database.\nconst SADOT_MIGRATION_LOCK_ID = 839274628;\n\n/**\n * Runs sadot migrations via umzug. All migrations use IF NOT EXISTS / IF EXISTS,\n * so they are fully idempotent — safe to run against both fresh and existing\n * databases (including DBs previously managed by the legacy sync() path).\n *\n * A PostgreSQL advisory lock is acquired before running migrations so that when\n * multiple pods start concurrently only one of them executes the migrations.\n * The remaining pods block until the lock is released, then proceed — Umzug will\n * see the migrations have already been applied and skip them.\n */\nconst runSadotMigrations = async (sequelize: Sequelize, options: MigratorOptions = {}): Promise<void> => {\n // Need to add a new migration? full migration guide here; https://www.notion.so/autofleet/How-to-Add-a-New-Migration-to-Sadot-36db603f40b98023b239d3c61aa22b00\n const queryInterface = sequelize.getQueryInterface() as unknown as QueryInterface;\n const storage = new SequelizeStorage({ sequelize: sequelize as never, tableName: 'sadot_migrations' });\n\n const umzugLogger = {\n info: (msg: Record<string, unknown>) => logger.info(`[sadot] ${JSON.stringify(msg)}`),\n warn: (msg: Record<string, unknown>) => logger.warn(`[sadot] ${JSON.stringify(msg)}`),\n error: (msg: Record<string, unknown>) => logger.error(`[sadot] ${JSON.stringify(msg)}`),\n debug: (msg: Record<string, unknown>) => logger.debug(`[sadot] ${JSON.stringify(msg)}`),\n };\n\n const migrator = new Umzug<QueryInterface>({\n migrations: buildMigrationList(options),\n context: queryInterface,\n storage,\n logger: umzugLogger,\n });\n\n const pending = await migrator.pending();\n if (pending.length === 0) {\n logger.info('[sadot] no pending migrations, skipping');\n return;\n }\n\n logger.info('[sadot] pending migrations detected', { pending: pending.map(m => m.name) });\n\n // The advisory lock holds a connection for its entire duration while\n // migrator.up() needs additional pool connections for queries. With\n // pool.max < 2 (common in test environments) this deadlocks.\n // Migrations are idempotent (IF NOT EXISTS / IF EXISTS) so running\n // without the lock is safe — just potentially duplicated work.\n const poolMax = (sequelize.options as any)?.pool?.max ?? 5;\n if (poolMax < 2) {\n logger.info('[sadot] connection pool too small for advisory lock, running migrations directly');\n await migrator.up();\n return;\n }\n\n // Use a transaction to pin lock/unlock to the same pool connection.\n // pg_advisory_lock (session-level) is used so the lock remains held while\n // migrator.up() runs its own queries on other pool connections.\n logger.info('[sadot] acquiring advisory lock');\n const transaction = await sequelize.transaction();\n try {\n await sequelize.query(`SELECT pg_advisory_lock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });\n logger.info('[sadot] advisory lock acquired');\n\n // Re-check after acquiring the lock — another pod may have already\n // applied the migrations while we were waiting.\n const stillPending = await migrator.pending();\n if (stillPending.length > 0) {\n await migrator.up();\n } else {\n logger.info('[sadot] migrations already applied by another instance, skipping');\n }\n } finally {\n await sequelize.query(`SELECT pg_advisory_unlock(${SADOT_MIGRATION_LOCK_ID})`, { transaction });\n await transaction.commit();\n logger.info('[sadot] advisory lock released');\n }\n};\n\nexport { runSadotMigrations };\n"],"mappings":"8SAaA,KAAM,CAAE,QAAO,oBAAA,EAA6B,QAAQ,CAO9C,EAAsB,GAA8D,CACxF,GAAM,CAAE,yBAAyB,GAAO,sBAAsB,IAAU,EACxE,MAAO,CACL,CAAE,KAAM,yBAA8BA,KAAuBC,OAAmB,CAChF,GAAI,EAAyB,CAAC,CAAE,KAAM,kCAAmC,GAAIC,EAAiB,KAAMC,EAAmB,CAAC,CAAG,EAAE,CAC7H,GAAI,EAAsB,CAAC,CAAE,KAAM,yCAA0C,GAAIC,EAAiB,KAAMC,EAAmB,CAAC,CAAG,EAAE,CAClI,EAKG,EAA0B,UAY1B,EAAqB,MAAO,EAAsB,EAA2B,EAAE,GAAoB,CAEvG,IAAM,EAAiB,EAAU,mBAAmB,CAC9C,EAAU,IAAI,EAAiB,CAAa,YAAoB,UAAW,mBAAoB,CAAC,CAShG,EAAW,IAAI,EAAsB,CACzC,WAAY,EAAmB,EAAQ,CACvC,QAAS,EACT,UACA,OAXkB,CAClB,KAAO,GAAiCC,EAAO,KAAK,WAAW,KAAK,UAAU,EAAI,GAAG,CACrF,KAAO,GAAiCA,EAAO,KAAK,WAAW,KAAK,UAAU,EAAI,GAAG,CACrF,MAAQ,GAAiCA,EAAO,MAAM,WAAW,KAAK,UAAU,EAAI,GAAG,CACvF,MAAQ,GAAiCA,EAAO,MAAM,WAAW,KAAK,UAAU,EAAI,GAAG,CACxF,CAOA,CAAC,CAEI,EAAU,MAAM,EAAS,SAAS,CACxC,GAAI,EAAQ,SAAW,EAAG,CACxB,EAAO,KAAK,0CAA0C,CACtD,OAWF,GARA,EAAO,KAAK,sCAAuC,CAAE,QAAS,EAAQ,IAAI,GAAK,EAAE,KAAK,CAAE,CAAC,EAOxE,EAAU,SAAiB,MAAM,KAAO,GAC3C,EAAG,CACf,EAAO,KAAK,mFAAmF,CAC/F,MAAM,EAAS,IAAI,CACnB,OAMF,EAAO,KAAK,kCAAkC,CAC9C,IAAM,EAAc,MAAM,EAAU,aAAa,CACjD,GAAI,CACF,MAAM,EAAU,MAAM,2BAA2B,EAAwB,GAAI,CAAE,cAAa,CAAC,CAC7F,EAAO,KAAK,iCAAiC,EAIxB,MAAM,EAAS,SAAS,EAC5B,OAAS,EACxB,MAAM,EAAS,IAAI,CAEnB,EAAO,KAAK,mEAAmE,QAEzE,CACR,MAAM,EAAU,MAAM,6BAA6B,EAAwB,GAAI,CAAE,cAAa,CAAC,CAC/F,MAAM,EAAY,QAAQ,CAC1B,EAAO,KAAK,iCAAiC"}
|
|
@@ -1,147 +1,2 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
const require_index$1 = require('../utils/constants/index.cjs');
|
|
4
|
-
const require_index$2 = require('../utils/validations/validators/index.cjs');
|
|
5
|
-
const require_index$3 = require('../events/index.cjs');
|
|
6
|
-
const require_index$4 = require('../errors/index.cjs');
|
|
7
|
-
const require_index$5 = require('../utils/validations/index.cjs');
|
|
8
|
-
const require_decorateMetadata = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs');
|
|
9
|
-
const require_decorate = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs');
|
|
10
|
-
const require_CustomFieldValue = require('./CustomFieldValue.cjs');
|
|
11
|
-
let sequelize_typescript = require("sequelize-typescript");
|
|
12
|
-
|
|
13
|
-
//#region src/models/CustomFieldDefinition.ts
|
|
14
|
-
var _ref, _ref2, _ref3, _ref4, _ref5, _ref6;
|
|
15
|
-
let CustomFieldDefinition = class CustomFieldDefinition$1 extends sequelize_typescript.Model {
|
|
16
|
-
get modelTypeIds() {
|
|
17
|
-
return this._modelTypeIds;
|
|
18
|
-
}
|
|
19
|
-
set modelTypeIds(value) {
|
|
20
|
-
this._modelTypeIds = value;
|
|
21
|
-
this.setDataValue("modelTypeIds", value);
|
|
22
|
-
}
|
|
23
|
-
static displayNameDefaultValue(instance) {
|
|
24
|
-
if (!instance?.displayName) instance.displayName = instance.name;
|
|
25
|
-
if (![null, void 0].includes(instance.defaultValue)) {
|
|
26
|
-
const isValid = require_index$5.validateValue(instance.defaultValue, instance.fieldType, instance.validation);
|
|
27
|
-
if (isValid.error) throw new require_index$4.InvalidValueError(instance.defaultValue, instance.name, isValid.error);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
static afterSaveHandler(instance, options) {
|
|
31
|
-
if (options.transaction) options.transaction.afterCommit(() => require_index$3.sendDimEvent(instance));
|
|
32
|
-
else require_index$3.sendDimEvent(instance);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Override toJSON to exclude internal associations from API responses
|
|
36
|
-
* The modelTypeMappings association is used internally to optimize queries
|
|
37
|
-
* but should not be exposed in the API response (use modelTypeIds instead)
|
|
38
|
-
*/
|
|
39
|
-
toJSON() {
|
|
40
|
-
const { modelTypeMappings: _modelTypeMappings, ...values } = this.get();
|
|
41
|
-
return values;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
require_decorate.__decorate([
|
|
45
|
-
sequelize_typescript.PrimaryKey,
|
|
46
|
-
(0, sequelize_typescript.Column)({
|
|
47
|
-
type: sequelize_typescript.DataType.UUID,
|
|
48
|
-
defaultValue: sequelize_typescript.DataType.UUIDV4,
|
|
49
|
-
allowNull: false
|
|
50
|
-
}),
|
|
51
|
-
require_decorateMetadata.__decorateMetadata("design:type", String)
|
|
52
|
-
], CustomFieldDefinition.prototype, "id", void 0);
|
|
53
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
54
|
-
type: sequelize_typescript.DataType.STRING,
|
|
55
|
-
allowNull: false
|
|
56
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "name", void 0);
|
|
57
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({ type: sequelize_typescript.DataType.STRING }), require_decorateMetadata.__decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "displayName", void 0);
|
|
58
|
-
require_decorate.__decorate([
|
|
59
|
-
(0, sequelize_typescript.Is)("SupportedType", (value) => {
|
|
60
|
-
if (!Object.values(require_index$1.CustomFieldDefinitionType).includes(value)) throw new require_index$4.UnsupportedCustomFieldTypeError(`"${value}" is not a supported type.`);
|
|
61
|
-
}),
|
|
62
|
-
(0, sequelize_typescript.Column)({
|
|
63
|
-
type: sequelize_typescript.DataType.STRING,
|
|
64
|
-
allowNull: false
|
|
65
|
-
}),
|
|
66
|
-
require_decorateMetadata.__decorateMetadata("design:type", typeof (_ref = typeof require_index$1.CustomFieldDefinitionType !== "undefined" && require_index$1.CustomFieldDefinitionType) === "function" ? _ref : Object)
|
|
67
|
-
], CustomFieldDefinition.prototype, "fieldType", void 0);
|
|
68
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({ type: sequelize_typescript.DataType.JSONB }), require_decorateMetadata.__decorateMetadata("design:type", Object)], CustomFieldDefinition.prototype, "validation", void 0);
|
|
69
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
70
|
-
type: sequelize_typescript.DataType.UUID,
|
|
71
|
-
allowNull: false
|
|
72
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "entityId", void 0);
|
|
73
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
74
|
-
type: sequelize_typescript.DataType.STRING,
|
|
75
|
-
allowNull: false
|
|
76
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "entityType", void 0);
|
|
77
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
78
|
-
type: sequelize_typescript.DataType.STRING,
|
|
79
|
-
allowNull: false
|
|
80
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "modelType", void 0);
|
|
81
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({ type: sequelize_typescript.DataType.TEXT }), require_decorateMetadata.__decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "description", void 0);
|
|
82
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
83
|
-
type: sequelize_typescript.DataType.BOOLEAN,
|
|
84
|
-
defaultValue: false
|
|
85
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", Boolean)], CustomFieldDefinition.prototype, "required", void 0);
|
|
86
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
87
|
-
type: sequelize_typescript.DataType.BOOLEAN,
|
|
88
|
-
defaultValue: false
|
|
89
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", Boolean)], CustomFieldDefinition.prototype, "disabled", void 0);
|
|
90
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
91
|
-
type: sequelize_typescript.DataType.JSONB,
|
|
92
|
-
allowNull: true
|
|
93
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", Object)], CustomFieldDefinition.prototype, "defaultValue", void 0);
|
|
94
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
95
|
-
type: sequelize_typescript.DataType.DATE,
|
|
96
|
-
allowNull: false
|
|
97
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", typeof (_ref2 = typeof Date !== "undefined" && Date) === "function" ? _ref2 : Object)], CustomFieldDefinition.prototype, "createdAt", void 0);
|
|
98
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
99
|
-
type: sequelize_typescript.DataType.DATE,
|
|
100
|
-
allowNull: true
|
|
101
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", typeof (_ref3 = typeof Date !== "undefined" && Date) === "function" ? _ref3 : Object)], CustomFieldDefinition.prototype, "updatedAt", void 0);
|
|
102
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
103
|
-
type: sequelize_typescript.DataType.DATE,
|
|
104
|
-
allowNull: true
|
|
105
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", typeof (_ref4 = typeof Date !== "undefined" && Date) === "function" ? _ref4 : Object)], CustomFieldDefinition.prototype, "deletedAt", void 0);
|
|
106
|
-
require_decorate.__decorate([(0, sequelize_typescript.Column)({
|
|
107
|
-
type: sequelize_typescript.DataType.BOOLEAN,
|
|
108
|
-
defaultValue: false,
|
|
109
|
-
allowNull: false
|
|
110
|
-
}), require_decorateMetadata.__decorateMetadata("design:type", Boolean)], CustomFieldDefinition.prototype, "blockEditingFromUI", void 0);
|
|
111
|
-
require_decorate.__decorate([(0, sequelize_typescript.HasMany)(() => require_CustomFieldValue.default), require_decorateMetadata.__decorateMetadata("design:type", Array)], CustomFieldDefinition.prototype, "values", void 0);
|
|
112
|
-
require_decorate.__decorate([
|
|
113
|
-
sequelize_typescript.BeforeCreate,
|
|
114
|
-
require_decorateMetadata.__decorateMetadata("design:type", Function),
|
|
115
|
-
require_decorateMetadata.__decorateMetadata("design:paramtypes", [typeof (_ref5 = typeof CustomFieldDefinition !== "undefined" && CustomFieldDefinition) === "function" ? _ref5 : Object]),
|
|
116
|
-
require_decorateMetadata.__decorateMetadata("design:returntype", void 0)
|
|
117
|
-
], CustomFieldDefinition, "displayNameDefaultValue", null);
|
|
118
|
-
require_decorate.__decorate([
|
|
119
|
-
sequelize_typescript.AfterSave,
|
|
120
|
-
require_decorateMetadata.__decorateMetadata("design:type", Function),
|
|
121
|
-
require_decorateMetadata.__decorateMetadata("design:paramtypes", [typeof (_ref6 = typeof CustomFieldDefinition !== "undefined" && CustomFieldDefinition) === "function" ? _ref6 : Object, Object]),
|
|
122
|
-
require_decorateMetadata.__decorateMetadata("design:returntype", void 0)
|
|
123
|
-
], CustomFieldDefinition, "afterSaveHandler", null);
|
|
124
|
-
CustomFieldDefinition = require_decorate.__decorate([(0, sequelize_typescript.DefaultScope)(() => ({ where: { disabled: false } })), (0, sequelize_typescript.Table)({
|
|
125
|
-
tableName: "custom_field_definitions",
|
|
126
|
-
modelName: "CustomFieldDefinition",
|
|
127
|
-
indexes: [{
|
|
128
|
-
name: "unique_name_model_type",
|
|
129
|
-
fields: [
|
|
130
|
-
"model_type",
|
|
131
|
-
"entity_id",
|
|
132
|
-
"name"
|
|
133
|
-
],
|
|
134
|
-
unique: true
|
|
135
|
-
}],
|
|
136
|
-
timestamps: true,
|
|
137
|
-
validate: { validationByType() {
|
|
138
|
-
if (!this.validation && require_index$2.CustomValidationTypes[this.fieldType]) {
|
|
139
|
-
require_index.default.error(`No custom validation for custom field type ${this.fieldType} found`);
|
|
140
|
-
throw new require_index$4.UnsupportedCustomValidationError(`Validation provided for "${this.fieldType}" is not supported`);
|
|
141
|
-
}
|
|
142
|
-
} }
|
|
143
|
-
})], CustomFieldDefinition);
|
|
144
|
-
var CustomFieldDefinition_default = CustomFieldDefinition;
|
|
145
|
-
|
|
146
|
-
//#endregion
|
|
147
|
-
exports.default = CustomFieldDefinition_default;
|
|
1
|
+
const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger/index.cjs`),n=require(`../utils/constants/index.cjs`),r=require(`../utils/validations/validators/index.cjs`),i=require(`../events/index.cjs`),a=require(`../errors/index.cjs`),o=require(`../utils/validations/index.cjs`),s=require(`../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs`),c=require(`../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs`),l=require(`./CustomFieldValue.cjs`);let u=require(`sequelize-typescript`);var d,f,p,m,h,g;let _=class extends u.Model{get modelTypeIds(){return this._modelTypeIds}set modelTypeIds(e){this._modelTypeIds=e,this.setDataValue(`modelTypeIds`,e)}static displayNameDefaultValue(e){if(e?.displayName||(e.displayName=e.name),![null,void 0].includes(e.defaultValue)){let t=o.validateValue(e.defaultValue,e.fieldType,e.validation);if(t.error)throw new a.InvalidValueError(e.defaultValue,e.name,t.error)}}static afterSaveHandler(e,t){t.transaction?t.transaction.afterCommit(()=>i.sendDimEvent(e)):i.sendDimEvent(e)}toJSON(){let{modelTypeMappings:e,...t}=this.get();return t}};c.__decorate([u.PrimaryKey,(0,u.Column)({type:u.DataType.UUID,defaultValue:u.DataType.UUIDV4,allowNull:!1}),s.__decorateMetadata(`design:type`,String)],_.prototype,`id`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.STRING,allowNull:!1}),s.__decorateMetadata(`design:type`,String)],_.prototype,`name`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.STRING}),s.__decorateMetadata(`design:type`,String)],_.prototype,`displayName`,void 0),c.__decorate([(0,u.Is)(`SupportedType`,e=>{if(!Object.values(n.CustomFieldDefinitionType).includes(e))throw new a.UnsupportedCustomFieldTypeError(`"${e}" is not a supported type.`)}),(0,u.Column)({type:u.DataType.STRING,allowNull:!1}),s.__decorateMetadata(`design:type`,typeof(d=n.CustomFieldDefinitionType!==void 0&&n.CustomFieldDefinitionType)==`function`?d:Object)],_.prototype,`fieldType`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.JSONB}),s.__decorateMetadata(`design:type`,Object)],_.prototype,`validation`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.UUID,allowNull:!1}),s.__decorateMetadata(`design:type`,String)],_.prototype,`entityId`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.STRING,allowNull:!1}),s.__decorateMetadata(`design:type`,String)],_.prototype,`entityType`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.STRING,allowNull:!1}),s.__decorateMetadata(`design:type`,String)],_.prototype,`modelType`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.TEXT}),s.__decorateMetadata(`design:type`,String)],_.prototype,`description`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.BOOLEAN,defaultValue:!1}),s.__decorateMetadata(`design:type`,Boolean)],_.prototype,`required`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.BOOLEAN,defaultValue:!1}),s.__decorateMetadata(`design:type`,Boolean)],_.prototype,`disabled`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.JSONB,allowNull:!0}),s.__decorateMetadata(`design:type`,Object)],_.prototype,`defaultValue`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.DATE,allowNull:!1}),s.__decorateMetadata(`design:type`,typeof(f=typeof Date<`u`&&Date)==`function`?f:Object)],_.prototype,`createdAt`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.DATE,allowNull:!0}),s.__decorateMetadata(`design:type`,typeof(p=typeof Date<`u`&&Date)==`function`?p:Object)],_.prototype,`updatedAt`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.DATE,allowNull:!0}),s.__decorateMetadata(`design:type`,typeof(m=typeof Date<`u`&&Date)==`function`?m:Object)],_.prototype,`deletedAt`,void 0),c.__decorate([(0,u.Column)({type:u.DataType.BOOLEAN,defaultValue:!1,allowNull:!1}),s.__decorateMetadata(`design:type`,Boolean)],_.prototype,`blockEditingFromUI`,void 0),c.__decorate([(0,u.HasMany)(()=>l.default),s.__decorateMetadata(`design:type`,Array)],_.prototype,`values`,void 0),c.__decorate([u.BeforeCreate,s.__decorateMetadata(`design:type`,Function),s.__decorateMetadata(`design:paramtypes`,[typeof(h=_!==void 0&&_)==`function`?h:Object]),s.__decorateMetadata(`design:returntype`,void 0)],_,`displayNameDefaultValue`,null),c.__decorate([u.AfterSave,s.__decorateMetadata(`design:type`,Function),s.__decorateMetadata(`design:paramtypes`,[typeof(g=_!==void 0&&_)==`function`?g:Object,Object]),s.__decorateMetadata(`design:returntype`,void 0)],_,`afterSaveHandler`,null),_=c.__decorate([(0,u.DefaultScope)(()=>({where:{disabled:!1}})),(0,u.Table)({tableName:`custom_field_definitions`,modelName:`CustomFieldDefinition`,indexes:[{name:`unique_name_model_type`,fields:[`model_type`,`entity_id`,`name`],unique:!0}],timestamps:!0,validate:{validationByType(){if(!this.validation&&r.CustomValidationTypes[this.fieldType])throw t.default.error(`No custom validation for custom field type ${this.fieldType} found`),new a.UnsupportedCustomValidationError(`Validation provided for "${this.fieldType}" is not supported`)}}})],_);var v=_;exports.default=v;
|
|
2
|
+
//# sourceMappingURL=CustomFieldDefinition.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomFieldDefinition.cjs","names":["CustomFieldDefinition","Model","validateValue","InvalidValueError","sendDimEvent","PrimaryKey","DataType","CustomFieldDefinitionType","UnsupportedCustomFieldTypeError","CustomFieldValue","BeforeCreate","AfterSave","CustomValidationTypes","UnsupportedCustomValidationError"],"sources":["../../src/models/CustomFieldDefinition.ts"],"sourcesContent":["import {\n Table,\n Column,\n Model,\n DataType,\n HasMany,\n PrimaryKey,\n BeforeCreate,\n DefaultScope,\n AfterSave,\n Is,\n} from 'sequelize-typescript';\nimport type { CreateOptions } from 'sequelize';\nimport { CustomFieldDefinitionType } from '../utils/constants';\nimport { CustomValidationTypes } from '../utils/validations/validators';\nimport CustomFieldValue from './CustomFieldValue';\nimport CustomFieldModelTypeMap from './CustomFieldModelTypeMap';\nimport { sendDimEvent } from '../events';\nimport { InvalidValueError, UnsupportedCustomFieldTypeError, UnsupportedCustomValidationError } from '../errors';\nimport logger from '../utils/logger';\nimport { validateValue } from '../utils/validations';\n\n@DefaultScope(() => ({ where: { disabled: false } }))\n@Table({\n tableName: 'custom_field_definitions',\n modelName: 'CustomFieldDefinition',\n indexes: [\n {\n name: 'unique_name_model_type',\n fields: ['model_type', 'entity_id', 'name'],\n unique: true,\n },\n ],\n timestamps: true,\n validate: {\n validationByType(this: CustomFieldDefinition) {\n // Verify the validation is provided if needed\n if (!this.validation && CustomValidationTypes[this.fieldType as keyof typeof CustomValidationTypes]) {\n // TODO: enforce the validation-object schema based on the fieldType\n logger.error(`No custom validation for custom field type ${this.fieldType} found`);\n throw new UnsupportedCustomValidationError(`Validation provided for \"${this.fieldType}\" is not supported`);\n }\n },\n },\n})\nclass CustomFieldDefinition extends Model {\n @PrimaryKey\n @Column({\n type: DataType.UUID,\n defaultValue: DataType.UUIDV4,\n allowNull: false,\n })\n declare id: string;\n\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n name!: string;\n\n @Column({\n type: DataType.STRING,\n })\n displayName?: string; // Defaulted to name with beforeCreate hook\n\n @Is('SupportedType', (value) => {\n if (!Object.values(CustomFieldDefinitionType).includes(value as CustomFieldDefinitionType)) {\n throw new UnsupportedCustomFieldTypeError(`\"${value}\" is not a supported type.`);\n }\n })\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n fieldType!: CustomFieldDefinitionType;\n\n @Column({\n type: DataType.JSONB,\n })\n validation?: any;\n\n @Column({\n type: DataType.UUID,\n allowNull: false,\n })\n entityId!: string; /** Client association entity id */\n\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n entityType!: string; /** Client association entity type (demand source / fleet / etc.) */\n\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n modelType!: string; /** Model type. e.g. Vehicle / StopPoint / etc. */\n\n @Column({\n type: DataType.TEXT,\n })\n description?: string;\n\n @Column({\n type: DataType.BOOLEAN,\n defaultValue: false,\n })\n required?: boolean;\n\n @Column({\n type: DataType.BOOLEAN,\n defaultValue: false,\n })\n disabled?: boolean;\n\n @Column({\n type: DataType.JSONB,\n allowNull: true,\n })\n defaultValue?: any;\n\n @Column({\n type: DataType.DATE,\n allowNull: false,\n })\n declare createdAt?: Date;\n\n @Column({\n type: DataType.DATE,\n allowNull: true,\n })\n declare updatedAt?: Date;\n\n @Column({\n type: DataType.DATE,\n allowNull: true,\n })\n declare deletedAt?: Date;\n\n @Column({\n type: DataType.BOOLEAN,\n defaultValue: false,\n allowNull: false,\n })\n blockEditingFromUI!: boolean;\n\n @HasMany(() => CustomFieldValue)\n declare values: CustomFieldValue[];\n\n // Association added programmatically when useModelTypeMapping is enabled\n declare modelTypeMappings?: CustomFieldModelTypeMap[];\n\n // Virtual property for modelTypeIds - set manually after fetch\n private _modelTypeIds?: string[];\n\n get modelTypeIds(): string[] | undefined {\n return this._modelTypeIds;\n }\n\n set modelTypeIds(value: string[] | undefined) {\n this._modelTypeIds = value;\n this.setDataValue('modelTypeIds', value);\n }\n\n @BeforeCreate\n static displayNameDefaultValue(instance: CustomFieldDefinition): void {\n if (!instance?.displayName) {\n instance.displayName = instance.name;\n }\n if (![null, undefined].includes(instance.defaultValue)) {\n const isValid = validateValue(instance.defaultValue, instance.fieldType, instance.validation);\n if (isValid.error) {\n throw new InvalidValueError(instance.defaultValue, instance.name, isValid.error);\n }\n }\n }\n\n @AfterSave\n static afterSaveHandler(instance: CustomFieldDefinition, options: CreateOptions): void {\n if (options.transaction) {\n options.transaction.afterCommit(() => sendDimEvent(instance));\n } else {\n sendDimEvent(instance);\n }\n }\n\n /**\n * Override toJSON to exclude internal associations from API responses\n * The modelTypeMappings association is used internally to optimize queries\n * but should not be exposed in the API response (use modelTypeIds instead)\n */\n toJSON(): object {\n // Remove the internal association used for query optimization\n const { modelTypeMappings: _modelTypeMappings, ...values } = this.get();\n return values;\n }\n}\n\nexport default CustomFieldDefinition;\n"],"mappings":"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"}
|
|
@@ -1,146 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { CustomValidationTypes } from "../utils/validations/validators/index.js";
|
|
4
|
-
import { sendDimEvent } from "../events/index.js";
|
|
5
|
-
import { InvalidValueError, UnsupportedCustomFieldTypeError, UnsupportedCustomValidationError } from "../errors/index.js";
|
|
6
|
-
import { validateValue } from "../utils/validations/index.js";
|
|
7
|
-
import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";
|
|
8
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";
|
|
9
|
-
import CustomFieldValue_default from "./CustomFieldValue.js";
|
|
10
|
-
import { AfterSave, BeforeCreate, Column, DataType, DefaultScope, HasMany, Is, Model, PrimaryKey, Table } from "sequelize-typescript";
|
|
11
|
-
|
|
12
|
-
//#region src/models/CustomFieldDefinition.ts
|
|
13
|
-
var _ref, _ref2, _ref3, _ref4, _ref5, _ref6;
|
|
14
|
-
let CustomFieldDefinition = class CustomFieldDefinition$1 extends Model {
|
|
15
|
-
get modelTypeIds() {
|
|
16
|
-
return this._modelTypeIds;
|
|
17
|
-
}
|
|
18
|
-
set modelTypeIds(value) {
|
|
19
|
-
this._modelTypeIds = value;
|
|
20
|
-
this.setDataValue("modelTypeIds", value);
|
|
21
|
-
}
|
|
22
|
-
static displayNameDefaultValue(instance) {
|
|
23
|
-
if (!instance?.displayName) instance.displayName = instance.name;
|
|
24
|
-
if (![null, void 0].includes(instance.defaultValue)) {
|
|
25
|
-
const isValid = validateValue(instance.defaultValue, instance.fieldType, instance.validation);
|
|
26
|
-
if (isValid.error) throw new InvalidValueError(instance.defaultValue, instance.name, isValid.error);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
static afterSaveHandler(instance, options) {
|
|
30
|
-
if (options.transaction) options.transaction.afterCommit(() => sendDimEvent(instance));
|
|
31
|
-
else sendDimEvent(instance);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Override toJSON to exclude internal associations from API responses
|
|
35
|
-
* The modelTypeMappings association is used internally to optimize queries
|
|
36
|
-
* but should not be exposed in the API response (use modelTypeIds instead)
|
|
37
|
-
*/
|
|
38
|
-
toJSON() {
|
|
39
|
-
const { modelTypeMappings: _modelTypeMappings, ...values } = this.get();
|
|
40
|
-
return values;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
__decorate([
|
|
44
|
-
PrimaryKey,
|
|
45
|
-
Column({
|
|
46
|
-
type: DataType.UUID,
|
|
47
|
-
defaultValue: DataType.UUIDV4,
|
|
48
|
-
allowNull: false
|
|
49
|
-
}),
|
|
50
|
-
__decorateMetadata("design:type", String)
|
|
51
|
-
], CustomFieldDefinition.prototype, "id", void 0);
|
|
52
|
-
__decorate([Column({
|
|
53
|
-
type: DataType.STRING,
|
|
54
|
-
allowNull: false
|
|
55
|
-
}), __decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "name", void 0);
|
|
56
|
-
__decorate([Column({ type: DataType.STRING }), __decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "displayName", void 0);
|
|
57
|
-
__decorate([
|
|
58
|
-
Is("SupportedType", (value) => {
|
|
59
|
-
if (!Object.values(CustomFieldDefinitionType).includes(value)) throw new UnsupportedCustomFieldTypeError(`"${value}" is not a supported type.`);
|
|
60
|
-
}),
|
|
61
|
-
Column({
|
|
62
|
-
type: DataType.STRING,
|
|
63
|
-
allowNull: false
|
|
64
|
-
}),
|
|
65
|
-
__decorateMetadata("design:type", typeof (_ref = typeof CustomFieldDefinitionType !== "undefined" && CustomFieldDefinitionType) === "function" ? _ref : Object)
|
|
66
|
-
], CustomFieldDefinition.prototype, "fieldType", void 0);
|
|
67
|
-
__decorate([Column({ type: DataType.JSONB }), __decorateMetadata("design:type", Object)], CustomFieldDefinition.prototype, "validation", void 0);
|
|
68
|
-
__decorate([Column({
|
|
69
|
-
type: DataType.UUID,
|
|
70
|
-
allowNull: false
|
|
71
|
-
}), __decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "entityId", void 0);
|
|
72
|
-
__decorate([Column({
|
|
73
|
-
type: DataType.STRING,
|
|
74
|
-
allowNull: false
|
|
75
|
-
}), __decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "entityType", void 0);
|
|
76
|
-
__decorate([Column({
|
|
77
|
-
type: DataType.STRING,
|
|
78
|
-
allowNull: false
|
|
79
|
-
}), __decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "modelType", void 0);
|
|
80
|
-
__decorate([Column({ type: DataType.TEXT }), __decorateMetadata("design:type", String)], CustomFieldDefinition.prototype, "description", void 0);
|
|
81
|
-
__decorate([Column({
|
|
82
|
-
type: DataType.BOOLEAN,
|
|
83
|
-
defaultValue: false
|
|
84
|
-
}), __decorateMetadata("design:type", Boolean)], CustomFieldDefinition.prototype, "required", void 0);
|
|
85
|
-
__decorate([Column({
|
|
86
|
-
type: DataType.BOOLEAN,
|
|
87
|
-
defaultValue: false
|
|
88
|
-
}), __decorateMetadata("design:type", Boolean)], CustomFieldDefinition.prototype, "disabled", void 0);
|
|
89
|
-
__decorate([Column({
|
|
90
|
-
type: DataType.JSONB,
|
|
91
|
-
allowNull: true
|
|
92
|
-
}), __decorateMetadata("design:type", Object)], CustomFieldDefinition.prototype, "defaultValue", void 0);
|
|
93
|
-
__decorate([Column({
|
|
94
|
-
type: DataType.DATE,
|
|
95
|
-
allowNull: false
|
|
96
|
-
}), __decorateMetadata("design:type", typeof (_ref2 = typeof Date !== "undefined" && Date) === "function" ? _ref2 : Object)], CustomFieldDefinition.prototype, "createdAt", void 0);
|
|
97
|
-
__decorate([Column({
|
|
98
|
-
type: DataType.DATE,
|
|
99
|
-
allowNull: true
|
|
100
|
-
}), __decorateMetadata("design:type", typeof (_ref3 = typeof Date !== "undefined" && Date) === "function" ? _ref3 : Object)], CustomFieldDefinition.prototype, "updatedAt", void 0);
|
|
101
|
-
__decorate([Column({
|
|
102
|
-
type: DataType.DATE,
|
|
103
|
-
allowNull: true
|
|
104
|
-
}), __decorateMetadata("design:type", typeof (_ref4 = typeof Date !== "undefined" && Date) === "function" ? _ref4 : Object)], CustomFieldDefinition.prototype, "deletedAt", void 0);
|
|
105
|
-
__decorate([Column({
|
|
106
|
-
type: DataType.BOOLEAN,
|
|
107
|
-
defaultValue: false,
|
|
108
|
-
allowNull: false
|
|
109
|
-
}), __decorateMetadata("design:type", Boolean)], CustomFieldDefinition.prototype, "blockEditingFromUI", void 0);
|
|
110
|
-
__decorate([HasMany(() => CustomFieldValue_default), __decorateMetadata("design:type", Array)], CustomFieldDefinition.prototype, "values", void 0);
|
|
111
|
-
__decorate([
|
|
112
|
-
BeforeCreate,
|
|
113
|
-
__decorateMetadata("design:type", Function),
|
|
114
|
-
__decorateMetadata("design:paramtypes", [typeof (_ref5 = typeof CustomFieldDefinition !== "undefined" && CustomFieldDefinition) === "function" ? _ref5 : Object]),
|
|
115
|
-
__decorateMetadata("design:returntype", void 0)
|
|
116
|
-
], CustomFieldDefinition, "displayNameDefaultValue", null);
|
|
117
|
-
__decorate([
|
|
118
|
-
AfterSave,
|
|
119
|
-
__decorateMetadata("design:type", Function),
|
|
120
|
-
__decorateMetadata("design:paramtypes", [typeof (_ref6 = typeof CustomFieldDefinition !== "undefined" && CustomFieldDefinition) === "function" ? _ref6 : Object, Object]),
|
|
121
|
-
__decorateMetadata("design:returntype", void 0)
|
|
122
|
-
], CustomFieldDefinition, "afterSaveHandler", null);
|
|
123
|
-
CustomFieldDefinition = __decorate([DefaultScope(() => ({ where: { disabled: false } })), Table({
|
|
124
|
-
tableName: "custom_field_definitions",
|
|
125
|
-
modelName: "CustomFieldDefinition",
|
|
126
|
-
indexes: [{
|
|
127
|
-
name: "unique_name_model_type",
|
|
128
|
-
fields: [
|
|
129
|
-
"model_type",
|
|
130
|
-
"entity_id",
|
|
131
|
-
"name"
|
|
132
|
-
],
|
|
133
|
-
unique: true
|
|
134
|
-
}],
|
|
135
|
-
timestamps: true,
|
|
136
|
-
validate: { validationByType() {
|
|
137
|
-
if (!this.validation && CustomValidationTypes[this.fieldType]) {
|
|
138
|
-
logger_default.error(`No custom validation for custom field type ${this.fieldType} found`);
|
|
139
|
-
throw new UnsupportedCustomValidationError(`Validation provided for "${this.fieldType}" is not supported`);
|
|
140
|
-
}
|
|
141
|
-
} }
|
|
142
|
-
})], CustomFieldDefinition);
|
|
143
|
-
var CustomFieldDefinition_default = CustomFieldDefinition;
|
|
144
|
-
|
|
145
|
-
//#endregion
|
|
146
|
-
export { CustomFieldDefinition_default as default };
|
|
1
|
+
import e from"../utils/logger/index.js";import{CustomFieldDefinitionType as t}from"../utils/constants/index.js";import{CustomValidationTypes as n}from"../utils/validations/validators/index.js";import{sendDimEvent as r}from"../events/index.js";import{InvalidValueError as i,UnsupportedCustomFieldTypeError as a,UnsupportedCustomValidationError as o}from"../errors/index.js";import{validateValue as s}from"../utils/validations/index.js";import{__decorateMetadata as c}from"../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";import{__decorate as l}from"../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";import u from"./CustomFieldValue.js";import{AfterSave as d,BeforeCreate as f,Column as p,DataType as m,DefaultScope as h,HasMany as g,Is as _,Model as v,PrimaryKey as y,Table as b}from"sequelize-typescript";var x,S,C,w,T,E;let D=class extends v{get modelTypeIds(){return this._modelTypeIds}set modelTypeIds(e){this._modelTypeIds=e,this.setDataValue(`modelTypeIds`,e)}static displayNameDefaultValue(e){if(e?.displayName||(e.displayName=e.name),![null,void 0].includes(e.defaultValue)){let t=s(e.defaultValue,e.fieldType,e.validation);if(t.error)throw new i(e.defaultValue,e.name,t.error)}}static afterSaveHandler(e,t){t.transaction?t.transaction.afterCommit(()=>r(e)):r(e)}toJSON(){let{modelTypeMappings:e,...t}=this.get();return t}};l([y,p({type:m.UUID,defaultValue:m.UUIDV4,allowNull:!1}),c(`design:type`,String)],D.prototype,`id`,void 0),l([p({type:m.STRING,allowNull:!1}),c(`design:type`,String)],D.prototype,`name`,void 0),l([p({type:m.STRING}),c(`design:type`,String)],D.prototype,`displayName`,void 0),l([_(`SupportedType`,e=>{if(!Object.values(t).includes(e))throw new a(`"${e}" is not a supported type.`)}),p({type:m.STRING,allowNull:!1}),c(`design:type`,typeof(x=t!==void 0&&t)==`function`?x:Object)],D.prototype,`fieldType`,void 0),l([p({type:m.JSONB}),c(`design:type`,Object)],D.prototype,`validation`,void 0),l([p({type:m.UUID,allowNull:!1}),c(`design:type`,String)],D.prototype,`entityId`,void 0),l([p({type:m.STRING,allowNull:!1}),c(`design:type`,String)],D.prototype,`entityType`,void 0),l([p({type:m.STRING,allowNull:!1}),c(`design:type`,String)],D.prototype,`modelType`,void 0),l([p({type:m.TEXT}),c(`design:type`,String)],D.prototype,`description`,void 0),l([p({type:m.BOOLEAN,defaultValue:!1}),c(`design:type`,Boolean)],D.prototype,`required`,void 0),l([p({type:m.BOOLEAN,defaultValue:!1}),c(`design:type`,Boolean)],D.prototype,`disabled`,void 0),l([p({type:m.JSONB,allowNull:!0}),c(`design:type`,Object)],D.prototype,`defaultValue`,void 0),l([p({type:m.DATE,allowNull:!1}),c(`design:type`,typeof(S=typeof Date<`u`&&Date)==`function`?S:Object)],D.prototype,`createdAt`,void 0),l([p({type:m.DATE,allowNull:!0}),c(`design:type`,typeof(C=typeof Date<`u`&&Date)==`function`?C:Object)],D.prototype,`updatedAt`,void 0),l([p({type:m.DATE,allowNull:!0}),c(`design:type`,typeof(w=typeof Date<`u`&&Date)==`function`?w:Object)],D.prototype,`deletedAt`,void 0),l([p({type:m.BOOLEAN,defaultValue:!1,allowNull:!1}),c(`design:type`,Boolean)],D.prototype,`blockEditingFromUI`,void 0),l([g(()=>u),c(`design:type`,Array)],D.prototype,`values`,void 0),l([f,c(`design:type`,Function),c(`design:paramtypes`,[typeof(T=D!==void 0&&D)==`function`?T:Object]),c(`design:returntype`,void 0)],D,`displayNameDefaultValue`,null),l([d,c(`design:type`,Function),c(`design:paramtypes`,[typeof(E=D!==void 0&&D)==`function`?E:Object,Object]),c(`design:returntype`,void 0)],D,`afterSaveHandler`,null),D=l([h(()=>({where:{disabled:!1}})),b({tableName:`custom_field_definitions`,modelName:`CustomFieldDefinition`,indexes:[{name:`unique_name_model_type`,fields:[`model_type`,`entity_id`,`name`],unique:!0}],timestamps:!0,validate:{validationByType(){if(!this.validation&&n[this.fieldType])throw e.error(`No custom validation for custom field type ${this.fieldType} found`),new o(`Validation provided for "${this.fieldType}" is not supported`)}}})],D);var O=D;export{O as default};
|
|
2
|
+
//# sourceMappingURL=CustomFieldDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomFieldDefinition.js","names":["CustomFieldDefinition","CustomFieldValue"],"sources":["../../src/models/CustomFieldDefinition.ts"],"sourcesContent":["import {\n Table,\n Column,\n Model,\n DataType,\n HasMany,\n PrimaryKey,\n BeforeCreate,\n DefaultScope,\n AfterSave,\n Is,\n} from 'sequelize-typescript';\nimport type { CreateOptions } from 'sequelize';\nimport { CustomFieldDefinitionType } from '../utils/constants';\nimport { CustomValidationTypes } from '../utils/validations/validators';\nimport CustomFieldValue from './CustomFieldValue';\nimport CustomFieldModelTypeMap from './CustomFieldModelTypeMap';\nimport { sendDimEvent } from '../events';\nimport { InvalidValueError, UnsupportedCustomFieldTypeError, UnsupportedCustomValidationError } from '../errors';\nimport logger from '../utils/logger';\nimport { validateValue } from '../utils/validations';\n\n@DefaultScope(() => ({ where: { disabled: false } }))\n@Table({\n tableName: 'custom_field_definitions',\n modelName: 'CustomFieldDefinition',\n indexes: [\n {\n name: 'unique_name_model_type',\n fields: ['model_type', 'entity_id', 'name'],\n unique: true,\n },\n ],\n timestamps: true,\n validate: {\n validationByType(this: CustomFieldDefinition) {\n // Verify the validation is provided if needed\n if (!this.validation && CustomValidationTypes[this.fieldType as keyof typeof CustomValidationTypes]) {\n // TODO: enforce the validation-object schema based on the fieldType\n logger.error(`No custom validation for custom field type ${this.fieldType} found`);\n throw new UnsupportedCustomValidationError(`Validation provided for \"${this.fieldType}\" is not supported`);\n }\n },\n },\n})\nclass CustomFieldDefinition extends Model {\n @PrimaryKey\n @Column({\n type: DataType.UUID,\n defaultValue: DataType.UUIDV4,\n allowNull: false,\n })\n declare id: string;\n\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n name!: string;\n\n @Column({\n type: DataType.STRING,\n })\n displayName?: string; // Defaulted to name with beforeCreate hook\n\n @Is('SupportedType', (value) => {\n if (!Object.values(CustomFieldDefinitionType).includes(value as CustomFieldDefinitionType)) {\n throw new UnsupportedCustomFieldTypeError(`\"${value}\" is not a supported type.`);\n }\n })\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n fieldType!: CustomFieldDefinitionType;\n\n @Column({\n type: DataType.JSONB,\n })\n validation?: any;\n\n @Column({\n type: DataType.UUID,\n allowNull: false,\n })\n entityId!: string; /** Client association entity id */\n\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n entityType!: string; /** Client association entity type (demand source / fleet / etc.) */\n\n @Column({\n type: DataType.STRING,\n allowNull: false,\n })\n modelType!: string; /** Model type. e.g. Vehicle / StopPoint / etc. */\n\n @Column({\n type: DataType.TEXT,\n })\n description?: string;\n\n @Column({\n type: DataType.BOOLEAN,\n defaultValue: false,\n })\n required?: boolean;\n\n @Column({\n type: DataType.BOOLEAN,\n defaultValue: false,\n })\n disabled?: boolean;\n\n @Column({\n type: DataType.JSONB,\n allowNull: true,\n })\n defaultValue?: any;\n\n @Column({\n type: DataType.DATE,\n allowNull: false,\n })\n declare createdAt?: Date;\n\n @Column({\n type: DataType.DATE,\n allowNull: true,\n })\n declare updatedAt?: Date;\n\n @Column({\n type: DataType.DATE,\n allowNull: true,\n })\n declare deletedAt?: Date;\n\n @Column({\n type: DataType.BOOLEAN,\n defaultValue: false,\n allowNull: false,\n })\n blockEditingFromUI!: boolean;\n\n @HasMany(() => CustomFieldValue)\n declare values: CustomFieldValue[];\n\n // Association added programmatically when useModelTypeMapping is enabled\n declare modelTypeMappings?: CustomFieldModelTypeMap[];\n\n // Virtual property for modelTypeIds - set manually after fetch\n private _modelTypeIds?: string[];\n\n get modelTypeIds(): string[] | undefined {\n return this._modelTypeIds;\n }\n\n set modelTypeIds(value: string[] | undefined) {\n this._modelTypeIds = value;\n this.setDataValue('modelTypeIds', value);\n }\n\n @BeforeCreate\n static displayNameDefaultValue(instance: CustomFieldDefinition): void {\n if (!instance?.displayName) {\n instance.displayName = instance.name;\n }\n if (![null, undefined].includes(instance.defaultValue)) {\n const isValid = validateValue(instance.defaultValue, instance.fieldType, instance.validation);\n if (isValid.error) {\n throw new InvalidValueError(instance.defaultValue, instance.name, isValid.error);\n }\n }\n }\n\n @AfterSave\n static afterSaveHandler(instance: CustomFieldDefinition, options: CreateOptions): void {\n if (options.transaction) {\n options.transaction.afterCommit(() => sendDimEvent(instance));\n } else {\n sendDimEvent(instance);\n }\n }\n\n /**\n * Override toJSON to exclude internal associations from API responses\n * The modelTypeMappings association is used internally to optimize queries\n * but should not be exposed in the API response (use modelTypeIds instead)\n */\n toJSON(): object {\n // Remove the internal association used for query optimization\n const { modelTypeMappings: _modelTypeMappings, ...values } = this.get();\n return values;\n }\n}\n\nexport default CustomFieldDefinition;\n"],"mappings":"w1BAsBA,IAAA,EAAA,cAuBoC,CAAM,CA+GxC,IAAI,cAAqC,CACvC,OAAO,KAAK,cAGd,IAAI,aAAa,EAA6B,CAC5C,KAAK,cAAgB,EACrB,KAAK,aAAa,eAAgB,EAAM,CAG1C,OACO,wBAAwB,EAAuC,CAIpE,GAHK,GAAU,cACb,EAAS,YAAc,EAAS,MAE9B,CAAC,CAAC,KAAM,IAAA,GAAU,CAAC,SAAS,EAAS,aAAa,CAAE,CACtD,IAAM,EAAU,EAAc,EAAS,aAAc,EAAS,UAAW,EAAS,WAAW,CAC7F,GAAI,EAAQ,MACV,MAAM,IAAI,EAAkB,EAAS,aAAc,EAAS,KAAM,EAAQ,MAAM,EAKtF,OACO,iBAAiB,EAAiC,EAA8B,CACjF,EAAQ,YACV,EAAQ,YAAY,gBAAkB,EAAa,EAAS,CAAC,CAE7D,EAAa,EAAS,CAS1B,QAAiB,CAEf,GAAM,CAAE,kBAAmB,EAAoB,GAAG,GAAW,KAAK,KAAK,CACvE,OAAO,OArJR,EACA,EAAO,CACN,KAAM,EAAS,KACf,aAAc,EAAS,OACvB,UAAW,GACZ,CAAC,sDAGD,EAAO,CACN,KAAM,EAAS,OACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,OAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,OAChB,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,cAAA,IAAA,GAAA,IAGD,EAAG,gBAAkB,GAAU,CAC9B,GAAI,CAAC,OAAO,OAAO,EAA0B,CAAC,SAAS,EAAmC,CACxF,MAAM,IAAI,EAAgC,IAAI,EAAM,4BAA4B,EAElF,CACD,EAAO,CACN,KAAM,EAAS,OACf,UAAW,GACZ,CAAC,mGAGD,EAAO,CACN,KAAM,EAAS,MAChB,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,aAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,KACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,WAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,OACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,aAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,OACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,YAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,KAChB,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,cAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,QACf,aAAc,GACf,CAAC,CAAA,EAAA,cAAA,QAAA,CAAA,CAAA,EAAA,UAAA,WAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,QACf,aAAc,GACf,CAAC,CAAA,EAAA,cAAA,QAAA,CAAA,CAAA,EAAA,UAAA,WAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,MACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,CAAA,CAAA,EAAA,UAAA,eAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,KACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,EAAA,OAAA,KAAA,KAAA,OAAA,WAAA,EAAA,OAAA,CAAA,CAAA,EAAA,UAAA,YAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,KACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,EAAA,OAAA,KAAA,KAAA,OAAA,WAAA,EAAA,OAAA,CAAA,CAAA,EAAA,UAAA,YAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,KACf,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,OAAA,EAAA,OAAA,KAAA,KAAA,OAAA,WAAA,EAAA,OAAA,CAAA,CAAA,EAAA,UAAA,YAAA,IAAA,GAAA,IAGD,EAAO,CACN,KAAM,EAAS,QACf,aAAc,GACd,UAAW,GACZ,CAAC,CAAA,EAAA,cAAA,QAAA,CAAA,CAAA,EAAA,UAAA,qBAAA,IAAA,GAAA,IAGD,MAAcC,EAAiB,CAAA,EAAA,cAAA,MAAA,CAAA,CAAA,EAAA,UAAA,SAAA,IAAA,GAAA,IAkB/B,sKAaA,wKA5JF,OAAoB,CAAE,MAAO,CAAE,SAAU,GAAO,CAAE,EAAE,CACpD,EAAM,CACL,UAAW,2BACX,UAAW,wBACX,QAAS,CACP,CACE,KAAM,yBACN,OAAQ,CAAC,aAAc,YAAa,OAAO,CAC3C,OAAQ,GACT,CACF,CACD,WAAY,GACZ,SAAU,CACR,kBAA8C,CAE5C,GAAI,CAAC,KAAK,YAAc,EAAsB,KAAK,WAGjD,MADA,EAAO,MAAM,8CAA8C,KAAK,UAAU,QAAQ,CAC5E,IAAI,EAAiC,4BAA4B,KAAK,UAAU,oBAAoB,EAG/G,CACF,CAAC,CAAA,CAAA,EAAA,CA2JF,IAAA,EAAe"}
|