@owox/backend 0.35.0 → 0.36.0
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/src/common/exceptions/concurrency-limit-exceeded.exception.d.ts +1 -1
- package/dist/src/common/exceptions/concurrency-limit-exceeded.exception.js +2 -2
- package/dist/src/common/markdown/markdown-parser.service.d.ts +2 -0
- package/dist/src/common/markdown/markdown-parser.service.js +15 -8
- package/dist/src/common/validators/max-byte-length.validator.d.ts +2 -0
- package/dist/src/common/validators/max-byte-length.validator.js +29 -0
- package/dist/src/config/env-validation.config.d.ts +12 -0
- package/dist/src/config/env-validation.config.js +7 -0
- package/dist/src/data-marts/ai-insights/agent/types.d.ts +6 -6
- package/dist/src/data-marts/calculated-fields/calculated-field-validator.service.js +22 -30
- package/dist/src/data-marts/calculated-fields/calculated-field.utils.d.ts +1 -0
- package/dist/src/data-marts/calculated-fields/calculated-field.utils.js +21 -0
- package/dist/src/data-marts/calculated-fields/formula-analyzer.d.ts +1 -0
- package/dist/src/data-marts/calculated-fields/formula-analyzer.js +2 -0
- package/dist/src/data-marts/calculated-fields/formula-violations.d.ts +7 -0
- package/dist/src/data-marts/calculated-fields/formula-violations.js +82 -1
- package/dist/src/data-marts/calculated-fields/join-grain.d.ts +32 -0
- package/dist/src/data-marts/calculated-fields/join-grain.js +107 -0
- package/dist/src/data-marts/calculated-fields/set-quantifier.d.ts +8 -0
- package/dist/src/data-marts/calculated-fields/set-quantifier.js +12 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/connector-message.schema.d.ts +66 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/connector-message.schema.js +13 -1
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-credentials-update.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-credentials-update.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-error.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-error.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-log.schema.d.ts +12 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-log.schema.js +4 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-requested-date.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-requested-date.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-state-update.schema.d.ts +16 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-state-update.schema.js +16 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-status.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-status.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-warning.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-warning.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/services/connector-event.translator.d.ts +10 -0
- package/dist/src/data-marts/connector-types/connector-message/services/connector-event.translator.js +138 -0
- package/dist/src/data-marts/connector-types/connector-message/services/connector-message-parser.service.d.ts +1 -3
- package/dist/src/data-marts/connector-types/connector-message/services/connector-message-parser.service.js +30 -34
- package/dist/src/data-marts/connector-types/connector-message/services/connector-output-capture.service.js +10 -12
- package/dist/src/data-marts/connector-types/connector-message/services/connector-state.service.js +3 -1
- package/dist/src/data-marts/connector-types/enums/connector-message-type-enum.d.ts +1 -0
- package/dist/src/data-marts/connector-types/enums/connector-message-type-enum.js +1 -0
- package/dist/src/data-marts/controllers/connector-definition.controller.d.ts +30 -0
- package/dist/src/data-marts/controllers/connector-definition.controller.js +252 -0
- package/dist/src/data-marts/controllers/data-mart-preview.controller.d.ts +10 -0
- package/dist/src/data-marts/controllers/data-mart-preview.controller.js +58 -0
- package/dist/src/data-marts/controllers/data-mart.controller.d.ts +5 -1
- package/dist/src/data-marts/controllers/data-mart.controller.js +25 -4
- package/dist/src/data-marts/controllers/insight-template.controller.js +4 -4
- package/dist/src/data-marts/controllers/insight.controller.js +5 -5
- package/dist/src/data-marts/controllers/project-data-mart-runs.controller.js +1 -1
- package/dist/src/data-marts/controllers/spec/connector-definition.api.d.ts +12 -0
- package/dist/src/data-marts/controllers/spec/connector-definition.api.js +179 -0
- package/dist/src/data-marts/controllers/spec/data-mart.api.d.ts +1 -0
- package/dist/src/data-marts/controllers/spec/data-mart.api.js +5 -0
- package/dist/src/data-marts/controllers/spec/report-openapi.d.ts +18 -0
- package/dist/src/data-marts/controllers/spec/report-openapi.js +3 -0
- package/dist/src/data-marts/data-marts.module.js +20 -2
- package/dist/src/data-marts/data-storage-types/blending/metric-sleeve.planner.js +3 -12
- package/dist/src/data-marts/data-storage-types/data-mart-schema.utils.d.ts +1 -0
- package/dist/src/data-marts/data-storage-types/data-mart-schema.utils.js +16 -0
- package/dist/src/data-marts/dto/domain/blendable-schema.dto.d.ts +10 -0
- package/dist/src/data-marts/dto/domain/blendable-schema.dto.js +71 -1
- package/dist/src/data-marts/dto/domain/create-data-mart.command.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/create-data-mart.command.js +3 -1
- package/dist/src/data-marts/dto/domain/create-report.command.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/create-report.command.js +3 -1
- package/dist/src/data-marts/dto/domain/data-mart-list-item.dto.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/data-mart-list-item.dto.js +3 -1
- package/dist/src/data-marts/dto/domain/data-mart.dto.d.ts +4 -1
- package/dist/src/data-marts/dto/domain/data-mart.dto.js +5 -1
- package/dist/src/data-marts/dto/domain/model-canvas.dto.d.ts +4 -0
- package/dist/src/data-marts/dto/domain/report-like-read-plan.d.ts +2 -0
- package/dist/src/data-marts/dto/domain/report.dto.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/report.dto.js +3 -1
- package/dist/src/data-marts/dto/domain/update-data-mart-icon.command.d.ts +9 -0
- package/dist/src/data-marts/dto/domain/update-data-mart-icon.command.js +19 -0
- package/dist/src/data-marts/dto/domain/update-report.command.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/update-report.command.js +3 -1
- package/dist/src/data-marts/dto/presentation/create-data-mart-request-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/create-data-mart-request-api.dto.js +13 -0
- package/dist/src/data-marts/dto/presentation/create-report-request-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/create-report-request-api.dto.js +10 -0
- package/dist/src/data-marts/dto/presentation/custom-connector-response.dto.d.ts +46 -0
- package/dist/src/data-marts/dto/presentation/custom-connector-response.dto.js +216 -0
- package/dist/src/data-marts/dto/presentation/custom-connector.dto.d.ts +27 -0
- package/dist/src/data-marts/dto/presentation/custom-connector.dto.js +159 -0
- package/dist/src/data-marts/dto/presentation/data-mart-list-item-response-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/data-mart-list-item-response-api.dto.js +10 -0
- package/dist/src/data-marts/dto/presentation/data-mart-response-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/data-mart-response-api.dto.js +10 -0
- package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.d.ts +4 -0
- package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.js +20 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.d.ts +7 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.js +56 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.d.ts +12 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.js +64 -0
- package/dist/src/data-marts/dto/presentation/report-response-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/report-response-api.dto.js +6 -0
- package/dist/src/data-marts/dto/presentation/run-data-mart-request-api.dto.js +67 -0
- package/dist/src/data-marts/dto/presentation/update-data-mart-description-api.dto.js +3 -0
- package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.d.ts +4 -0
- package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.js +30 -0
- package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.js +10 -0
- package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.d.ts +15 -0
- package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.js +29 -0
- package/dist/src/data-marts/dto/schemas/data-mart-run/data-mart-run.schema.d.ts +9 -0
- package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.d.ts +15 -0
- package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.js +1 -0
- package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/data-mart-definition.schema.d.ts +7 -0
- package/dist/src/data-marts/dto/schemas/data-quality/data-quality-run.schema.d.ts +20 -0
- package/dist/src/data-marts/entities/connector-definition-version.entity.d.ts +16 -0
- package/dist/src/data-marts/entities/connector-definition-version.entity.js +78 -0
- package/dist/src/data-marts/entities/connector-definition.entity.d.ts +14 -0
- package/dist/src/data-marts/entities/connector-definition.entity.js +82 -0
- package/dist/src/data-marts/entities/data-mart.entity.d.ts +2 -0
- package/dist/src/data-marts/entities/data-mart.entity.js +5 -0
- package/dist/src/data-marts/entities/report.entity.d.ts +2 -0
- package/dist/src/data-marts/entities/report.entity.js +11 -0
- package/dist/src/data-marts/enums/data-mart-icon.enum.d.ts +75 -0
- package/dist/src/data-marts/enums/data-mart-icon.enum.js +80 -0
- package/dist/src/data-marts/errors/connector-credential-boundary.error.d.ts +3 -0
- package/dist/src/data-marts/errors/connector-credential-boundary.error.js +14 -0
- package/dist/src/data-marts/facades/mcp-data-marts.facade.d.ts +2 -0
- package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.d.ts +7 -1
- package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.js +70 -5
- package/dist/src/data-marts/mappers/connector-definition.mapper.d.ts +14 -0
- package/dist/src/data-marts/mappers/connector-definition.mapper.js +57 -0
- package/dist/src/data-marts/mappers/data-mart.mapper.d.ts +9 -6
- package/dist/src/data-marts/mappers/data-mart.mapper.js +44 -19
- package/dist/src/data-marts/mappers/insight-template.mapper.d.ts +1 -1
- package/dist/src/data-marts/mappers/insight-template.mapper.js +2 -2
- package/dist/src/data-marts/mappers/insight.mapper.d.ts +1 -1
- package/dist/src/data-marts/mappers/insight.mapper.js +2 -2
- package/dist/src/data-marts/mappers/model-canvas.mapper.d.ts +10 -2
- package/dist/src/data-marts/mappers/model-canvas.mapper.js +9 -3
- package/dist/src/data-marts/mappers/report.mapper.js +4 -3
- package/dist/src/data-marts/services/auto-collapse.resolver.d.ts +1 -1
- package/dist/src/data-marts/services/auto-collapse.resolver.js +4 -0
- package/dist/src/data-marts/services/blendable-schema.service.d.ts +2 -0
- package/dist/src/data-marts/services/blendable-schema.service.js +59 -0
- package/dist/src/data-marts/services/connector/connector-credential-injector.service.d.ts +1 -1
- package/dist/src/data-marts/services/connector/connector-credential-injector.service.js +15 -1
- package/dist/src/data-marts/services/connector/connector-definition.service.d.ts +59 -0
- package/dist/src/data-marts/services/connector/connector-definition.service.js +491 -0
- package/dist/src/data-marts/services/connector/connector-executor.service.d.ts +9 -1
- package/dist/src/data-marts/services/connector/connector-executor.service.js +173 -63
- package/dist/src/data-marts/services/connector/connector-fields-preview.service.js +1 -1
- package/dist/src/data-marts/services/connector/connector-message.utils.js +2 -2
- package/dist/src/data-marts/services/connector/connector-preview-credentials.service.js +1 -1
- package/dist/src/data-marts/services/connector/connector-preview-support.d.ts +1 -1
- package/dist/src/data-marts/services/connector/connector-preview-support.js +14 -21
- package/dist/src/data-marts/services/connector/connector-process-spawner.service.d.ts +11 -2
- package/dist/src/data-marts/services/connector/connector-process-spawner.service.js +88 -60
- package/dist/src/data-marts/services/connector/connector-secret.service.d.ts +6 -3
- package/dist/src/data-marts/services/connector/connector-secret.service.js +77 -12
- package/dist/src/data-marts/services/connector/connector-source-config.service.js +1 -1
- package/dist/src/data-marts/services/connector/connector-source-credentials.service.d.ts +6 -2
- package/dist/src/data-marts/services/connector/connector-source-credentials.service.js +18 -16
- package/dist/src/data-marts/services/connector/connector-specification.mapper.d.ts +47 -0
- package/dist/src/data-marts/services/connector/connector-specification.mapper.js +46 -0
- package/dist/src/data-marts/services/connector/connector-test.service.d.ts +43 -0
- package/dist/src/data-marts/services/connector/connector-test.service.js +343 -0
- package/dist/src/data-marts/services/connector/connector.service.d.ts +8 -2
- package/dist/src/data-marts/services/connector/connector.service.js +65 -54
- package/dist/src/data-marts/services/connector/declarative-manifest-schemas.d.ts +4 -0
- package/dist/src/data-marts/services/connector/declarative-manifest-schemas.js +48 -0
- package/dist/src/data-marts/services/connector/run-log-flusher.d.ts +21 -0
- package/dist/src/data-marts/services/connector/run-log-flusher.js +67 -0
- package/dist/src/data-marts/services/data-mart.service.js +2 -0
- package/dist/src/data-marts/services/report-sql-composer.service.js +15 -1
- package/dist/src/data-marts/services/report.service.d.ts +1 -0
- package/dist/src/data-marts/services/report.service.js +13 -0
- package/dist/src/data-marts/services/scheduled-trigger.service.d.ts +1 -0
- package/dist/src/data-marts/services/scheduled-trigger.service.js +13 -0
- package/dist/src/data-marts/use-cases/create-data-mart.service.js +1 -0
- package/dist/src/data-marts/use-cases/create-report.service.js +2 -0
- package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.d.ts +5 -1
- package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.js +16 -3
- package/dist/src/data-marts/use-cases/list-project-scheduled-triggers.service.js +1 -1
- package/dist/src/data-marts/use-cases/preview-data-mart.service.d.ts +59 -0
- package/dist/src/data-marts/use-cases/preview-data-mart.service.js +293 -0
- package/dist/src/data-marts/use-cases/stream-http-data.service.js +1 -0
- package/dist/src/data-marts/use-cases/update-data-mart-definition.service.d.ts +1 -1
- package/dist/src/data-marts/use-cases/update-data-mart-definition.service.js +8 -6
- package/dist/src/data-marts/use-cases/update-data-mart-icon.service.d.ts +12 -0
- package/dist/src/data-marts/use-cases/update-data-mart-icon.service.js +46 -0
- package/dist/src/data-marts/use-cases/update-data-mart-schema.service.js +14 -1
- package/dist/src/data-marts/use-cases/update-report.service.js +9 -1
- package/dist/src/ee/ee.module.js +5 -8
- package/dist/src/ee/mcp/auth/mcp-auth-context.d.ts +0 -4
- package/dist/src/ee/mcp/auth/mcp-auth.middleware.d.ts +26 -0
- package/dist/src/ee/mcp/auth/mcp-auth.middleware.js +184 -0
- package/dist/src/ee/mcp/http-headers.util.d.ts +2 -0
- package/dist/src/ee/mcp/http-headers.util.js +8 -0
- package/dist/src/ee/mcp/observability/mcp-bus-wiring.js +4 -4
- package/dist/src/ee/mcp/observability/mcp-call-instrumentation.d.ts +2 -4
- package/dist/src/ee/mcp/observability/mcp-call-instrumentation.js +6 -6
- package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.d.ts +1 -1
- package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.js +5 -5
- package/dist/src/ee/mcp/tools/add-destination.tool.d.ts +20 -14
- package/dist/src/ee/mcp/tools/add-destination.tool.js +10 -10
- package/dist/src/ee/mcp/tools/add-report.tool.d.ts +88 -228
- package/dist/src/ee/mcp/tools/add-report.tool.js +28 -28
- package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.d.ts +2 -12
- package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.js +13 -13
- package/dist/src/ee/mcp/tools/data-mart-catalog.tool.d.ts +15 -81
- package/dist/src/ee/mcp/tools/data-mart-catalog.tool.js +11 -11
- package/dist/src/ee/mcp/tools/data-mart-details.tool.d.ts +19 -111
- package/dist/src/ee/mcp/tools/data-mart-details.tool.js +64 -48
- package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.d.ts +2 -6
- package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.js +7 -7
- package/dist/src/ee/mcp/tools/delete-report.tool.d.ts +2 -6
- package/dist/src/ee/mcp/tools/delete-report.tool.js +4 -4
- package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.d.ts +30 -195
- package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.js +22 -22
- package/dist/src/ee/mcp/tools/get-report-output-schema.tool.d.ts +3 -21
- package/dist/src/ee/mcp/tools/get-report-output-schema.tool.js +10 -10
- package/dist/src/ee/mcp/tools/get-report-run-status.tool.d.ts +15 -11
- package/dist/src/ee/mcp/tools/get-report-run-status.tool.js +14 -14
- package/dist/src/ee/mcp/tools/list-destinations.tool.d.ts +12 -20
- package/dist/src/ee/mcp/tools/list-destinations.tool.js +10 -10
- package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.d.ts +5 -61
- package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.js +14 -14
- package/dist/src/ee/mcp/tools/mcp-getting-started.util.d.ts +4 -52
- package/dist/src/ee/mcp/tools/mcp-getting-started.util.js +13 -13
- package/dist/src/ee/mcp/tools/mcp-tool.definition.d.ts +2 -2
- package/dist/src/ee/mcp/tools/project-context.tool.d.ts +3 -17
- package/dist/src/ee/mcp/tools/project-context.tool.js +10 -10
- package/dist/src/ee/mcp/tools/query-data-mart.input.d.ts +111 -152
- package/dist/src/ee/mcp/tools/query-data-mart.input.js +39 -39
- package/dist/src/ee/mcp/tools/query-data-mart.tool.d.ts +60 -130
- package/dist/src/ee/mcp/tools/query-data-mart.tool.js +35 -35
- package/dist/src/ee/mcp/tools/report-output-controls-output.d.ts +17 -60
- package/dist/src/ee/mcp/tools/report-output-controls-output.js +20 -20
- package/dist/src/ee/mcp/tools/report-run-outcome.d.ts +6 -42
- package/dist/src/ee/mcp/tools/report-run-outcome.js +20 -20
- package/dist/src/ee/mcp/tools/run-report.tool.d.ts +2 -6
- package/dist/src/ee/mcp/tools/run-report.tool.js +5 -5
- package/dist/src/ee/mcp/tools/search-data-marts.tool.d.ts +7 -79
- package/dist/src/ee/mcp/tools/search-data-marts.tool.js +11 -11
- package/dist/src/ee/mcp/tools/search-reports.tool.d.ts +15 -61
- package/dist/src/ee/mcp/tools/search-reports.tool.js +15 -15
- package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.d.ts +7 -79
- package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.js +15 -15
- package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.d.ts +2 -12
- package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.js +13 -13
- package/dist/src/ee/mcp/tools/update-report.tool.d.ts +105 -414
- package/dist/src/ee/mcp/tools/update-report.tool.js +20 -20
- package/dist/src/ee/mcp/transport/mcp-http-entry.service.d.ts +30 -0
- package/dist/src/ee/mcp/transport/mcp-http-entry.service.js +193 -0
- package/dist/src/idp/guards/idp.guard.js +2 -8
- package/dist/src/idp/oauth/controllers/oauth-authorization.controller.d.ts +4 -0
- package/dist/src/idp/oauth/controllers/oauth-authorization.controller.js +77 -1
- package/dist/src/idp/oauth/controllers/oauth-metadata.controller.d.ts +2 -1
- package/dist/src/idp/oauth/controllers/oauth-metadata.controller.js +5 -8
- package/dist/src/idp/oauth/controllers/oauth-token.controller.js +14 -1
- package/dist/src/idp/oauth/oauth-request.validator.d.ts +8 -0
- package/dist/src/idp/oauth/oauth-request.validator.js +27 -0
- package/dist/src/idp/utils/is-authentication-error.d.ts +1 -0
- package/dist/src/idp/utils/is-authentication-error.js +9 -0
- package/dist/src/idp/utils/role-hierarchy.d.ts +3 -0
- package/dist/src/idp/utils/role-hierarchy.js +14 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +3 -1
- package/dist/src/migrations/1788048000000-create-connector-definition-tables.d.ts +6 -0
- package/dist/src/migrations/1788048000000-create-connector-definition-tables.js +116 -0
- package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.d.ts +8 -0
- package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.js +30 -0
- package/dist/src/migrations/1790247861000-add-icon-to-data-mart.d.ts +8 -0
- package/dist/src/migrations/1790247861000-add-icon-to-data-mart.js +31 -0
- package/package.json +10 -6
- package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.d.ts +0 -14
- package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.js +0 -84
- package/dist/src/ee/mcp/auth/mcp-auth.guard.d.ts +0 -14
- package/dist/src/ee/mcp/auth/mcp-auth.guard.js +0 -99
- package/dist/src/ee/mcp/controllers/mcp-transport.controller.d.ts +0 -17
- package/dist/src/ee/mcp/controllers/mcp-transport.controller.js +0 -134
- package/dist/src/ee/mcp/sdk/mcp-streamable-http-transport.handler.d.ts +0 -16
- package/dist/src/ee/mcp/sdk/mcp-streamable-http-transport.handler.js +0 -133
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { BusinessViolationException } from './business-violation.exception';
|
|
2
2
|
export declare class ConcurrencyLimitExceededException extends BusinessViolationException {
|
|
3
|
-
constructor(message: string, errorDetails?: Record<string, unknown
|
|
3
|
+
constructor(message: string, errorDetails?: Record<string, unknown>, code?: string);
|
|
4
4
|
}
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConcurrencyLimitExceededException = void 0;
|
|
4
4
|
const business_violation_exception_1 = require("./business-violation.exception");
|
|
5
5
|
class ConcurrencyLimitExceededException extends business_violation_exception_1.BusinessViolationException {
|
|
6
|
-
constructor(message, errorDetails) {
|
|
7
|
-
super(message, errorDetails);
|
|
6
|
+
constructor(message, errorDetails, code) {
|
|
7
|
+
super(message, errorDetails, code);
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
exports.ConcurrencyLimitExceededException = ConcurrencyLimitExceededException;
|
|
@@ -84,6 +84,20 @@ var COLOR_THEME;
|
|
|
84
84
|
})(COLOR_THEME || (exports.COLOR_THEME = COLOR_THEME = {}));
|
|
85
85
|
let MarkdownParser = class MarkdownParser {
|
|
86
86
|
async parseToHtml(markdown, theme = COLOR_THEME.DYNAMIC) {
|
|
87
|
+
const html = await this.runPipeline(markdown);
|
|
88
|
+
const content = `<div class="markdown-body">${html}</div>`;
|
|
89
|
+
return juice_1.default.inlineContent(content, this.getColorThemeCss(theme), {
|
|
90
|
+
preserveMediaQueries: true,
|
|
91
|
+
applyAttributesTableElements: true,
|
|
92
|
+
applyWidthAttributes: true,
|
|
93
|
+
applyHeightAttributes: true,
|
|
94
|
+
resolveCSSVariables: true,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async parseToFragment(markdown) {
|
|
98
|
+
return this.runPipeline(markdown);
|
|
99
|
+
}
|
|
100
|
+
async runPipeline(markdown) {
|
|
87
101
|
const html = await (0, remark_1.remark)()
|
|
88
102
|
.use(remark_parse_1.default)
|
|
89
103
|
.use(remark_gfm_1.default)
|
|
@@ -93,14 +107,7 @@ let MarkdownParser = class MarkdownParser {
|
|
|
93
107
|
.use(rehype_normalize_table_truncation_notice_plugin_1.rehypeNormalizeTableTruncationNoticeRows)
|
|
94
108
|
.use(rehype_stringify_1.default)
|
|
95
109
|
.process(markdown);
|
|
96
|
-
|
|
97
|
-
return juice_1.default.inlineContent(content, this.getColorThemeCss(theme), {
|
|
98
|
-
preserveMediaQueries: true,
|
|
99
|
-
applyAttributesTableElements: true,
|
|
100
|
-
applyWidthAttributes: true,
|
|
101
|
-
applyHeightAttributes: true,
|
|
102
|
-
resolveCSSVariables: true,
|
|
103
|
-
});
|
|
110
|
+
return String(html);
|
|
104
111
|
}
|
|
105
112
|
getColorThemeCss(theme) {
|
|
106
113
|
let cssVariables;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MaxByteLength = MaxByteLength;
|
|
4
|
+
const class_validator_1 = require("class-validator");
|
|
5
|
+
function MaxByteLength(maxSizeBytes, validationOptions) {
|
|
6
|
+
return function (object, propertyName) {
|
|
7
|
+
(0, class_validator_1.registerDecorator)({
|
|
8
|
+
name: 'maxByteLength',
|
|
9
|
+
target: object.constructor,
|
|
10
|
+
propertyName: propertyName,
|
|
11
|
+
options: validationOptions,
|
|
12
|
+
constraints: [maxSizeBytes],
|
|
13
|
+
validator: {
|
|
14
|
+
validate(value, args) {
|
|
15
|
+
if (typeof value !== 'string') {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
const [maxSize] = args.constraints;
|
|
19
|
+
return Buffer.byteLength(value, 'utf8') <= maxSize;
|
|
20
|
+
},
|
|
21
|
+
defaultMessage(args) {
|
|
22
|
+
const [maxSize] = args.constraints;
|
|
23
|
+
return `${args.property} must be shorter than or equal to ${maxSize} bytes`;
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=max-byte-length.validator.js.map
|
|
@@ -7,6 +7,10 @@ declare const configSchema: z.ZodObject<{
|
|
|
7
7
|
HEADERS_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
|
|
8
8
|
MAX_CONNECTOR_RUNS_PER_PROJECT: z.ZodDefault<z.ZodNumber>;
|
|
9
9
|
MAX_REPORT_RUNS_PER_PROJECT: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
CONNECTOR_SHORT_LINK_DOMAINS: z.ZodOptional<z.ZodString>;
|
|
11
|
+
MAX_CONNECTOR_TESTS_PER_PROJECT: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
12
|
+
MAX_CONNECTOR_TESTS_TOTAL: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
13
|
+
CONNECTOR_RUN_LOG_FLUSH_INTERVAL_MS: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
10
14
|
PLUGIN_HOST_SYNC_MIN_INTERVAL_SEC: z.ZodOptional<z.ZodNumber>;
|
|
11
15
|
PLUGIN_HOST_REMOTE_PROBE_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
|
|
12
16
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
@@ -17,6 +21,10 @@ declare const configSchema: z.ZodObject<{
|
|
|
17
21
|
HEADERS_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
|
|
18
22
|
MAX_CONNECTOR_RUNS_PER_PROJECT: z.ZodDefault<z.ZodNumber>;
|
|
19
23
|
MAX_REPORT_RUNS_PER_PROJECT: z.ZodDefault<z.ZodNumber>;
|
|
24
|
+
CONNECTOR_SHORT_LINK_DOMAINS: z.ZodOptional<z.ZodString>;
|
|
25
|
+
MAX_CONNECTOR_TESTS_PER_PROJECT: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
26
|
+
MAX_CONNECTOR_TESTS_TOTAL: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
27
|
+
CONNECTOR_RUN_LOG_FLUSH_INTERVAL_MS: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
20
28
|
PLUGIN_HOST_SYNC_MIN_INTERVAL_SEC: z.ZodOptional<z.ZodNumber>;
|
|
21
29
|
PLUGIN_HOST_REMOTE_PROBE_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
|
|
22
30
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
@@ -27,6 +35,10 @@ declare const configSchema: z.ZodObject<{
|
|
|
27
35
|
HEADERS_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
|
|
28
36
|
MAX_CONNECTOR_RUNS_PER_PROJECT: z.ZodDefault<z.ZodNumber>;
|
|
29
37
|
MAX_REPORT_RUNS_PER_PROJECT: z.ZodDefault<z.ZodNumber>;
|
|
38
|
+
CONNECTOR_SHORT_LINK_DOMAINS: z.ZodOptional<z.ZodString>;
|
|
39
|
+
MAX_CONNECTOR_TESTS_PER_PROJECT: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
40
|
+
MAX_CONNECTOR_TESTS_TOTAL: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
41
|
+
CONNECTOR_RUN_LOG_FLUSH_INTERVAL_MS: z.ZodEffects<z.ZodDefault<z.ZodNumber>, number, unknown>;
|
|
30
42
|
PLUGIN_HOST_SYNC_MIN_INTERVAL_SEC: z.ZodOptional<z.ZodNumber>;
|
|
31
43
|
PLUGIN_HOST_REMOTE_PROBE_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
|
|
32
44
|
}, z.ZodTypeAny, "passthrough">>;
|
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validateConfig = validateConfig;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const constants_1 = require("./constants");
|
|
6
|
+
function blankAsUnset(schema) {
|
|
7
|
+
return zod_1.z.preprocess(value => (typeof value === 'string' && value.trim() === '' ? undefined : value), schema);
|
|
8
|
+
}
|
|
6
9
|
const configSchema = zod_1.z
|
|
7
10
|
.object({
|
|
8
11
|
SCHEDULER_EXECUTION_ENABLED: zod_1.z
|
|
@@ -17,6 +20,10 @@ const configSchema = zod_1.z
|
|
|
17
20
|
HEADERS_TIMEOUT_MS: zod_1.z.coerce.number().default(constants_1.DEFAULT_HEADERS_TIMEOUT_MS),
|
|
18
21
|
MAX_CONNECTOR_RUNS_PER_PROJECT: zod_1.z.coerce.number().int().min(1).max(1000).default(3),
|
|
19
22
|
MAX_REPORT_RUNS_PER_PROJECT: zod_1.z.coerce.number().int().min(1).max(1000).default(1000),
|
|
23
|
+
CONNECTOR_SHORT_LINK_DOMAINS: zod_1.z.string().trim().optional(),
|
|
24
|
+
MAX_CONNECTOR_TESTS_PER_PROJECT: blankAsUnset(zod_1.z.coerce.number().int().min(1).max(1000).default(3)),
|
|
25
|
+
MAX_CONNECTOR_TESTS_TOTAL: blankAsUnset(zod_1.z.coerce.number().int().min(1).max(1000).default(10)),
|
|
26
|
+
CONNECTOR_RUN_LOG_FLUSH_INTERVAL_MS: blankAsUnset(zod_1.z.coerce.number().int().min(0).max(3_600_000).default(2_000)),
|
|
20
27
|
PLUGIN_HOST_SYNC_MIN_INTERVAL_SEC: zod_1.z.coerce.number().int().min(0).max(86_400).optional(),
|
|
21
28
|
PLUGIN_HOST_REMOTE_PROBE_TIMEOUT_MS: zod_1.z.coerce
|
|
22
29
|
.number()
|
|
@@ -453,6 +453,7 @@ export declare const QueryPlanSchema: z.ZodObject<{
|
|
|
453
453
|
}>>>;
|
|
454
454
|
}, "strip", z.ZodTypeAny, {
|
|
455
455
|
dimensions: string[];
|
|
456
|
+
metrics: string[];
|
|
456
457
|
tables: {
|
|
457
458
|
fullyQualifiedName: string;
|
|
458
459
|
role?: string | null | undefined;
|
|
@@ -463,7 +464,6 @@ export declare const QueryPlanSchema: z.ZodObject<{
|
|
|
463
464
|
alias: string;
|
|
464
465
|
sourceColumn: string;
|
|
465
466
|
}[];
|
|
466
|
-
metrics: string[];
|
|
467
467
|
metricSpecs: {
|
|
468
468
|
name: string;
|
|
469
469
|
required: boolean;
|
|
@@ -529,6 +529,7 @@ export declare const QueryPlanSchema: z.ZodObject<{
|
|
|
529
529
|
required?: boolean | undefined;
|
|
530
530
|
}[];
|
|
531
531
|
dimensions?: string[] | undefined;
|
|
532
|
+
metrics?: string[] | undefined;
|
|
532
533
|
tables?: {
|
|
533
534
|
fullyQualifiedName: string;
|
|
534
535
|
role?: string | null | undefined;
|
|
@@ -540,7 +541,6 @@ export declare const QueryPlanSchema: z.ZodObject<{
|
|
|
540
541
|
sourceColumn: string;
|
|
541
542
|
required?: boolean | undefined;
|
|
542
543
|
}[] | undefined;
|
|
543
|
-
metrics?: string[] | undefined;
|
|
544
544
|
dateField?: string | null | undefined;
|
|
545
545
|
dateFilterDescription?: string | null | undefined;
|
|
546
546
|
whereConditions?: string[] | undefined;
|
|
@@ -739,6 +739,7 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
739
739
|
}>>>;
|
|
740
740
|
}, "strip", z.ZodTypeAny, {
|
|
741
741
|
dimensions: string[];
|
|
742
|
+
metrics: string[];
|
|
742
743
|
tables: {
|
|
743
744
|
fullyQualifiedName: string;
|
|
744
745
|
role?: string | null | undefined;
|
|
@@ -749,7 +750,6 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
749
750
|
alias: string;
|
|
750
751
|
sourceColumn: string;
|
|
751
752
|
}[];
|
|
752
|
-
metrics: string[];
|
|
753
753
|
metricSpecs: {
|
|
754
754
|
name: string;
|
|
755
755
|
required: boolean;
|
|
@@ -815,6 +815,7 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
815
815
|
required?: boolean | undefined;
|
|
816
816
|
}[];
|
|
817
817
|
dimensions?: string[] | undefined;
|
|
818
|
+
metrics?: string[] | undefined;
|
|
818
819
|
tables?: {
|
|
819
820
|
fullyQualifiedName: string;
|
|
820
821
|
role?: string | null | undefined;
|
|
@@ -826,7 +827,6 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
826
827
|
sourceColumn: string;
|
|
827
828
|
required?: boolean | undefined;
|
|
828
829
|
}[] | undefined;
|
|
829
|
-
metrics?: string[] | undefined;
|
|
830
830
|
dateField?: string | null | undefined;
|
|
831
831
|
dateFilterDescription?: string | null | undefined;
|
|
832
832
|
whereConditions?: string[] | undefined;
|
|
@@ -855,6 +855,7 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
855
855
|
}, "strip", z.ZodTypeAny, {
|
|
856
856
|
plan: {
|
|
857
857
|
dimensions: string[];
|
|
858
|
+
metrics: string[];
|
|
858
859
|
tables: {
|
|
859
860
|
fullyQualifiedName: string;
|
|
860
861
|
role?: string | null | undefined;
|
|
@@ -865,7 +866,6 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
865
866
|
alias: string;
|
|
866
867
|
sourceColumn: string;
|
|
867
868
|
}[];
|
|
868
|
-
metrics: string[];
|
|
869
869
|
metricSpecs: {
|
|
870
870
|
name: string;
|
|
871
871
|
required: boolean;
|
|
@@ -935,6 +935,7 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
935
935
|
required?: boolean | undefined;
|
|
936
936
|
}[];
|
|
937
937
|
dimensions?: string[] | undefined;
|
|
938
|
+
metrics?: string[] | undefined;
|
|
938
939
|
tables?: {
|
|
939
940
|
fullyQualifiedName: string;
|
|
940
941
|
role?: string | null | undefined;
|
|
@@ -946,7 +947,6 @@ export declare const PlanModelJsonSchema: z.ZodObject<{
|
|
|
946
947
|
sourceColumn: string;
|
|
947
948
|
required?: boolean | undefined;
|
|
948
949
|
}[] | undefined;
|
|
949
|
-
metrics?: string[] | undefined;
|
|
950
950
|
dateField?: string | null | undefined;
|
|
951
951
|
dateFilterDescription?: string | null | undefined;
|
|
952
952
|
whereConditions?: string[] | undefined;
|
|
@@ -23,6 +23,7 @@ const formula_analyzer_1 = require("./formula-analyzer");
|
|
|
23
23
|
const formula_level_1 = require("./formula-level");
|
|
24
24
|
const formula_function_dialect_1 = require("./formula-function-dialect");
|
|
25
25
|
const formula_violations_1 = require("./formula-violations");
|
|
26
|
+
const join_grain_1 = require("./join-grain");
|
|
26
27
|
const unique_count_sources_1 = require("../dto/schemas/unique-count-sources");
|
|
27
28
|
const sql_token_scanner_1 = require("./sql-token-scanner");
|
|
28
29
|
const formula_reference_1 = require("./formula-reference");
|
|
@@ -63,26 +64,6 @@ function dryRunBatches(fields) {
|
|
|
63
64
|
return [fields];
|
|
64
65
|
return [aggregate, rowLevel];
|
|
65
66
|
}
|
|
66
|
-
function formulaDependencyGraph(fields, byName) {
|
|
67
|
-
const dependenciesOf = (field) => {
|
|
68
|
-
let references;
|
|
69
|
-
try {
|
|
70
|
-
references = (0, formula_live_reference_1.liveFormulaReferences)(field.calculated.formula);
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
return [];
|
|
74
|
-
}
|
|
75
|
-
const named = references
|
|
76
|
-
.filter(ref => !ref.path)
|
|
77
|
-
.map(ref => ref.field)
|
|
78
|
-
.filter(name => {
|
|
79
|
-
const found = byName.get(name);
|
|
80
|
-
return found !== undefined && (0, calculated_field_utils_1.isCalculatedField)(found);
|
|
81
|
-
});
|
|
82
|
-
return [...new Set(named)];
|
|
83
|
-
};
|
|
84
|
-
return new Map(fields.map(field => [field.name, dependenciesOf(field)]));
|
|
85
|
-
}
|
|
86
67
|
function formulaCycleViolations(cycles) {
|
|
87
68
|
return cycles.flatMap(chain => {
|
|
88
69
|
const members = [...new Set(chain)];
|
|
@@ -114,9 +95,13 @@ let CalculatedFieldValidatorService = class CalculatedFieldValidatorService {
|
|
|
114
95
|
const byName = new Map((0, data_mart_schema_utils_1.collectFormulaReferenceableFields)(schema.fields)
|
|
115
96
|
.filter(d => !(0, calculated_field_utils_1.isCalculatedField)(d.field) || topLevelCalculated.has(d.field))
|
|
116
97
|
.map(d => [d.name, d.field]));
|
|
117
|
-
const joinTreeRead = await this.resolveJoinedReferences(calculated, joinTree);
|
|
98
|
+
const joinTreeRead = await this.resolveJoinedReferences(calculated, joinTree, schema.fields);
|
|
118
99
|
const joinedIndex = joinTreeRead?.index;
|
|
119
|
-
const
|
|
100
|
+
const grainSources = (0, join_grain_1.buildJoinGrainSources)(joinTreeRead?.schema.availableSources ?? [], {
|
|
101
|
+
kind: 'editor',
|
|
102
|
+
});
|
|
103
|
+
const dependencies = (0, calculated_field_utils_1.formulaDependencyGraph)(calculated, byName);
|
|
104
|
+
const walk = (0, formula_reference_1.walkFormulaDependencies)(dependencies);
|
|
120
105
|
const errors = formulaCycleViolations(walk.cycles);
|
|
121
106
|
const warnings = [];
|
|
122
107
|
const analysed = [];
|
|
@@ -151,13 +136,20 @@ let CalculatedFieldValidatorService = class CalculatedFieldValidatorService {
|
|
|
151
136
|
dialect,
|
|
152
137
|
knownField,
|
|
153
138
|
});
|
|
139
|
+
const fieldErrors = [
|
|
140
|
+
...joinedViolations.values(),
|
|
141
|
+
...[...mainUniqueCountRefs].map(ref => formula_violations_1.FormulaViolations.mainUniqueCountReference(field.name, ref)),
|
|
142
|
+
...analysis.errors,
|
|
143
|
+
];
|
|
144
|
+
const grain = (0, join_grain_1.checkJoinGrain)({
|
|
145
|
+
fieldName: field.name,
|
|
146
|
+
aggregateCalls: analysis.aggregateCalls,
|
|
147
|
+
sources: grainSources,
|
|
148
|
+
});
|
|
149
|
+
const fieldWarnings = [...analysis.warnings, ...grain.warnings];
|
|
154
150
|
analyses.set(field, {
|
|
155
|
-
errors:
|
|
156
|
-
|
|
157
|
-
...[...mainUniqueCountRefs].map(ref => formula_violations_1.FormulaViolations.mainUniqueCountReference(field.name, ref)),
|
|
158
|
-
...analysis.errors,
|
|
159
|
-
],
|
|
160
|
-
warnings: analysis.warnings,
|
|
151
|
+
errors: fieldErrors,
|
|
152
|
+
warnings: fieldWarnings,
|
|
161
153
|
level: analysis.level,
|
|
162
154
|
});
|
|
163
155
|
derivedLevels.set(field.name, analysis.level);
|
|
@@ -206,12 +198,12 @@ let CalculatedFieldValidatorService = class CalculatedFieldValidatorService {
|
|
|
206
198
|
}
|
|
207
199
|
return { errors, warnings };
|
|
208
200
|
}
|
|
209
|
-
async resolveJoinedReferences(fields, joinTree) {
|
|
201
|
+
async resolveJoinedReferences(fields, joinTree, schemaFields) {
|
|
210
202
|
if (!joinTree?.accessor.userId)
|
|
211
203
|
return undefined;
|
|
212
204
|
if (!fields.some(f => (0, formula_live_reference_1.hasLiveJoinedReference)(f.calculated.formula)))
|
|
213
205
|
return undefined;
|
|
214
|
-
const blendable = await this.blendableSchemaService.computeBlendableSchema(joinTree.dataMartId, joinTree.projectId, joinTree.accessor);
|
|
206
|
+
const blendable = await this.blendableSchemaService.computeBlendableSchema(joinTree.dataMartId, joinTree.projectId, joinTree.accessor, { unsavedMainSchemaFields: schemaFields });
|
|
215
207
|
return { schema: blendable, index: (0, calculated_field_utils_1.buildJoinedReferenceIndex)(blendable) };
|
|
216
208
|
}
|
|
217
209
|
resolveJoinedReference(metricName, path, refField, index, violations) {
|
|
@@ -49,3 +49,4 @@ export declare function joinedCalculatedFieldRefusals(blendedFields: readonly {
|
|
|
49
49
|
isCalculated?: boolean;
|
|
50
50
|
sourceDataMartTitle?: string;
|
|
51
51
|
}[], referencedColumns: Iterable<string>, ownColumnNames: ReadonlySet<string>): JoinedCalculatedFieldRefusal[];
|
|
52
|
+
export declare function formulaDependencyGraph(fields: readonly CalculatedSchemaField[], byName: ReadonlyMap<string, DataMartSchemaField>): ReadonlyMap<string, readonly string[]>;
|
|
@@ -17,6 +17,7 @@ exports.brokenReferencesOf = brokenReferencesOf;
|
|
|
17
17
|
exports.buildJoinedReferenceIndex = buildJoinedReferenceIndex;
|
|
18
18
|
exports.brokenJoinedReferencesOf = brokenJoinedReferencesOf;
|
|
19
19
|
exports.joinedCalculatedFieldRefusals = joinedCalculatedFieldRefusals;
|
|
20
|
+
exports.formulaDependencyGraph = formulaDependencyGraph;
|
|
20
21
|
const formula_live_reference_1 = require("./formula-live-reference");
|
|
21
22
|
const formula_level_1 = require("./formula-level");
|
|
22
23
|
const formula_function_dialect_1 = require("./formula-function-dialect");
|
|
@@ -275,4 +276,24 @@ function joinedCalculatedFieldRefusals(blendedFields, referencedColumns, ownColu
|
|
|
275
276
|
}
|
|
276
277
|
return refusals;
|
|
277
278
|
}
|
|
279
|
+
function formulaDependencyGraph(fields, byName) {
|
|
280
|
+
const dependenciesOf = (field) => {
|
|
281
|
+
let references;
|
|
282
|
+
try {
|
|
283
|
+
references = (0, formula_live_reference_1.liveFormulaReferences)(field.calculated.formula);
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
return [];
|
|
287
|
+
}
|
|
288
|
+
const named = references
|
|
289
|
+
.filter(ref => !ref.path)
|
|
290
|
+
.map(ref => ref.field)
|
|
291
|
+
.filter(name => {
|
|
292
|
+
const found = byName.get(name);
|
|
293
|
+
return found !== undefined && isCalculatedField(found);
|
|
294
|
+
});
|
|
295
|
+
return [...new Set(named)];
|
|
296
|
+
};
|
|
297
|
+
return new Map(fields.map(field => [field.name, dependenciesOf(field)]));
|
|
298
|
+
}
|
|
278
299
|
//# sourceMappingURL=calculated-field.utils.js.map
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.analyzeFormula = analyzeFormula;
|
|
4
4
|
const formula_reference_1 = require("./formula-reference");
|
|
5
|
+
const set_quantifier_1 = require("./set-quantifier");
|
|
5
6
|
const sql_token_scanner_1 = require("./sql-token-scanner");
|
|
6
7
|
const sql_function_calls_1 = require("./sql-function-calls");
|
|
7
8
|
const formula_violations_1 = require("./formula-violations");
|
|
@@ -90,6 +91,7 @@ function analyzeFormula(input) {
|
|
|
90
91
|
aggregateCalls.push({
|
|
91
92
|
name: call.name,
|
|
92
93
|
owner: inside[0].path,
|
|
94
|
+
distinct: (0, set_quantifier_1.readSetQuantifier)(tokens, call).distinct,
|
|
93
95
|
references: inside,
|
|
94
96
|
nameStart: call.nameStart,
|
|
95
97
|
});
|
|
@@ -4,6 +4,9 @@ export interface FormulaViolation {
|
|
|
4
4
|
field: string;
|
|
5
5
|
subject?: string;
|
|
6
6
|
}
|
|
7
|
+
export declare const UNNAMED_JOINED_SOURCE = "a joined Data Mart";
|
|
8
|
+
export type MultipliedRowsOf = 'this Data Mart' | 'its parent';
|
|
9
|
+
export type UniqueCountOffer = 'none' | 'report' | 'query';
|
|
7
10
|
export declare const FormulaViolations: {
|
|
8
11
|
levelMixing: (field: string, column: string) => FormulaViolation;
|
|
9
12
|
joinedReferenceOutsideAggregate: (field: string, ref: string) => FormulaViolation;
|
|
@@ -35,6 +38,10 @@ export declare const FormulaViolations: {
|
|
|
35
38
|
tagInStringLiteral: (field: string) => FormulaViolation;
|
|
36
39
|
syntax: (field: string, detail: string) => FormulaViolation;
|
|
37
40
|
unguardedDivision: (field: string, denominator?: string) => FormulaViolation;
|
|
41
|
+
joinedMeasureMultiplied: (field: string, ref: string | undefined, source: string, key: readonly string[] | undefined, multipliedBy?: string, rowsOf?: MultipliedRowsOf, uniqueCount?: UniqueCountOffer) => FormulaViolation;
|
|
42
|
+
joinedMeasureGrainUnproven: (field: string, ref: string | undefined, source: string, unprovenMart: string | undefined, collapses?: boolean, uniqueCount?: UniqueCountOffer) => FormulaViolation;
|
|
43
|
+
joinedMeasureCollapsed: (field: string, ref: string | undefined, source: string, collapsedBy?: string, uniqueCount?: UniqueCountOffer) => FormulaViolation;
|
|
44
|
+
joinedRowsExcluded: (field: string, sources: readonly string[]) => FormulaViolation;
|
|
38
45
|
warehouseRejected: (field: string, detail?: string) => FormulaViolation;
|
|
39
46
|
warehouseRejectedAsSet: (field: string, detail?: string) => FormulaViolation;
|
|
40
47
|
otherFieldErrorsTruncated: (field: string, omitted: number) => FormulaViolation;
|
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FormulaViolations = void 0;
|
|
3
|
+
exports.FormulaViolations = exports.UNNAMED_JOINED_SOURCE = void 0;
|
|
4
|
+
exports.UNNAMED_JOINED_SOURCE = 'a joined Data Mart';
|
|
5
|
+
const GENERIC_MART_PHRASES = new Set(['this Data Mart', exports.UNNAMED_JOINED_SOURCE]);
|
|
6
|
+
const martName = (name) => (GENERIC_MART_PHRASES.has(name) ? name : `\`${name}\``);
|
|
7
|
+
const otherMartName = (name, alreadyNamed) => name === exports.UNNAMED_JOINED_SOURCE && alreadyNamed === exports.UNNAMED_JOINED_SOURCE
|
|
8
|
+
? 'another joined Data Mart'
|
|
9
|
+
: martName(name);
|
|
10
|
+
const withoutBackticks = (name) => name.split('`').join('');
|
|
11
|
+
const listed = (names) => names.length < 2
|
|
12
|
+
? (names[0] ?? '')
|
|
13
|
+
: `${names.slice(0, -1).join(', ')} and ${names[names.length - 1]}`;
|
|
14
|
+
const countedFrom = (ref, source) => ref === undefined
|
|
15
|
+
? `A COUNT here reads ${martName(source)}`
|
|
16
|
+
: `\`${ref}\` comes from ${martName(source)}`;
|
|
17
|
+
const joinedOn = (source, key, via) => {
|
|
18
|
+
const through = via === undefined ? undefined : `reached through ${otherMartName(via, source)}`;
|
|
19
|
+
if (key === undefined || key.length === 0) {
|
|
20
|
+
return through === undefined ? 'whose join' : `${through}, whose join`;
|
|
21
|
+
}
|
|
22
|
+
const spelled = `joined on ${key.map(k => `\`${k}\``).join(' + ')}`;
|
|
23
|
+
return `${through === undefined ? spelled : `${through} ${spelled}`}, which`;
|
|
24
|
+
};
|
|
25
|
+
const UNIQUE_COUNT_OFFER_CLAUSE = {
|
|
26
|
+
none: '',
|
|
27
|
+
report: ', or pick its Unique Count measure in a report',
|
|
28
|
+
query: ", or select that Data Mart's Unique Count field instead",
|
|
29
|
+
};
|
|
30
|
+
const distinctAdvice = (uniqueCount) => `Use COUNT(DISTINCT ...) on a column that identifies them${UNIQUE_COUNT_OFFER_CLAUSE[uniqueCount]}.`;
|
|
4
31
|
exports.FormulaViolations = {
|
|
5
32
|
levelMixing: (field, column) => ({
|
|
6
33
|
code: 'FORMULA_LEVEL_MIXING',
|
|
@@ -212,6 +239,60 @@ exports.FormulaViolations = {
|
|
|
212
239
|
`NULLIF(it, 0), which turns the zero into an empty cell. Advice only: this does not block ` +
|
|
213
240
|
`the save.`,
|
|
214
241
|
}),
|
|
242
|
+
joinedMeasureMultiplied: (field, ref, source, key, multipliedBy, rowsOf = 'this Data Mart', uniqueCount = 'none') => ({
|
|
243
|
+
code: 'FORMULA_JOINED_MEASURE_MULTIPLIED',
|
|
244
|
+
field,
|
|
245
|
+
...(ref === undefined ? {} : { subject: ref }),
|
|
246
|
+
message: `${countedFrom(ref, source)}, ${joinedOn(source, key, multipliedBy)} can match several ` +
|
|
247
|
+
`rows of ${rowsOf} — so COUNT counts matches, not that Data Mart's rows. ` +
|
|
248
|
+
distinctAdvice(uniqueCount),
|
|
249
|
+
}),
|
|
250
|
+
joinedMeasureGrainUnproven: (field, ref, source, unprovenMart, collapses = false, uniqueCount = 'none') => ({
|
|
251
|
+
code: 'FORMULA_JOINED_MEASURE_GRAIN_UNPROVEN',
|
|
252
|
+
field,
|
|
253
|
+
...(ref === undefined ? {} : { subject: ref }),
|
|
254
|
+
message: (unprovenMart === undefined
|
|
255
|
+
? `${countedFrom(ref, source)}, and it can't be checked whether the join matches one row ` +
|
|
256
|
+
`or several — if several, COUNT is inflated.`
|
|
257
|
+
: `${countedFrom(ref, source)}, and ${otherMartName(unprovenMart, source)} has no ` +
|
|
258
|
+
`Primary Key, so it can't be checked whether the join matches one row or several — if ` +
|
|
259
|
+
`several, COUNT is inflated. Set a Primary Key to find out.`) +
|
|
260
|
+
(collapses
|
|
261
|
+
? ` Several rows of ${martName(source)} can also share one join key value, so COUNT can ` +
|
|
262
|
+
`come out lower too. ${distinctAdvice(uniqueCount)}`
|
|
263
|
+
: ''),
|
|
264
|
+
}),
|
|
265
|
+
joinedMeasureCollapsed: (field, ref, source, collapsedBy, uniqueCount = 'none') => ({
|
|
266
|
+
code: 'FORMULA_JOINED_MEASURE_COLLAPSED',
|
|
267
|
+
field,
|
|
268
|
+
...(ref === undefined ? {} : { subject: ref }),
|
|
269
|
+
message: `${countedFrom(ref, source)}, ` +
|
|
270
|
+
(collapsedBy === undefined ? '' : `reached through ${otherMartName(collapsedBy, source)}, `) +
|
|
271
|
+
`where several rows can share one join key value — so COUNT counts the rows of this Data ` +
|
|
272
|
+
`Mart they match, which can be fewer than that Data Mart's own rows. ` +
|
|
273
|
+
distinctAdvice(uniqueCount),
|
|
274
|
+
}),
|
|
275
|
+
joinedRowsExcluded: (field, sources) => {
|
|
276
|
+
const named = [
|
|
277
|
+
...new Set(sources.filter(s => s !== exports.UNNAMED_JOINED_SOURCE).map(withoutBackticks)),
|
|
278
|
+
];
|
|
279
|
+
const unnamed = sources.filter(s => s === exports.UNNAMED_JOINED_SOURCE).length;
|
|
280
|
+
const anonymous = unnamed === 1
|
|
281
|
+
? named.length === 0
|
|
282
|
+
? exports.UNNAMED_JOINED_SOURCE
|
|
283
|
+
: 'another joined Data Mart'
|
|
284
|
+
: `${unnamed} ${named.length === 0 ? '' : 'other '}joined Data Marts`;
|
|
285
|
+
const names = unnamed === 0 ? named : [...named, anonymous];
|
|
286
|
+
return {
|
|
287
|
+
code: 'FORMULA_JOINED_ROWS_EXCLUDED',
|
|
288
|
+
field,
|
|
289
|
+
message: named.length + unnamed === 1
|
|
290
|
+
? `This formula reads ${listed(names)} through a join. Its rows that match nothing ` +
|
|
291
|
+
`here are dropped, so the result may not match that Data Mart's own totals.`
|
|
292
|
+
: `This formula reads ${listed(names)} through joins. Their rows that match nothing ` +
|
|
293
|
+
`here are dropped, so the result may not match those Data Marts' own totals.`,
|
|
294
|
+
};
|
|
295
|
+
},
|
|
215
296
|
warehouseRejected: (field, detail) => ({
|
|
216
297
|
code: 'FORMULA_WAREHOUSE_REJECTED',
|
|
217
298
|
field,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AvailableSourceDto, BlendedFieldDto, MainGrainCollapse, MainGrainMultiplication } from '../dto/domain/blendable-schema.dto';
|
|
2
|
+
import { AggregateCall } from './formula-analyzer';
|
|
3
|
+
import { FormulaViolation } from './formula-violations';
|
|
4
|
+
export interface JoinGrainSource {
|
|
5
|
+
multiplication: MainGrainMultiplication;
|
|
6
|
+
keyFields: readonly string[];
|
|
7
|
+
collapse: MainGrainCollapse;
|
|
8
|
+
title: string;
|
|
9
|
+
titleHidden: boolean;
|
|
10
|
+
uniqueCountAvailable: boolean;
|
|
11
|
+
reader: JoinGrainAudience['kind'];
|
|
12
|
+
fieldNames?: ReadonlyMap<string, string>;
|
|
13
|
+
unprovenAt?: string;
|
|
14
|
+
multipliedAt?: string;
|
|
15
|
+
collapsedAt?: string;
|
|
16
|
+
}
|
|
17
|
+
export type JoinGrainAudience = {
|
|
18
|
+
kind: 'editor';
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'agent';
|
|
21
|
+
blendedFields: readonly BlendedFieldDto[];
|
|
22
|
+
};
|
|
23
|
+
export declare function buildJoinGrainSources(sources: readonly AvailableSourceDto[], audience: JoinGrainAudience): Map<string, JoinGrainSource>;
|
|
24
|
+
export interface JoinGrainInput {
|
|
25
|
+
fieldName: string;
|
|
26
|
+
aggregateCalls: readonly AggregateCall[];
|
|
27
|
+
sources: ReadonlyMap<string, JoinGrainSource>;
|
|
28
|
+
}
|
|
29
|
+
export declare function checkJoinGrain(input: JoinGrainInput): {
|
|
30
|
+
warnings: FormulaViolation[];
|
|
31
|
+
};
|
|
32
|
+
export declare function withoutUntouchedJoinAdvisories(warnings: readonly FormulaViolation[], touchedFields: ReadonlySet<string>, primaryKeyChanged: boolean): FormulaViolation[];
|