@ductape/sdk 0.0.4-v5 → 0.0.4-v51
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/README.md +1 -1
- package/dist/api/services/appApi.service.d.ts +48 -2
- package/dist/api/services/appApi.service.js +101 -2
- package/dist/api/services/appApi.service.js.map +1 -1
- package/dist/api/services/pricingApi.service.d.ts +10 -0
- package/dist/api/services/pricingApi.service.js +34 -0
- package/dist/api/services/pricingApi.service.js.map +1 -0
- package/dist/api/services/processorApi.service.d.ts +12 -2
- package/dist/api/services/processorApi.service.js +12 -2
- package/dist/api/services/processorApi.service.js.map +1 -1
- package/dist/api/services/productsApi.service.d.ts +40 -1
- package/dist/api/services/productsApi.service.js +105 -1
- package/dist/api/services/productsApi.service.js.map +1 -1
- package/dist/api/services/userApi.service.js +1 -0
- package/dist/api/services/userApi.service.js.map +1 -1
- package/dist/api/services/workspaceApi.service.js +1 -0
- package/dist/api/services/workspaceApi.service.js.map +1 -1
- package/dist/api/services/workspaceSecretsApi.service.d.ts +75 -0
- package/dist/api/services/workspaceSecretsApi.service.js +62 -0
- package/dist/api/services/workspaceSecretsApi.service.js.map +1 -0
- package/dist/api/urls.d.ts +6 -1
- package/dist/api/urls.js +12 -2
- package/dist/api/urls.js.map +1 -1
- package/dist/api/utils/cache.utils.d.ts +1 -1
- package/dist/api/utils/cache.utils.js +10 -4
- package/dist/api/utils/cache.utils.js.map +1 -1
- package/dist/api/utils/strings.utils.d.ts +2 -0
- package/dist/api/utils/strings.utils.js +14 -0
- package/dist/api/utils/strings.utils.js.map +1 -1
- package/dist/apps/services/app.service.d.ts +51 -33
- package/dist/apps/services/app.service.js +488 -244
- package/dist/apps/services/app.service.js.map +1 -1
- package/dist/apps/validators/joi-validators/create.appAction.validator.d.ts +1 -2
- package/dist/apps/validators/joi-validators/create.appAction.validator.js +21 -2
- package/dist/apps/validators/joi-validators/create.appAction.validator.js.map +1 -1
- package/dist/apps/validators/joi-validators/create.appWebhook.validator.d.ts +1 -2
- package/dist/apps/validators/joi-validators/create.appWebhook.validator.js +2 -15
- package/dist/apps/validators/joi-validators/create.appWebhook.validator.js.map +1 -1
- package/dist/apps/validators/joi-validators/update.appAction.validator.js +11 -1
- package/dist/apps/validators/joi-validators/update.appAction.validator.js.map +1 -1
- package/dist/apps/validators/joi-validators/update.appActionResponse.validator.d.ts +1 -1
- package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js +34 -1
- package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js.map +1 -1
- package/dist/apps/validators/joi-validators/update.appWebhook.validator.d.ts +1 -2
- package/dist/apps/validators/joi-validators/update.appWebhook.validator.js +2 -14
- package/dist/apps/validators/joi-validators/update.appWebhook.validator.js.map +1 -1
- package/dist/clients/pricing.client.d.ts +3 -0
- package/dist/clients/pricing.client.js +33 -0
- package/dist/clients/pricing.client.js.map +1 -0
- package/dist/database/adapters/base.adapter.d.ts +176 -0
- package/dist/database/adapters/base.adapter.js +31 -0
- package/dist/database/adapters/base.adapter.js.map +1 -0
- package/dist/database/adapters/dynamodb.adapter.d.ts +91 -0
- package/dist/database/adapters/dynamodb.adapter.js +1608 -0
- package/dist/database/adapters/dynamodb.adapter.js.map +1 -0
- package/dist/database/adapters/mongodb.adapter.d.ts +71 -0
- package/dist/database/adapters/mongodb.adapter.js +1072 -0
- package/dist/database/adapters/mongodb.adapter.js.map +1 -0
- package/dist/database/adapters/mysql.adapter.d.ts +146 -0
- package/dist/database/adapters/mysql.adapter.js +1492 -0
- package/dist/database/adapters/mysql.adapter.js.map +1 -0
- package/dist/database/adapters/postgresql.adapter.d.ts +147 -0
- package/dist/database/adapters/postgresql.adapter.js +1603 -0
- package/dist/database/adapters/postgresql.adapter.js.map +1 -0
- package/dist/database/database.service.d.ts +232 -0
- package/dist/database/database.service.js +802 -0
- package/dist/database/database.service.js.map +1 -0
- package/dist/database/index.d.ts +18 -0
- package/dist/database/index.js +98 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/types/aggregation.types.d.ts +261 -0
- package/dist/database/types/aggregation.types.js +21 -0
- package/dist/database/types/aggregation.types.js.map +1 -0
- package/dist/database/types/connection.types.d.ts +132 -0
- package/dist/database/types/connection.types.js +6 -0
- package/dist/database/types/connection.types.js.map +1 -0
- package/dist/database/types/database.types.d.ts +175 -0
- package/dist/database/types/database.types.js +75 -0
- package/dist/database/types/database.types.js.map +1 -0
- package/dist/database/types/index.d.ts +12 -0
- package/dist/database/types/index.js +37 -0
- package/dist/database/types/index.js.map +1 -0
- package/dist/database/types/index.types.d.ts +220 -0
- package/dist/database/types/index.types.js +27 -0
- package/dist/database/types/index.types.js.map +1 -0
- package/dist/database/types/migration.types.d.ts +205 -0
- package/dist/database/types/migration.types.js +44 -0
- package/dist/database/types/migration.types.js.map +1 -0
- package/dist/database/types/query.types.d.ts +305 -0
- package/dist/database/types/query.types.js +57 -0
- package/dist/database/types/query.types.js.map +1 -0
- package/dist/database/types/result.types.d.ts +220 -0
- package/dist/database/types/result.types.js +6 -0
- package/dist/database/types/result.types.js.map +1 -0
- package/dist/database/types/schema.types.d.ts +190 -0
- package/dist/database/types/schema.types.js +69 -0
- package/dist/database/types/schema.types.js.map +1 -0
- package/dist/database/utils/helpers.d.ts +66 -0
- package/dist/database/utils/helpers.js +501 -0
- package/dist/database/utils/helpers.js.map +1 -0
- package/dist/database/utils/migration.utils.d.ts +151 -0
- package/dist/database/utils/migration.utils.js +476 -0
- package/dist/database/utils/migration.utils.js.map +1 -0
- package/dist/database/utils/transaction.d.ts +64 -0
- package/dist/database/utils/transaction.js +130 -0
- package/dist/database/utils/transaction.js.map +1 -0
- package/dist/database/validators/connection.validator.d.ts +20 -0
- package/dist/database/validators/connection.validator.js +267 -0
- package/dist/database/validators/connection.validator.js.map +1 -0
- package/dist/database/validators/query.validator.d.ts +31 -0
- package/dist/database/validators/query.validator.js +305 -0
- package/dist/database/validators/query.validator.js.map +1 -0
- package/dist/database/validators/schema.validator.d.ts +31 -0
- package/dist/database/validators/schema.validator.js +334 -0
- package/dist/database/validators/schema.validator.js.map +1 -0
- package/dist/graph/adapters/arangodb.adapter.d.ts +80 -0
- package/dist/graph/adapters/arangodb.adapter.js +1393 -0
- package/dist/graph/adapters/arangodb.adapter.js.map +1 -0
- package/dist/graph/adapters/base.adapter.d.ts +228 -0
- package/dist/graph/adapters/base.adapter.js +38 -0
- package/dist/graph/adapters/base.adapter.js.map +1 -0
- package/dist/graph/adapters/index.d.ts +10 -0
- package/dist/graph/adapters/index.js +23 -0
- package/dist/graph/adapters/index.js.map +1 -0
- package/dist/graph/adapters/memgraph.adapter.d.ts +85 -0
- package/dist/graph/adapters/memgraph.adapter.js +1491 -0
- package/dist/graph/adapters/memgraph.adapter.js.map +1 -0
- package/dist/graph/adapters/neo4j.adapter.d.ts +88 -0
- package/dist/graph/adapters/neo4j.adapter.js +1861 -0
- package/dist/graph/adapters/neo4j.adapter.js.map +1 -0
- package/dist/graph/adapters/neptune.adapter.d.ts +87 -0
- package/dist/graph/adapters/neptune.adapter.js +1430 -0
- package/dist/graph/adapters/neptune.adapter.js.map +1 -0
- package/dist/graph/graph.service.d.ts +278 -0
- package/dist/graph/graph.service.js +687 -0
- package/dist/graph/graph.service.js.map +1 -0
- package/dist/graph/index.d.ts +11 -0
- package/dist/graph/index.js +42 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/types/connection.types.d.ts +158 -0
- package/dist/graph/types/connection.types.js +43 -0
- package/dist/graph/types/connection.types.js.map +1 -0
- package/dist/graph/types/graph.types.d.ts +144 -0
- package/dist/graph/types/graph.types.js +84 -0
- package/dist/graph/types/graph.types.js.map +1 -0
- package/dist/graph/types/index.d.ts +11 -0
- package/dist/graph/types/index.js +35 -0
- package/dist/graph/types/index.js.map +1 -0
- package/dist/graph/types/node.types.d.ts +193 -0
- package/dist/graph/types/node.types.js +49 -0
- package/dist/graph/types/node.types.js.map +1 -0
- package/dist/graph/types/path.types.d.ts +224 -0
- package/dist/graph/types/path.types.js +38 -0
- package/dist/graph/types/path.types.js.map +1 -0
- package/dist/graph/types/query.types.d.ts +247 -0
- package/dist/graph/types/query.types.js +23 -0
- package/dist/graph/types/query.types.js.map +1 -0
- package/dist/graph/types/relationship.types.d.ts +224 -0
- package/dist/graph/types/relationship.types.js +35 -0
- package/dist/graph/types/relationship.types.js.map +1 -0
- package/dist/graph/types/result.types.d.ts +237 -0
- package/dist/graph/types/result.types.js +7 -0
- package/dist/graph/types/result.types.js.map +1 -0
- package/dist/graph/validators/index.d.ts +81 -0
- package/dist/graph/validators/index.js +243 -0
- package/dist/graph/validators/index.js.map +1 -0
- package/dist/imports/imports.service.d.ts +3 -3
- package/dist/imports/imports.service.js +7 -7
- package/dist/imports/imports.service.js.map +1 -1
- package/dist/imports/imports.types.d.ts +8 -0
- package/dist/imports/repos/postmanV21.repo.d.ts +1 -1
- package/dist/imports/repos/postmanV21.repo.js +29 -2
- package/dist/imports/repos/postmanV21.repo.js.map +1 -1
- package/dist/index.d.ts +1244 -150
- package/dist/index.js +1309 -209
- package/dist/index.js.map +1 -1
- package/dist/inputs/inputs.service.js +2 -2
- package/dist/inputs/inputs.service.js.map +1 -1
- package/dist/inputs/utils/inputs.utils.create.js +1 -1
- package/dist/inputs/utils/inputs.utils.create.js.map +1 -1
- package/dist/logs/logs.types.d.ts +5 -0
- package/dist/logs/logs.types.js +1 -0
- package/dist/logs/logs.types.js.map +1 -1
- package/dist/parsers/index.d.ts +3 -0
- package/dist/parsers/index.js +27 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/pipelines/postman.pipelines.d.ts +15 -0
- package/dist/parsers/pipelines/postman.pipelines.js +103 -0
- package/dist/parsers/pipelines/postman.pipelines.js.map +1 -0
- package/dist/parsers/types/postman.types.d.ts +200 -0
- package/dist/parsers/types/postman.types.js +3 -0
- package/dist/parsers/types/postman.types.js.map +1 -0
- package/dist/parsers/utils/postman.utils.d.ts +12 -0
- package/dist/parsers/utils/postman.utils.js +116 -0
- package/dist/parsers/utils/postman.utils.js.map +1 -0
- package/dist/parsers/validators/postman-auth.validators.d.ts +10 -0
- package/dist/parsers/validators/postman-auth.validators.js +127 -0
- package/dist/parsers/validators/postman-auth.validators.js.map +1 -0
- package/dist/parsers/validators/postman-request.validators.d.ts +13 -0
- package/dist/parsers/validators/postman-request.validators.js +139 -0
- package/dist/parsers/validators/postman-request.validators.js.map +1 -0
- package/dist/parsers/validators/postman-response.validators.d.ts +13 -0
- package/dist/parsers/validators/postman-response.validators.js +150 -0
- package/dist/parsers/validators/postman-response.validators.js.map +1 -0
- package/dist/parsers/validators/postman-variable.validators.d.ts +14 -0
- package/dist/parsers/validators/postman-variable.validators.js +163 -0
- package/dist/parsers/validators/postman-variable.validators.js.map +1 -0
- package/dist/pricing/pricing.repo.d.ts +0 -0
- package/dist/pricing/pricing.repo.js +1 -0
- package/dist/pricing/pricing.repo.js.map +1 -0
- package/dist/pricing/pricing.service.d.ts +24 -0
- package/dist/pricing/pricing.service.js +51 -0
- package/dist/pricing/pricing.service.js.map +1 -0
- package/dist/pricing/pricing.types.d.ts +76 -0
- package/dist/pricing/pricing.types.js +21 -0
- package/dist/pricing/pricing.types.js.map +1 -0
- package/dist/pricing/utils/string.utils.d.ts +1 -0
- package/dist/pricing/utils/string.utils.js +9 -0
- package/dist/pricing/utils/string.utils.js.map +1 -0
- package/dist/processor/repos/sms.repo.d.ts +4 -4
- package/dist/processor/repos/sms.repo.js +23 -10
- package/dist/processor/repos/sms.repo.js.map +1 -1
- package/dist/processor/services/messagebrokers/kafka.service.js +0 -2
- package/dist/processor/services/messagebrokers/kafka.service.js.map +1 -1
- package/dist/processor/services/messagebrokers/rabbitmq.service.d.ts +9 -1
- package/dist/processor/services/messagebrokers/rabbitmq.service.js +40 -11
- package/dist/processor/services/messagebrokers/rabbitmq.service.js.map +1 -1
- package/dist/processor/services/processor.service.d.ts +38 -10
- package/dist/processor/services/processor.service.js +533 -248
- package/dist/processor/services/processor.service.js.map +1 -1
- package/dist/processor/services/request.service.d.ts +36 -0
- package/dist/processor/services/request.service.js +304 -0
- package/dist/processor/services/request.service.js.map +1 -0
- package/dist/processor/types/request.types.d.ts +14 -0
- package/dist/processor/types/request.types.js +3 -0
- package/dist/processor/types/request.types.js.map +1 -0
- package/dist/processor/utils/processor.utils.d.ts +3 -0
- package/dist/processor/utils/processor.utils.js +84 -22
- package/dist/processor/utils/processor.utils.js.map +1 -1
- package/dist/processor/utils/request.utils.d.ts +20 -0
- package/dist/processor/utils/request.utils.js +113 -0
- package/dist/processor/utils/request.utils.js.map +1 -0
- package/dist/products/services/products.service.d.ts +114 -77
- package/dist/products/services/products.service.js +805 -362
- package/dist/products/services/products.service.js.map +1 -1
- package/dist/products/services/utils/crypt.utils.d.ts +1 -0
- package/dist/products/services/utils/crypt.utils.js +17 -0
- package/dist/products/services/utils/crypt.utils.js.map +1 -0
- package/dist/products/services/utils/functions.utils.d.ts +13 -0
- package/dist/products/services/utils/functions.utils.js +289 -0
- package/dist/products/services/utils/functions.utils.js.map +1 -0
- package/dist/products/services/utils/objects.utils.d.ts +13 -0
- package/dist/products/services/utils/objects.utils.js +89 -0
- package/dist/products/services/utils/objects.utils.js.map +1 -0
- package/dist/products/services/utils/string.utils.d.ts +12 -0
- package/dist/products/services/utils/string.utils.js +168 -0
- package/dist/products/services/utils/string.utils.js.map +1 -0
- package/dist/products/utils/string.utils.d.ts +1 -1
- package/dist/products/utils/string.utils.js +14 -2
- package/dist/products/utils/string.utils.js.map +1 -1
- package/dist/products/validators/index.d.ts +4 -1
- package/dist/products/validators/index.js +7 -1
- package/dist/products/validators/index.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.d.ts +15 -4
- package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.js +501 -109
- package/dist/products/validators/joi-validators/create.productDatabaseAction.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productEnv.validator.js +1 -0
- package/dist/products/validators/joi-validators/create.productEnv.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productGraph.validator.d.ts +3 -0
- package/dist/products/validators/joi-validators/create.productGraph.validator.js +82 -0
- package/dist/products/validators/joi-validators/create.productGraph.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/create.productGraphAction.validator.d.ts +14 -0
- package/dist/products/validators/joi-validators/create.productGraphAction.validator.js +696 -0
- package/dist/products/validators/joi-validators/create.productGraphAction.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/create.productHealthcheck.validator.d.ts +4 -0
- package/dist/products/validators/joi-validators/create.productHealthcheck.validator.js +58 -0
- package/dist/products/validators/joi-validators/create.productHealthcheck.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js +1 -0
- package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js +9 -4
- package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productNotification.validator.js +5 -2
- package/dist/products/validators/joi-validators/create.productNotification.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.userAuth.validator.js +1 -0
- package/dist/products/validators/joi-validators/create.userAuth.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.dataValue.validator.js +1 -0
- package/dist/products/validators/joi-validators/update.dataValue.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.d.ts +6 -0
- package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.js +28 -26
- package/dist/products/validators/joi-validators/update.productDatabaseAction.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.productEnv.validator.js +3 -0
- package/dist/products/validators/joi-validators/update.productEnv.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.productGraph.validator.d.ts +3 -0
- package/dist/products/validators/joi-validators/update.productGraph.validator.js +87 -0
- package/dist/products/validators/joi-validators/update.productGraph.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/update.productGraphAction.validator.d.ts +7 -0
- package/dist/products/validators/joi-validators/update.productGraphAction.validator.js +72 -0
- package/dist/products/validators/joi-validators/update.productGraphAction.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/update.productMessageBrokerTopic.validator.js +1 -0
- package/dist/products/validators/joi-validators/update.productMessageBrokerTopic.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.userAuth.validator.js +1 -0
- package/dist/products/validators/joi-validators/update.userAuth.validator.js.map +1 -1
- package/dist/test/test.health.d.ts +1 -0
- package/dist/test/test.health.js +49 -0
- package/dist/test/test.health.js.map +1 -0
- package/dist/test/test.import.js +51 -4
- package/dist/test/test.import.js.map +1 -1
- package/dist/test/test.imports.js +22 -7
- package/dist/test/test.imports.js.map +1 -1
- package/dist/test/test.notifiers.d.ts +1 -0
- package/dist/test/test.notifiers.js +85 -0
- package/dist/test/test.notifiers.js.map +1 -0
- package/dist/test/test.processor.js +30 -115
- package/dist/test/test.processor.js.map +1 -1
- package/dist/test/test.products.d.ts +1 -0
- package/dist/test/test.products.js +49 -0
- package/dist/test/test.products.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/appBuilder.types.d.ts +5 -12
- package/dist/types/enums.d.ts +4 -1
- package/dist/types/enums.js +3 -0
- package/dist/types/enums.js.map +1 -1
- package/dist/types/index.types.d.ts +4 -0
- package/dist/types/pricing.types.d.ts +4 -0
- package/dist/types/pricing.types.js +3 -0
- package/dist/types/pricing.types.js.map +1 -0
- package/dist/types/processor.types.d.ts +67 -11
- package/dist/types/processor.types.js.map +1 -1
- package/dist/types/productsBuilder.types.d.ts +132 -14
- package/dist/types/productsBuilder.types.js +69 -4
- package/dist/types/productsBuilder.types.js.map +1 -1
- package/dist/types/request-tracker.interface.d.ts +0 -0
- package/dist/types/request-tracker.interface.js +1 -0
- package/dist/types/request-tracker.interface.js.map +1 -0
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.js +5 -0
- package/dist/utils/constants.js.map +1 -0
- package/package.json +17 -3
|
@@ -33,162 +33,554 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.NOSQLDatabaseActionsSchema = exports.
|
|
36
|
+
exports.NOSQLDatabaseActionsSchema = exports.SQLDatabaseActionSchema = exports.DatabaseActionSchema = exports.validateDatabaseFilterTemplate = exports.validateDatabaseTemplate = void 0;
|
|
37
37
|
const Joi = __importStar(require("joi"));
|
|
38
38
|
const inputs_types_1 = require("../../../types/inputs.types");
|
|
39
39
|
const productsBuilder_types_1 = require("../../../types/productsBuilder.types");
|
|
40
|
-
//import { MySQL } from 'dt-sql-parser';
|
|
41
40
|
const placeholderPattern = /\{\{[^}]+\}\}/g;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Helper to check if a value has a valid value or contains placeholders
|
|
43
|
+
*/
|
|
44
|
+
const hasValidValue = (value) => {
|
|
45
|
+
if (value === undefined || value === null)
|
|
46
|
+
return false;
|
|
47
|
+
if (typeof value === 'string') {
|
|
48
|
+
return value.length > 0;
|
|
49
|
+
}
|
|
50
|
+
if (typeof value === 'object') {
|
|
51
|
+
return Object.keys(value).length > 0 || JSON.stringify(value).match(placeholderPattern) !== null;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Valid comparison operators
|
|
57
|
+
*/
|
|
58
|
+
const validComparisonOperators = [
|
|
59
|
+
'=', '!=', '>', '>=', '<', '<=',
|
|
60
|
+
'like', 'not_like', 'in', 'not_in',
|
|
61
|
+
'between', 'not_between', 'is_null', 'is_not_null',
|
|
62
|
+
'contains', 'not_contains',
|
|
63
|
+
];
|
|
64
|
+
/**
|
|
65
|
+
* Valid join types
|
|
66
|
+
*/
|
|
67
|
+
const validJoinTypes = ['inner', 'left', 'right', 'full', 'cross'];
|
|
68
|
+
/**
|
|
69
|
+
* Valid sort orders
|
|
70
|
+
*/
|
|
71
|
+
const validSortOrders = ['asc', 'desc'];
|
|
72
|
+
/**
|
|
73
|
+
* Validates where clause structure
|
|
74
|
+
* Supports: object notation, IWhereCondition, IWhereGroup, or arrays
|
|
75
|
+
*/
|
|
76
|
+
const validateWhereClause = (where, fieldName) => {
|
|
77
|
+
if (!where || typeof where !== 'object') {
|
|
78
|
+
return `${fieldName} must be a valid object.`;
|
|
79
|
+
}
|
|
80
|
+
// If it's a simple object notation (Record<string, any>), it's valid
|
|
81
|
+
const hasColumn = hasValidValue(where.column);
|
|
82
|
+
const hasOperator = hasValidValue(where.operator);
|
|
83
|
+
const hasConditions = Array.isArray(where.conditions);
|
|
84
|
+
// IWhereCondition structure
|
|
85
|
+
if (hasColumn) {
|
|
86
|
+
if (!hasOperator) {
|
|
87
|
+
return `${fieldName} with column must also have operator.`;
|
|
72
88
|
}
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
});
|
|
89
|
+
// Validate operator if it's not a placeholder
|
|
90
|
+
if (typeof where.operator === 'string' && !where.operator.match(placeholderPattern)) {
|
|
91
|
+
if (!validComparisonOperators.includes(where.operator.toLowerCase())) {
|
|
92
|
+
return `${fieldName} operator must be one of: ${validComparisonOperators.join(', ')}.`;
|
|
93
|
+
}
|
|
79
94
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
})
|
|
95
|
+
}
|
|
96
|
+
// IWhereGroup structure
|
|
97
|
+
if (hasConditions) {
|
|
98
|
+
const validLogicalOps = ['and', 'or', 'not'];
|
|
99
|
+
if (where.operator && !validLogicalOps.includes(where.operator.toLowerCase())) {
|
|
100
|
+
return `${fieldName} group operator must be one of: ${validLogicalOps.join(', ')}.`;
|
|
86
101
|
}
|
|
87
102
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
103
|
+
return null;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Validates orderBy structure
|
|
107
|
+
*/
|
|
108
|
+
const validateOrderBy = (orderBy) => {
|
|
109
|
+
if (!orderBy)
|
|
110
|
+
return null;
|
|
111
|
+
const validateSingle = (item) => {
|
|
112
|
+
if (!hasValidValue(item.column)) {
|
|
113
|
+
return 'orderBy must have column.';
|
|
114
|
+
}
|
|
115
|
+
if (item.order && typeof item.order === 'string' && !item.order.match(placeholderPattern)) {
|
|
116
|
+
if (!validSortOrders.includes(item.order.toLowerCase())) {
|
|
117
|
+
return `orderBy order must be one of: ${validSortOrders.join(', ')}.`;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
};
|
|
122
|
+
if (Array.isArray(orderBy)) {
|
|
123
|
+
for (const item of orderBy) {
|
|
124
|
+
const error = validateSingle(item);
|
|
125
|
+
if (error)
|
|
126
|
+
return error;
|
|
127
|
+
}
|
|
92
128
|
}
|
|
93
|
-
|
|
129
|
+
else if (typeof orderBy === 'object') {
|
|
130
|
+
return validateSingle(orderBy);
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
94
133
|
};
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Validates join clause structure
|
|
136
|
+
*/
|
|
137
|
+
const validateJoinClause = (join) => {
|
|
138
|
+
if (!join.type || !validJoinTypes.includes(join.type.toLowerCase())) {
|
|
139
|
+
return `Join type must be one of: ${validJoinTypes.join(', ')}.`;
|
|
140
|
+
}
|
|
141
|
+
if (!hasValidValue(join.table)) {
|
|
142
|
+
return 'Join must have table.';
|
|
143
|
+
}
|
|
144
|
+
if (!hasValidValue(join.leftColumn)) {
|
|
145
|
+
return 'Join must have leftColumn.';
|
|
146
|
+
}
|
|
147
|
+
if (!hasValidValue(join.rightColumn)) {
|
|
148
|
+
return 'Join must have rightColumn.';
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Validates QUERY action template (IQueryOptions)
|
|
154
|
+
* Expected: table (required), select?, where?, orderBy?, limit?, offset?, joins?, include?, groupBy?, having?, distinct?
|
|
155
|
+
*/
|
|
156
|
+
const validateQueryOptions = (options) => {
|
|
157
|
+
if (!hasValidValue(options.table)) {
|
|
158
|
+
return 'QUERY action requires table.';
|
|
159
|
+
}
|
|
160
|
+
// Validate where clause if present
|
|
161
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
162
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
163
|
+
if (whereError)
|
|
164
|
+
return whereError;
|
|
165
|
+
}
|
|
166
|
+
// Validate orderBy if present
|
|
167
|
+
if (options.orderBy) {
|
|
168
|
+
const orderByError = validateOrderBy(options.orderBy);
|
|
169
|
+
if (orderByError)
|
|
170
|
+
return orderByError;
|
|
171
|
+
}
|
|
172
|
+
// Validate joins if present
|
|
173
|
+
if (options.joins && Array.isArray(options.joins)) {
|
|
174
|
+
for (const join of options.joins) {
|
|
175
|
+
const joinError = validateJoinClause(join);
|
|
176
|
+
if (joinError)
|
|
177
|
+
return joinError;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Validate groupBy if present
|
|
181
|
+
if (options.groupBy && !Array.isArray(options.groupBy)) {
|
|
182
|
+
return 'groupBy must be an array of column names.';
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Validates INSERT action template (IInsertOptions)
|
|
188
|
+
* Expected: table (required), data (required), returning?, ignoreErrors?, onConflict?
|
|
189
|
+
*/
|
|
190
|
+
const validateInsertOptions = (options) => {
|
|
191
|
+
if (!hasValidValue(options.table)) {
|
|
192
|
+
return 'INSERT action requires table.';
|
|
193
|
+
}
|
|
194
|
+
if (!hasValidValue(options.data)) {
|
|
195
|
+
return 'INSERT action requires data (record or array of records to insert).';
|
|
196
|
+
}
|
|
197
|
+
// Validate onConflict if present
|
|
198
|
+
if (options.onConflict) {
|
|
199
|
+
if (!Array.isArray(options.onConflict.columns) || options.onConflict.columns.length === 0) {
|
|
200
|
+
return 'onConflict must have columns array.';
|
|
201
|
+
}
|
|
202
|
+
if (options.onConflict.action && !['ignore', 'update'].includes(options.onConflict.action)) {
|
|
203
|
+
return 'onConflict action must be one of: ignore, update.';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return null;
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* Validates UPDATE action template (IUpdateOptions)
|
|
210
|
+
* Expected: table (required), data (required), where (required), returning?, limit?
|
|
211
|
+
*/
|
|
212
|
+
const validateUpdateOptions = (options) => {
|
|
213
|
+
if (!hasValidValue(options.table)) {
|
|
214
|
+
return 'UPDATE action requires table.';
|
|
215
|
+
}
|
|
216
|
+
if (!hasValidValue(options.data)) {
|
|
217
|
+
return 'UPDATE action requires data (fields to update).';
|
|
218
|
+
}
|
|
219
|
+
if (!hasValidValue(options.where)) {
|
|
220
|
+
return 'UPDATE action requires where clause to identify records.';
|
|
221
|
+
}
|
|
222
|
+
// Validate where clause
|
|
223
|
+
if (typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
224
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
225
|
+
if (whereError)
|
|
226
|
+
return whereError;
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Validates DELETE action template (IDeleteOptions)
|
|
232
|
+
* Expected: table (required), where (required), returning?, limit?
|
|
233
|
+
*/
|
|
234
|
+
const validateDeleteOptions = (options) => {
|
|
235
|
+
if (!hasValidValue(options.table)) {
|
|
236
|
+
return 'DELETE action requires table.';
|
|
237
|
+
}
|
|
238
|
+
if (!hasValidValue(options.where)) {
|
|
239
|
+
return 'DELETE action requires where clause to identify records.';
|
|
240
|
+
}
|
|
241
|
+
// Validate where clause
|
|
242
|
+
if (typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
243
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
244
|
+
if (whereError)
|
|
245
|
+
return whereError;
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Validates UPSERT action template (IUpsertOptions)
|
|
251
|
+
* Expected: table (required), data (required), uniqueColumns (required), updateColumns?, returning?
|
|
252
|
+
*/
|
|
253
|
+
const validateUpsertOptions = (options) => {
|
|
254
|
+
if (!hasValidValue(options.table)) {
|
|
255
|
+
return 'UPSERT action requires table.';
|
|
256
|
+
}
|
|
257
|
+
if (!hasValidValue(options.data)) {
|
|
258
|
+
return 'UPSERT action requires data (record or array of records).';
|
|
259
|
+
}
|
|
260
|
+
if (!hasValidValue(options.uniqueColumns) || !Array.isArray(options.uniqueColumns) || options.uniqueColumns.length === 0) {
|
|
261
|
+
return 'UPSERT action requires uniqueColumns array to define conflict columns.';
|
|
262
|
+
}
|
|
263
|
+
return null;
|
|
264
|
+
};
|
|
265
|
+
/**
|
|
266
|
+
* Validates COUNT action template
|
|
267
|
+
* Expected: table (required), where?, column?
|
|
268
|
+
*/
|
|
269
|
+
const validateCountOptions = (options) => {
|
|
270
|
+
if (!hasValidValue(options.table)) {
|
|
271
|
+
return 'COUNT action requires table.';
|
|
272
|
+
}
|
|
273
|
+
// Validate where clause if present
|
|
274
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
275
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
276
|
+
if (whereError)
|
|
277
|
+
return whereError;
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
};
|
|
281
|
+
/**
|
|
282
|
+
* Validates SUM action template
|
|
283
|
+
* Expected: table (required), column (required), where?
|
|
284
|
+
*/
|
|
285
|
+
const validateSumOptions = (options) => {
|
|
286
|
+
if (!hasValidValue(options.table)) {
|
|
287
|
+
return 'SUM action requires table.';
|
|
288
|
+
}
|
|
289
|
+
if (!hasValidValue(options.column)) {
|
|
290
|
+
return 'SUM action requires column to sum.';
|
|
291
|
+
}
|
|
292
|
+
// Validate where clause if present
|
|
293
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
294
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
295
|
+
if (whereError)
|
|
296
|
+
return whereError;
|
|
297
|
+
}
|
|
298
|
+
return null;
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* Validates AVERAGE action template
|
|
302
|
+
* Expected: table (required), column (required), where?
|
|
303
|
+
*/
|
|
304
|
+
const validateAverageOptions = (options) => {
|
|
305
|
+
if (!hasValidValue(options.table)) {
|
|
306
|
+
return 'AVERAGE action requires table.';
|
|
307
|
+
}
|
|
308
|
+
if (!hasValidValue(options.column)) {
|
|
309
|
+
return 'AVERAGE action requires column to average.';
|
|
310
|
+
}
|
|
311
|
+
// Validate where clause if present
|
|
312
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
313
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
314
|
+
if (whereError)
|
|
315
|
+
return whereError;
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* Validates MINIMUM action template
|
|
321
|
+
* Expected: table (required), column (required), where?
|
|
322
|
+
*/
|
|
323
|
+
const validateMinimumOptions = (options) => {
|
|
324
|
+
if (!hasValidValue(options.table)) {
|
|
325
|
+
return 'MINIMUM action requires table.';
|
|
326
|
+
}
|
|
327
|
+
if (!hasValidValue(options.column)) {
|
|
328
|
+
return 'MINIMUM action requires column to find minimum.';
|
|
329
|
+
}
|
|
330
|
+
// Validate where clause if present
|
|
331
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
332
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
333
|
+
if (whereError)
|
|
334
|
+
return whereError;
|
|
335
|
+
}
|
|
336
|
+
return null;
|
|
337
|
+
};
|
|
338
|
+
/**
|
|
339
|
+
* Validates MAXIMUM action template
|
|
340
|
+
* Expected: table (required), column (required), where?
|
|
341
|
+
*/
|
|
342
|
+
const validateMaximumOptions = (options) => {
|
|
343
|
+
if (!hasValidValue(options.table)) {
|
|
344
|
+
return 'MAXIMUM action requires table.';
|
|
345
|
+
}
|
|
346
|
+
if (!hasValidValue(options.column)) {
|
|
347
|
+
return 'MAXIMUM action requires column to find maximum.';
|
|
348
|
+
}
|
|
349
|
+
// Validate where clause if present
|
|
350
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
351
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
352
|
+
if (whereError)
|
|
353
|
+
return whereError;
|
|
354
|
+
}
|
|
355
|
+
return null;
|
|
356
|
+
};
|
|
357
|
+
/**
|
|
358
|
+
* Validates GROUP_BY action template
|
|
359
|
+
* Expected: table (required), groupBy (required), select?, where?, having?, orderBy?, limit?
|
|
360
|
+
*/
|
|
361
|
+
const validateGroupByOptions = (options) => {
|
|
362
|
+
if (!hasValidValue(options.table)) {
|
|
363
|
+
return 'GROUP_BY action requires table.';
|
|
364
|
+
}
|
|
365
|
+
if (!hasValidValue(options.groupBy) || !Array.isArray(options.groupBy) || options.groupBy.length === 0) {
|
|
366
|
+
return 'GROUP_BY action requires groupBy array of column names.';
|
|
367
|
+
}
|
|
368
|
+
// Validate where clause if present
|
|
369
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
370
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
371
|
+
if (whereError)
|
|
372
|
+
return whereError;
|
|
373
|
+
}
|
|
374
|
+
// Validate having clause if present
|
|
375
|
+
if (options.having && typeof options.having === 'object' && !JSON.stringify(options.having).match(placeholderPattern)) {
|
|
376
|
+
const havingError = validateWhereClause(options.having, 'having');
|
|
377
|
+
if (havingError)
|
|
378
|
+
return havingError;
|
|
379
|
+
}
|
|
380
|
+
// Validate orderBy if present
|
|
381
|
+
if (options.orderBy) {
|
|
382
|
+
const orderByError = validateOrderBy(options.orderBy);
|
|
383
|
+
if (orderByError)
|
|
384
|
+
return orderByError;
|
|
385
|
+
}
|
|
386
|
+
return null;
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* Validates AGGREGATE action template (complex aggregation query)
|
|
390
|
+
* Expected: table (required), select?, where?, groupBy?, having?, orderBy?, limit?
|
|
391
|
+
*/
|
|
392
|
+
const validateAggregateOptions = (options) => {
|
|
393
|
+
if (!hasValidValue(options.table)) {
|
|
394
|
+
return 'AGGREGATE action requires table.';
|
|
395
|
+
}
|
|
396
|
+
// Validate where clause if present
|
|
397
|
+
if (options.where && typeof options.where === 'object' && !JSON.stringify(options.where).match(placeholderPattern)) {
|
|
398
|
+
const whereError = validateWhereClause(options.where, 'where');
|
|
399
|
+
if (whereError)
|
|
400
|
+
return whereError;
|
|
401
|
+
}
|
|
402
|
+
// Validate groupBy if present
|
|
403
|
+
if (options.groupBy && !Array.isArray(options.groupBy)) {
|
|
404
|
+
return 'groupBy must be an array of column names.';
|
|
405
|
+
}
|
|
406
|
+
// Validate having clause if present
|
|
407
|
+
if (options.having && typeof options.having === 'object' && !JSON.stringify(options.having).match(placeholderPattern)) {
|
|
408
|
+
const havingError = validateWhereClause(options.having, 'having');
|
|
409
|
+
if (havingError)
|
|
410
|
+
return havingError;
|
|
411
|
+
}
|
|
412
|
+
// Validate orderBy if present
|
|
413
|
+
if (options.orderBy) {
|
|
414
|
+
const orderByError = validateOrderBy(options.orderBy);
|
|
415
|
+
if (orderByError)
|
|
416
|
+
return orderByError;
|
|
417
|
+
}
|
|
418
|
+
return null;
|
|
419
|
+
};
|
|
420
|
+
/**
|
|
421
|
+
* Validates RAW_SQL action template
|
|
422
|
+
* Expected: query (required), params?
|
|
423
|
+
*/
|
|
424
|
+
const validateRawSqlOptions = (options) => {
|
|
425
|
+
if (!hasValidValue(options.query)) {
|
|
426
|
+
return 'RAW_SQL action requires query string.';
|
|
427
|
+
}
|
|
428
|
+
return null;
|
|
429
|
+
};
|
|
430
|
+
/**
|
|
431
|
+
* Validates database action template based on action type
|
|
432
|
+
* Uses the new structured query interface (IQueryOptions, IInsertOptions, IUpdateOptions, IDeleteOptions)
|
|
433
|
+
*/
|
|
434
|
+
const validateDatabaseTemplate = (value, helpers) => {
|
|
122
435
|
var _a;
|
|
123
436
|
if (typeof value !== 'object' || value === null) {
|
|
124
437
|
return helpers.error('any.invalid', {
|
|
125
|
-
message: 'Template must be a valid
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
const actionType = (_a = helpers.state.ancestors[0]) === null || _a === void 0 ? void 0 : _a.type; // Get the action type from the parent object
|
|
129
|
-
const validOperations = exports.mongoValidTypeMap[actionType] || [];
|
|
130
|
-
// Validate the template operation
|
|
131
|
-
if (!validOperations.some((op) => op in value)) {
|
|
132
|
-
return helpers.error('any.invalid', {
|
|
133
|
-
message: `Template must include a valid MongoDB operation for the action type: ${actionType}. Valid operations: ${validOperations.join(', ')}.`,
|
|
438
|
+
message: 'Template must be a valid query options object.',
|
|
134
439
|
});
|
|
135
440
|
}
|
|
441
|
+
const actionType = (_a = helpers.state.ancestors[0]) === null || _a === void 0 ? void 0 : _a.type;
|
|
136
442
|
// Check for placeholders in the template
|
|
137
443
|
const templateStr = JSON.stringify(value);
|
|
138
444
|
const placeholders = templateStr.match(placeholderPattern);
|
|
139
|
-
if (!placeholders) {
|
|
445
|
+
if (!placeholders || placeholders.length === 0) {
|
|
140
446
|
return helpers.error('any.invalid', {
|
|
141
447
|
message: 'Template must include placeholders in the format {{valueName}}.',
|
|
142
448
|
});
|
|
143
449
|
}
|
|
450
|
+
let validationError = null;
|
|
451
|
+
// Type-specific validations based on the expected interface for each action type
|
|
452
|
+
switch (actionType) {
|
|
453
|
+
// Basic CRUD operations
|
|
454
|
+
case productsBuilder_types_1.DatabaseActionTypes.QUERY:
|
|
455
|
+
case productsBuilder_types_1.DatabaseActionTypes.READ: // Legacy alias
|
|
456
|
+
validationError = validateQueryOptions(value);
|
|
457
|
+
break;
|
|
458
|
+
case productsBuilder_types_1.DatabaseActionTypes.INSERT:
|
|
459
|
+
case productsBuilder_types_1.DatabaseActionTypes.CREATE: // Legacy alias
|
|
460
|
+
validationError = validateInsertOptions(value);
|
|
461
|
+
break;
|
|
462
|
+
case productsBuilder_types_1.DatabaseActionTypes.UPDATE:
|
|
463
|
+
validationError = validateUpdateOptions(value);
|
|
464
|
+
break;
|
|
465
|
+
case productsBuilder_types_1.DatabaseActionTypes.DELETE:
|
|
466
|
+
validationError = validateDeleteOptions(value);
|
|
467
|
+
break;
|
|
468
|
+
case productsBuilder_types_1.DatabaseActionTypes.UPSERT:
|
|
469
|
+
validationError = validateUpsertOptions(value);
|
|
470
|
+
break;
|
|
471
|
+
// Aggregation operations
|
|
472
|
+
case productsBuilder_types_1.DatabaseActionTypes.COUNT:
|
|
473
|
+
validationError = validateCountOptions(value);
|
|
474
|
+
break;
|
|
475
|
+
case productsBuilder_types_1.DatabaseActionTypes.SUM:
|
|
476
|
+
validationError = validateSumOptions(value);
|
|
477
|
+
break;
|
|
478
|
+
case productsBuilder_types_1.DatabaseActionTypes.AVERAGE:
|
|
479
|
+
validationError = validateAverageOptions(value);
|
|
480
|
+
break;
|
|
481
|
+
case productsBuilder_types_1.DatabaseActionTypes.MINIMUM:
|
|
482
|
+
validationError = validateMinimumOptions(value);
|
|
483
|
+
break;
|
|
484
|
+
case productsBuilder_types_1.DatabaseActionTypes.MAXIMUM:
|
|
485
|
+
validationError = validateMaximumOptions(value);
|
|
486
|
+
break;
|
|
487
|
+
case productsBuilder_types_1.DatabaseActionTypes.GROUP_BY:
|
|
488
|
+
validationError = validateGroupByOptions(value);
|
|
489
|
+
break;
|
|
490
|
+
case productsBuilder_types_1.DatabaseActionTypes.AGGREGATE:
|
|
491
|
+
validationError = validateAggregateOptions(value);
|
|
492
|
+
break;
|
|
493
|
+
// Raw query
|
|
494
|
+
case productsBuilder_types_1.DatabaseActionTypes.RAW_SQL:
|
|
495
|
+
validationError = validateRawSqlOptions(value);
|
|
496
|
+
break;
|
|
497
|
+
default:
|
|
498
|
+
validationError = `Unknown action type: ${actionType}`;
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
if (validationError) {
|
|
502
|
+
return helpers.error('any.invalid', {
|
|
503
|
+
message: validationError,
|
|
504
|
+
});
|
|
505
|
+
}
|
|
144
506
|
return value;
|
|
145
507
|
};
|
|
146
|
-
exports.
|
|
147
|
-
|
|
508
|
+
exports.validateDatabaseTemplate = validateDatabaseTemplate;
|
|
509
|
+
/**
|
|
510
|
+
* Validates the filter template for update/delete operations
|
|
511
|
+
* FilterTemplate should be a where clause structure
|
|
512
|
+
*/
|
|
513
|
+
const validateDatabaseFilterTemplate = (value, helpers) => {
|
|
514
|
+
var _a;
|
|
148
515
|
if (typeof value !== 'object' || value === null) {
|
|
149
516
|
return helpers.error('any.invalid', {
|
|
150
|
-
message: 'FilterTemplate must be a valid
|
|
517
|
+
message: 'FilterTemplate must be a valid filter object.',
|
|
151
518
|
});
|
|
152
519
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (
|
|
520
|
+
const actionType = (_a = helpers.state.ancestors[0]) === null || _a === void 0 ? void 0 : _a.type;
|
|
521
|
+
// Filter templates are typically used for update/delete operations
|
|
522
|
+
if (![productsBuilder_types_1.DatabaseActionTypes.UPDATE, productsBuilder_types_1.DatabaseActionTypes.DELETE].includes(actionType)) {
|
|
156
523
|
return helpers.error('any.invalid', {
|
|
157
|
-
message:
|
|
524
|
+
message: `FilterTemplate is not applicable for action type "${actionType}".`,
|
|
158
525
|
});
|
|
159
526
|
}
|
|
160
|
-
// Check for placeholders in the
|
|
161
|
-
const
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
if (!placeholders) {
|
|
527
|
+
// Check for placeholders in the filter template
|
|
528
|
+
const filterStr = JSON.stringify(value);
|
|
529
|
+
const placeholders = filterStr.match(placeholderPattern);
|
|
530
|
+
if (!placeholders || placeholders.length === 0) {
|
|
165
531
|
return helpers.error('any.invalid', {
|
|
166
|
-
message: 'FilterTemplate
|
|
532
|
+
message: 'FilterTemplate must include placeholders in the format {{valueName}}.',
|
|
167
533
|
});
|
|
168
534
|
}
|
|
535
|
+
// Validate where clause structure if it has a where key
|
|
536
|
+
if (value.where && typeof value.where === 'object' && !JSON.stringify(value.where).match(placeholderPattern)) {
|
|
537
|
+
const whereError = validateWhereClause(value.where, 'where');
|
|
538
|
+
if (whereError) {
|
|
539
|
+
return helpers.error('any.invalid', { message: whereError });
|
|
540
|
+
}
|
|
541
|
+
}
|
|
169
542
|
return value;
|
|
170
543
|
};
|
|
171
|
-
exports.
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
544
|
+
exports.validateDatabaseFilterTemplate = validateDatabaseFilterTemplate;
|
|
545
|
+
/**
|
|
546
|
+
* Schema for creating database actions using the structured query interface
|
|
547
|
+
*/
|
|
548
|
+
exports.DatabaseActionSchema = Joi.object({
|
|
549
|
+
name: Joi.string().required().messages({
|
|
550
|
+
'any.required': 'name is required',
|
|
551
|
+
}),
|
|
176
552
|
tag: Joi.string()
|
|
177
553
|
.pattern(inputs_types_1.tagPattern)
|
|
178
554
|
.messages(inputs_types_1.tagMessage)
|
|
179
555
|
.required(),
|
|
556
|
+
description: Joi.string().optional(),
|
|
180
557
|
tableName: Joi.string()
|
|
181
558
|
.pattern(inputs_types_1.tagPattern)
|
|
182
559
|
.messages(inputs_types_1.tableMessage)
|
|
183
560
|
.required(),
|
|
184
561
|
type: Joi.string()
|
|
185
562
|
.valid(...Object.values(productsBuilder_types_1.DatabaseActionTypes))
|
|
186
|
-
.required()
|
|
563
|
+
.required()
|
|
564
|
+
.messages({
|
|
565
|
+
'any.only': `type must be one of: ${Object.values(productsBuilder_types_1.DatabaseActionTypes).join(', ')}`,
|
|
566
|
+
}),
|
|
187
567
|
template: Joi.object()
|
|
188
|
-
.custom(exports.
|
|
189
|
-
.required()
|
|
568
|
+
.custom(exports.validateDatabaseTemplate, 'Database template validation')
|
|
569
|
+
.required()
|
|
570
|
+
.messages({
|
|
571
|
+
'any.invalid': 'Template must be a valid query options object with placeholders.',
|
|
572
|
+
}),
|
|
190
573
|
filterTemplate: Joi.object()
|
|
191
|
-
.custom(exports.
|
|
192
|
-
.optional()
|
|
574
|
+
.custom(exports.validateDatabaseFilterTemplate, 'Database filter template validation')
|
|
575
|
+
.optional()
|
|
576
|
+
.messages({
|
|
577
|
+
'any.invalid': 'FilterTemplate must be a valid filter object with placeholders.',
|
|
578
|
+
}),
|
|
193
579
|
});
|
|
580
|
+
// Legacy schemas for backwards compatibility - these are deprecated
|
|
581
|
+
// @deprecated Use DatabaseActionSchema instead
|
|
582
|
+
exports.SQLDatabaseActionSchema = exports.DatabaseActionSchema;
|
|
583
|
+
// @deprecated Use DatabaseActionSchema instead
|
|
584
|
+
exports.NOSQLDatabaseActionsSchema = exports.DatabaseActionSchema;
|
|
585
|
+
exports.default = exports.DatabaseActionSchema;
|
|
194
586
|
//# sourceMappingURL=create.productDatabaseAction.validator.js.map
|