@redocly/redoc 0.133.0-next.0 → 0.133.0-next.2
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/CHANGELOG.md +71 -2
- package/dist/cli/develop.js +1 -1
- package/dist/constants/l10n/langs/ar.js +1 -1
- package/dist/constants/l10n/langs/de.js +1 -1
- package/dist/constants/l10n/langs/en.js +1 -1
- package/dist/constants/l10n/langs/es.js +1 -1
- package/dist/constants/l10n/langs/fr.js +1 -1
- package/dist/constants/l10n/langs/hi.js +1 -1
- package/dist/constants/l10n/langs/it.js +1 -1
- package/dist/constants/l10n/langs/ja.js +1 -1
- package/dist/constants/l10n/langs/ko.js +1 -1
- package/dist/constants/l10n/langs/pl.js +1 -1
- package/dist/constants/l10n/langs/pt-BR.js +1 -1
- package/dist/constants/l10n/langs/pt.js +1 -1
- package/dist/constants/l10n/langs/ru.js +1 -1
- package/dist/constants/l10n/langs/uk.js +1 -1
- package/dist/constants/l10n/langs/zh.js +1 -1
- package/dist/server/api-routes/helpers/enhance-context.js +1 -1
- package/dist/server/constants/plugins/catalog-entities.d.ts +2 -0
- package/dist/server/constants/plugins/catalog-entities.js +1 -1
- package/dist/server/esbuild/esbuild.js +3 -3
- package/dist/server/esbuild/generate.d.ts +3 -0
- package/dist/server/esbuild/generate.js +8 -8
- package/dist/server/esbuild/plugins/api-request-handlers-resolver.js +1 -1
- package/dist/server/persistence/cache/mappers/create-cache-db-record.d.ts +1 -1
- package/dist/server/persistence/cache/mappers/create-cache-read-model.d.ts +1 -1
- package/dist/server/persistence/cache/repositories/{cache-local-repository.d.ts → cache-repository.d.ts} +3 -3
- package/dist/server/persistence/cache/repositories/cache-repository.js +1 -0
- package/dist/server/persistence/cache/services/cache-service.d.ts +2 -2
- package/dist/server/persistence/cache/services/cache-service.js +1 -1
- package/dist/server/persistence/file-hashes/mappers/create-file-hash-db-record.d.ts +1 -1
- package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.d.ts +2 -2
- package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.js +1 -1
- package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-read-repository.d.ts → file-hashes-read-repository.d.ts} +3 -7
- package/dist/server/persistence/file-hashes/repositories/file-hashes-read-repository.js +1 -0
- package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-repository.d.ts → file-hashes-repository.d.ts} +4 -3
- package/dist/server/persistence/file-hashes/repositories/file-hashes-repository.js +1 -0
- package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-write-repository.d.ts → file-hashes-write-repository.d.ts} +2 -2
- package/dist/server/persistence/file-hashes/repositories/file-hashes-write-repository.js +1 -0
- package/dist/server/persistence/file-hashes/services/file-hashes-service.d.ts +3 -5
- package/dist/server/persistence/file-hashes/services/file-hashes-service.js +1 -1
- package/dist/server/persistence/kv/mappers/create-kv-db-record.d.ts +1 -1
- package/dist/server/persistence/kv/mappers/create-kv-list-entry.d.ts +1 -1
- package/dist/server/persistence/kv/mappers/create-kv-value.d.ts +1 -1
- package/dist/server/persistence/kv/repositories/{kv-remote-repository.d.ts → kv-repository.d.ts} +3 -3
- package/dist/server/persistence/kv/repositories/kv-repository.js +2 -0
- package/dist/server/persistence/kv/services/kv-service.d.ts +2 -2
- package/dist/server/persistence/kv/services/kv-service.js +1 -1
- package/dist/server/plugins/api-functions/index.js +1 -1
- package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.d.ts +6 -0
- package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.js +12 -0
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +29 -66
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
- package/dist/server/plugins/catalog-entities/database/consts.d.ts +45 -0
- package/dist/server/plugins/catalog-entities/database/consts.js +1 -0
- package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.d.ts +1 -2
- package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.d.ts +1 -3
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-dto.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-file-schema.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.d.ts +3 -3
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-bff-repository.d.ts → bffEntities/bff-entities-read-repository.d.ts} +4 -4
- package/dist/server/plugins/catalog-entities/database/repositories/bffEntities/bff-entities-read-repository.js +131 -0
- package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.d.ts +26 -0
- package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts +8 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.js +82 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +7 -7
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.d.ts +27 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.d.ts +27 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.d.ts +12 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-relations-repository.d.ts → relations/relations-read-repository.d.ts} +7 -4
- package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-read-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.d.ts +28 -0
- package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/types.d.ts +39 -0
- package/dist/server/plugins/catalog-entities/database/repositories/types.js +0 -0
- package/dist/server/plugins/catalog-entities/database/types.d.ts +26 -0
- package/dist/server/plugins/catalog-entities/database/types.js +0 -0
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
- package/dist/server/plugins/catalog-entities/plugin.js +1 -1
- package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +38 -36
- package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
- package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +1 -3
- package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +3 -1
- package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.d.ts +15 -0
- package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/hash-manager.d.ts +1 -0
- package/dist/server/plugins/catalog-entities/utils/hash-manager.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.d.ts +18 -0
- package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.js +1 -0
- package/dist/server/plugins/dev-onboarding/api/adapters/apigee/adapter.js +3 -3
- package/dist/server/plugins/dev-onboarding/api/routes/index.js +1 -1
- package/dist/server/plugins/dev-onboarding/api/routes/meta.d.ts +4 -0
- package/dist/server/plugins/dev-onboarding/api/routes/meta.js +1 -0
- package/dist/server/plugins/dev-onboarding/api/types.d.ts +1 -0
- package/dist/server/plugins/dev-onboarding/template/App.js +5 -5
- package/dist/server/plugins/dev-onboarding/template/CreateAppDialog.js +3 -3
- package/dist/server/plugins/dev-onboarding/template/components/CallbackUrl.d.ts +5 -0
- package/dist/server/plugins/dev-onboarding/template/components/CallbackUrl.js +17 -0
- package/dist/server/plugins/dev-onboarding/template/components/DialogStyledComponents.d.ts +1 -0
- package/dist/server/plugins/dev-onboarding/template/components/DialogStyledComponents.js +6 -2
- package/dist/server/plugins/dev-onboarding/template/components/EditCallbackUrlDialog.d.ts +8 -0
- package/dist/server/plugins/dev-onboarding/template/components/EditCallbackUrlDialog.js +1 -0
- package/dist/server/plugins/entitlements/index.js +1 -1
- package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.d.ts +0 -1
- package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.d.ts +6 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.d.ts +4 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.d.ts +4 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.d.ts +4 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/helpers/load-api-description.d.ts +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/helpers/load-api-description.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +23 -5
- package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.d.ts +5 -1
- package/dist/server/plugins/mcp/docs-mcp/utils.d.ts +1 -1
- package/dist/server/plugins/mcp/docs-mcp/utils.js +1 -1
- package/dist/server/plugins/mcp/index.js +1 -1
- package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
- package/dist/server/plugins/mcp/types.d.ts +5 -0
- package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +1 -0
- package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
- package/dist/server/plugins/openapi-docs/ast-utils.js +2 -2
- package/dist/server/plugins/scorecards/database/repositories/{local/scorecards-config-local-repository.d.ts → scorecards-config-repository.d.ts} +4 -4
- package/dist/server/plugins/scorecards/database/repositories/scorecards-config-repository.js +1 -0
- package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -1
- package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.js +1 -1
- package/dist/server/providers/database/base-repository.js +2 -2
- package/dist/server/providers/database/client.d.ts +1 -1
- package/dist/server/providers/database/client.js +1 -1
- package/dist/server/providers/database/constants.d.ts +4 -9
- package/dist/server/providers/database/constants.js +1 -1
- package/dist/server/providers/database/copy-migrations.js +1 -1
- package/dist/server/providers/database/database-connection-factory.d.ts +2 -2
- package/dist/server/providers/database/database-connection-factory.js +1 -1
- package/dist/server/providers/database/database-connections-manager.d.ts +3 -8
- package/dist/server/providers/database/database-connections-manager.js +1 -1
- package/dist/server/providers/database/database-preconnect-service.js +1 -1
- package/dist/server/providers/database/databases/sqlite-db/drizzle.config.d.ts +12 -0
- package/dist/server/providers/database/databases/sqlite-db/drizzle.config.js +1 -0
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.d.ts +19 -0
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.js +1 -1
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.d.ts +19 -0
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.js +1 -1
- package/dist/server/providers/database/pagination/limit.d.ts +5 -0
- package/dist/server/providers/database/pagination/limit.js +1 -1
- package/dist/server/providers/database/transient-sqld-error.d.ts +14 -0
- package/dist/server/providers/database/transient-sqld-error.js +1 -0
- package/dist/server/providers/database/types.d.ts +6 -6
- package/dist/server/providers/database/utils/get-first-row.d.ts +19 -0
- package/dist/server/providers/database/utils/get-first-row.js +1 -0
- package/dist/server/store.d.ts +2 -0
- package/dist/server/store.js +1 -1
- package/dist/server/types/plugins/common.d.ts +2 -0
- package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
- package/dist/server/web-server/routes/catalog/catalog.js +1 -1
- package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +0 -147
- package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -1
- package/dist/server/web-server/routes/catalog/helpers/upsert-pages-stats.js +1 -1
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +1 -2
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +1 -2
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +1 -2
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +1 -1
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +1 -1
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +1 -1
- package/dist/server/workers/mcp-tool-worker-pool.d.ts +1 -0
- package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
- package/dist/server/workers/mcp-tool-worker.js +1 -1
- package/dist/server/workers/types.d.ts +5 -1
- package/package.json +16 -16
- package/dist/server/persistence/cache/repositories/cache-local-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/file-hashes-local-read-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/file-hashes-local-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/file-hashes-local-write-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/utils.d.ts +0 -10
- package/dist/server/persistence/file-hashes/repositories/utils.js +0 -1
- package/dist/server/persistence/kv/repositories/kv-remote-repository.js +0 -2
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +0 -123
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +0 -98
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +0 -145
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +0 -100
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +0 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +0 -43
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +0 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +0 -1
- package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +0 -20
- package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +0 -1
- package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +0 -1
- package/dist/server/providers/database/database-initialization-strategy.d.ts +0 -17
- package/dist/server/providers/database/database-initialization-strategy.js +0 -1
- package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.d.ts +0 -11
- package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.js +0 -1
- package/dist/server/providers/database/databases/main-sqlite/drizzle.config.d.ts +0 -10
- package/dist/server/providers/database/databases/main-sqlite/drizzle.config.js +0 -1
- package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.d.ts +0 -14
- package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +0 -1
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.js +0 -0
- /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.js +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.js +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{join as p}from"path";import{REDOCLY_ROUTE_RBAC as
|
|
1
|
+
import{join as p}from"path";import{transformSync as l}from"esbuild";import{REDOCLY_ROUTE_RBAC as d}from"@redocly/config";import{removeTrailingSlash as m}from"../../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as g}from"../../../utils/url/remove-leading-slash.js";import{logger as h}from"../../tools/notifiers/logger.js";import{USER_DEFINED_API_FUNCTIONS_COUNTER_KEY as F}from"../../../server/store.js";import{parseRouteFsPathForHono as A}from"./helpers/parse-route-fs-path-for-hono.js";import{telemetryTraceStep as P}from"../../../cli/telemetry/helpers/trace-step.js";const u="api-functions";async function R(t,n){try{const e=await n.fs.read(t);return l(e,{loader:t.endsWith(".js")?"js":"ts"}),!0}catch(e){const r=e instanceof Error?e.message:String(e);return h.warn(`Skipping API function ${t} because it cannot be parsed: ${r}`),!1}}function E(t){return g(m(t))}function _(t){return`^${E(t)}`}function S(t){const n=t.map(_);return n.push(".*@api"),new RegExp(`(${n.join("|")})/.*.(ts|js)$`)}async function O(){return{id:"ApiFunctions",requiredEntitlements:["apiFunctions"],async processContent(t,n){await P("build.plugin.api_functions",async e=>{const r=await n.getConfig();e?.setAttribute("config",JSON.stringify(r.apiFunctions||{}));const c=S(r.apiFunctions?.folders||[]);let s=0;t.clearRequestHandlersByPrefix(`${u}:`);for(const o of n.fs.scan(c)){if(o.isVirtual)continue;const i=A(o.relativePath);if(!i)continue;const a=`${u}:${i.handler}`,f=p(t.contentDir,i.handler);await R(o.relativePath,n)&&(t.createRequestHandler(a,f),t.addApiRoute({requestHandlerId:a,slug:i.path,fsPath:o.relativePath,httpMethod:i.method,[d]:{fsPath:o.relativePath,slug:i.path}}),s++)}e?.setAttribute("definedApiFunctions",String(s)),t.setGlobalConfig({[F]:s})})}}}export{u as API_FUNCTIONS_REQUEST_HANDLER_ID,O as apiFunctionsPlugin};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PublishCatalogEntitiesParams } from './types';
|
|
2
|
+
export declare class CatalogEntitiesPublisher {
|
|
3
|
+
#private;
|
|
4
|
+
static publishFromLocalToRemote(params: PublishCatalogEntitiesParams): Promise<boolean>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=catalog-entities-publisher.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{and as h,eq as g,inArray as R,isNotNull as A,isNull as E,ne as k,or as I,sql as S}from"drizzle-orm";import{ulid as N}from"ulid";import{logger as F}from"../../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as D}from"../../../providers/database/database-connection-factory.js";import{entitiesAttributesTable as m}from"../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js";import{entitiesRelationsTable as u}from"../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js";import{entitiesTable as d}from"../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{BATCH_TRANSIENT_RETRY as $,withTransientErrorRetry as L}from"../../../providers/database/transient-sqld-error.js";import{envConfig as O}from"../../../config/env-config.js";import{ATTRIBUTES_UPSERT_SET as U,DEFAULT_CHUNK_SIZE as B,ENTITIES_UPSERT_SET as K,MAX_BATCH_PAYLOAD_BYTES as M,MAX_LOGGED_DB_ERROR_LENGTH as b,MIN_RETRYABLE_BATCH_SIZE as H,RELATIONS_UPSERT_SET as x}from"./consts.js";class c{static async publishFromLocalToRemote(e){if(O.isDevelopMode)return!1;const{baseDbDir:t,chunkSize:s=B,changedSourceFiles:o=[],removedSourceFiles:n=[]}=e,a=N(),[i,r]=await Promise.all([D.create({baseDbDir:t,databaseType:"local"}),D.create({baseDbDir:t,databaseType:"remote"})]);if(!i||!r)return F.warn("Skipping entities remote sync: local or remote connection is unavailable"),!1;const l="changedSourceFiles"in e||"removedSourceFiles"in e,p=Array.from(new Set([...o,...n]));if(l&&p.length===0)return!0;const y=l?o.length?o:"none":void 0;try{return await c.#i({runId:a,chunkSize:s,localConnection:i,remoteConnection:r,sourceFilesFilter:y}),await c.#c({runId:a,chunkSize:s,localConnection:i,remoteConnection:r,sourceFilesFilter:y}),await c.#a({chunkSize:s,localConnection:i,remoteConnection:r,sourceFilesFilter:y}),await c.#l({runId:a,remoteConnection:r,sourceFilesFilter:l?p:void 0}),!0}catch(f){const w=c.#o(f);throw F.error(`[CatalogEntitiesPublisher.publishFromLocalToRemote] Failed runId=${a}. ${w}`),new Error(`[CatalogEntitiesPublisher.publishFromLocalToRemote] Failed runId=${a}. ${w}`,{cause:f instanceof Error?f:void 0})}}static#i(e){const{runId:t,localConnection:s,remoteConnection:o,sourceFilesFilter:n,chunkSize:a}=e,i=c.#e(n);return c.#t({chunkSize:a,sourceFilesFilter:n,selectRows:(r,l)=>s.client.client.select().from(d).where(h(g(d.source,"file"),i?R(d.sourceFile,i):void 0)).limit(l).offset(r).all(),decorateRow:r=>({...r,lastSeenRunId:t}),runUpsert:async r=>{await o.client.client.insert(d).values(r).onConflictDoUpdate({target:[d.key,d.source,d.revision,d.version],set:K}).run()},describeSkippedRow:r=>`entity key=${String(r.key)}`})}static#c(e){const{runId:t,localConnection:s,remoteConnection:o,sourceFilesFilter:n,chunkSize:a}=e,i=c.#e(n);return c.#t({chunkSize:a,sourceFilesFilter:n,selectRows:(r,l)=>s.client.client.select().from(u).where(h(A(u.sourceFile),i?R(u.sourceFile,i):void 0)).limit(l).offset(r).all(),decorateRow:r=>({...r,lastSeenRunId:t}),runUpsert:async r=>{await o.client.client.insert(u).values(r).onConflictDoUpdate({target:[u.sourceKey,u.targetKey,u.sourceVersion,u.targetVersion,u.sourceRevision,u.targetRevision,u.sourceToTargetRelation],set:x}).run()},describeSkippedRow:r=>{const l=r;return`relation sourceKey=${String(l.sourceKey)} targetKey=${String(l.targetKey)}`}})}static#a(e){const{localConnection:t,remoteConnection:s,sourceFilesFilter:o,chunkSize:n}=e,a=c.#e(o);return c.#t({chunkSize:n,sourceFilesFilter:o,selectRows:(i,r)=>t.client.client.select().from(m).where(a?S`EXISTS (
|
|
2
|
+
SELECT 1
|
|
3
|
+
FROM entities e
|
|
4
|
+
WHERE e.key = ${m.entityKey}
|
|
5
|
+
AND e.source = 'file'
|
|
6
|
+
AND e.source_file IN (${S.join(a.map(l=>S`${l}`),S`, `)})
|
|
7
|
+
)`:void 0).limit(r).offset(i).all(),runUpsert:async i=>{await s.client.client.insert(m).values(i).onConflictDoUpdate({target:[m.entityKey],set:U}).run()}})}static#e(e){return Array.isArray(e)&&e.length>0?e:void 0}static async#t({chunkSize:e,sourceFilesFilter:t,selectRows:s,decorateRow:o,runUpsert:n,describeSkippedRow:a}){if(t==="none")return{upserted:0,skipped:0};let i=0,r=0,l=0;for(;;){const p=await s(i,e);if(!p.length)return{upserted:r,skipped:l};const y=o?p.map(f=>o(f)):p;for(const f of c.#u(y,e,M)){const w=await c.#n({rows:f,runOperation:n,shouldSkipIsolatedRow:a?(v,T)=>c.#f(T)?(F.warn(`[CatalogEntitiesPublisher.publishFromLocalToRemote] Skipping ${a(v)} due to remote insert error: ${c.#o(T)}`),!0):!1:void 0});r+=w.upserted,l+=w.skipped}i+=e}}static async#l({runId:e,remoteConnection:t,sourceFilesFilter:s}){const o=t.client.client,n=s?.length?s:void 0,a=await c.#r(()=>o.delete(u).where(h(A(u.sourceFile),n?R(u.sourceFile,n):void 0,I(E(u.lastSeenRunId),k(u.lastSeenRunId,e)))).run()),i=await c.#r(()=>o.delete(d).where(h(g(d.source,"file"),n?R(d.sourceFile,n):void 0,I(E(d.lastSeenRunId),k(d.lastSeenRunId,e)))).run()),r=await c.#r(()=>o.delete(m).where(S`NOT EXISTS (
|
|
8
|
+
SELECT 1
|
|
9
|
+
FROM entities e
|
|
10
|
+
WHERE e.key = ${m.entityKey}
|
|
11
|
+
AND COALESCE(e.is_deleted, 0) = 0
|
|
12
|
+
)`).run());return{staleEntitiesDeleted:i,staleRelationsDeleted:a,orphanAttributesDeleted:r}}static async#r(e){const t=await c.#s(e);return Number(t.rowsAffected??0)}static#u(e,t,s){const o=[];let n=[],a=0;for(const i of e){const r=c.#d(i);n.length>0&&(n.length>=t||a+r>s)&&(o.push(n),n=[],a=0),n.push(i),a+=r}return n.length>0&&o.push(n),o}static#d(e){try{return JSON.stringify(e).length}catch{return 0}}static async#n({rows:e,runOperation:t,shouldSkipIsolatedRow:s}){try{return await c.#s(()=>t(e)),{upserted:e.length,skipped:0}}catch(o){if(e.length<H){if(!s)throw o;if(await s(e[0],o))return{upserted:0,skipped:1};throw o}const n=Math.floor(e.length/2),a=await c.#n({rows:e.slice(0,n),runOperation:t,shouldSkipIsolatedRow:s}),i=await c.#n({rows:e.slice(n),runOperation:t,shouldSkipIsolatedRow:s});return{upserted:a.upserted+i.upserted,skipped:a.skipped+i.skipped}}}static#f(e){if(!(e instanceof Error))return!1;const t=e.message.toLowerCase();return t.includes("code: 11")||t.includes("too many sql variables")||t.includes("string or blob too big")||t.includes("statement too long")||t.includes("request body too large")||t.includes("payload too large")||t.includes("body too large")||t.includes("resource exhausted")}static#o(e){const s=(e instanceof Error?e.message:typeof e=="string"?e:JSON.stringify(e)).split(" params:")[0],n=c.#p(s).replace(/\s+/g," ").trim();return n.length>b?`${n.slice(0,b)}...`:n}static#p(e){const t="Failed query:",s=e.indexOf(t);if(s===-1)return e;const o=e.slice(0,s).trim();return o?`${o}. ${t} <omitted for brevity>`:`${t} <omitted for brevity>`}static#s(e){return L(e,$)}}export{c as CatalogEntitiesPublisher};
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
import type { PaginationParams } from '../../../providers/database/pagination/schemas.js';
|
|
2
|
-
import type { EntityReadModelSchema, EntityRelationReadModelSchema } from '../schemas/read-model-schemas.js';
|
|
3
|
-
import type { CatalogFiltersParams } from './repositories/
|
|
4
|
-
import type { BffCatalogEntity, BffCatalogEntityList, BffCatalogRelatedEntityList } from '@redocly/theme/core/types';
|
|
2
|
+
import type { EntityReadModelSchema, EntitySource, EntityRelationReadModelSchema } from '../schemas/read-model-schemas.js';
|
|
3
|
+
import type { CatalogFiltersParams, CreateEntityParams } from './repositories/types.js';
|
|
4
|
+
import type { BffCatalogEntity, BffCatalogEntityList, BffCatalogRelatedEntityList, SidebarConnectedEntity } from '@redocly/theme/core/types';
|
|
5
5
|
import type { ServiceInstanceOptions } from '../../../providers/database/types.js';
|
|
6
6
|
import type { TransactionsManager } from '../../../providers/database/transactions-manager.js';
|
|
7
|
-
import type { CreateEntityParams } from './repositories/local/catalog-entities-local-write-repository.js';
|
|
8
7
|
import type { Filter } from '../../../providers/database/pagination/types.js';
|
|
9
8
|
import type { ScorecardsStatus } from '../entities/types.js';
|
|
10
9
|
import type { GetEntityByIdParams } from '../types/params.js';
|
|
10
|
+
import type { BulkSyncResult } from './types.js';
|
|
11
11
|
import { type EntityDtoSchema, type EntityRelationDtoSchema } from '../schemas/dto-schemas.js';
|
|
12
|
-
import {
|
|
13
|
-
import { CatalogEntitiesRemoteRepository } from './repositories/remote/catalog-entities-remote-repository.js';
|
|
12
|
+
import { CatalogEntitiesRepository } from './repositories/catalog-entities-repository.js';
|
|
14
13
|
import { type ListResponseResult } from '../../../web-server/utils/prepare-list-response.js';
|
|
15
|
-
type BulkSyncResult<T> = Array<{
|
|
16
|
-
status: 'ok';
|
|
17
|
-
resource: T | null;
|
|
18
|
-
} | {
|
|
19
|
-
key: string;
|
|
20
|
-
status: 'error';
|
|
21
|
-
error: string;
|
|
22
|
-
}>;
|
|
23
14
|
export declare class CatalogEntitiesService {
|
|
24
15
|
#private;
|
|
25
|
-
constructor(
|
|
16
|
+
constructor(catalogEntitiesRepository: CatalogEntitiesRepository, options?: ServiceInstanceOptions);
|
|
26
17
|
static getInstance(options: ServiceInstanceOptions): Promise<CatalogEntitiesService>;
|
|
18
|
+
sync(): Promise<void>;
|
|
27
19
|
transaction<T>(...args: Parameters<TransactionsManager['transaction']>): Promise<T>;
|
|
28
|
-
remoteTransaction<T>(operation: () => Promise<T>): Promise<T>;
|
|
29
20
|
getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
30
21
|
paginationParams: PaginationParams;
|
|
31
22
|
rbacTeams?: string[];
|
|
@@ -38,48 +29,9 @@ export declare class CatalogEntitiesService {
|
|
|
38
29
|
type: string;
|
|
39
30
|
count: number;
|
|
40
31
|
}[]>;
|
|
41
|
-
getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./repositories/
|
|
42
|
-
createEntity(entity: EntityDtoSchema): Promise<EntityReadModelSchema | null>;
|
|
43
|
-
createEntities(entities: EntityDtoSchema[]): Promise<BulkSyncResult<EntityReadModelSchema>>;
|
|
44
|
-
getEntitySources(): Record<string, import("@redocly/theme").SidebarConnectedEntity>;
|
|
45
|
-
/**
|
|
46
|
-
* Use only internally, everything that is created via API should be created in the remote database.
|
|
47
|
-
* @param entity - The entity to create.
|
|
48
|
-
*/
|
|
49
|
-
createEntityInLocalDatabase(createEntityParams: CreateEntityParams): Promise<import("./repositories/local/catalog-entities-local-write-repository.js").CreateEntityResult>;
|
|
50
|
-
/**
|
|
51
|
-
* Use only internally, everything that is created via API should be created in the remote database.
|
|
52
|
-
* @param entities - The entities to create.
|
|
53
|
-
*/
|
|
54
|
-
createEntitiesInLocalDatabase(createEntitiesParams: CreateEntityParams[]): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* Use only internally, everything that is created via API should be created in the remote database.
|
|
57
|
-
* @param relation - The entity to create.
|
|
58
|
-
*/
|
|
59
|
-
createEntityRelationInLocalDatabase(relation: EntityRelationDtoSchema): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* Use only internally, everything that is created via API should be created in the remote database.
|
|
62
|
-
* @param relations - The entity to create.
|
|
63
|
-
*/
|
|
64
|
-
createEntityRelationsInLocalDatabase(relations: EntityRelationDtoSchema[]): Promise<void>;
|
|
65
|
-
updateEntity(incomingEntity: Partial<EntityDtoSchema>, entityToBeUpdated: EntityReadModelSchema): Promise<EntityReadModelSchema | null | undefined>;
|
|
66
|
-
deleteEntity(entityToBeRemoved: EntityReadModelSchema): Promise<string | null | undefined>;
|
|
67
|
-
/**
|
|
68
|
-
* Use only internally, everything that is created via API should be created in the remote database.
|
|
69
|
-
* @param filter - The conditions used to select which entities to delete.
|
|
70
|
-
*/
|
|
71
|
-
deleteEntitiesInLocalDatabase(filter: Filter): Promise<void>;
|
|
32
|
+
getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./repositories/types.js").FilterOption[]>>;
|
|
72
33
|
getEntityRelationById(id: string): Promise<EntityRelationReadModelSchema | null>;
|
|
73
34
|
getEntitiesRelations(paginationParams?: PaginationParams): Promise<ListResponseResult<EntityRelationReadModelSchema>>;
|
|
74
|
-
createEntityRelation(relation: EntityRelationDtoSchema): Promise<EntityRelationReadModelSchema | null | undefined>;
|
|
75
|
-
createEntitiesRelations(entities: EntityRelationDtoSchema[]): Promise<BulkSyncResult<EntityRelationReadModelSchema>>;
|
|
76
|
-
updateEntityRelation(incomingRelationData: Partial<EntityRelationDtoSchema>, relationToBeUpdated: EntityRelationReadModelSchema): Promise<EntityRelationReadModelSchema | null | undefined>;
|
|
77
|
-
deleteEntityRelation(id: string): Promise<string | null>;
|
|
78
|
-
/**
|
|
79
|
-
* Use only internally, everything that is created via API should be created in the remote database.
|
|
80
|
-
* @param filter - The conditions used to select which entity relations to delete.
|
|
81
|
-
*/
|
|
82
|
-
deleteEntityRelationsInLocalDatabase(filter: Filter): Promise<void>;
|
|
83
35
|
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
84
36
|
paginationParams: PaginationParams;
|
|
85
37
|
rbacTeams?: string[];
|
|
@@ -103,22 +55,33 @@ export declare class CatalogEntitiesService {
|
|
|
103
55
|
excludedTypes?: string[];
|
|
104
56
|
excludedEntities?: string[];
|
|
105
57
|
}): Promise<BffCatalogRelatedEntityList>;
|
|
106
|
-
|
|
58
|
+
listEntityRevisions(entityKey: string, version?: string | null): Promise<import("../schemas/read-model-schemas.js").EntityRevisionSummary[]>;
|
|
59
|
+
getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
|
|
60
|
+
getEntitiesCount(source: EntitySource, addedEntities?: EntityReadModelSchema[], entitiesRemovedCount?: number): Promise<{
|
|
61
|
+
total: number;
|
|
62
|
+
}>;
|
|
63
|
+
createEntity(createEntityParams: CreateEntityParams): Promise<EntityReadModelSchema | null>;
|
|
64
|
+
createEntities(entities: EntityDtoSchema[], source: EntitySource): Promise<BulkSyncResult<EntityReadModelSchema>>;
|
|
65
|
+
getEntitySources(): Record<string, SidebarConnectedEntity>;
|
|
66
|
+
/**
|
|
67
|
+
* Use only internally, everything that is created via API should be created in the remote database.
|
|
68
|
+
* @param relations - The entity to create.
|
|
69
|
+
*/
|
|
70
|
+
createEntityRelations(relations: EntityRelationDtoSchema[]): Promise<void>;
|
|
71
|
+
updateEntity(incomingEntity: Partial<EntityDtoSchema>, entityToBeUpdated: EntityReadModelSchema): Promise<EntityReadModelSchema | null>;
|
|
72
|
+
deleteEntity(entityToBeRemoved: EntityReadModelSchema): Promise<string | null>;
|
|
73
|
+
deleteEntities(filter: Filter): Promise<void>;
|
|
74
|
+
createEntityRelation(relation: EntityRelationDtoSchema): Promise<EntityRelationReadModelSchema | null>;
|
|
75
|
+
createEntitiesRelations(entities: EntityRelationDtoSchema[]): Promise<BulkSyncResult<EntityRelationReadModelSchema>>;
|
|
76
|
+
updateEntityRelation(incomingRelationData: Partial<EntityRelationDtoSchema>, relationToBeUpdated: EntityRelationReadModelSchema): Promise<EntityRelationReadModelSchema | null>;
|
|
77
|
+
deleteEntityRelation(id: string): Promise<string | null>;
|
|
78
|
+
softDeleteEntitiesWithRelations({ filter, revision, fileHash, }: {
|
|
107
79
|
filter: Filter;
|
|
108
80
|
revision: string;
|
|
109
81
|
fileHash: string;
|
|
110
82
|
}): Promise<void>;
|
|
111
|
-
listEntityRevisions(entityKey: string, version?: string | null): Promise<import("../schemas/read-model-schemas.js").EntityRevisionSummary[]>;
|
|
112
83
|
updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
|
|
113
84
|
updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
|
|
114
|
-
getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
|
|
115
85
|
setEntitiesAsOutdated(filter: Filter): Promise<void>;
|
|
116
|
-
getEntitiesCount(source: 'file' | 'remote', addedEntities?: EntityReadModelSchema[], entitiesRemovedCount?: number): Promise<{
|
|
117
|
-
total: number;
|
|
118
|
-
}>;
|
|
119
|
-
getDuplicatedEntitiesCount(addedEntities?: EntityReadModelSchema[], removedEntities?: EntityReadModelSchema[]): Promise<{
|
|
120
|
-
total: number;
|
|
121
|
-
}>;
|
|
122
86
|
}
|
|
123
|
-
export {};
|
|
124
87
|
//# sourceMappingURL=catalog-entities-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{promiseMapLimit as
|
|
1
|
+
import{promiseMapLimit as h}from"../../../utils/async/promise-map-limit.js";import{logger as g}from"../../../tools/notifiers/logger.js";import{envConfig as y}from"../../../config/env-config.js";import{HTTP_TRANSIENT_RETRY as l,describeTransientError as m,isTransientSqldError as w,withTransientErrorRetry as d}from"../../../providers/database/transient-sqld-error.js";import{CatalogEntitiesRepository as E}from"./repositories/catalog-entities-repository.js";import{prepareListResponse as u}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as R}from"./mappers/field-transformations.js";import{hasOptionsChanged as W}from"../utils/has-options-changed.js";const p=15;class s{static#s;static#n;#i;#r;#a={};constructor(t,e){this.#i=t,this.#r=e?.databaseType==="local"}static async#c(t){const e=await E.getInstance(t),i=new s(e,t);return s.#s=i,s.#n=t,i}static async getInstance(t){const e={...t,removeExisting:t.removeExisting??!1};return s.#s&&!W(s.#n,e)?s.#s:s.#c(e)}async sync(){await this.#o()}async transaction(...t){return this.#i.transactionsManager.transaction(...t)}async getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n}){return this.#e(async r=>{const{items:a,total:o,hasMore:c}=await r.entitiesRead.getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n});return u({data:a,params:t,totalCount:o,hasMore:c})})}async getEntityById(t,e){return this.#e(async i=>await i.entitiesRead.getEntityById(t,e)??null)}async getEntityKeysAndVersionsBySourceFile(t){return this.#e(e=>e.entitiesRead.getEntityKeysAndVersionsBySourceFile(t))}async getEntitiesCountByTypes(){return this.#e(t=>t.entitiesRead.getEntitiesCountByTypes())}async getCatalogFilters(t){return this.#e(e=>e.filters.getCatalogFilters(t))}async getEntityRelationById(t){return this.#e(async e=>await e.relationsRead.getEntityRelationById(t)??null)}async getEntitiesRelations(t={}){return this.#e(async e=>{const{items:i,total:n,hasMore:r}=await e.relationsRead.getEntitiesRelations(t);return u({data:i,params:t,totalCount:n,nameTransformationsFromDatabase:R,hasMore:r})})}async getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n}){return this.#e(async r=>{const{items:a,total:o,hasMore:c}=await r.bffEntitiesRead.getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n});return u({data:a,params:t,totalCount:o,hasMore:c})})}async getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:n,excludedEntities:r}){return this.#e(a=>a.bffEntitiesRead.getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:n,excludedEntities:r}))}async getRelatedEntities({entityKey:t,paginationParams:e,rbacTeams:i,excludedTypes:n,excludedEntities:r}){return this.#e(async a=>{const{items:o,total:c,hasMore:f}=await a.relationsRead.getRelatedEntities({key:t,paginationParams:e,rbacTeams:i,excludedTypes:n,excludedEntities:r});return u({data:o,params:e,totalCount:c,nameTransformationsFromDatabase:R,hasMore:f})})}async listEntityRevisions(t,e){return this.#e(i=>i.revisions.listEntityRevisions(t,e))}async getOutdatedEntities(t){return this.#e(e=>e.entitiesRead.getOutdatedEntities(t))}async getEntitiesCount(t,e,i){return this.#e(n=>n.entitiesRead.getEntitiesCount(t,e,i))}async createEntity(t){if(y.isDevelopMode&&t.source==="remote")throw new Error("API based entity creation is not supported in the develop mode");return t.isRootEntity&&t.sourceFile&&(this.#a[t.sourceFile]={key:t.entity.key,version:t.entity.version??void 0}),this.#t(e=>e.entitiesWrite.createEntity(t))}async createEntities(t,e){if(y.isDevelopMode&&e==="remote")throw new Error("API based entity creation is not supported in the develop mode");return await h(t,p,async i=>this.#t(n=>n.entitiesWrite.createEntity({entity:i,source:e})).then(n=>({status:"ok",resource:n})).catch(n=>({key:i.key,status:"error",error:n})))}getEntitySources(){return this.#a}async createEntityRelations(t){await this.#t(e=>e.relationsWrite.createEntityRelations(t))}async updateEntity(t,e){if(y.isDevelopMode&&e.source==="remote")throw new Error("Entity update is not supported in the develop mode");return this.#t(i=>i.transactionsManager.transaction(()=>i.entitiesWrite.updateEntity(t,e)))}async deleteEntity(t){if(y.isDevelopMode&&t.source==="remote")throw new Error("Entity deletion is not supported in the develop mode");return this.#t(e=>e.entitiesWrite.deleteEntity(t))}async deleteEntities(t){await this.#t(async e=>{await e.entitiesWrite.deleteEntities(t)})}async createEntityRelation(t){return this.#t(e=>e.relationsWrite.createEntityRelation(t))}async createEntitiesRelations(t){return await h(t,p,async e=>this.#t(i=>i.relationsWrite.createEntityRelation(e)).then(i=>({status:"ok",resource:i})).catch(i=>({key:e.sourceKey,status:"error",error:i})))}async updateEntityRelation(t,e){const i={...e,...t,type:t.type??e.type};return this.#t(n=>n.relationsWrite.createEntityRelation(i))}async deleteEntityRelation(t){return this.#t(e=>e.relationsWrite.deleteEntityRelation(t))}async softDeleteEntitiesWithRelations({filter:t,revision:e,fileHash:i}){return this.#t(n=>n.entitiesWrite.softDeleteEntitiesWithRelations({filter:t,revision:e,fileHash:i}))}async updateEntityScorecardsStatus(t,e){return this.#t(i=>i.entitiesWrite.updateEntityScorecardsStatus(t,e))}async updateEntityScorecardsStatusIfCalculating(t,e){return this.#t(i=>i.entitiesWrite.updateEntityScorecardsStatusIfCalculating(t,e))}async setEntitiesAsOutdated(t){await this.#t(async e=>{await e.entitiesWrite.setEntitiesAsOutdated(t)})}async#o(){if(this.#r)return;const t=this.#i;await d(()=>t.sync(),l)}async#e(t){return await this.#o(),d(()=>t(this.#i),l)}async#t(t){return this.#r?t(this.#i):d(async()=>{try{return await t(this.#i)}catch(e){throw await this.#y(e),e}},l)}async#y(t){if(!(!w(t)||!s.#n))try{this.#i=await E.recreateInstance(s.#n)}catch(e){g.warn(`Reconnect attempt failed, letting original error propagate: ${m(e)}`)}}}export{s as CatalogEntitiesService};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export declare const DEFAULT_CHUNK_SIZE = 20;
|
|
2
|
+
export declare const MAX_LOGGED_DB_ERROR_LENGTH = 1000;
|
|
3
|
+
export declare const MIN_RETRYABLE_BATCH_SIZE = 2;
|
|
4
|
+
export declare const MAX_BATCH_PAYLOAD_BYTES = 500000;
|
|
5
|
+
export declare const ENTITIES_UPSERT_SET: {
|
|
6
|
+
organizationId: import("drizzle-orm").SQL<unknown>;
|
|
7
|
+
projectId: import("drizzle-orm").SQL<unknown>;
|
|
8
|
+
type: import("drizzle-orm").SQL<unknown>;
|
|
9
|
+
title: import("drizzle-orm").SQL<unknown>;
|
|
10
|
+
summary: import("drizzle-orm").SQL<unknown>;
|
|
11
|
+
tags: import("drizzle-orm").SQL<unknown>;
|
|
12
|
+
metadata: import("drizzle-orm").SQL<unknown>;
|
|
13
|
+
git: import("drizzle-orm").SQL<unknown>;
|
|
14
|
+
contact: import("drizzle-orm").SQL<unknown>;
|
|
15
|
+
links: import("drizzle-orm").SQL<unknown>;
|
|
16
|
+
createdAt: import("drizzle-orm").SQL<unknown>;
|
|
17
|
+
updatedAt: import("drizzle-orm").SQL<unknown>;
|
|
18
|
+
sourceFile: import("drizzle-orm").SQL<unknown>;
|
|
19
|
+
fileHash: import("drizzle-orm").SQL<unknown>;
|
|
20
|
+
hash: import("drizzle-orm").SQL<unknown>;
|
|
21
|
+
isCurrent: import("drizzle-orm").SQL<unknown>;
|
|
22
|
+
isDefaultVersion: import("drizzle-orm").SQL<unknown>;
|
|
23
|
+
isDeleted: import("drizzle-orm").SQL<unknown>;
|
|
24
|
+
scorecardsStatus: import("drizzle-orm").SQL<unknown>;
|
|
25
|
+
lastSeenRunId: import("drizzle-orm").SQL<unknown>;
|
|
26
|
+
};
|
|
27
|
+
export declare const RELATIONS_UPSERT_SET: {
|
|
28
|
+
organizationId: import("drizzle-orm").SQL<unknown>;
|
|
29
|
+
projectId: import("drizzle-orm").SQL<unknown>;
|
|
30
|
+
targetToSourceRelation: import("drizzle-orm").SQL<unknown>;
|
|
31
|
+
sourceFile: import("drizzle-orm").SQL<unknown>;
|
|
32
|
+
fileHash: import("drizzle-orm").SQL<unknown>;
|
|
33
|
+
isDeleted: import("drizzle-orm").SQL<unknown>;
|
|
34
|
+
createdAt: import("drizzle-orm").SQL<unknown>;
|
|
35
|
+
updatedAt: import("drizzle-orm").SQL<unknown>;
|
|
36
|
+
lastSeenRunId: import("drizzle-orm").SQL<unknown>;
|
|
37
|
+
};
|
|
38
|
+
export declare const ATTRIBUTES_UPSERT_SET: {
|
|
39
|
+
organizationId: import("drizzle-orm").SQL<unknown>;
|
|
40
|
+
projectId: import("drizzle-orm").SQL<unknown>;
|
|
41
|
+
rbacTeams: import("drizzle-orm").SQL<unknown>;
|
|
42
|
+
createdAt: import("drizzle-orm").SQL<unknown>;
|
|
43
|
+
updatedAt: import("drizzle-orm").SQL<unknown>;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=consts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{sql as e}from"drizzle-orm";const t=20,c=1e3,a=2,l=5e5,u={organizationId:e`excluded.organization_id`,projectId:e`excluded.project_id`,type:e`excluded.type`,title:e`excluded.title`,summary:e`excluded.summary`,tags:e`excluded.tags`,metadata:e`excluded.metadata`,git:e`excluded.git`,contact:e`excluded.contact`,links:e`excluded.links`,createdAt:e`excluded.created_at`,updatedAt:e`excluded.updated_at`,sourceFile:e`excluded.source_file`,fileHash:e`excluded.file_hash`,hash:e`excluded.hash`,isCurrent:e`excluded.is_current`,isDefaultVersion:e`excluded.is_default_version`,isDeleted:e`excluded.is_deleted`,scorecardsStatus:e`excluded.scorecards_status`,lastSeenRunId:e`excluded.last_seen_run_id`},r={organizationId:e`excluded.organization_id`,projectId:e`excluded.project_id`,targetToSourceRelation:e`excluded.target_to_source_relation`,sourceFile:e`excluded.source_file`,fileHash:e`excluded.file_hash`,isDeleted:e`excluded.is_deleted`,createdAt:e`excluded.created_at`,updatedAt:e`excluded.updated_at`,lastSeenRunId:e`excluded.last_seen_run_id`},_={organizationId:e`excluded.organization_id`,projectId:e`excluded.project_id`,rbacTeams:e`excluded.rbac_teams`,createdAt:e`excluded.created_at`,updatedAt:e`excluded.updated_at`};export{_ as ATTRIBUTES_UPSERT_SET,t as DEFAULT_CHUNK_SIZE,u as ENTITIES_UPSERT_SET,l as MAX_BATCH_PAYLOAD_BYTES,c as MAX_LOGGED_DB_ERROR_LENGTH,a as MIN_RETRYABLE_BATCH_SIZE,r as RELATIONS_UPSERT_SET};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { BffCatalogEntity } from '@redocly/theme/core/types';
|
|
2
|
-
|
|
3
|
-
export declare function createBffEntity(entity: Row): BffCatalogEntity | null;
|
|
2
|
+
export declare function createBffEntity(entity: Record<string, unknown>): BffCatalogEntity | null;
|
|
4
3
|
//# sourceMappingURL=create-bff-entity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{logger as o}from"../../../../tools/notifiers/logger.js";import{entityDatabaseSchema as s}from"../../schemas/database-schemas.js";import{validateWithResult as l}from"../../utils/ajv-validator.js";import{createBffRelatedEntities as n}from"./create-bff-related-entities.js";function
|
|
1
|
+
import{logger as o}from"../../../../tools/notifiers/logger.js";import{entityDatabaseSchema as s}from"../../schemas/database-schemas.js";import{validateWithResult as l}from"../../utils/ajv-validator.js";import{createBffRelatedEntities as n}from"./create-bff-related-entities.js";function f(t){const r=t.domains,i=t.owners,a=l(s,{...t});if(!a.success)return o.warn(`Invalid database catalog entity for entity ${String(t.key)}, error: ${a.error}`),null;const e=a.data||{};return{id:e.id,organizationId:e.organizationId,projectId:e.projectId,type:e.type,key:e.key,title:e.title,summary:e.summary??void 0,tags:e.tags?JSON.parse(e.tags):null,metadata:e.metadata?JSON.parse(e.metadata):null,git:e.git?JSON.parse(e.git):null,contact:e.contact?JSON.parse(e.contact):null,links:e.links?JSON.parse(e.links):null,source:e.source,sourceFile:e.sourceFile??void 0,createdAt:e.createdAt,updatedAt:e.updatedAt,version:e.version??void 0,revision:e.revision,isCurrent:e.isCurrent!==null?!!e.isCurrent:null,isDefaultVersion:e.isDefaultVersion!==null?!!e.isDefaultVersion:null,isDeleted:e.isDeleted!==null?!!e.isDeleted:null,object:"catalogEntityView",domains:n(r),owners:n(i)}}export{f as createBffEntity};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DatabaseEntityAttributesDto } from '../../../../providers/database/databases/
|
|
1
|
+
import type { DatabaseEntityAttributesDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js';
|
|
2
2
|
export declare function createEntityAttributesDbRecord({ rbacTeams, entityKey, organizationId, projectId, }: {
|
|
3
3
|
rbacTeams: string[];
|
|
4
4
|
entityKey: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EntityBaseFileSchema } from '@redocly/config';
|
|
2
|
-
import type { DatabaseEntityDto } from '../../../../providers/database/databases/
|
|
2
|
+
import type { DatabaseEntityDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-table.js';
|
|
3
3
|
export declare function createEntityDbRecord({ entity, organizationId, projectId, source, sourceFile, fileHash, }: {
|
|
4
4
|
entity: EntityBaseFileSchema & {
|
|
5
5
|
id?: string;
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import type { Row } from '@libsql/client';
|
|
2
1
|
import type { EntityReadModelSchema } from '../../schemas/read-model-schemas.js';
|
|
3
|
-
|
|
4
|
-
export declare function createEntityReadModel(entity: DatabaseEntity | Row): EntityReadModelSchema | null;
|
|
2
|
+
export declare function createEntityReadModel(entity: Record<string, unknown>): EntityReadModelSchema | null;
|
|
5
3
|
//# sourceMappingURL=create-entity-read-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{logger as r}from"../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as
|
|
1
|
+
import{logger as r}from"../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as s}from"@redocly/theme/core/constants";import{entityDatabaseSchema as i}from"../../schemas/database-schemas.js";import{validateWithResult as o}from"../../utils/ajv-validator.js";function d(a){const t=o(i,{...a});if(!t.success)return r.warn(`Invalid database catalog entity for entity ${a.key}, error: ${t.error}`),null;const e=t.data||{};return{id:e.id,organizationId:e.organizationId,projectId:e.projectId,type:e.type,key:e.key||"",title:e.title||"",summary:e.summary||null,tags:e.tags?JSON.parse(e.tags):null,metadata:e.metadata?JSON.parse(e.metadata):null,git:e.git?JSON.parse(e.git):null,contact:e.contact?JSON.parse(e.contact):null,links:e.links?JSON.parse(e.links):null,source:e.source,sourceFile:e.sourceFile||null,version:e.version||s,revision:e.revision??"",hash:e.hash||null,isCurrent:e.isCurrent??!1,isDefaultVersion:e.isDefaultVersion??!1,createdAt:e.createdAt,updatedAt:e.updatedAt,isDeleted:e.isDeleted??!1,object:"catalogEntity",rbacTeams:e.rbacTeams?JSON.parse(e.rbacTeams):[]}}export{d as createEntityReadModel};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EntityRelationDtoSchema } from '../../schemas/dto-schemas.js';
|
|
2
|
-
import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/
|
|
2
|
+
import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js';
|
|
3
3
|
export declare function createEntityRelationDbRecordFromDto(relation: EntityRelationDtoSchema & {
|
|
4
4
|
id?: string;
|
|
5
5
|
createdAt?: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EntityRelationFileSchema } from '@redocly/config';
|
|
2
|
-
import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/
|
|
2
|
+
import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js';
|
|
3
3
|
type CreateEntityRelationDbRecordFromFileSchemaParams = {
|
|
4
4
|
relation: EntityRelationFileSchema;
|
|
5
5
|
sourceFile: string;
|
package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { DatabaseEntityRelation } from '../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
|
|
1
|
+
import type { DatabaseEntityRelation } from '../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js';
|
|
3
2
|
import type { EntityRelationReadModelSchema } from '../../schemas/read-model-schemas.js';
|
|
4
|
-
export
|
|
3
|
+
export type CreateEntityRelationReadModelInput = DatabaseEntityRelation | Record<string, unknown>;
|
|
4
|
+
export declare function createEntityRelationReadModel(relation: CreateEntityRelationReadModelInput | null): (EntityRelationReadModelSchema & {
|
|
5
5
|
object: 'catalogEntityRelation';
|
|
6
6
|
}) | null;
|
|
7
7
|
//# sourceMappingURL=create-entity-relation-read-model.d.ts.map
|
package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{logger as
|
|
1
|
+
import{logger as o}from"../../../../tools/notifiers/logger.js";import{entityRelationDatabaseSchema as a}from"../../schemas/database-schemas.js";import{validateWithResult as n}from"../../utils/ajv-validator.js";function u(r){if(!r)return null;const t=n(a,{...r});if(!t.success)return o.warn(`Invalid database catalog entity relation, error: ${t.error}`),null;const e=t.data||{};return{id:e.id,organizationId:e.organizationId,projectId:e.projectId,sourceKey:e.sourceKey,targetKey:e.targetKey,sourceVersion:e.sourceVersion??null,sourceRevision:e.sourceRevision??null,targetVersion:e.targetVersion??null,targetRevision:e.targetRevision??null,type:e.sourceToTargetRelation,lastSeenRunId:e.lastSeenRunId??null,createdAt:e.createdAt,updatedAt:e.updatedAt,object:"catalogEntityRelation"}}export{u as createEntityRelationReadModel};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { BffCatalogEntity } from '@redocly/theme/core/types';
|
|
2
2
|
import type { PaginationParams } from '../../../../../providers/database/pagination/schemas.js';
|
|
3
3
|
import type { DatabaseClient } from '../../../../../providers/database/client.js';
|
|
4
|
-
import type { ListResult } from '
|
|
5
|
-
export declare class
|
|
4
|
+
import type { ListResult } from '../types.js';
|
|
5
|
+
export declare class BffEntitiesReadRepository {
|
|
6
6
|
#private;
|
|
7
|
-
constructor(db: DatabaseClient
|
|
7
|
+
constructor(db: DatabaseClient);
|
|
8
8
|
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedEntities, excludedTypes, }: {
|
|
9
9
|
paginationParams: PaginationParams;
|
|
10
10
|
rbacTeams?: string[];
|
|
@@ -22,4 +22,4 @@ export declare class CatalogEntitiesBffRepository {
|
|
|
22
22
|
excludedEntities?: string[];
|
|
23
23
|
}): Promise<BffCatalogEntity | null>;
|
|
24
24
|
}
|
|
25
|
-
//# sourceMappingURL=
|
|
25
|
+
//# sourceMappingURL=bff-entities-read-repository.d.ts.map
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import{and as S,desc as q,eq as l,sql as e}from"drizzle-orm";import{logger as V}from"../../../../../tools/notifiers/logger.js";import{applyPagination as k}from"../../../../../providers/database/pagination/index.js";import{getEffectivePaginationLimit as J}from"../../../../../providers/database/pagination/limit.js";import{applyFilter as P,excludeFieldsFromFilter as z,getAllFilterFieldValues as W}from"../../../../../providers/database/pagination/filter.js";import{entitiesAttributesTable as N}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js";import{entitiesRelationsTable as K}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js";import{entitiesTable as a}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{createBffEntity as L}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as p,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as G,createEntityFieldsForSelect as D}from"../utils.js";import{buildEntitiesExclusionFilter as B}from"../utils/build-entities-exclusion-filter.js";import{buildRbacFilter as X,buildSubqueryRbacJoinAndFilter as Y}from"../utils/build-rbac-filter.js";import{buildSemanticVersionSortExpr as I}from"../utils/semantic-version-sort.js";const i={entityForKey:"e",baseEntities:"base_entities",pagedEntities:"paged_entities",combinedRelations:"combined_relations",combinedTargetEntities:"combined_target_entities",combinedTargetAttributes:"combined_target_attributes"};class ut{#t;constructor(t){this.#t=t}async getEntitiesWithRelations({paginationParams:t,rbacTeams:r,excludedEntities:n,excludedTypes:o}){const c=W(t.filter,"owners");if(c.length>0)return this.#c(t,c,r,o,n);const E=W(t.filter,"domains");return E.length>0?this.#l(t,E,r,o,n):this.#d(t,r,o,n)}async getEntityWithRelationsByKey({entityKey:t,filter:r,rbacTeams:n,excludedTypes:o,excludedEntities:c}){if(!t||t.trim()==="")return null;const E=r?.revision,u=r?.version,y=E?null:await this.#u(t,u||null),C=u??y?.version,R=E||y?.revision||null,F=B(o,c,"entities"),d=this.#t.client.select(D("entities")).from(a).leftJoin(N,l(a.key,N.entityKey)).where(S(l(a.key,t),X(n,"entities_attributes"),F)).as(i.entityForKey),g=this.#e().as(i.combinedRelations),b=this.#i(o,c).as(i.combinedTargetEntities),$=this.#s().as(i.combinedTargetAttributes),h=this.#t.client.with(d,g,b,$).select({...D(i.entityForKey),domains:this.#n(i.entityForKey,n).as("domains"),owners:this.#r(i.entityForKey,n).as("owners")}).from(d).$dynamic();R?h.where(S(l(e.raw("revision"),R),C?l(e.raw("version"),C):void 0)):(h.where(l(e.raw("is_current"),1)),h.orderBy(e`${I("version")} DESC`,e.raw("revision DESC"))),h.limit(1);const s=await h.get();return s?L(s):null}async#c(t,r,n,o,c){const E=this.#o(n,o,c),u=this.#e(),y=this.#i(o,c),C=u.as(i.combinedRelations),R=y.as(i.combinedTargetEntities),_=this.#s().as(i.combinedTargetAttributes),d=r.map(s=>e`
|
|
2
|
+
EXISTS (
|
|
3
|
+
SELECT 1 FROM (${u}) cr
|
|
4
|
+
WHERE cr.source_key = ${s}
|
|
5
|
+
AND cr.source_to_target_relation = 'owns'
|
|
6
|
+
AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
|
|
7
|
+
)
|
|
8
|
+
`),g=d.length===1?d[0]:e`(${e.join(d,e` OR `)})`,T=W(t.filter,"domains");let b=g;if(T.length>0){const s=T.map(m=>e`
|
|
9
|
+
EXISTS (
|
|
10
|
+
SELECT 1 FROM (${u}) cr
|
|
11
|
+
JOIN (${y}) d ON d.key = ${m}
|
|
12
|
+
WHERE d.type = 'domain'
|
|
13
|
+
AND d.is_current = 1
|
|
14
|
+
AND cr.source_key = ${m}
|
|
15
|
+
AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
|
|
16
|
+
AND cr.source_to_target_relation = 'hasParts'
|
|
17
|
+
)
|
|
18
|
+
`),f=s.length===1?s[0]:e`(${e.join(s,e` OR `)})`;b=e`(${g} AND ${f})`}const v=z(t.filter,["owners","domains"]),$={...t,filter:v,baseWhereCondition:b},h=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();try{const s=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();k(s,{...$,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#t.client.$count(s),m=J(t);k(h,{...$,limit:m+1});const w=h.as(i.pagedEntities),Q=this.#t.client.with(C,R,_,w).select({...D(i.pagedEntities),domains:this.#n(i.pagedEntities,n).as("domains"),owners:this.#r(i.pagedEntities,n).as("owners")}).from(w),[M,H]=await Promise.all([Q.all(),f]),O=M,j=O.length>m;return{items:O.slice(0,m).map(A=>L(A)).filter(A=>A!==null),hasMore:j,total:H}}catch(s){return V.error("Error getting entities with relations (owner optimized path): "+s.message),{items:[],hasMore:!1,total:0}}}async#l(t,r,n,o,c){const E=this.#o(n,o,c),u=this.#e(),y=this.#i(o,c),C=u.as(i.combinedRelations),R=y.as(i.combinedTargetEntities),_=this.#s().as(i.combinedTargetAttributes),d=r.map(s=>e`
|
|
19
|
+
EXISTS (
|
|
20
|
+
SELECT 1 FROM (${u}) cr
|
|
21
|
+
JOIN (${y}) d ON d.key = ${s}
|
|
22
|
+
WHERE d.type = 'domain'
|
|
23
|
+
AND d.is_current = 1
|
|
24
|
+
AND cr.source_key = ${s}
|
|
25
|
+
AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
|
|
26
|
+
AND cr.source_to_target_relation = 'hasParts'
|
|
27
|
+
)
|
|
28
|
+
`),g=d.length===1?d[0]:e`(${e.join(d,e` OR `)})`,T=W(t.filter,"owners");let b=g;if(T.length>0){const s=T.map(m=>e`
|
|
29
|
+
EXISTS (
|
|
30
|
+
SELECT 1 FROM (${u}) cr
|
|
31
|
+
WHERE cr.source_key = ${m}
|
|
32
|
+
AND cr.source_to_target_relation = 'owns'
|
|
33
|
+
AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
|
|
34
|
+
)
|
|
35
|
+
`),f=s.length===1?s[0]:e`(${e.join(s,e` OR `)})`;b=e`(${g} AND ${f})`}const v=z(t.filter,["domains","owners"]),$={...t,filter:v,baseWhereCondition:b},h=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();try{const s=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();k(s,{...$,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#t.client.$count(s),m=J(t);k(h,{...$,limit:m+1});const w=h.as(i.pagedEntities),Q=this.#t.client.with(C,R,_,w).select({...D(i.pagedEntities),domains:this.#n(i.pagedEntities,n).as("domains"),owners:this.#r(i.pagedEntities,n).as("owners")}).from(w),[M,H]=await Promise.all([Q.all(),f]),O=M,j=O.length>m;return{items:O.slice(0,m).map(A=>L(A)).filter(A=>A!==null),hasMore:j,total:H}}catch(s){return V.error("Error getting entities with relations (domain optimized path): "+s.message),{items:[],hasMore:!1,total:0}}}async#d(t,r,n,o){const c=this.#o(r,n,o),E=this.#e(),u=this.#i(n,o),y=E.as(i.combinedRelations),C=u.as(i.combinedTargetEntities),F=this.#s().as(i.combinedTargetAttributes),_=this.#t.client.select(p).from(c.as(i.baseEntities)).$dynamic(),{whereCondition:d}=P(_,t.filter);d&&_.where(d);try{const g=this.#t.client.select(p).from(c.as(i.baseEntities)).$dynamic();d&&g.where(d);const T=this.#t.client.$count(g),b=J(t);k(_,{...t,limit:b+1});const v=_.as(i.pagedEntities),$=this.#t.client.with(y,C,F,v).select({...D(i.pagedEntities),domains:this.#n(i.pagedEntities,r).as("domains"),owners:this.#r(i.pagedEntities,r).as("owners")}).from(v),[h,s]=await Promise.all([$.all(),T]),f=h,m=f.length>b;return{items:f.slice(0,b).map(w=>L(w)).filter(w=>w!==null),hasMore:m,total:s}}catch(g){return V.error("Error getting entities with relations (optimized path): "+g.message),{items:[],hasMore:!1,total:0}}}#o(t,r,n){const o=B(r,n,"entities");return this.#t.client.select(D("entities")).from(a).leftJoin(N,l(a.key,N.entityKey)).where(S(l(a.isCurrent,!0),l(a.isDeleted,!1),X(t,"entities_attributes"),o,this.#a("entities")))}#e(){return this.#t.client.select(G).from(K).where(l(K.isDeleted,!1))}#i(t,r){const n=B(t,r,"entities");return this.#t.client.select(p).from(a).where(S(l(a.isCurrent,!0),l(a.isDeleted,!1),n,this.#a("entities")))}async#u(t,r){if(r){const c=await this.#t.client.select({version:a.version,revision:a.revision}).from(a).where(S(l(a.key,t),l(a.version,r))).orderBy(q(a.revision)).limit(1).get();return c?{version:c.version||null,revision:c.revision||null}:null}const n=await this.#t.client.select({version:a.version,revision:a.revision}).from(a).where(S(l(a.key,t),l(a.isCurrent,!0),l(a.isDeleted,!1))).orderBy(e`${I("entities.version")} DESC`,q(a.revision)).limit(1).get();return n?{version:n.version||null,revision:n.revision||null}:null}#a(t){const r=e.raw(`${t}.key`),n=I(`${t}.version`),o=e.raw(`${t}.revision`),c=I("higher.version");return e`
|
|
36
|
+
NOT EXISTS (
|
|
37
|
+
SELECT 1
|
|
38
|
+
FROM entities higher
|
|
39
|
+
WHERE higher.key = ${r}
|
|
40
|
+
AND higher.is_current = 1
|
|
41
|
+
AND COALESCE(higher.is_deleted, 0) = 0
|
|
42
|
+
AND (
|
|
43
|
+
(${c}) > (${n})
|
|
44
|
+
OR (
|
|
45
|
+
(${c}) = (${n})
|
|
46
|
+
AND higher.revision > ${o}
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
)
|
|
50
|
+
`}#n(t,r){const{join:n,filter:o}=Y(r,"d.key");return e`
|
|
51
|
+
COALESCE(
|
|
52
|
+
(
|
|
53
|
+
SELECT json_group_array(
|
|
54
|
+
json_object(
|
|
55
|
+
'id', d.id,
|
|
56
|
+
'key', d.key,
|
|
57
|
+
'type', d.type,
|
|
58
|
+
'title', d.title,
|
|
59
|
+
'summary', d.summary,
|
|
60
|
+
'created_at', d.created_at,
|
|
61
|
+
'updated_at', d.updated_at,
|
|
62
|
+
'source', d.source,
|
|
63
|
+
'source_file', d.source_file
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
FROM (
|
|
67
|
+
SELECT DISTINCT d.*
|
|
68
|
+
FROM combined_relations er
|
|
69
|
+
JOIN combined_target_entities d ON d.key = er.source_key
|
|
70
|
+
${n}
|
|
71
|
+
WHERE er.source_to_target_relation = 'hasParts'
|
|
72
|
+
AND er.target_key = ${e.raw(`${t}.key`)}
|
|
73
|
+
AND d.type = 'domain'
|
|
74
|
+
AND d.is_current = 1
|
|
75
|
+
${o}
|
|
76
|
+
AND CASE
|
|
77
|
+
WHEN ${e.raw(`${t}.version`)} = ''
|
|
78
|
+
THEN er.target_version = ''
|
|
79
|
+
ELSE (er.target_version = ${e.raw(`${t}.version`)} OR er.target_version = '')
|
|
80
|
+
END
|
|
81
|
+
AND CASE
|
|
82
|
+
WHEN ${e.raw(`${t}.revision`)} = ''
|
|
83
|
+
THEN 1 = 1
|
|
84
|
+
ELSE (er.target_revision <= ${e.raw(`${t}.revision`)} OR er.target_revision = '')
|
|
85
|
+
END
|
|
86
|
+
LIMIT 10
|
|
87
|
+
) d
|
|
88
|
+
),
|
|
89
|
+
json_array()
|
|
90
|
+
)
|
|
91
|
+
`}#r(t,r){const{join:n,filter:o}=Y(r,"o.key");return e`
|
|
92
|
+
COALESCE(
|
|
93
|
+
(
|
|
94
|
+
SELECT json_group_array(
|
|
95
|
+
json_object(
|
|
96
|
+
'id', o.id,
|
|
97
|
+
'key', o.key,
|
|
98
|
+
'type', o.type,
|
|
99
|
+
'title', o.title,
|
|
100
|
+
'summary', o.summary,
|
|
101
|
+
'created_at', o.created_at,
|
|
102
|
+
'updated_at', o.updated_at,
|
|
103
|
+
'source', o.source,
|
|
104
|
+
'source_file', o.source_file
|
|
105
|
+
)
|
|
106
|
+
)
|
|
107
|
+
FROM (
|
|
108
|
+
SELECT DISTINCT o.*
|
|
109
|
+
FROM combined_relations er
|
|
110
|
+
JOIN combined_target_entities o ON o.key = er.source_key
|
|
111
|
+
${n}
|
|
112
|
+
WHERE er.source_to_target_relation = 'owns'
|
|
113
|
+
AND er.target_key = ${e.raw(`${t}.key`)}
|
|
114
|
+
AND o.is_current = 1
|
|
115
|
+
${o}
|
|
116
|
+
AND CASE
|
|
117
|
+
WHEN ${e.raw(`${t}.version`)} = ''
|
|
118
|
+
THEN er.target_version = ''
|
|
119
|
+
ELSE (er.target_version = ${e.raw(`${t}.version`)} OR er.target_version = '')
|
|
120
|
+
END
|
|
121
|
+
AND CASE
|
|
122
|
+
WHEN ${e.raw(`${t}.revision`)} = ''
|
|
123
|
+
THEN 1 = 1
|
|
124
|
+
ELSE (er.target_revision <= ${e.raw(`${t}.revision`)} OR er.target_revision = '')
|
|
125
|
+
END
|
|
126
|
+
LIMIT 10
|
|
127
|
+
) o
|
|
128
|
+
),
|
|
129
|
+
json_array()
|
|
130
|
+
)
|
|
131
|
+
`}#s(){return this.#t.client.select({entityKey:N.entityKey,rbacTeams:N.rbacTeams}).from(N)}}export{ut as BffEntitiesReadRepository};
|
package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../../providers/database/types.js';
|
|
2
|
+
import { BaseRepository } from '../../../../providers/database/base-repository.js';
|
|
3
|
+
import { RelationsReadRepository } from './relations/relations-read-repository.js';
|
|
4
|
+
import { RevisionRepository } from './common/revision-repository.js';
|
|
5
|
+
import { BffEntitiesReadRepository } from './bffEntities/bff-entities-read-repository.js';
|
|
6
|
+
import { EntitiesReadRepository } from './entities/entities-read-repository.js';
|
|
7
|
+
import { EntitiesWriteRepository } from './entities/entities-write-repository.js';
|
|
8
|
+
import { RelationsWriteRepository } from './relations/relations-write-repository.js';
|
|
9
|
+
import { FiltersRepository } from './common/filters-repository.js';
|
|
10
|
+
export declare class CatalogEntitiesRepository extends BaseRepository {
|
|
11
|
+
#private;
|
|
12
|
+
readonly entitiesRead: EntitiesReadRepository;
|
|
13
|
+
readonly entitiesWrite: EntitiesWriteRepository;
|
|
14
|
+
readonly relationsRead: RelationsReadRepository;
|
|
15
|
+
readonly relationsWrite: RelationsWriteRepository;
|
|
16
|
+
readonly bffEntitiesRead: BffEntitiesReadRepository;
|
|
17
|
+
readonly filters: FiltersRepository;
|
|
18
|
+
readonly revisions: RevisionRepository;
|
|
19
|
+
get transactionsManager(): import("../../../../providers/database/transactions-manager.js").TransactionsManager;
|
|
20
|
+
constructor(dbConnection: DatabaseConnection);
|
|
21
|
+
sync(): Promise<void>;
|
|
22
|
+
static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRepository>;
|
|
23
|
+
static recreateInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRepository>;
|
|
24
|
+
static resetInstance(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=catalog-entities-repository.d.ts.map
|
package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{logger as n}from"../../../../tools/notifiers/logger.js";import{telemetryTraceStep as s}from"../../../../telemetry/helpers/trace-step.js";import{BaseRepository as a}from"../../../../providers/database/base-repository.js";import{DatabaseConnectionFactory as c}from"../../../../providers/database/database-connection-factory.js";import{RelationsReadRepository as o}from"./relations/relations-read-repository.js";import{RevisionRepository as f}from"./common/revision-repository.js";import{BffEntitiesReadRepository as m}from"./bffEntities/bff-entities-read-repository.js";import{EntitiesReadRepository as l}from"./entities/entities-read-repository.js";import{EntitiesWriteRepository as p}from"./entities/entities-write-repository.js";import{RelationsWriteRepository as w}from"./relations/relations-write-repository.js";import{FiltersRepository as h}from"./common/filters-repository.js";class e extends a{static#t;entitiesRead;entitiesWrite;relationsRead;relationsWrite;bffEntitiesRead;filters;revisions;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t),this.revisions=new f(t.client),this.bffEntitiesRead=new m(t.client),this.relationsRead=new o(t.client),this.entitiesRead=new l(t.client),this.entitiesWrite=new p(t.client,this.organizationId,this.projectId),this.relationsWrite=new w(t.client,this.organizationId,this.projectId),this.filters=new h(t.client)}async sync(){return s("catalog_entities.remote_repository.sync",async()=>{await this.databaseClient.sync()})}static async#e(t){const r=await c.create(t);if(!r)throw new Error("Failed to create db connection for catalog entities repository");return new e(r)}static async getInstance(t){return await s("catalog_entities.remote_repository.get_instance",async r=>{if(e.#t)return e.#t;try{return e.#t=await e.#e(t),e.#t}catch(i){throw n.error("Error creating db connection for catalog entities repository",i),r?.error(i),e.#t=null,i}})}static async recreateInstance(t){const r=e.#t,i=await e.#e(t);return e.#t=i,r&&await r.close(),i}static async resetInstance(){const t=e.#t;e.#t=null,t&&await t.close()}}export{e as CatalogEntitiesRepository};
|
package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DatabaseClient } from '../../../../../providers/database/client.js';
|
|
2
|
+
import type { CatalogFiltersParams, FilterOption } from '../types.js';
|
|
3
|
+
export declare class FiltersRepository {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(db: DatabaseClient);
|
|
6
|
+
getCatalogFilters({ entitiesTypes, emptyFilters, rbacTeams, excludedTypes, excludedEntities, }: CatalogFiltersParams): Promise<Record<string, FilterOption[]>>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=filters-repository.d.ts.map
|