@autofleet/sadot 1.0.6 → 1.0.8
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.89.0/helpers/decorate.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.89.0/helpers/decorate.js +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.89.0/helpers/decorateMetadata.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.89.0/helpers/decorateMetadata.js +1 -0
- package/dist/_virtual/rolldown_runtime.cjs +1 -0
- package/dist/api/index.cjs +2 -0
- package/dist/api/index.cjs.map +1 -0
- package/dist/api/index.js +1 -12
- package/dist/api/index.js.map +1 -1
- package/dist/api/v1/definition/index.cjs +2 -0
- package/dist/api/v1/definition/index.cjs.map +1 -0
- package/dist/api/v1/definition/index.js +1 -116
- package/dist/api/v1/definition/index.js.map +1 -1
- package/dist/api/v1/definition/validations.cjs +2 -0
- package/dist/api/v1/definition/validations.cjs.map +1 -0
- package/dist/api/v1/definition/validations.js +1 -77
- package/dist/api/v1/definition/validations.js.map +1 -1
- package/dist/api/v1/errors.cjs +2 -0
- package/dist/api/v1/errors.cjs.map +1 -0
- package/dist/api/v1/errors.js +1 -12
- package/dist/api/v1/errors.js.map +1 -1
- package/dist/api/v1/index.cjs +2 -0
- package/dist/api/v1/index.cjs.map +1 -0
- package/dist/api/v1/index.js +1 -13
- package/dist/api/v1/index.js.map +1 -1
- package/dist/api/v1/validator/index.cjs +2 -0
- package/dist/api/v1/validator/index.cjs.map +1 -0
- package/dist/api/v1/validator/index.js +1 -143
- package/dist/api/v1/validator/index.js.map +1 -1
- package/dist/api/v1/validator/validations.cjs +2 -0
- package/dist/api/v1/validator/validations.cjs.map +1 -0
- package/dist/api/v1/validator/validations.js +1 -38
- package/dist/api/v1/validator/validations.js.map +1 -1
- package/dist/errors/index.cjs +3 -0
- package/dist/errors/index.cjs.map +1 -0
- package/dist/errors/index.js +2 -66
- package/dist/errors/index.js.map +1 -1
- package/dist/events/index.cjs +2 -0
- package/dist/events/index.cjs.map +1 -0
- package/dist/events/index.js +1 -54
- package/dist/events/index.js.map +1 -1
- package/dist/hooks/enrich.cjs +2 -0
- package/dist/hooks/enrich.cjs.map +1 -0
- package/dist/hooks/enrich.js +1 -197
- package/dist/hooks/enrich.js.map +1 -1
- package/dist/hooks/find.cjs +2 -0
- package/dist/hooks/find.cjs.map +1 -0
- package/dist/hooks/find.js +1 -29
- package/dist/hooks/find.js.map +1 -1
- package/dist/hooks/hooks.cjs +2 -0
- package/dist/hooks/hooks.cjs.map +1 -0
- package/dist/hooks/hooks.js +1 -387
- package/dist/hooks/hooks.js.map +1 -1
- package/dist/hooks/index.cjs +1 -0
- package/dist/hooks/index.js +1 -18
- package/dist/hooks/utils/updateInstanceValues.cjs +2 -0
- package/dist/hooks/utils/updateInstanceValues.cjs.map +1 -0
- package/dist/hooks/utils/updateInstanceValues.js +1 -50
- package/dist/hooks/utils/updateInstanceValues.js.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +19 -0
- package/dist/index.d.ts +18 -12
- package/dist/index.js +1 -67
- package/dist/index.js.map +1 -1
- package/dist/models/CustomFieldDefinition.cjs +2 -0
- package/dist/models/CustomFieldDefinition.cjs.map +1 -0
- package/dist/models/CustomFieldDefinition.js +1 -201
- package/dist/models/CustomFieldDefinition.js.map +1 -1
- package/dist/models/CustomFieldEntries.cjs +2 -0
- package/dist/models/CustomFieldEntries.cjs.map +1 -0
- package/dist/models/CustomFieldEntries.js +1 -129
- package/dist/models/CustomFieldEntries.js.map +1 -1
- package/dist/models/CustomFieldValue.cjs +2 -0
- package/dist/models/CustomFieldValue.cjs.map +1 -0
- package/dist/models/CustomFieldValue.js +1 -160
- package/dist/models/CustomFieldValue.js.map +1 -1
- package/dist/models/CustomValidator.cjs +2 -0
- package/dist/models/CustomValidator.cjs.map +1 -0
- package/dist/models/CustomValidator.js +1 -104
- package/dist/models/CustomValidator.js.map +1 -1
- package/dist/models/index.cjs +2 -0
- package/dist/models/index.cjs.map +1 -0
- package/dist/models/index.js +1 -131
- package/dist/models/index.js.map +1 -1
- package/dist/models/tests/AssociatedTestModel.cjs +2 -0
- package/dist/models/tests/AssociatedTestModel.cjs.map +1 -0
- package/dist/models/tests/AssociatedTestModel.js +1 -73
- package/dist/models/tests/AssociatedTestModel.js.map +1 -1
- package/dist/models/tests/TestModel.cjs +2 -0
- package/dist/models/tests/TestModel.cjs.map +1 -0
- package/dist/models/tests/TestModel.js +1 -71
- package/dist/models/tests/TestModel.js.map +1 -1
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs +2 -0
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs.map +1 -0
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js +1 -53
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js.map +1 -1
- package/dist/models/tests/contextAwareModels/ContextTestModel.cjs +2 -0
- package/dist/models/tests/contextAwareModels/ContextTestModel.cjs.map +1 -0
- package/dist/models/tests/contextAwareModels/ContextTestModel.js +1 -47
- package/dist/models/tests/contextAwareModels/ContextTestModel.js.map +1 -1
- package/dist/repository/definition.cjs +2 -0
- package/dist/repository/definition.cjs.map +1 -0
- package/dist/repository/definition.js +1 -123
- package/dist/repository/definition.js.map +1 -1
- package/dist/repository/entries.cjs +2 -0
- package/dist/repository/entries.cjs.map +1 -0
- package/dist/repository/entries.js +1 -92
- package/dist/repository/entries.js.map +1 -1
- package/dist/repository/utils/formatValues.cjs +2 -0
- package/dist/repository/utils/formatValues.cjs.map +1 -0
- package/dist/repository/utils/formatValues.js +1 -16
- package/dist/repository/utils/formatValues.js.map +1 -1
- package/dist/repository/validator.cjs +2 -0
- package/dist/repository/validator.cjs.map +1 -0
- package/dist/repository/validator.js +1 -69
- package/dist/repository/validator.js.map +1 -1
- package/dist/repository/value.cjs +2 -0
- package/dist/repository/value.cjs.map +1 -0
- package/dist/repository/value.js +1 -124
- package/dist/repository/value.js.map +1 -1
- package/dist/scopes/filter.cjs +2 -0
- package/dist/scopes/filter.cjs.map +1 -0
- package/dist/scopes/filter.d.cts +23 -0
- package/dist/scopes/filter.d.ts +22 -29
- package/dist/scopes/filter.js +1 -75
- package/dist/scopes/filter.js.map +1 -1
- package/dist/scopes/helpers/filter.helpers.cjs +46 -0
- package/dist/scopes/helpers/filter.helpers.cjs.map +1 -0
- package/dist/scopes/helpers/filter.helpers.d.cts +17 -0
- package/dist/scopes/helpers/filter.helpers.d.ts +15 -40
- package/dist/scopes/helpers/filter.helpers.js +24 -183
- package/dist/scopes/helpers/filter.helpers.js.map +1 -1
- package/dist/scopes/index.cjs +1 -0
- package/dist/scopes/index.js +1 -7
- package/dist/types/index.d.cts +44 -0
- package/dist/types/index.d.ts +41 -44
- package/dist/utils/constants/index.cjs +2 -0
- package/dist/utils/constants/index.cjs.map +1 -0
- package/dist/utils/constants/index.d.cts +22 -0
- package/dist/utils/constants/index.d.ts +20 -17
- package/dist/utils/constants/index.js +1 -22
- package/dist/utils/constants/index.js.map +1 -1
- package/dist/utils/db/index.cjs +2 -0
- package/dist/utils/db/index.cjs.map +1 -0
- package/dist/utils/db/index.js +1 -24
- package/dist/utils/db/index.js.map +1 -1
- package/dist/utils/helpers/index.cjs +2 -0
- package/dist/utils/helpers/index.cjs.map +1 -0
- package/dist/utils/helpers/index.d.cts +31 -0
- package/dist/utils/helpers/index.d.ts +28 -23
- package/dist/utils/helpers/index.js +1 -40
- package/dist/utils/helpers/index.js.map +1 -1
- package/dist/utils/init.cjs +2 -0
- package/dist/utils/init.cjs.map +1 -0
- package/dist/utils/init.js +1 -112
- package/dist/utils/init.js.map +1 -1
- package/dist/utils/logger/index.cjs +2 -0
- package/dist/utils/logger/index.cjs.map +1 -0
- package/dist/utils/logger/index.js +1 -42
- package/dist/utils/logger/index.js.map +1 -1
- package/dist/utils/scopeAttributes.cjs +2 -0
- package/dist/utils/scopeAttributes.cjs.map +1 -0
- package/dist/utils/scopeAttributes.js +1 -11
- package/dist/utils/scopeAttributes.js.map +1 -1
- package/dist/utils/validations/index.cjs +2 -0
- package/dist/utils/validations/index.cjs.map +1 -0
- package/dist/utils/validations/index.js +1 -41
- package/dist/utils/validations/index.js.map +1 -1
- package/dist/utils/validations/schema/custom-fields.cjs +2 -0
- package/dist/utils/validations/schema/custom-fields.cjs.map +1 -0
- package/dist/utils/validations/schema/custom-fields.d.cts +7 -0
- package/dist/utils/validations/schema/custom-fields.d.ts +6 -2
- package/dist/utils/validations/schema/custom-fields.js +1 -9
- package/dist/utils/validations/schema/custom-fields.js.map +1 -1
- package/dist/utils/validations/schema/validator-schema.cjs +2 -0
- package/dist/utils/validations/schema/validator-schema.cjs.map +1 -0
- package/dist/utils/validations/schema/validator-schema.js +1 -95
- package/dist/utils/validations/schema/validator-schema.js.map +1 -1
- package/dist/utils/validations/validators/index.cjs +2 -0
- package/dist/utils/validations/validators/index.cjs.map +1 -0
- package/dist/utils/validations/validators/index.js +1 -40
- package/dist/utils/validations/validators/index.js.map +1 -1
- package/dist/utils/validations/validators/select.validator.cjs +2 -0
- package/dist/utils/validations/validators/select.validator.cjs.map +1 -0
- package/dist/utils/validations/validators/select.validator.js +1 -12
- package/dist/utils/validations/validators/select.validator.js.map +1 -1
- package/dist/utils/validations/validators/status.validator.cjs +2 -0
- package/dist/utils/validations/validators/status.validator.cjs.map +1 -0
- package/dist/utils/validations/validators/status.validator.js +1 -15
- package/dist/utils/validations/validators/status.validator.js.map +1 -1
- package/package.json +20 -4
- package/dist/api/index.d.ts +0 -3
- package/dist/api/v1/definition/index.d.ts +0 -3
- package/dist/api/v1/definition/validations.d.ts +0 -2
- package/dist/api/v1/errors.d.ts +0 -4
- package/dist/api/v1/index.d.ts +0 -3
- package/dist/api/v1/validator/index.d.ts +0 -3
- package/dist/api/v1/validator/validations.d.ts +0 -6
- package/dist/errors/index.d.ts +0 -24
- package/dist/events/index.d.ts +0 -5
- package/dist/hooks/create.d.ts +0 -10
- package/dist/hooks/create.js +0 -96
- package/dist/hooks/create.js.map +0 -1
- package/dist/hooks/enrich.d.ts +0 -25
- package/dist/hooks/find.d.ts +0 -1
- package/dist/hooks/hooks.d.ts +0 -17
- package/dist/hooks/index.d.ts +0 -5
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/update.d.ts +0 -10
- package/dist/hooks/update.js +0 -50
- package/dist/hooks/update.js.map +0 -1
- package/dist/hooks/utils/updateInstanceValues.d.ts +0 -15
- package/dist/hooks/workaround.d.ts +0 -10
- package/dist/hooks/workaround.js +0 -38
- package/dist/hooks/workaround.js.map +0 -1
- package/dist/models/CustomFieldDefinition.d.ts +0 -25
- package/dist/models/CustomFieldEntries.d.ts +0 -15
- package/dist/models/CustomFieldValue.d.ts +0 -16
- package/dist/models/CustomValidator.d.ts +0 -17
- package/dist/models/index.d.ts +0 -18
- package/dist/models/tests/AssociatedTestModel.d.ts +0 -12
- package/dist/models/tests/TestModel.d.ts +0 -12
- package/dist/models/tests/contextAwareModels/ContextAwareTestModel.d.ts +0 -10
- package/dist/models/tests/contextAwareModels/ContextTestModel.d.ts +0 -13
- package/dist/repository/definition.d.ts +0 -37
- package/dist/repository/entries.d.ts +0 -13
- package/dist/repository/utils/formatValues.d.ts +0 -3
- package/dist/repository/validator.d.ts +0 -28
- package/dist/repository/value.d.ts +0 -28
- package/dist/scopes/index.d.ts +0 -2
- package/dist/scopes/index.js.map +0 -1
- package/dist/types/definition/index.d.ts +0 -25
- package/dist/types/definition/index.js +0 -3
- package/dist/types/definition/index.js.map +0 -1
- package/dist/types/entries/index.d.ts +0 -25
- package/dist/types/entries/index.js +0 -3
- package/dist/types/entries/index.js.map +0 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +0 -1
- package/dist/types/value/index.d.ts +0 -15
- package/dist/types/value/index.js +0 -3
- package/dist/types/value/index.js.map +0 -1
- package/dist/utils/db/index.d.ts +0 -4
- package/dist/utils/init.d.ts +0 -7
- package/dist/utils/logger/index.d.ts +0 -3
- package/dist/utils/scopeAttributes.d.ts +0 -2
- package/dist/utils/validations/index.d.ts +0 -8
- package/dist/utils/validations/schema/validator-schema.d.ts +0 -9
- package/dist/utils/validations/type.d.ts +0 -15
- package/dist/utils/validations/type.js +0 -3
- package/dist/utils/validations/type.js.map +0 -1
- package/dist/utils/validations/validators/index.d.ts +0 -14
- package/dist/utils/validations/validators/select.validator.d.ts +0 -5
- package/dist/utils/validations/validators/status.validator.d.ts +0 -12
|
@@ -1,93 +1,2 @@
|
|
|
1
|
-
"
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.updateEntries = exports.findEntriesByModelIds = exports.findEntriesByModelId = void 0;
|
|
30
|
-
const models_1 = require("../models");
|
|
31
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
32
|
-
const errors_1 = require("../errors");
|
|
33
|
-
const DefinitionRepo = __importStar(require("./definition"));
|
|
34
|
-
const formatValues_1 = require("./utils/formatValues");
|
|
35
|
-
const findEntriesByModelId = async (modelId, options = {}) => {
|
|
36
|
-
const { transaction } = options;
|
|
37
|
-
return models_1.CustomFieldEntries.findOne({
|
|
38
|
-
where: { modelId },
|
|
39
|
-
transaction,
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
exports.findEntriesByModelId = findEntriesByModelId;
|
|
43
|
-
const findEntriesByModelIds = async (modelIds, options = {}) => {
|
|
44
|
-
const { transaction } = options;
|
|
45
|
-
return models_1.CustomFieldEntries.findAll({
|
|
46
|
-
where: { modelId: modelIds },
|
|
47
|
-
transaction,
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
exports.findEntriesByModelIds = findEntriesByModelIds;
|
|
51
|
-
const updateEntries = async (modelId, modelType, customFields, identifiers, options = {}) => {
|
|
52
|
-
const customFieldsNames = Object.keys(customFields);
|
|
53
|
-
logger_1.default.debug(`custom-fields: updating entries for ${modelType} ${modelId}`, {
|
|
54
|
-
customFieldsNames,
|
|
55
|
-
optionsKeys: options ? Object.keys(options) : null,
|
|
56
|
-
customFields,
|
|
57
|
-
identifiers,
|
|
58
|
-
});
|
|
59
|
-
const { modelOptions, transaction } = options;
|
|
60
|
-
const where = {
|
|
61
|
-
modelType,
|
|
62
|
-
name: customFieldsNames,
|
|
63
|
-
...(!options.modelOptions?.useEntityIdFromInclude && { entityId: identifiers }),
|
|
64
|
-
};
|
|
65
|
-
const fieldDefinitions = await DefinitionRepo.findAll(where, { withDisabled: true, transaction, include: modelOptions.include?.(identifiers) }) ?? [];
|
|
66
|
-
const disabledDefinitions = fieldDefinitions.filter((def) => def.disabled);
|
|
67
|
-
if (fieldDefinitions.length !== customFieldsNames.length) {
|
|
68
|
-
logger_1.default.warn(`custom-fields: missing definitions for ${modelType} ${modelId}`, { names: customFieldsNames, fieldDefinitions });
|
|
69
|
-
const missingDefinitions = customFieldsNames.filter((name) => !fieldDefinitions.some((def) => def.name === name));
|
|
70
|
-
throw new errors_1.MissingDefinitionError(missingDefinitions);
|
|
71
|
-
}
|
|
72
|
-
const disabledNames = disabledDefinitions?.map((def) => def.name) || [];
|
|
73
|
-
const valuesWithDisabledDefinitions = customFieldsNames.filter((name) => disabledNames.includes(name));
|
|
74
|
-
if (valuesWithDisabledDefinitions?.length > 0) {
|
|
75
|
-
logger_1.default.warn(`custom-fields: trying to update disabled values: ${valuesWithDisabledDefinitions.join(', ')}`);
|
|
76
|
-
}
|
|
77
|
-
const definitionsByName = Object.fromEntries(fieldDefinitions.map((definition) => [definition.name, definition]));
|
|
78
|
-
// If we need to format the value before we save it
|
|
79
|
-
Object.entries(customFields)
|
|
80
|
-
.filter(([definitionName]) => formatValues_1.formatFunctions[definitionsByName[definitionName].fieldType])
|
|
81
|
-
.forEach(([definitionName, value]) => {
|
|
82
|
-
const { fieldType } = definitionsByName[definitionName];
|
|
83
|
-
customFields[definitionName] = formatValues_1.formatFunctions[fieldType](value);
|
|
84
|
-
});
|
|
85
|
-
return models_1.CustomFieldEntries.upsert({
|
|
86
|
-
modelId,
|
|
87
|
-
entityId: fieldDefinitions[0].entityId,
|
|
88
|
-
modelType,
|
|
89
|
-
customFields,
|
|
90
|
-
}, options);
|
|
91
|
-
};
|
|
92
|
-
exports.updateEntries = updateEntries;
|
|
1
|
+
import e from"../utils/logger/index.js";import{MissingDefinitionError as t}from"../errors/index.js";import{findAll as n}from"./definition.js";import r from"../models/CustomFieldEntries.js";import"../models/index.js";import{formatFunctions as i}from"./utils/formatValues.js";const a=async(e,t={})=>{let{transaction:n}=t;return r.findOne({where:{modelId:e},transaction:n})},o=async(e,t={})=>{let{transaction:n}=t;return r.findAll({where:{modelId:e},transaction:n})},s=async(a,o,s,c,l={})=>{let u=Object.keys(s);e.debug(`custom-fields: updating entries for ${o} ${a}`,{customFieldsNames:u,optionsKeys:l?Object.keys(l):null,customFields:s,identifiers:c});let{modelOptions:d,transaction:f}=l,p={modelType:o,name:u,...!l.modelOptions?.useEntityIdFromInclude&&{entityId:c}},m=await n(p,{withDisabled:!0,transaction:f,include:d.include?.(c)})??[],h=m.filter(e=>e.disabled);if(m.length!==u.length){e.warn(`custom-fields: missing definitions for ${o} ${a}`,{names:u,fieldDefinitions:m});let n=u.filter(e=>!m.some(t=>t.name===e));throw new t(n)}let g=h?.map(e=>e.name)||[],_=u.filter(e=>g.includes(e));_?.length>0&&e.warn(`custom-fields: trying to update disabled values: ${_.join(`, `)}`);let v=Object.fromEntries(m.map(e=>[e.name,e]));return Object.entries(s).filter(([e])=>i[v[e].fieldType]).forEach(([e,t])=>{let{fieldType:n}=v[e];s[e]=i[n](t)}),r.upsert({modelId:a,entityId:m[0].entityId,modelType:o,customFields:s},l)};export{a as findEntriesByModelId,o as findEntriesByModelIds,s as updateEntries};
|
|
93
2
|
//# sourceMappingURL=entries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.js","
|
|
1
|
+
{"version":3,"file":"entries.js","names":["CustomFieldEntries","where: WhereOptions","DefinitionRepo.findAll"],"sources":["../../src/repository/entries.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type {\n FindOptions,\n Includeable,\n Transaction,\n WhereOptions,\n} from 'sequelize';\nimport { CustomFieldEntries } from '../models';\nimport type { ModelOptions } from '../types';\nimport logger from '../utils/logger';\nimport { MissingDefinitionError } from '../errors';\nimport * as DefinitionRepo from './definition';\nimport { formatFunctions } from './utils/formatValues';\n\ntype CustomFieldEntriesModelOptions = ModelOptions & { include?: Includeable, transaction?: Transaction };\n\nexport const findEntriesByModelId = async (modelId: string, options: CustomFieldEntriesModelOptions = {}): Promise<CustomFieldEntries | null> => {\n const { transaction } = options;\n return CustomFieldEntries.findOne({\n where: { modelId },\n transaction,\n });\n};\n\nexport const findEntriesByModelIds = async (modelIds: string[], options: CustomFieldEntriesModelOptions = {}): Promise<CustomFieldEntries[]> => {\n const { transaction } = options;\n return CustomFieldEntries.findAll({\n where: { modelId: modelIds },\n transaction,\n });\n};\n\nexport const updateEntries = async (\n modelId: string,\n modelType: string,\n customFields: Record<string, any>,\n identifiers: string[],\n options: FindOptions & { modelOptions?: ModelOptions } = {},\n): Promise<[CustomFieldEntries, boolean | null]> => {\n const customFieldsNames = Object.keys(customFields);\n logger.debug(`custom-fields: updating entries for ${modelType} ${modelId}`, {\n customFieldsNames,\n optionsKeys: options ? Object.keys(options) : null,\n customFields,\n identifiers,\n });\n const { modelOptions, transaction } = options;\n\n const where: WhereOptions = {\n modelType,\n name: customFieldsNames,\n ...(!options.modelOptions?.useEntityIdFromInclude && { entityId: identifiers }),\n };\n\n const fieldDefinitions = await DefinitionRepo.findAll(where, { withDisabled: true, transaction, include: modelOptions.include?.(identifiers) }) ?? [];\n\n const disabledDefinitions = fieldDefinitions.filter((def) => def.disabled);\n if (fieldDefinitions.length !== customFieldsNames.length) {\n logger.warn(`custom-fields: missing definitions for ${modelType} ${modelId}`, { names: customFieldsNames, fieldDefinitions });\n const missingDefinitions = customFieldsNames.filter((name) => !fieldDefinitions.some((def) => def.name === name));\n throw new MissingDefinitionError(missingDefinitions);\n }\n\n const disabledNames = disabledDefinitions?.map((def) => def.name) || [];\n const valuesWithDisabledDefinitions = customFieldsNames.filter((name) => disabledNames.includes(name));\n if (valuesWithDisabledDefinitions?.length > 0) {\n logger.warn(`custom-fields: trying to update disabled values: ${valuesWithDisabledDefinitions.join(', ')}`);\n }\n\n const definitionsByName = Object.fromEntries(fieldDefinitions.map((definition) => [definition.name, definition]));\n // If we need to format the value before we save it\n Object.entries(customFields)\n .filter(([definitionName]) => formatFunctions[definitionsByName[definitionName].fieldType])\n .forEach(([definitionName, value]) => {\n const { fieldType } = definitionsByName[definitionName];\n customFields[definitionName] = formatFunctions[fieldType](value);\n });\n\n return CustomFieldEntries.upsert(\n {\n modelId,\n entityId: fieldDefinitions[0].entityId,\n modelType,\n customFields,\n },\n options,\n );\n};\n"],"mappings":"kRAgBA,MAAa,EAAuB,MAAO,EAAiB,EAA0C,EAAE,GAAyC,CAC/I,GAAM,CAAE,eAAgB,EACxB,OAAOA,EAAmB,QAAQ,CAChC,MAAO,CAAE,UAAS,CAClB,cACD,CAAC,EAGS,EAAwB,MAAO,EAAoB,EAA0C,EAAE,GAAoC,CAC9I,GAAM,CAAE,eAAgB,EACxB,OAAOA,EAAmB,QAAQ,CAChC,MAAO,CAAE,QAAS,EAAU,CAC5B,cACD,CAAC,EAGS,EAAgB,MAC3B,EACA,EACA,EACA,EACA,EAAyD,EAAE,GACT,CAClD,IAAM,EAAoB,OAAO,KAAK,EAAa,CACnD,EAAO,MAAM,uCAAuC,EAAU,GAAG,IAAW,CAC1E,oBACA,YAAa,EAAU,OAAO,KAAK,EAAQ,CAAG,KAC9C,eACA,cACD,CAAC,CACF,GAAM,CAAE,eAAc,eAAgB,EAEhCC,EAAsB,CAC1B,YACA,KAAM,EACN,GAAI,CAAC,EAAQ,cAAc,wBAA0B,CAAE,SAAU,EAAa,CAC/E,CAEK,EAAmB,MAAMC,EAAuB,EAAO,CAAE,aAAc,GAAM,cAAa,QAAS,EAAa,UAAU,EAAY,CAAE,CAAC,EAAI,EAAE,CAE/I,EAAsB,EAAiB,OAAQ,GAAQ,EAAI,SAAS,CAC1E,GAAI,EAAiB,SAAW,EAAkB,OAAQ,CACxD,EAAO,KAAK,0CAA0C,EAAU,GAAG,IAAW,CAAE,MAAO,EAAmB,mBAAkB,CAAC,CAC7H,IAAM,EAAqB,EAAkB,OAAQ,GAAS,CAAC,EAAiB,KAAM,GAAQ,EAAI,OAAS,EAAK,CAAC,CACjH,MAAM,IAAI,EAAuB,EAAmB,CAGtD,IAAM,EAAgB,GAAqB,IAAK,GAAQ,EAAI,KAAK,EAAI,EAAE,CACjE,EAAgC,EAAkB,OAAQ,GAAS,EAAc,SAAS,EAAK,CAAC,CAClG,GAA+B,OAAS,GAC1C,EAAO,KAAK,oDAAoD,EAA8B,KAAK,KAAK,GAAG,CAG7G,IAAM,EAAoB,OAAO,YAAY,EAAiB,IAAK,GAAe,CAAC,EAAW,KAAM,EAAW,CAAC,CAAC,CASjH,OAPA,OAAO,QAAQ,EAAa,CACzB,QAAQ,CAAC,KAAoB,EAAgB,EAAkB,GAAgB,WAAW,CAC1F,SAAS,CAAC,EAAgB,KAAW,CACpC,GAAM,CAAE,aAAc,EAAkB,GACxC,EAAa,GAAkB,EAAgB,GAAW,EAAM,EAChE,CAEGF,EAAmB,OACxB,CACE,UACA,SAAU,EAAiB,GAAG,SAC9B,YACA,eACD,CACD,EACD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../utils/constants/index.cjs`),t={[e.CustomFieldDefinitionType.DATE]:e=>{if(e){let t=new Date(e);if(t.toString()===`Invalid Date`)throw Error(`Invalid date value: ${e}`);return t.toISOString()}return null}};exports.formatFunctions=t;
|
|
2
|
+
//# sourceMappingURL=formatValues.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatValues.cjs","names":["formatFunctions: Partial<Record<CustomFieldDefinitionType, (value: any) => string | null>>","CustomFieldDefinitionType"],"sources":["../../../src/repository/utils/formatValues.ts"],"sourcesContent":["import { CustomFieldDefinitionType } from '../../utils/constants';\n\nexport const formatFunctions: Partial<Record<CustomFieldDefinitionType, (value: any) => string | null>> = {\n [CustomFieldDefinitionType.DATE]: (value) => {\n if (value) {\n const date = new Date(value);\n if (date.toString() === 'Invalid Date') {\n throw new Error(`Invalid date value: ${value}`);\n }\n return date.toISOString();\n }\n return null;\n },\n};\n"],"mappings":"mDAEaA,EAA6F,EACvGC,EAAAA,0BAA0B,MAAQ,GAAU,CAC3C,GAAI,EAAO,CACT,IAAM,EAAO,IAAI,KAAK,EAAM,CAC5B,GAAI,EAAK,UAAU,GAAK,eACtB,MAAU,MAAM,uBAAuB,IAAQ,CAEjD,OAAO,EAAK,aAAa,CAE3B,OAAO,MAEV"}
|
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatFunctions = void 0;
|
|
4
|
-
const constants_1 = require("../../utils/constants");
|
|
5
|
-
exports.formatFunctions = {
|
|
6
|
-
[constants_1.CustomFieldDefinitionType.DATE]: (value) => {
|
|
7
|
-
if (value) {
|
|
8
|
-
const date = new Date(value);
|
|
9
|
-
if (date.toString() === 'Invalid Date') {
|
|
10
|
-
throw new Error(`Invalid date value: ${value}`);
|
|
11
|
-
}
|
|
12
|
-
return date.toISOString();
|
|
13
|
-
}
|
|
14
|
-
return null;
|
|
15
|
-
},
|
|
16
|
-
};
|
|
1
|
+
import{CustomFieldDefinitionType as e}from"../../utils/constants/index.js";const t={[e.DATE]:e=>{if(e){let t=new Date(e);if(t.toString()===`Invalid Date`)throw Error(`Invalid date value: ${e}`);return t.toISOString()}return null}};export{t as formatFunctions};
|
|
17
2
|
//# sourceMappingURL=formatValues.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatValues.js","
|
|
1
|
+
{"version":3,"file":"formatValues.js","names":["formatFunctions: Partial<Record<CustomFieldDefinitionType, (value: any) => string | null>>"],"sources":["../../../src/repository/utils/formatValues.ts"],"sourcesContent":["import { CustomFieldDefinitionType } from '../../utils/constants';\n\nexport const formatFunctions: Partial<Record<CustomFieldDefinitionType, (value: any) => string | null>> = {\n [CustomFieldDefinitionType.DATE]: (value) => {\n if (value) {\n const date = new Date(value);\n if (date.toString() === 'Invalid Date') {\n throw new Error(`Invalid date value: ${value}`);\n }\n return date.toISOString();\n }\n return null;\n },\n};\n"],"mappings":"2EAEA,MAAaA,EAA6F,EACvG,EAA0B,MAAQ,GAAU,CAC3C,GAAI,EAAO,CACT,IAAM,EAAO,IAAI,KAAK,EAAM,CAC5B,GAAI,EAAK,UAAU,GAAK,eACtB,MAAU,MAAM,uBAAuB,IAAQ,CAEjD,OAAO,EAAK,aAAa,CAE3B,OAAO,MAEV"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../utils/logger/index.cjs`),t=require(`../models/CustomValidator.cjs`);require(`../models/index.cjs`);const n=async(n,r={})=>(e.default.debug(`custom-validator - create validator`),await t.default.create(n,r)),r=async(n={},r={})=>{e.default.debug(`custom-validator - find all validators`);let{transaction:i,withDisabled:a,include:o,attributes:s,raw:c}=r,l;return l=a?await t.default.unscoped().scope(`userScope`).findAll({where:n,transaction:i,include:o,attributes:s,raw:c}):await t.default.scope([`defaultScope`,`userScope`]).findAll({where:n,transaction:i,include:o,attributes:s,raw:c}),l},i=async(t,n,i={})=>(e.default.debug(`custom-validator - find all validators by model type`),r({modelType:t,...!i?.modelOptions?.useEntityIdFromInclude&&{entityId:n}},{...i,include:i?.modelOptions?.include?.(n)})),a=async(n,r,i)=>(e.default.debug(`custom-validator - update validator`),t.default.update(r,{where:{id:n},returning:!0,...i})),o=async(t,n)=>(e.default.debug(`custom-validator - disable validator`),a(t,{disabled:!0},n));exports.create=n,exports.disable=o,exports.findAll=r,exports.findAllByModelType=i,exports.update=a;
|
|
2
|
+
//# sourceMappingURL=validator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.cjs","names":["CustomValidator"],"sources":["../../src/repository/validator.ts"],"sourcesContent":["import type { FindOptions, IncludeOptions, Transactionable } from 'sequelize';\nimport logger from '../utils/logger';\nimport { CustomValidator } from '../models';\nimport type { ModelOptions } from '../types';\n\nexport interface FindValidatorOptions extends Transactionable {\n withDisabled?: boolean;\n attributes?: string[];\n raw?: boolean;\n include?: IncludeOptions[];\n}\n\n// Make sure this interface is compatible with the Sequelize model\nexport interface ValidatorAttributes {\n entityId: string;\n entityType: string;\n modelType: string;\n schema: CustomValidator['schema'];\n disabled?: boolean;\n [key: string]: unknown; // Add index signature for Sequelize compatibility\n}\n\nexport const create = async (\n validatorAttributes: ValidatorAttributes,\n options: Transactionable = {},\n): Promise<CustomValidator> => {\n logger.debug('custom-validator - create validator');\n\n // Use unknown type to bypass TypeScript errors while maintaining compatibility\n const validator = await CustomValidator.create(validatorAttributes as Record<string, unknown>, options);\n\n return validator;\n};\n\nexport const findAll = async (\n where = {},\n options: FindOptions & {\n modelOptions?: ModelOptions,\n withDisabled?: boolean\n } = {},\n): Promise<CustomValidator[]> => {\n logger.debug('custom-validator - find all validators');\n\n const {\n transaction, withDisabled, include, attributes, raw,\n } = options;\n\n let validators;\n if (withDisabled) {\n // If withDisabled is true, use unscoped to ignore the default scope that filters disabled items\n // Apply the userScope separately to maintain permission filtering\n validators = await CustomValidator.unscoped().scope('userScope').findAll({\n where,\n transaction,\n include,\n attributes,\n raw,\n });\n } else {\n // Use defaultScope and userScope to filter both disabled and by permissions\n // The defaultScope keeps only non-disabled validators\n validators = await CustomValidator.scope(['defaultScope', 'userScope']).findAll({\n where,\n transaction,\n include,\n attributes,\n raw,\n });\n }\n\n return validators;\n};\n\nexport const findAllByModelType = async (\n modelType: string,\n entityId: string,\n options: FindOptions & {\n modelOptions?: ModelOptions,\n withDisabled?: boolean\n } = {},\n): Promise<CustomValidator[]> => {\n logger.debug('custom-validator - find all validators by model type');\n return findAll(\n {\n modelType,\n ...(!options?.modelOptions?.useEntityIdFromInclude && { entityId }),\n },\n {\n ...options,\n include: options?.modelOptions?.include?.(entityId),\n },\n );\n};\n\nexport const update = async (\n id: string,\n updates: Partial<ValidatorAttributes>,\n options?: Transactionable,\n): Promise<[number, CustomValidator[]]> => {\n logger.debug('custom-validator - update validator');\n\n return CustomValidator.update(\n updates,\n {\n where: { id },\n returning: true,\n ...options,\n },\n );\n};\n\nexport const disable = async (\n id: string,\n options?: Transactionable,\n): Promise<[number, CustomValidator[]]> => {\n logger.debug('custom-validator - disable validator');\n\n return update(id, { disabled: true }, options);\n};\n"],"mappings":"uHAsBA,MAAa,EAAS,MACpB,EACA,EAA2B,EAAE,IAE7B,EAAA,QAAO,MAAM,sCAAsC,CAGjC,MAAMA,EAAAA,QAAgB,OAAO,EAAgD,EAAQ,EAK5F,EAAU,MACrB,EAAQ,EAAE,CACV,EAGM,EAAE,GACuB,CAC/B,EAAA,QAAO,MAAM,yCAAyC,CAEtD,GAAM,CACJ,cAAa,eAAc,UAAS,aAAY,OAC9C,EAEA,EAuBJ,MAtBA,CAaE,EAbE,EAGW,MAAMA,EAAAA,QAAgB,UAAU,CAAC,MAAM,YAAY,CAAC,QAAQ,CACvE,QACA,cACA,UACA,aACA,MACD,CAAC,CAIW,MAAMA,EAAAA,QAAgB,MAAM,CAAC,eAAgB,YAAY,CAAC,CAAC,QAAQ,CAC9E,QACA,cACA,UACA,aACA,MACD,CAAC,CAGG,GAGI,EAAqB,MAChC,EACA,EACA,EAGI,EAAE,IAEN,EAAA,QAAO,MAAM,uDAAuD,CAC7D,EACL,CACE,YACA,GAAI,CAAC,GAAS,cAAc,wBAA0B,CAAE,WAAU,CACnE,CACD,CACE,GAAG,EACH,QAAS,GAAS,cAAc,UAAU,EAAS,CACpD,CACF,EAGU,EAAS,MACpB,EACA,EACA,KAEA,EAAA,QAAO,MAAM,sCAAsC,CAE5CA,EAAAA,QAAgB,OACrB,EACA,CACE,MAAO,CAAE,KAAI,CACb,UAAW,GACX,GAAG,EACJ,CACF,EAGU,EAAU,MACrB,EACA,KAEA,EAAA,QAAO,MAAM,uCAAuC,CAE7C,EAAO,EAAI,CAAE,SAAU,GAAM,CAAE,EAAQ"}
|
|
@@ -1,70 +1,2 @@
|
|
|
1
|
-
"
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.disable = exports.update = exports.findAllByModelType = exports.findAll = exports.create = void 0;
|
|
7
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
8
|
-
const models_1 = require("../models");
|
|
9
|
-
const create = async (validatorAttributes, options = {}) => {
|
|
10
|
-
logger_1.default.debug('custom-validator - create validator');
|
|
11
|
-
// Use unknown type to bypass TypeScript errors while maintaining compatibility
|
|
12
|
-
const validator = await models_1.CustomValidator.create(validatorAttributes, options);
|
|
13
|
-
return validator;
|
|
14
|
-
};
|
|
15
|
-
exports.create = create;
|
|
16
|
-
const findAll = async (where = {}, options = {}) => {
|
|
17
|
-
logger_1.default.debug('custom-validator - find all validators');
|
|
18
|
-
const { transaction, withDisabled, include, attributes, raw, } = options;
|
|
19
|
-
let validators;
|
|
20
|
-
if (withDisabled) {
|
|
21
|
-
// If withDisabled is true, use unscoped to ignore the default scope that filters disabled items
|
|
22
|
-
// Apply the userScope separately to maintain permission filtering
|
|
23
|
-
validators = await models_1.CustomValidator.unscoped().scope('userScope').findAll({
|
|
24
|
-
where,
|
|
25
|
-
transaction,
|
|
26
|
-
include,
|
|
27
|
-
attributes,
|
|
28
|
-
raw,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
// Use defaultScope and userScope to filter both disabled and by permissions
|
|
33
|
-
// The defaultScope keeps only non-disabled validators
|
|
34
|
-
validators = await models_1.CustomValidator.scope(['defaultScope', 'userScope']).findAll({
|
|
35
|
-
where,
|
|
36
|
-
transaction,
|
|
37
|
-
include,
|
|
38
|
-
attributes,
|
|
39
|
-
raw,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
return validators;
|
|
43
|
-
};
|
|
44
|
-
exports.findAll = findAll;
|
|
45
|
-
const findAllByModelType = async (modelType, entityId, options = {}) => {
|
|
46
|
-
logger_1.default.debug('custom-validator - find all validators by model type');
|
|
47
|
-
return (0, exports.findAll)({
|
|
48
|
-
modelType,
|
|
49
|
-
...(!options?.modelOptions?.useEntityIdFromInclude && { entityId }),
|
|
50
|
-
}, {
|
|
51
|
-
...options,
|
|
52
|
-
include: options?.modelOptions?.include?.(entityId),
|
|
53
|
-
});
|
|
54
|
-
};
|
|
55
|
-
exports.findAllByModelType = findAllByModelType;
|
|
56
|
-
const update = async (id, updates, options) => {
|
|
57
|
-
logger_1.default.debug('custom-validator - update validator');
|
|
58
|
-
return models_1.CustomValidator.update(updates, {
|
|
59
|
-
where: { id },
|
|
60
|
-
returning: true,
|
|
61
|
-
...options,
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
exports.update = update;
|
|
65
|
-
const disable = async (id, options) => {
|
|
66
|
-
logger_1.default.debug('custom-validator - disable validator');
|
|
67
|
-
return (0, exports.update)(id, { disabled: true }, options);
|
|
68
|
-
};
|
|
69
|
-
exports.disable = disable;
|
|
1
|
+
import e from"../utils/logger/index.js";import t from"../models/CustomValidator.js";import"../models/index.js";const n=async(n,r={})=>(e.debug(`custom-validator - create validator`),await t.create(n,r)),r=async(n={},r={})=>{e.debug(`custom-validator - find all validators`);let{transaction:i,withDisabled:a,include:o,attributes:s,raw:c}=r,l;return l=a?await t.unscoped().scope(`userScope`).findAll({where:n,transaction:i,include:o,attributes:s,raw:c}):await t.scope([`defaultScope`,`userScope`]).findAll({where:n,transaction:i,include:o,attributes:s,raw:c}),l},i=async(t,n,i={})=>(e.debug(`custom-validator - find all validators by model type`),r({modelType:t,...!i?.modelOptions?.useEntityIdFromInclude&&{entityId:n}},{...i,include:i?.modelOptions?.include?.(n)})),a=async(n,r,i)=>(e.debug(`custom-validator - update validator`),t.update(r,{where:{id:n},returning:!0,...i})),o=async(t,n)=>(e.debug(`custom-validator - disable validator`),a(t,{disabled:!0},n));export{n as create,o as disable,r as findAll,i as findAllByModelType,a as update};
|
|
70
2
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","
|
|
1
|
+
{"version":3,"file":"validator.js","names":["CustomValidator"],"sources":["../../src/repository/validator.ts"],"sourcesContent":["import type { FindOptions, IncludeOptions, Transactionable } from 'sequelize';\nimport logger from '../utils/logger';\nimport { CustomValidator } from '../models';\nimport type { ModelOptions } from '../types';\n\nexport interface FindValidatorOptions extends Transactionable {\n withDisabled?: boolean;\n attributes?: string[];\n raw?: boolean;\n include?: IncludeOptions[];\n}\n\n// Make sure this interface is compatible with the Sequelize model\nexport interface ValidatorAttributes {\n entityId: string;\n entityType: string;\n modelType: string;\n schema: CustomValidator['schema'];\n disabled?: boolean;\n [key: string]: unknown; // Add index signature for Sequelize compatibility\n}\n\nexport const create = async (\n validatorAttributes: ValidatorAttributes,\n options: Transactionable = {},\n): Promise<CustomValidator> => {\n logger.debug('custom-validator - create validator');\n\n // Use unknown type to bypass TypeScript errors while maintaining compatibility\n const validator = await CustomValidator.create(validatorAttributes as Record<string, unknown>, options);\n\n return validator;\n};\n\nexport const findAll = async (\n where = {},\n options: FindOptions & {\n modelOptions?: ModelOptions,\n withDisabled?: boolean\n } = {},\n): Promise<CustomValidator[]> => {\n logger.debug('custom-validator - find all validators');\n\n const {\n transaction, withDisabled, include, attributes, raw,\n } = options;\n\n let validators;\n if (withDisabled) {\n // If withDisabled is true, use unscoped to ignore the default scope that filters disabled items\n // Apply the userScope separately to maintain permission filtering\n validators = await CustomValidator.unscoped().scope('userScope').findAll({\n where,\n transaction,\n include,\n attributes,\n raw,\n });\n } else {\n // Use defaultScope and userScope to filter both disabled and by permissions\n // The defaultScope keeps only non-disabled validators\n validators = await CustomValidator.scope(['defaultScope', 'userScope']).findAll({\n where,\n transaction,\n include,\n attributes,\n raw,\n });\n }\n\n return validators;\n};\n\nexport const findAllByModelType = async (\n modelType: string,\n entityId: string,\n options: FindOptions & {\n modelOptions?: ModelOptions,\n withDisabled?: boolean\n } = {},\n): Promise<CustomValidator[]> => {\n logger.debug('custom-validator - find all validators by model type');\n return findAll(\n {\n modelType,\n ...(!options?.modelOptions?.useEntityIdFromInclude && { entityId }),\n },\n {\n ...options,\n include: options?.modelOptions?.include?.(entityId),\n },\n );\n};\n\nexport const update = async (\n id: string,\n updates: Partial<ValidatorAttributes>,\n options?: Transactionable,\n): Promise<[number, CustomValidator[]]> => {\n logger.debug('custom-validator - update validator');\n\n return CustomValidator.update(\n updates,\n {\n where: { id },\n returning: true,\n ...options,\n },\n );\n};\n\nexport const disable = async (\n id: string,\n options?: Transactionable,\n): Promise<[number, CustomValidator[]]> => {\n logger.debug('custom-validator - disable validator');\n\n return update(id, { disabled: true }, options);\n};\n"],"mappings":"+GAsBA,MAAa,EAAS,MACpB,EACA,EAA2B,EAAE,IAE7B,EAAO,MAAM,sCAAsC,CAGjC,MAAMA,EAAgB,OAAO,EAAgD,EAAQ,EAK5F,EAAU,MACrB,EAAQ,EAAE,CACV,EAGM,EAAE,GACuB,CAC/B,EAAO,MAAM,yCAAyC,CAEtD,GAAM,CACJ,cAAa,eAAc,UAAS,aAAY,OAC9C,EAEA,EAuBJ,MAtBA,CAaE,EAbE,EAGW,MAAMA,EAAgB,UAAU,CAAC,MAAM,YAAY,CAAC,QAAQ,CACvE,QACA,cACA,UACA,aACA,MACD,CAAC,CAIW,MAAMA,EAAgB,MAAM,CAAC,eAAgB,YAAY,CAAC,CAAC,QAAQ,CAC9E,QACA,cACA,UACA,aACA,MACD,CAAC,CAGG,GAGI,EAAqB,MAChC,EACA,EACA,EAGI,EAAE,IAEN,EAAO,MAAM,uDAAuD,CAC7D,EACL,CACE,YACA,GAAI,CAAC,GAAS,cAAc,wBAA0B,CAAE,WAAU,CACnE,CACD,CACE,GAAG,EACH,QAAS,GAAS,cAAc,UAAU,EAAS,CACpD,CACF,EAGU,EAAS,MACpB,EACA,EACA,KAEA,EAAO,MAAM,sCAAsC,CAE5CA,EAAgB,OACrB,EACA,CACE,MAAO,CAAE,KAAI,CACb,UAAW,GACX,GAAG,EACJ,CACF,EAGU,EAAU,MACrB,EACA,KAEA,EAAO,MAAM,uCAAuC,CAE7C,EAAO,EAAI,CAAE,SAAU,GAAM,CAAE,EAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../utils/logger/index.cjs`),t=require(`../errors/index.cjs`),n=require(`./definition.cjs`),r=require(`../models/CustomFieldValue.cjs`);require(`../models/index.cjs`);const i=require(`./utils/formatValues.cjs`),a=async(e,t)=>{let{transaction:n}=t;return r.default.findAll({where:{modelId:e},transaction:n,raw:!0,nest:!0})},o=async(a,o,s,c,l={})=>{let u=Object.keys(c);e.default.debug(`custom-fields: updating values for ${a} ${o}`,{names:u,optionsKeys:l?Object.keys(l):null,valuesToUpdate:c,identifiers:s});let{modelOptions:d,transaction:f}=l,p={modelType:a,name:u,...!l.modelOptions?.useEntityIdFromInclude&&{entityId:s}},m=await n.findAll(p,{withDisabled:!0,transaction:f,include:d.include?.(s)})??[],h=m.filter(e=>e.disabled);if(m.length!==u.length){e.default.warn(`custom-fields: missing definitions for ${a} ${o}`,{names:u,fieldDefinitions:m});let n=u.filter(e=>!m.some(t=>t.name===e));throw new t.MissingDefinitionError(n)}let g=h?.map(e=>e.name)||[],_=u.filter(e=>g.includes(e));_?.length>0&&e.default.warn(`custom-fields: trying to update disabled values: ${_.join(`, `)}`);let v=u.map(e=>{let t=m.find(t=>t.name===e),n=i.formatFunctions[t.fieldType],r=n?n(c[e]):c[e];return{modelId:o,updatedAt:new Date,customFieldDefinitionId:t.id,value:r===void 0?t.defaultValue:r}});return Promise.all(v.map(async e=>{let[t]=await r.default.upsert(e,{transaction:l.transaction});return t}))};exports.findValuesByModelIds=a,exports.updateValues=o;
|
|
2
|
+
//# sourceMappingURL=value.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value.cjs","names":["CustomFieldValue","where: WhereOptions","MissingDefinitionError","values: CreateCustomFieldValue[]","formatFunctions"],"sources":["../../src/repository/value.ts"],"sourcesContent":["import type { FindOptions, Transactionable, WhereOptions } from 'sequelize';\nimport { CustomFieldValue, CustomFieldDefinition } from '../models';\nimport * as DefinitionRepo from './definition';\nimport type { CreateCustomFieldValue, ValuesToUpdate } from '../types/value';\nimport logger from '../utils/logger';\nimport { MissingDefinitionError } from '../errors';\nimport type { ModelOptions } from '../types';\nimport { formatFunctions } from './utils/formatValues';\n\nexport const findByModelIdAndDefinition = async (modelId: string, customFieldDefinitionId: string): Promise<CustomFieldValue[]> =>\n CustomFieldValue.findAll({ where: { modelId, customFieldDefinitionId }, include: [CustomFieldDefinition] });\n\nexport const create = async (data: CreateCustomFieldValue, withAssociations = false): Promise<CustomFieldValue> => {\n const created = await CustomFieldValue.create(data);\n if (withAssociations) {\n const createdWithAssociations = await findByModelIdAndDefinition(created.modelId, created.customFieldDefinitionId);\n return createdWithAssociations?.[0];\n }\n return created;\n};\n\nexport const findAllValues = async (): Promise<CustomFieldValue[]> => CustomFieldValue.findAll({ include: [CustomFieldDefinition] });\n/**\n * Get all values for model instance id (with their definitions)\n * @param modelId\n * @returns CustomFieldValue[]\n */\nexport const findValuesByModelId = async (modelId: string): Promise<CustomFieldValue[]> => CustomFieldValue.findAll({ where: { modelId }, include: [CustomFieldDefinition] });\n\n/**\n* Retrieves custom field values for given model IDs\n* @param modelIds - An array of model IDs to query custom field values for.\n* @param options - Optional configuration object.\n*/\nexport const findValuesByModelIds = async (modelIds: string[], options?: Transactionable): Promise<CustomFieldValue[]> => {\n const { transaction } = options;\n return CustomFieldValue.findAll({\n where: { modelId: modelIds },\n transaction,\n raw: true,\n nest: true,\n });\n};\n\n/**\n * Try to update custom field values for a model instance.\n * Create new value record if not exists, but fails if value's definition not exist.\n * Return the updated values\n */\nexport const updateValues = async (\n modelType: string,\n modelId: string,\n identifiers: string[],\n valuesToUpdate: ValuesToUpdate,\n options: FindOptions & { modelOptions?: ModelOptions } = {},\n): Promise<CustomFieldValue[]> => {\n const names = Object.keys(valuesToUpdate);\n logger.debug(`custom-fields: updating values for ${modelType} ${modelId}`, {\n names,\n optionsKeys: options ? Object.keys(options) : null,\n valuesToUpdate,\n identifiers,\n });\n const { modelOptions, transaction } = options;\n\n const where: WhereOptions = {\n modelType,\n name: names,\n ...(!options.modelOptions?.useEntityIdFromInclude && { entityId: identifiers }),\n };\n\n const fieldDefinitions = await DefinitionRepo.findAll(where, { withDisabled: true, transaction, include: modelOptions.include?.(identifiers) }) ?? [];\n\n const disabledDefinitions = fieldDefinitions.filter((def) => def.disabled);\n if (fieldDefinitions.length !== names.length) {\n logger.warn(`custom-fields: missing definitions for ${modelType} ${modelId}`, { names, fieldDefinitions });\n const missingDefinitions = names.filter((name) => !fieldDefinitions.some((def) => def.name === name));\n throw new MissingDefinitionError(missingDefinitions);\n }\n\n const disabledNames = disabledDefinitions?.map((def) => def.name) || [];\n const valuesWithDisabledDefinitions = names.filter((name) => disabledNames.includes(name));\n if (valuesWithDisabledDefinitions?.length > 0) {\n logger.warn(`custom-fields: trying to update disabled values: ${valuesWithDisabledDefinitions.join(', ')}`);\n }\n\n const values: CreateCustomFieldValue[] = names.map((name) => {\n const fieldDefinition = fieldDefinitions.find((def) => def.name === name);\n const formatFunction = formatFunctions[fieldDefinition.fieldType];\n const value = formatFunction ? formatFunction(valuesToUpdate[name]) : valuesToUpdate[name];\n return {\n modelId,\n updatedAt: new Date(),\n customFieldDefinitionId: fieldDefinition.id,\n value: value !== undefined ? value : fieldDefinition.defaultValue,\n };\n });\n\n return Promise.all(values.map(async (value) => {\n const [cfv] = await CustomFieldValue.upsert(value, {\n transaction: options.transaction,\n });\n return cfv;\n }));\n};\n\nexport const deleteValue = (\n id: string,\n options: any = {},\n): Promise<any> => CustomFieldValue.update(\n { deletedAt: new Date() },\n {\n where: { id },\n transaction: options.transaction,\n },\n);\n"],"mappings":"mOAkCa,EAAuB,MAAO,EAAoB,IAA2D,CACxH,GAAM,CAAE,eAAgB,EACxB,OAAOA,EAAAA,QAAiB,QAAQ,CAC9B,MAAO,CAAE,QAAS,EAAU,CAC5B,cACA,IAAK,GACL,KAAM,GACP,CAAC,EAQS,EAAe,MAC1B,EACA,EACA,EACA,EACA,EAAyD,EAAE,GAC3B,CAChC,IAAM,EAAQ,OAAO,KAAK,EAAe,CACzC,EAAA,QAAO,MAAM,sCAAsC,EAAU,GAAG,IAAW,CACzE,QACA,YAAa,EAAU,OAAO,KAAK,EAAQ,CAAG,KAC9C,iBACA,cACD,CAAC,CACF,GAAM,CAAE,eAAc,eAAgB,EAEhCC,EAAsB,CAC1B,YACA,KAAM,EACN,GAAI,CAAC,EAAQ,cAAc,wBAA0B,CAAE,SAAU,EAAa,CAC/E,CAEK,EAAmB,MAAA,EAAA,QAA6B,EAAO,CAAE,aAAc,GAAM,cAAa,QAAS,EAAa,UAAU,EAAY,CAAE,CAAC,EAAI,EAAE,CAE/I,EAAsB,EAAiB,OAAQ,GAAQ,EAAI,SAAS,CAC1E,GAAI,EAAiB,SAAW,EAAM,OAAQ,CAC5C,EAAA,QAAO,KAAK,0CAA0C,EAAU,GAAG,IAAW,CAAE,QAAO,mBAAkB,CAAC,CAC1G,IAAM,EAAqB,EAAM,OAAQ,GAAS,CAAC,EAAiB,KAAM,GAAQ,EAAI,OAAS,EAAK,CAAC,CACrG,MAAM,IAAIC,EAAAA,uBAAuB,EAAmB,CAGtD,IAAM,EAAgB,GAAqB,IAAK,GAAQ,EAAI,KAAK,EAAI,EAAE,CACjE,EAAgC,EAAM,OAAQ,GAAS,EAAc,SAAS,EAAK,CAAC,CACtF,GAA+B,OAAS,GAC1C,EAAA,QAAO,KAAK,oDAAoD,EAA8B,KAAK,KAAK,GAAG,CAG7G,IAAMC,EAAmC,EAAM,IAAK,GAAS,CAC3D,IAAM,EAAkB,EAAiB,KAAM,GAAQ,EAAI,OAAS,EAAK,CACnE,EAAiBC,EAAAA,gBAAgB,EAAgB,WACjD,EAAQ,EAAiB,EAAe,EAAe,GAAM,CAAG,EAAe,GACrF,MAAO,CACL,UACA,UAAW,IAAI,KACf,wBAAyB,EAAgB,GACzC,MAAO,IAAU,IAAA,GAAoB,EAAgB,aAAxB,EAC9B,EACD,CAEF,OAAO,QAAQ,IAAI,EAAO,IAAI,KAAO,IAAU,CAC7C,GAAM,CAAC,GAAO,MAAMJ,EAAAA,QAAiB,OAAO,EAAO,CACjD,YAAa,EAAQ,YACtB,CAAC,CACF,OAAO,GACP,CAAC"}
|
package/dist/repository/value.js
CHANGED
|
@@ -1,125 +1,2 @@
|
|
|
1
|
-
"
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.deleteValue = exports.updateValues = exports.findValuesByModelIds = exports.findValuesByModelId = exports.findAllValues = exports.create = exports.findByModelIdAndDefinition = void 0;
|
|
30
|
-
const models_1 = require("../models");
|
|
31
|
-
const DefinitionRepo = __importStar(require("./definition"));
|
|
32
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
33
|
-
const errors_1 = require("../errors");
|
|
34
|
-
const formatValues_1 = require("./utils/formatValues");
|
|
35
|
-
const findByModelIdAndDefinition = async (modelId, customFieldDefinitionId) => models_1.CustomFieldValue.findAll({ where: { modelId, customFieldDefinitionId }, include: [models_1.CustomFieldDefinition] });
|
|
36
|
-
exports.findByModelIdAndDefinition = findByModelIdAndDefinition;
|
|
37
|
-
const create = async (data, withAssociations = false) => {
|
|
38
|
-
const created = await models_1.CustomFieldValue.create(data);
|
|
39
|
-
if (withAssociations) {
|
|
40
|
-
const createdWithAssociations = await (0, exports.findByModelIdAndDefinition)(created.modelId, created.customFieldDefinitionId);
|
|
41
|
-
return createdWithAssociations?.[0];
|
|
42
|
-
}
|
|
43
|
-
return created;
|
|
44
|
-
};
|
|
45
|
-
exports.create = create;
|
|
46
|
-
const findAllValues = async () => models_1.CustomFieldValue.findAll({ include: [models_1.CustomFieldDefinition] });
|
|
47
|
-
exports.findAllValues = findAllValues;
|
|
48
|
-
/**
|
|
49
|
-
* Get all values for model instance id (with their definitions)
|
|
50
|
-
* @param modelId
|
|
51
|
-
* @returns CustomFieldValue[]
|
|
52
|
-
*/
|
|
53
|
-
const findValuesByModelId = async (modelId) => models_1.CustomFieldValue.findAll({ where: { modelId }, include: [models_1.CustomFieldDefinition] });
|
|
54
|
-
exports.findValuesByModelId = findValuesByModelId;
|
|
55
|
-
/**
|
|
56
|
-
* Retrieves custom field values for given model IDs
|
|
57
|
-
* @param modelIds - An array of model IDs to query custom field values for.
|
|
58
|
-
* @param options - Optional configuration object.
|
|
59
|
-
*/
|
|
60
|
-
const findValuesByModelIds = async (modelIds, options) => {
|
|
61
|
-
const { transaction } = options;
|
|
62
|
-
return models_1.CustomFieldValue.findAll({
|
|
63
|
-
where: { modelId: modelIds },
|
|
64
|
-
transaction,
|
|
65
|
-
raw: true,
|
|
66
|
-
nest: true,
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
exports.findValuesByModelIds = findValuesByModelIds;
|
|
70
|
-
/**
|
|
71
|
-
* Try to update custom field values for a model instance.
|
|
72
|
-
* Create new value record if not exists, but fails if value's definition not exist.
|
|
73
|
-
* Return the updated values
|
|
74
|
-
*/
|
|
75
|
-
const updateValues = async (modelType, modelId, identifiers, valuesToUpdate, options = {}) => {
|
|
76
|
-
const names = Object.keys(valuesToUpdate);
|
|
77
|
-
logger_1.default.debug(`custom-fields: updating values for ${modelType} ${modelId}`, {
|
|
78
|
-
names,
|
|
79
|
-
optionsKeys: options ? Object.keys(options) : null,
|
|
80
|
-
valuesToUpdate,
|
|
81
|
-
identifiers,
|
|
82
|
-
});
|
|
83
|
-
const { modelOptions, transaction } = options;
|
|
84
|
-
const where = {
|
|
85
|
-
modelType,
|
|
86
|
-
name: names,
|
|
87
|
-
...(!options.modelOptions?.useEntityIdFromInclude && { entityId: identifiers }),
|
|
88
|
-
};
|
|
89
|
-
const fieldDefinitions = await DefinitionRepo.findAll(where, { withDisabled: true, transaction, include: modelOptions.include?.(identifiers) }) ?? [];
|
|
90
|
-
const disabledDefinitions = fieldDefinitions.filter((def) => def.disabled);
|
|
91
|
-
if (fieldDefinitions.length !== names.length) {
|
|
92
|
-
logger_1.default.warn(`custom-fields: missing definitions for ${modelType} ${modelId}`, { names, fieldDefinitions });
|
|
93
|
-
const missingDefinitions = names.filter((name) => !fieldDefinitions.some((def) => def.name === name));
|
|
94
|
-
throw new errors_1.MissingDefinitionError(missingDefinitions);
|
|
95
|
-
}
|
|
96
|
-
const disabledNames = disabledDefinitions?.map((def) => def.name) || [];
|
|
97
|
-
const valuesWithDisabledDefinitions = names.filter((name) => disabledNames.includes(name));
|
|
98
|
-
if (valuesWithDisabledDefinitions?.length > 0) {
|
|
99
|
-
logger_1.default.warn(`custom-fields: trying to update disabled values: ${valuesWithDisabledDefinitions.join(', ')}`);
|
|
100
|
-
}
|
|
101
|
-
const values = names.map((name) => {
|
|
102
|
-
const fieldDefinition = fieldDefinitions.find((def) => def.name === name);
|
|
103
|
-
const formatFunction = formatValues_1.formatFunctions[fieldDefinition.fieldType];
|
|
104
|
-
const value = formatFunction ? formatFunction(valuesToUpdate[name]) : valuesToUpdate[name];
|
|
105
|
-
return {
|
|
106
|
-
modelId,
|
|
107
|
-
updatedAt: new Date(),
|
|
108
|
-
customFieldDefinitionId: fieldDefinition.id,
|
|
109
|
-
value: value !== undefined ? value : fieldDefinition.defaultValue,
|
|
110
|
-
};
|
|
111
|
-
});
|
|
112
|
-
return Promise.all(values.map(async (value) => {
|
|
113
|
-
const [cfv] = await models_1.CustomFieldValue.upsert(value, {
|
|
114
|
-
transaction: options.transaction,
|
|
115
|
-
});
|
|
116
|
-
return cfv;
|
|
117
|
-
}));
|
|
118
|
-
};
|
|
119
|
-
exports.updateValues = updateValues;
|
|
120
|
-
const deleteValue = (id, options = {}) => models_1.CustomFieldValue.update({ deletedAt: new Date() }, {
|
|
121
|
-
where: { id },
|
|
122
|
-
transaction: options.transaction,
|
|
123
|
-
});
|
|
124
|
-
exports.deleteValue = deleteValue;
|
|
1
|
+
import e from"../utils/logger/index.js";import{MissingDefinitionError as t}from"../errors/index.js";import{findAll as n}from"./definition.js";import r from"../models/CustomFieldValue.js";import"../models/index.js";import{formatFunctions as i}from"./utils/formatValues.js";const a=async(e,t)=>{let{transaction:n}=t;return r.findAll({where:{modelId:e},transaction:n,raw:!0,nest:!0})},o=async(a,o,s,c,l={})=>{let u=Object.keys(c);e.debug(`custom-fields: updating values for ${a} ${o}`,{names:u,optionsKeys:l?Object.keys(l):null,valuesToUpdate:c,identifiers:s});let{modelOptions:d,transaction:f}=l,p={modelType:a,name:u,...!l.modelOptions?.useEntityIdFromInclude&&{entityId:s}},m=await n(p,{withDisabled:!0,transaction:f,include:d.include?.(s)})??[],h=m.filter(e=>e.disabled);if(m.length!==u.length){e.warn(`custom-fields: missing definitions for ${a} ${o}`,{names:u,fieldDefinitions:m});let n=u.filter(e=>!m.some(t=>t.name===e));throw new t(n)}let g=h?.map(e=>e.name)||[],_=u.filter(e=>g.includes(e));_?.length>0&&e.warn(`custom-fields: trying to update disabled values: ${_.join(`, `)}`);let v=u.map(e=>{let t=m.find(t=>t.name===e),n=i[t.fieldType],r=n?n(c[e]):c[e];return{modelId:o,updatedAt:new Date,customFieldDefinitionId:t.id,value:r===void 0?t.defaultValue:r}});return Promise.all(v.map(async e=>{let[t]=await r.upsert(e,{transaction:l.transaction});return t}))};export{a as findValuesByModelIds,o as updateValues};
|
|
125
2
|
//# sourceMappingURL=value.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","
|
|
1
|
+
{"version":3,"file":"value.js","names":["CustomFieldValue","where: WhereOptions","DefinitionRepo.findAll","values: CreateCustomFieldValue[]"],"sources":["../../src/repository/value.ts"],"sourcesContent":["import type { FindOptions, Transactionable, WhereOptions } from 'sequelize';\nimport { CustomFieldValue, CustomFieldDefinition } from '../models';\nimport * as DefinitionRepo from './definition';\nimport type { CreateCustomFieldValue, ValuesToUpdate } from '../types/value';\nimport logger from '../utils/logger';\nimport { MissingDefinitionError } from '../errors';\nimport type { ModelOptions } from '../types';\nimport { formatFunctions } from './utils/formatValues';\n\nexport const findByModelIdAndDefinition = async (modelId: string, customFieldDefinitionId: string): Promise<CustomFieldValue[]> =>\n CustomFieldValue.findAll({ where: { modelId, customFieldDefinitionId }, include: [CustomFieldDefinition] });\n\nexport const create = async (data: CreateCustomFieldValue, withAssociations = false): Promise<CustomFieldValue> => {\n const created = await CustomFieldValue.create(data);\n if (withAssociations) {\n const createdWithAssociations = await findByModelIdAndDefinition(created.modelId, created.customFieldDefinitionId);\n return createdWithAssociations?.[0];\n }\n return created;\n};\n\nexport const findAllValues = async (): Promise<CustomFieldValue[]> => CustomFieldValue.findAll({ include: [CustomFieldDefinition] });\n/**\n * Get all values for model instance id (with their definitions)\n * @param modelId\n * @returns CustomFieldValue[]\n */\nexport const findValuesByModelId = async (modelId: string): Promise<CustomFieldValue[]> => CustomFieldValue.findAll({ where: { modelId }, include: [CustomFieldDefinition] });\n\n/**\n* Retrieves custom field values for given model IDs\n* @param modelIds - An array of model IDs to query custom field values for.\n* @param options - Optional configuration object.\n*/\nexport const findValuesByModelIds = async (modelIds: string[], options?: Transactionable): Promise<CustomFieldValue[]> => {\n const { transaction } = options;\n return CustomFieldValue.findAll({\n where: { modelId: modelIds },\n transaction,\n raw: true,\n nest: true,\n });\n};\n\n/**\n * Try to update custom field values for a model instance.\n * Create new value record if not exists, but fails if value's definition not exist.\n * Return the updated values\n */\nexport const updateValues = async (\n modelType: string,\n modelId: string,\n identifiers: string[],\n valuesToUpdate: ValuesToUpdate,\n options: FindOptions & { modelOptions?: ModelOptions } = {},\n): Promise<CustomFieldValue[]> => {\n const names = Object.keys(valuesToUpdate);\n logger.debug(`custom-fields: updating values for ${modelType} ${modelId}`, {\n names,\n optionsKeys: options ? Object.keys(options) : null,\n valuesToUpdate,\n identifiers,\n });\n const { modelOptions, transaction } = options;\n\n const where: WhereOptions = {\n modelType,\n name: names,\n ...(!options.modelOptions?.useEntityIdFromInclude && { entityId: identifiers }),\n };\n\n const fieldDefinitions = await DefinitionRepo.findAll(where, { withDisabled: true, transaction, include: modelOptions.include?.(identifiers) }) ?? [];\n\n const disabledDefinitions = fieldDefinitions.filter((def) => def.disabled);\n if (fieldDefinitions.length !== names.length) {\n logger.warn(`custom-fields: missing definitions for ${modelType} ${modelId}`, { names, fieldDefinitions });\n const missingDefinitions = names.filter((name) => !fieldDefinitions.some((def) => def.name === name));\n throw new MissingDefinitionError(missingDefinitions);\n }\n\n const disabledNames = disabledDefinitions?.map((def) => def.name) || [];\n const valuesWithDisabledDefinitions = names.filter((name) => disabledNames.includes(name));\n if (valuesWithDisabledDefinitions?.length > 0) {\n logger.warn(`custom-fields: trying to update disabled values: ${valuesWithDisabledDefinitions.join(', ')}`);\n }\n\n const values: CreateCustomFieldValue[] = names.map((name) => {\n const fieldDefinition = fieldDefinitions.find((def) => def.name === name);\n const formatFunction = formatFunctions[fieldDefinition.fieldType];\n const value = formatFunction ? formatFunction(valuesToUpdate[name]) : valuesToUpdate[name];\n return {\n modelId,\n updatedAt: new Date(),\n customFieldDefinitionId: fieldDefinition.id,\n value: value !== undefined ? value : fieldDefinition.defaultValue,\n };\n });\n\n return Promise.all(values.map(async (value) => {\n const [cfv] = await CustomFieldValue.upsert(value, {\n transaction: options.transaction,\n });\n return cfv;\n }));\n};\n\nexport const deleteValue = (\n id: string,\n options: any = {},\n): Promise<any> => CustomFieldValue.update(\n { deletedAt: new Date() },\n {\n where: { id },\n transaction: options.transaction,\n },\n);\n"],"mappings":"gRAkCA,MAAa,EAAuB,MAAO,EAAoB,IAA2D,CACxH,GAAM,CAAE,eAAgB,EACxB,OAAOA,EAAiB,QAAQ,CAC9B,MAAO,CAAE,QAAS,EAAU,CAC5B,cACA,IAAK,GACL,KAAM,GACP,CAAC,EAQS,EAAe,MAC1B,EACA,EACA,EACA,EACA,EAAyD,EAAE,GAC3B,CAChC,IAAM,EAAQ,OAAO,KAAK,EAAe,CACzC,EAAO,MAAM,sCAAsC,EAAU,GAAG,IAAW,CACzE,QACA,YAAa,EAAU,OAAO,KAAK,EAAQ,CAAG,KAC9C,iBACA,cACD,CAAC,CACF,GAAM,CAAE,eAAc,eAAgB,EAEhCC,EAAsB,CAC1B,YACA,KAAM,EACN,GAAI,CAAC,EAAQ,cAAc,wBAA0B,CAAE,SAAU,EAAa,CAC/E,CAEK,EAAmB,MAAMC,EAAuB,EAAO,CAAE,aAAc,GAAM,cAAa,QAAS,EAAa,UAAU,EAAY,CAAE,CAAC,EAAI,EAAE,CAE/I,EAAsB,EAAiB,OAAQ,GAAQ,EAAI,SAAS,CAC1E,GAAI,EAAiB,SAAW,EAAM,OAAQ,CAC5C,EAAO,KAAK,0CAA0C,EAAU,GAAG,IAAW,CAAE,QAAO,mBAAkB,CAAC,CAC1G,IAAM,EAAqB,EAAM,OAAQ,GAAS,CAAC,EAAiB,KAAM,GAAQ,EAAI,OAAS,EAAK,CAAC,CACrG,MAAM,IAAI,EAAuB,EAAmB,CAGtD,IAAM,EAAgB,GAAqB,IAAK,GAAQ,EAAI,KAAK,EAAI,EAAE,CACjE,EAAgC,EAAM,OAAQ,GAAS,EAAc,SAAS,EAAK,CAAC,CACtF,GAA+B,OAAS,GAC1C,EAAO,KAAK,oDAAoD,EAA8B,KAAK,KAAK,GAAG,CAG7G,IAAMC,EAAmC,EAAM,IAAK,GAAS,CAC3D,IAAM,EAAkB,EAAiB,KAAM,GAAQ,EAAI,OAAS,EAAK,CACnE,EAAiB,EAAgB,EAAgB,WACjD,EAAQ,EAAiB,EAAe,EAAe,GAAM,CAAG,EAAe,GACrF,MAAO,CACL,UACA,UAAW,IAAI,KACf,wBAAyB,EAAgB,GACzC,MAAO,IAAU,IAAA,GAAoB,EAAgB,aAAxB,EAC9B,EACD,CAEF,OAAO,QAAQ,IAAI,EAAO,IAAI,KAAO,IAAU,CAC7C,GAAM,CAAC,GAAO,MAAMH,EAAiB,OAAO,EAAO,CACjD,YAAa,EAAQ,YACtB,CAAC,CACF,OAAO,GACP,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/helpers/index.cjs`),n=require(`./helpers/filter.helpers.cjs`);let r=require(`sequelize`);r=e.__toESM(r);let i=require(`sequelize-typescript`);i=e.__toESM(i);let a=require(`@autofleet/common-types`);a=e.__toESM(a);const o=(e,t)=>({replacementsMap:a,scopeValue:o})=>{if(!o||Object.keys(o).length===0)return{};let s=t?.useCustomFieldsEntries?n.SubQueryType.ENTRIES:n.SubQueryType.VALUES,c=new Map(Object.entries(a).map(([e,t])=>[t,e])),l=Object.entries(o).map(([e,t])=>{switch(s){case n.SubQueryType.ENTRIES:return n.formatConditionsForEntries(e,t,c);case n.SubQueryType.VALUES:return n.formatConditionsForValues(e,t,c);default:return!1}}).filter(Boolean);if(l.length===0)return{};let u=n.getFilterCustomFieldsSubQuery(s,e,l);return{where:{id:{[r.Op.in]:i.Sequelize.literal(`(${u})`)}},replacements:a}},s=a.customFields.CUSTOM_FIELDS_FILTER_SCOPE,c=(e,r)=>({replacementsMap:a,scopeValue:o})=>{if(!o||o.length===0)return{};let s=r?.useCustomFieldsEntries?n.SubQueryType.ENTRIES:n.SubQueryType.VALUES,c=t.generateRandomString(),l=Object.entries(o).map(([t])=>{let r=Object.keys(a).find(e=>a[e]===t);return[i.Sequelize.literal(n.getSortCustomFieldsSubQuery(s,e,r)),c]}),u=Object.entries(o).map(([,e])=>{let t=typeof e==`string`?e:Object.values(e)[0];return i.Sequelize.literal(`"${c}" ${t||`ASC`}`)});return{attributes:{include:l},order:u,replacements:a}};exports.customFieldsFilterScope=o,exports.customFieldsSortScope=c;
|
|
2
|
+
//# sourceMappingURL=filter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.cjs","names":["SubQueryType","formatConditionsForEntries","formatConditionsForValues","getFilterCustomFieldsSubQuery","Op","Sequelize","scopeName: typeof customFields.CUSTOM_FIELDS_FILTER_SCOPE","customFields","generateRandomString","getSortCustomFieldsSubQuery"],"sources":["../../src/scopes/filter.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport { Op } from 'sequelize';\nimport type { Literal } from 'sequelize/types/utils';\nimport { Sequelize } from 'sequelize-typescript';\nimport { customFields } from '@autofleet/common-types';\nimport { generateRandomString } from '../utils/helpers';\nimport type { CustomFieldOptions } from '../types';\nimport {\n formatConditionsForEntries,\n formatConditionsForValues,\n getFilterCustomFieldsSubQuery,\n getSortCustomFieldsSubQuery,\n SubQueryType,\n type ConditionValue,\n type CustomFieldFilterOptions,\n} from './helpers/filter.helpers';\n\ntype customFieldsFilterScopeParams = {\n replacementsMap: Record<string, string>;\n scopeValue: Record<string, ConditionValue>;\n}\n\n/**\n * A Sequelize scope for filtering models by custom fields.\n * This scope builds a WHERE clause to be applied on the main query.\n *\n * @param name - The model type name used to join custom_field_definitions.\n * @returns A function that takes conditions and returns the Sequelize options object.\n */\nexport const customFieldsFilterScope = (\n name: string,\n options?: Pick<CustomFieldOptions, 'useCustomFieldsEntries'>,\n) => ({ replacementsMap: replacements, scopeValue: conditions }: customFieldsFilterScopeParams): CustomFieldFilterOptions => {\n if (!conditions || Object.keys(conditions).length === 0) {\n return {};\n }\n\n const queryType = options?.useCustomFieldsEntries ? SubQueryType.ENTRIES : SubQueryType.VALUES;\n const reverseReplacementsMap = new Map(Object.entries(replacements).map(([key, value]) => [value, key]));\n // Build the WHERE clause for custom field filtering\n const conditionsStrings = Object.entries(conditions).map(([key, condition]) => {\n switch (queryType) {\n case SubQueryType.ENTRIES:\n return formatConditionsForEntries(key, condition, reverseReplacementsMap);\n case SubQueryType.VALUES:\n return formatConditionsForValues(key, condition, reverseReplacementsMap);\n default:\n return false;\n }\n }).filter(Boolean);\n if (conditionsStrings.length === 0) {\n return {};\n }\n const subQuery = getFilterCustomFieldsSubQuery(queryType, name, conditionsStrings);\n\n return {\n where: {\n id: {\n [Op.in]: Sequelize.literal(`(${subQuery})`),\n },\n },\n replacements,\n };\n};\n\nexport const scopeName: typeof customFields.CUSTOM_FIELDS_FILTER_SCOPE = customFields.CUSTOM_FIELDS_FILTER_SCOPE;\n\nexport const customFieldsSortScope = (\n name: string,\n options?: Pick<CustomFieldOptions, 'useCustomFieldsEntries'>,\n) => ({ replacementsMap, scopeValue: sort }: { replacementsMap: Record<string, string>; scopeValue: Record<string, ConditionValue>; }): {\n attributes: { include: (string | Literal)[][]; };\n order: Literal[];\n replacements: Record<string, string>;\n} | Record<string, never> => {\n if (!sort || (sort as unknown as any[]).length === 0) {\n return {};\n }\n\n const queryType = options?.useCustomFieldsEntries ? SubQueryType.ENTRIES : SubQueryType.VALUES;\n const randomStr = generateRandomString();\n const includes = Object.entries(sort).map(([key]) => {\n const replacementKey = Object.keys(replacementsMap).find(\n (randomString) => replacementsMap[randomString] === key,\n );\n return ([\n Sequelize.literal(getSortCustomFieldsSubQuery(queryType, name, replacementKey)),\n randomStr,\n ]);\n });\n\n const orders = Object.entries(sort).map(([, sortObject]) => {\n const direction = typeof sortObject === 'string' ? sortObject : Object.values(sortObject)[0];\n return Sequelize.literal(`\"${randomStr}\" ${direction || 'ASC'}`);\n });\n return {\n attributes: {\n include: includes,\n },\n order: orders,\n replacements: replacementsMap,\n };\n};\n"],"mappings":"6RA6BA,MAAa,GACX,EACA,KACI,CAAE,gBAAiB,EAAc,WAAY,KAA0E,CAC3H,GAAI,CAAC,GAAc,OAAO,KAAK,EAAW,CAAC,SAAW,EACpD,MAAO,EAAE,CAGX,IAAM,EAAY,GAAS,uBAAyBA,EAAAA,aAAa,QAAUA,EAAAA,aAAa,OAClF,EAAyB,IAAI,IAAI,OAAO,QAAQ,EAAa,CAAC,KAAK,CAAC,EAAK,KAAW,CAAC,EAAO,EAAI,CAAC,CAAC,CAElG,EAAoB,OAAO,QAAQ,EAAW,CAAC,KAAK,CAAC,EAAK,KAAe,CAC7E,OAAQ,EAAR,CACE,KAAKA,EAAAA,aAAa,QAChB,OAAOC,EAAAA,2BAA2B,EAAK,EAAW,EAAuB,CAC3E,KAAKD,EAAAA,aAAa,OAChB,OAAOE,EAAAA,0BAA0B,EAAK,EAAW,EAAuB,CAC1E,QACE,MAAO,KAEX,CAAC,OAAO,QAAQ,CAClB,GAAI,EAAkB,SAAW,EAC/B,MAAO,EAAE,CAEX,IAAM,EAAWC,EAAAA,8BAA8B,EAAW,EAAM,EAAkB,CAElF,MAAO,CACL,MAAO,CACL,GAAI,EACDC,EAAAA,GAAG,IAAKC,EAAAA,UAAU,QAAQ,IAAI,EAAS,GAAG,CAC5C,CACF,CACD,eACD,EAGUC,EAA4DC,EAAAA,aAAa,2BAEzE,GACX,EACA,KACI,CAAE,kBAAiB,WAAY,KAIR,CAC3B,GAAI,CAAC,GAAS,EAA0B,SAAW,EACjD,MAAO,EAAE,CAGX,IAAM,EAAY,GAAS,uBAAyBP,EAAAA,aAAa,QAAUA,EAAAA,aAAa,OAClF,EAAYQ,EAAAA,sBAAsB,CAClC,EAAW,OAAO,QAAQ,EAAK,CAAC,KAAK,CAAC,KAAS,CACnD,IAAM,EAAiB,OAAO,KAAK,EAAgB,CAAC,KACjD,GAAiB,EAAgB,KAAkB,EACrD,CACD,MAAQ,CACNH,EAAAA,UAAU,QAAQI,EAAAA,4BAA4B,EAAW,EAAM,EAAe,CAAC,CAC/E,EACD,EACD,CAEI,EAAS,OAAO,QAAQ,EAAK,CAAC,KAAK,EAAG,KAAgB,CAC1D,IAAM,EAAY,OAAO,GAAe,SAAW,EAAa,OAAO,OAAO,EAAW,CAAC,GAC1F,OAAOJ,EAAAA,UAAU,QAAQ,IAAI,EAAU,IAAI,GAAa,QAAQ,EAChE,CACF,MAAO,CACL,WAAY,CACV,QAAS,EACV,CACD,MAAO,EACP,aAAc,EACf"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CustomFieldOptions } from "../types/index.cjs";
|
|
2
|
+
import { ConditionValue } from "./helpers/filter.helpers.cjs";
|
|
3
|
+
import { customFields } from "@autofleet/common-types";
|
|
4
|
+
import { Literal } from "sequelize/types/utils";
|
|
5
|
+
|
|
6
|
+
//#region src/scopes/filter.d.ts
|
|
7
|
+
|
|
8
|
+
declare const customFieldsSortScope: (name: string, options?: Pick<CustomFieldOptions, "useCustomFieldsEntries">) => ({
|
|
9
|
+
replacementsMap,
|
|
10
|
+
scopeValue: sort
|
|
11
|
+
}: {
|
|
12
|
+
replacementsMap: Record<string, string>;
|
|
13
|
+
scopeValue: Record<string, ConditionValue>;
|
|
14
|
+
}) => {
|
|
15
|
+
attributes: {
|
|
16
|
+
include: (string | Literal)[][];
|
|
17
|
+
};
|
|
18
|
+
order: Literal[];
|
|
19
|
+
replacements: Record<string, string>;
|
|
20
|
+
} | Record<string, never>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { customFieldsSortScope };
|
|
23
|
+
//# sourceMappingURL=filter.d.cts.map
|
package/dist/scopes/filter.d.ts
CHANGED
|
@@ -1,30 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export declare const customFieldsFilterScope: (name: string, options?: Pick<CustomFieldOptions, 'useCustomFieldsEntries'>) => ({ replacementsMap: replacements, scopeValue: conditions }: customFieldsFilterScopeParams) => CustomFieldFilterOptions;
|
|
15
|
-
export declare const scopeName = "filterByCustomFields";
|
|
16
|
-
export declare const customFieldsSortScope: (name: string, options?: Pick<CustomFieldOptions, 'useCustomFieldsEntries'>) => ({ replacementsMap, scopeValue: sort }: {
|
|
17
|
-
replacementsMap: any;
|
|
18
|
-
scopeValue: any;
|
|
1
|
+
import { CustomFieldOptions } from "../types/index.js";
|
|
2
|
+
import { ConditionValue } from "./helpers/filter.helpers.js";
|
|
3
|
+
import { customFields } from "@autofleet/common-types";
|
|
4
|
+
import { Literal } from "sequelize/types/utils";
|
|
5
|
+
|
|
6
|
+
//#region src/scopes/filter.d.ts
|
|
7
|
+
|
|
8
|
+
declare const customFieldsSortScope: (name: string, options?: Pick<CustomFieldOptions, "useCustomFieldsEntries">) => ({
|
|
9
|
+
replacementsMap,
|
|
10
|
+
scopeValue: sort
|
|
11
|
+
}: {
|
|
12
|
+
replacementsMap: Record<string, string>;
|
|
13
|
+
scopeValue: Record<string, ConditionValue>;
|
|
19
14
|
}) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
export {};
|
|
15
|
+
attributes: {
|
|
16
|
+
include: (string | Literal)[][];
|
|
17
|
+
};
|
|
18
|
+
order: Literal[];
|
|
19
|
+
replacements: Record<string, string>;
|
|
20
|
+
} | Record<string, never>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { customFieldsSortScope };
|
|
23
|
+
//# sourceMappingURL=filter.d.ts.map
|