@redocly/reef 0.133.0-next.1 → 0.133.0-next.3
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 +59 -2
- package/dist/server/constants/plugins/catalog-entities.d.ts +2 -0
- package/dist/server/constants/plugins/catalog-entities.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/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/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/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/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/sqlite-db/migrations/0009_add-missing-local-tables.sql +41 -0
- package/dist/server/providers/database/databases/sqlite-db/migrations/0010_add-last-seen-run-id-to-entities-tables.sql +4 -0
- package/dist/server/providers/database/databases/sqlite-db/migrations/0011_update-entities-relations-index.sql +2 -0
- package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0009_snapshot.json +1141 -0
- package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0010_snapshot.json +1165 -0
- package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0011_snapshot.json +1165 -0
- package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/_journal.json +21 -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 +1 -0
- package/dist/server/store.js +1 -1
- package/dist/server/types/plugins/common.d.ts +1 -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 +9 -9
- 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/catalog-sqlite/migrations/0001_catalog-versions-and-revisions.sql +0 -20
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0002_add-scorecards-status.sql +0 -1
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0003_catalog_versions_and_revisions_relations.sql +0 -46
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0004_normalize_relation_types.sql +0 -147
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0005_catalog-relations-constraint-fix.sql +0 -2
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0006_add-catalog-entitities-attributes-table.sql +0 -11
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0001_snapshot.json +0 -378
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0002_snapshot.json +0 -385
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0003_snapshot.json +0 -392
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0004_snapshot.json +0 -392
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0005_snapshot.json +0 -393
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0006_snapshot.json +0 -458
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +0 -55
- 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/main-sqlite/migrations/0000_initial_migration.sql +0 -11
- package/dist/server/providers/database/databases/main-sqlite/migrations/0001_update_file_hashes_file_type_values.sql +0 -10
- package/dist/server/providers/database/databases/main-sqlite/migrations/0002_cache-table.sql +0 -11
- package/dist/server/providers/database/databases/main-sqlite/migrations/0003_file-path-added.sql +0 -6
- package/dist/server/providers/database/databases/main-sqlite/migrations/0004_add-scorecards-tables.sql +0 -10
- package/dist/server/providers/database/databases/main-sqlite/migrations/0005_recreate-scorecards-config.sql +0 -25
- package/dist/server/providers/database/databases/main-sqlite/migrations/0006_change-scorecards-config-timestamps-field-types.sql +0 -19
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0000_snapshot.json +0 -82
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0001_snapshot.json +0 -82
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0002_snapshot.json +0 -146
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0003_snapshot.json +0 -153
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0004_snapshot.json +0 -221
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0005_snapshot.json +0 -263
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0006_snapshot.json +0 -261
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +0 -55
- 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/sqld-sqlite/migrations/0000_initial_migration.sql +0 -46
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0000_snapshot.json +0 -307
- /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/migrations/0000_initial_migration.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0001_add_kv_table.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0002_catalog-versions-and-revisions.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0003_add-scorecards-tables.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0004_add-scorecards-status.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0005_recreate-scorecards-tables.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0006_catalog-versions-and-revisions-relations.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0007_catalog-relations-constraint-fix.sql +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0008_add-catalog-entitities-attributes-table.sql +0 -0
- /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/migrations/meta/0000_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0001_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0002_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0003_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0004_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0005_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0006_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0007_snapshot.json +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0008_snapshot.json +0 -0
- /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 +0,0 @@
|
|
|
1
|
-
import{sql as a}from"drizzle-orm";const e={id:a.raw("id"),fileType:a.raw("file_type"),filePath:a.raw("file_path"),hash:a.raw("hash"),status:a.raw("status"),createdAt:a.raw("created_at"),updatedAt:a.raw("updated_at")};export{e as FIELDS_TO_SELECT_FOR_FILE_HASH};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{eq as K,and as h,gte as u,gt as B,lt as f,asc as S,desc as L,or as w,isNull as b,sql as s,inArray as M,count as N}from"drizzle-orm";import{logger as i}from"../../../tools/notifiers/logger.js";import{kvTable as t}from"../../../providers/database/databases/sqld-sqlite/schemas/kv-table.js";import{BaseRepository as T}from"../../../providers/database/base-repository.js";import{DatabaseConnectionFactory as $}from"../../../providers/database/database-connection-factory.js";import{createKvValue as D}from"../mappers/create-kv-value.js";import{createKvDbRecord as q,encodeKvKey as l}from"../mappers/create-kv-db-record.js";import{decodeCursor as I}from"../helpers/decode-cursor.js";import{encodeCursor as O}from"../helpers/encode-cursor.js";import{createKvListEntry as E}from"../mappers/create-kv-list-entry.js";const z="";class y extends T{static#e;#t=!1;constructor(e){super(e)}static async getInstance(e){if(!y.#e)try{const r=await $.create("sqld-remote",e);if(!r)return y.#e=null,null;y.#e=new y(r)}catch(r){return i.error("Error creating kv remote repository",r),y.#e=null,null}return y.#e}async sync(){if(this.isNonRemoteDatabaseMode()){this.#t||(i.warn(`KV database is currently operating in local mode: not connected to the remote database.
|
|
2
|
-
All changes and data will only persist locally and will not be synced remotely.`),this.#t=!0);return}await this.databaseClient.sync()}async get(e){try{const r=l(e),n=await this.databaseClient.client.select().from(t).where(h(K(t.encodedKey,r),w(b(t.expiresAt),u(s`datetime(${t.expiresAt})`,s`datetime('now')`)))).get();return n?D(n):null}catch(r){return i.error("Error getting kv entry by key",r),null}}async getMany(e){try{if(e.length===0)return[];const r=e.map(d=>l(d)),n=w(b(t.expiresAt),u(s`datetime(${t.expiresAt})`,s`datetime('now')`)),a=await this.databaseClient.client.select().from(t).where(h(M(t.encodedKey,r),n)).all(),o=new Map(a.map(d=>[d.encodedKey,d]));return e.map((d,C)=>{const g=r[C],x=o.get(g);return x?E(x):null})}catch(r){return i.error("Error getting multiple kv entries",r),[]}}async list(e,r){try{const n=r?.limit??100,a=r?.reverse??!1,o=[],A=w(b(t.expiresAt),u(s`datetime(${t.expiresAt})`,s`datetime('now')`));if(o.push(A),"prefix"in e){const c=l(e.prefix),m="start"in e?l(e.start):c,k="end"in e?l(e.end):c+z;o.push(u(t.encodedKey,m)),o.push(f(t.encodedKey,k))}else if("start"in e&&"end"in e){const c=l(e.start),m=l(e.end);o.push(u(t.encodedKey,c)),o.push(f(t.encodedKey,m))}if(r?.cursor){const c=I(r.cursor),m=a?f(t.encodedKey,c):B(t.encodedKey,c);o.push(m)}const d=this.databaseClient.client.select().from(t),C=o.length>0?d.where(h(...o)):d,g=this.databaseClient.client.select({count:N()}).from(t),v=(await(o.length>0?g.where(h(...o)):g).get())?.count??0,p=await C.orderBy(a?L(t.encodedKey):S(t.encodedKey)).limit(n).all();return{items:p.map(c=>E(c)),total:v,cursor:v>p.length?O(p[p.length-1]?.encodedKey):null}}catch(n){return i.error("Error listing kv entries",n),{items:[],total:0,cursor:null}}}async set(e,r,n){try{const a=q({key:e,value:r,ttlInSeconds:n?.ttlInSeconds});return await this.databaseClient.client.insert(t).values(a).onConflictDoUpdate({target:[t.encodedKey],set:{value:a.value,expiresAt:a.expiresAt,updatedAt:a.updatedAt}}),E(a)}catch(a){return i.error("Error saving kv entry",a),null}}async delete(e){try{const r=l(e);await this.databaseClient.client.delete(t).where(K(t.encodedKey,r))}catch(r){i.error("Error deleting kv entry by key",r)}}async clearExpired(){try{await this.databaseClient.client.delete(t).where(f(s`datetime(${t.expiresAt})`,s`datetime('now')`))}catch(e){i.error("Error clearing expired kv entries",e)}}async transaction(e){return this.databaseClient.transactionsManager.transaction(async()=>e({get:async n=>this.get(n),getMany:async n=>this.getMany(n),set:async(n,a,o)=>this.set(n,a,o),delete:async n=>this.delete(n)}))}async getTotalStoredEntryBytes(){try{return await this.getTableSizeInBytes("kv")}catch(e){return i.error("Error getting total kv stored entry bytes",e),0}}async getStoredEntrySizeByEncodedKey(e){try{const r=w(b(t.expiresAt),u(s`datetime(${t.expiresAt})`,s`datetime('now')`)),n=await this.databaseClient.client.select({bytes:s`COALESCE(LENGTH(CAST(${t.encodedKey} AS BLOB)) + LENGTH(CAST(${t.value} AS BLOB)), 0)`}).from(t).where(h(K(t.encodedKey,e),r)).get();return Number(n?.bytes??0)}catch(r){return i.error("Error getting kv entry size by encoded key",r),0}}}export{z as KV_KEY_END_BOUNDARY,y as KvRemoteRepository};
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import{and as a,desc as U,eq as r,notExists as k,sql as e,or as j}from"drizzle-orm";import{unionAll as W}from"drizzle-orm/sqlite-core";import{logger as z}from"../../../../../tools/notifiers/logger.js";import{entitiesTable as t}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as L}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{entitiesAttributesTable as d}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js";import{applyPagination as J}from"../../../../../providers/database/pagination/index.js";import{applyFilter as Z,excludeFieldsFromFilter as P,getAllFilterFieldValues as B}from"../../../../../providers/database/pagination/filter.js";import{createBffEntity as V}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as f,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as F,createEntityFieldsForSelect as C}from"../utils.js";import{createMergedEntityFieldsForSelect as X}from"../utils/create-merged-entity-fields-for-select.js";import{buildNoHigherVersionExistsFilter as Y,buildSemanticVersionSortExpr as x}from"../utils/semantic-version-sort.js";import{buildEntitiesExclusionFilter as N}from"../utils/build-entities-exclusion-filter.js";import{buildRbacFilter as p,buildSubqueryRbacJoinAndFilter as G}from"../utils/build-rbac-filter.js";class ye{#e;#t;constructor(i,s){this.#e=i,this.#t=s}async getEntitiesWithRelations({paginationParams:i,rbacTeams:s,excludedEntities:n,excludedTypes:o}){const l=B(i.filter,"owners");if(l.length>0)return this.#c(i,l,s,o,n);const u=B(i.filter,"domains");return u.length>0?this.#a(i,u,s,o,n):this.#m(i,s,o,n)}async#c(i,s,n,o,l){const u=this.#o(n,o,l),h=this.#l(),b=this.#i(o,l),A=h.as("combined_relations"),T=b.as("combined_target_entities"),w=this.#n().as("combined_target_attributes"),_=s.map(c=>e`
|
|
2
|
-
EXISTS (
|
|
3
|
-
SELECT 1 FROM (${h}) cr
|
|
4
|
-
WHERE cr.source_key = ${c}
|
|
5
|
-
AND cr.source_to_target_relation = 'owns'
|
|
6
|
-
AND cr.target_key = base_entities.key
|
|
7
|
-
)
|
|
8
|
-
`),v=_.length===1?_[0]:e`(${e.join(_,e` OR `)})`,g=B(i.filter,"domains");let $=v;if(g.length>0){const c=g.map(m=>e`
|
|
9
|
-
EXISTS (
|
|
10
|
-
SELECT 1 FROM (${h}) cr
|
|
11
|
-
JOIN (${b}) 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 = base_entities.key
|
|
16
|
-
AND cr.source_to_target_relation = 'hasParts'
|
|
17
|
-
)
|
|
18
|
-
`),y=c.length===1?c[0]:e`(${e.join(c,e` OR `)})`;$=e`(${v} AND ${y})`}const D=P(i.filter,["owners","domains"]),S={...i,filter:D,baseWhereCondition:$},R=this.#e.client.select(f).from(u.as("base_entities")).$dynamic();try{const c=this.#e.client.select(f).from(u.as("base_entities")).$dynamic();J(c,{...S,limit:void 0,skip:void 0,after:void 0,before:void 0});const y=this.#e.client.$count(c),m=i.limit||10;J(R,{...S,limit:m+1});const E=R.as("paged_entities"),M=this.#e.client.with(A,T,w,E).select({...C("paged_entities"),domains:this.#r("paged_entities",n).as("domains"),owners:this.#s("paged_entities",n).as("owners")}).from(E),[H,K]=await Promise.all([M.run(),y]),Q=H.rows,q=Q.length>m;return{items:Q.slice(0,m).map(O=>V(O)).filter(O=>O!==null),hasMore:q,total:K}}catch(c){return z.error("Error getting entities with relations (owner optimized path): "+c.message),{items:[],hasMore:!1,total:0}}}async#a(i,s,n,o,l){const u=this.#o(n,o,l),h=this.#l(),b=this.#i(o,l),A=h.as("combined_relations"),T=b.as("combined_target_entities"),w=this.#n().as("combined_target_attributes"),_=s.map(c=>e`
|
|
19
|
-
EXISTS (
|
|
20
|
-
SELECT 1 FROM (${h}) cr
|
|
21
|
-
JOIN (${b}) d ON d.key = ${c}
|
|
22
|
-
WHERE d.type = 'domain'
|
|
23
|
-
AND d.is_current = 1
|
|
24
|
-
AND cr.source_key = ${c}
|
|
25
|
-
AND cr.target_key = base_entities.key
|
|
26
|
-
AND cr.source_to_target_relation = 'hasParts'
|
|
27
|
-
)
|
|
28
|
-
`),v=_.length===1?_[0]:e`(${e.join(_,e` OR `)})`,g=B(i.filter,"owners");let $=v;if(g.length>0){const c=g.map(m=>e`
|
|
29
|
-
EXISTS (
|
|
30
|
-
SELECT 1 FROM (${h}) cr
|
|
31
|
-
WHERE cr.source_key = ${m}
|
|
32
|
-
AND cr.source_to_target_relation = 'owns'
|
|
33
|
-
AND cr.target_key = base_entities.key
|
|
34
|
-
)
|
|
35
|
-
`),y=c.length===1?c[0]:e`(${e.join(c,e` OR `)})`;$=e`(${v} AND ${y})`}const D=P(i.filter,["domains","owners"]),S={...i,filter:D,baseWhereCondition:$},R=this.#e.client.select(f).from(u.as("base_entities")).$dynamic();try{const c=this.#e.client.select(f).from(u.as("base_entities")).$dynamic();J(c,{...S,limit:void 0,skip:void 0,after:void 0,before:void 0});const y=this.#e.client.$count(c),m=i.limit||10;J(R,{...S,limit:m+1});const E=R.as("paged_entities"),M=this.#e.client.with(A,T,w,E).select({...C("paged_entities"),domains:this.#r("paged_entities",n).as("domains"),owners:this.#s("paged_entities",n).as("owners")}).from(E),[H,K]=await Promise.all([M.run(),y]),Q=H.rows,q=Q.length>m;return{items:Q.slice(0,m).map(O=>V(O)).filter(O=>O!==null),hasMore:q,total:K}}catch(c){return z.error("Error getting entities with relations (domain optimized path): "+c.message),{items:[],hasMore:!1,total:0}}}async#m(i,s,n,o){const l=this.#o(s,n,o),u=this.#l(),h=this.#i(n,o),b=u.as("combined_relations"),A=h.as("combined_target_entities"),I=this.#n().as("combined_target_attributes"),w=this.#e.client.select(f).from(l.as("base_entities")).$dynamic(),{whereCondition:_}=Z(w,i.filter);_&&w.where(_);try{const v=this.#e.client.select(f).from(l.as("base_entities")).$dynamic();_&&v.where(_);const g=this.#e.client.$count(v),$=i.limit||10;J(w,{...i,limit:$+1});const D=w.as("paged_entities"),S=this.#e.client.with(b,A,I,D).select({...C("paged_entities"),domains:this.#r("paged_entities",s).as("domains"),owners:this.#s("paged_entities",s).as("owners")}).from(D),[R,c]=await Promise.all([S.run(),g]),y=R.rows,m=y.length>$;return{items:y.slice(0,$).map(E=>V(E)).filter(E=>E!==null),hasMore:m,total:c}}catch(v){return z.error("Error getting entities with relations (optimized path): "+v.message),{items:[],hasMore:!1,total:0}}}#o(i,s,n){const o=N(s,n,"remote.entities"),l=N(s,n,"entities"),u=N(s,n,"r");return this.#t?W(this.#e.client.select(C("entities")).from(e`remote.entities`).leftJoin(e`remote.entities_attributes`,r(t.key,d.entityKey)).where(a(r(e.raw("is_current"),1),r(e.raw("is_deleted"),!1),p(i,"remote.entities_attributes"),o,k(this.#e.client.select({id:f.id}).from(t).where(a(e`${t.key} = remote.entities.key`,e`${t.version} = remote.entities.version`,e`${t.revision} = remote.entities.revision`))),Y("remote.entities.key","remote.entities.version","remote.entities.revision"))),this.#e.client.select(C("entities")).from(t).leftJoin(d,r(t.key,d.entityKey)).where(a(r(t.isCurrent,!0),r(t.isDeleted,!1),p(i,"entities_attributes"),l,k(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as r`).where(a(e`r.key = ${t.key}`,e`r.version = ${t.version}`,e`r.revision = ${t.revision}`))),Y("entities.key","entities.version","entities.revision"))),this.#e.client.select(X("r","l")).from(e`remote.entities as r`).innerJoin(e`entities as l`,e`l.key = r.key AND l.version = r.version AND l.revision = r.revision`).leftJoin(e`entities_attributes as ea`,e`l.key = ea.entity_key`).where(a(j(r(e.raw("r.is_current"),1),r(e.raw("l.is_current"),1)),j(r(e.raw("r.is_deleted"),!1),r(e.raw("l.is_deleted"),!1)),p(i,"ea"),u,Y("r.key","r.version","r.revision")))):this.#e.client.select(C("entities")).from(t).leftJoin(d,r(t.key,d.entityKey)).where(a(r(t.isCurrent,!0),r(t.isDeleted,!1),p(i,"entities_attributes"),l))}#l(){return this.#t?W(this.#e.client.select(F).from(e`remote.entities_relations`),this.#e.client.select(F).from(L).where(k(this.#e.client.select({id:F.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${L.sourceKey}`)))):this.#e.client.select(F).from(L)}#i(i,s){const n=N(i,s,"remote.entities"),o=N(i,s,"entities"),l=N(i,s,"r");return this.#t?W(this.#e.client.select(f).from(e`remote.entities`).where(a(r(e.raw("is_current"),1),r(e.raw("is_deleted"),!1),n,k(this.#e.client.select({id:f.id}).from(t).where(a(e`${t.key} = remote.entities.key`,e`${t.version} = remote.entities.version`,e`${t.revision} = remote.entities.revision`))))),this.#e.client.select(f).from(t).where(a(r(t.isCurrent,!0),r(t.isDeleted,!1),o,k(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as r`).where(a(e`r.key = ${t.key}`,e`r.version = ${t.version}`,e`r.revision = ${t.revision}`))))),this.#e.client.select(X("r","l")).from(e`remote.entities as r`).innerJoin(e`entities as l`,e`l.key = r.key AND l.version = r.version AND l.revision = r.revision`).where(a(j(r(e.raw("r.is_current"),1),r(e.raw("l.is_current"),1)),j(r(e.raw("r.is_deleted"),!1),r(e.raw("l.is_deleted"),!1)),l))):this.#e.client.select(f).from(t).where(a(r(t.isCurrent,!0),r(t.isDeleted,!1),o))}async getEntityWithRelationsByKey({entityKey:i,filter:s,rbacTeams:n,excludedTypes:o,excludedEntities:l}){if(!i||i.trim()==="")return null;const u=s?.revision,h=s?.version,b=u?null:await this.#u(i,h||null),A=h??b?.version,T=u||b?.revision||null,I=N(o,l,"remote.entities"),w=N(o,l,"entities"),_=N(o,l,"r"),g=(this.#t?W(this.#e.client.select(C("entities")).from(e`remote.entities`).leftJoin(e`remote.entities_attributes`,r(t.key,d.entityKey)).where(a(e`remote.entities.key = ${i}`,p(n,"remote.entities_attributes"),I,k(this.#e.client.select({id:f.id}).from(t).where(a(e`${t.key} = remote.entities.key`,e`${t.version} = remote.entities.version`,e`${t.revision} = remote.entities.revision`))))),this.#e.client.select(C("entities")).from(t).leftJoin(d,r(t.key,d.entityKey)).where(a(r(t.key,i),p(n,"entities_attributes"),w,k(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as r`).where(a(e`r.key = ${t.key}`,e`r.version = ${t.version}`,e`r.revision = ${t.revision}`))))),this.#e.client.select(X("r","l")).from(e`remote.entities as r`).innerJoin(e`entities as l`,e`l.key = r.key AND l.version = r.version AND l.revision = r.revision`).leftJoin(e`entities_attributes as ea`,e`l.key = ea.entity_key`).where(a(e`r.key = ${i}`,p(n,"ea"),_))):this.#e.client.select(C("entities")).from(t).leftJoin(d,r(t.key,d.entityKey)).where(a(r(t.key,i),p(n,"entities_attributes"),w))).as("e"),D=(this.#t?W(this.#e.client.select(F).from(e`remote.entities_relations`),this.#e.client.select(F).from(L).where(k(this.#e.client.select({id:F.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${L.sourceKey}`)))):this.#e.client.select(F).from(L)).as("combined_relations"),R=this.#i(o,l).as("combined_target_entities"),y=this.#n().as("combined_target_attributes"),m=this.#e.client.with(g,D,R,y).select({...C("e"),domains:this.#r("e",n).as("domains"),owners:this.#s("e",n).as("owners")}).from(g).$dynamic();T?m.where(a(r(e.raw("revision"),T),A?r(e.raw("version"),A):void 0)):m.where(r(e.raw("is_current"),1)),m.limit(1);const E=await m.run();if(E.rows.length===0)return null;const M=E.rows[0];return V(M)}async#u(i,s){if(s){const l=await(this.#t?W(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`remote.entities`).where(a(e`key = ${i}`,e`version = ${s}`)).orderBy(e.raw("revision DESC")),this.#e.client.select({version:t.version,revision:t.revision}).from(t).where(a(r(t.key,i),r(t.version,s),k(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(a(e`remote.key = ${t.key}`,e`remote.version = ${s}`))))).orderBy(U(t.revision))):this.#e.client.select({version:t.version,revision:t.revision}).from(t).where(a(r(t.key,i),r(t.version,s))).orderBy(U(t.revision))).limit(1).run();if(l.rows.length>0){const u=l.rows[0];return{version:u.version||null,revision:u.revision||null}}return null}if(this.#t){const o=await this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`(
|
|
36
|
-
SELECT version, revision, ROW_NUMBER() OVER (ORDER BY ${x("version")} DESC, revision DESC) as rn
|
|
37
|
-
FROM (
|
|
38
|
-
SELECT version, revision FROM remote.entities WHERE key = ${i} AND is_current = 1
|
|
39
|
-
UNION ALL
|
|
40
|
-
SELECT version, revision FROM entities WHERE key = ${i} AND is_current = 1
|
|
41
|
-
)
|
|
42
|
-
) as ranked_entities`).where(e`rn = 1`).limit(1).run();if(o.rows.length>0){const l=o.rows[0];return{version:l.version||null,revision:l.revision||null}}return null}const n=await this.#e.client.select({version:t.version,revision:t.revision}).from(t).where(a(r(t.key,i),r(t.isCurrent,!0))).limit(1).run();if(n.rows.length>0){const o=n.rows[0];return{version:o.version||null,revision:o.revision||null}}return null}#r(i,s){const{join:n,filter:o}=G(s,"d.key");return e`
|
|
43
|
-
COALESCE(
|
|
44
|
-
(
|
|
45
|
-
SELECT json_group_array(
|
|
46
|
-
json_object(
|
|
47
|
-
'id', d.id,
|
|
48
|
-
'key', d.key,
|
|
49
|
-
'type', d.type,
|
|
50
|
-
'title', d.title,
|
|
51
|
-
'summary', d.summary,
|
|
52
|
-
'created_at', d.created_at,
|
|
53
|
-
'updated_at', d.updated_at,
|
|
54
|
-
'source', d.source,
|
|
55
|
-
'source_file', d.source_file
|
|
56
|
-
)
|
|
57
|
-
)
|
|
58
|
-
FROM (
|
|
59
|
-
SELECT DISTINCT d.*
|
|
60
|
-
FROM combined_relations er
|
|
61
|
-
JOIN combined_target_entities d ON d.key = er.source_key
|
|
62
|
-
${n}
|
|
63
|
-
WHERE er.source_to_target_relation = 'hasParts'
|
|
64
|
-
AND er.target_key = ${e.raw(`${i}.key`)}
|
|
65
|
-
AND d.type = 'domain'
|
|
66
|
-
AND d.is_current = 1
|
|
67
|
-
${o}
|
|
68
|
-
AND CASE
|
|
69
|
-
WHEN ${e.raw(`${i}.version`)} = ''
|
|
70
|
-
THEN er.target_version = ''
|
|
71
|
-
ELSE (er.target_version = ${e.raw(`${i}.version`)} OR er.target_version = '')
|
|
72
|
-
END
|
|
73
|
-
AND CASE
|
|
74
|
-
WHEN ${e.raw(`${i}.revision`)} = ''
|
|
75
|
-
THEN 1 = 1
|
|
76
|
-
ELSE (er.target_revision <= ${e.raw(`${i}.revision`)} OR er.target_revision = '')
|
|
77
|
-
END
|
|
78
|
-
LIMIT 10
|
|
79
|
-
) d
|
|
80
|
-
),
|
|
81
|
-
json_array()
|
|
82
|
-
)
|
|
83
|
-
`}#s(i,s){const{join:n,filter:o}=G(s,"o.key");return e`
|
|
84
|
-
COALESCE(
|
|
85
|
-
(
|
|
86
|
-
SELECT json_group_array(
|
|
87
|
-
json_object(
|
|
88
|
-
'id', o.id,
|
|
89
|
-
'key', o.key,
|
|
90
|
-
'type', o.type,
|
|
91
|
-
'title', o.title,
|
|
92
|
-
'summary', o.summary,
|
|
93
|
-
'created_at', o.created_at,
|
|
94
|
-
'updated_at', o.updated_at,
|
|
95
|
-
'source', o.source,
|
|
96
|
-
'source_file', o.source_file
|
|
97
|
-
)
|
|
98
|
-
)
|
|
99
|
-
FROM (
|
|
100
|
-
SELECT DISTINCT o.*
|
|
101
|
-
FROM combined_relations er
|
|
102
|
-
JOIN combined_target_entities o ON o.key = er.source_key
|
|
103
|
-
${n}
|
|
104
|
-
WHERE er.source_to_target_relation = 'owns'
|
|
105
|
-
AND er.target_key = ${e.raw(`${i}.key`)}
|
|
106
|
-
AND o.is_current = 1
|
|
107
|
-
${o}
|
|
108
|
-
AND CASE
|
|
109
|
-
WHEN ${e.raw(`${i}.version`)} = ''
|
|
110
|
-
THEN er.target_version = ''
|
|
111
|
-
ELSE (er.target_version = ${e.raw(`${i}.version`)} OR er.target_version = '')
|
|
112
|
-
END
|
|
113
|
-
AND CASE
|
|
114
|
-
WHEN ${e.raw(`${i}.revision`)} = ''
|
|
115
|
-
THEN 1 = 1
|
|
116
|
-
ELSE (er.target_revision <= ${e.raw(`${i}.revision`)} OR er.target_revision = '')
|
|
117
|
-
END
|
|
118
|
-
LIMIT 10
|
|
119
|
-
) o
|
|
120
|
-
),
|
|
121
|
-
json_array()
|
|
122
|
-
)
|
|
123
|
-
`}#n(){return this.#t?W(this.#e.client.select({entityKey:e.raw("entity_key"),rbacTeams:e.raw("rbac_teams")}).from(e`remote.entities_attributes`),this.#e.client.select({entityKey:d.entityKey,rbacTeams:d.rbacTeams}).from(d).where(k(this.#e.client.select({id:e.raw("1")}).from(e`remote.entities_attributes as remote`).where(e`remote.entity_key = ${d.entityKey}`)))):this.#e.client.select({entityKey:d.entityKey,rbacTeams:d.rbacTeams}).from(d)}}export{ye as CatalogEntitiesBffRepository};
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import type { BffCatalogEntity, BffCatalogRelatedEntity } from '@redocly/theme/core/types';
|
|
2
|
-
import type { PaginationParams } from '../../../../../providers/database/pagination/schemas.js';
|
|
3
|
-
import type { EntityRelationReadModelSchema } from '../../../schemas/read-model-schemas.js';
|
|
4
|
-
import type { DatabaseClient } from '../../../../../providers/database/client.js';
|
|
5
|
-
import type { Filter } from '../../../../../providers/database/pagination/types.js';
|
|
6
|
-
import type { GetEntityByIdParams } from '../../../types/params.js';
|
|
7
|
-
import { type EntityReadModelSchema, type EntityRevisionSummary } from '../../../schemas/read-model-schemas.js';
|
|
8
|
-
export type ListResult<T> = {
|
|
9
|
-
items: T[];
|
|
10
|
-
hasMore?: boolean;
|
|
11
|
-
total: number;
|
|
12
|
-
};
|
|
13
|
-
export type CatalogFiltersParams = {
|
|
14
|
-
entitiesTypes?: string[];
|
|
15
|
-
emptyFilters?: string[];
|
|
16
|
-
rbacTeams?: string[];
|
|
17
|
-
excludedTypes?: string[];
|
|
18
|
-
excludedEntities?: string[];
|
|
19
|
-
};
|
|
20
|
-
export type FilterOption = {
|
|
21
|
-
value: string;
|
|
22
|
-
count: number;
|
|
23
|
-
};
|
|
24
|
-
export declare class CatalogEntitiesLocalReadRepository {
|
|
25
|
-
#private;
|
|
26
|
-
constructor(db: DatabaseClient);
|
|
27
|
-
attachDatabase(databasePath: string): Promise<void>;
|
|
28
|
-
getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
29
|
-
paginationParams: PaginationParams;
|
|
30
|
-
rbacTeams?: string[];
|
|
31
|
-
excludedTypes?: string[];
|
|
32
|
-
excludedEntities?: string[];
|
|
33
|
-
}): Promise<ListResult<EntityReadModelSchema>>;
|
|
34
|
-
getEntityKeysAndVersionsBySourceFile(sourceFile: string): Promise<Set<string>>;
|
|
35
|
-
listEntityRevisions(entityKey: string, version?: string | null): Promise<EntityRevisionSummary[]>;
|
|
36
|
-
getEntitiesCountByTypes(): Promise<{
|
|
37
|
-
type: string;
|
|
38
|
-
count: number;
|
|
39
|
-
}[]>;
|
|
40
|
-
getEntityById(id: string, params?: GetEntityByIdParams): Promise<EntityReadModelSchema | null>;
|
|
41
|
-
getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
|
|
42
|
-
getEntitiesRelations(paginationParams?: PaginationParams): Promise<ListResult<EntityRelationReadModelSchema>>;
|
|
43
|
-
getEntityRelationById(id: string): Promise<EntityRelationReadModelSchema | null>;
|
|
44
|
-
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedEntities, excludedTypes, }: {
|
|
45
|
-
paginationParams: PaginationParams;
|
|
46
|
-
rbacTeams?: string[];
|
|
47
|
-
excludedEntities?: string[];
|
|
48
|
-
excludedTypes?: string[];
|
|
49
|
-
}): Promise<ListResult<BffCatalogEntity>>;
|
|
50
|
-
getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
51
|
-
entityKey: string;
|
|
52
|
-
filter?: {
|
|
53
|
-
revision?: string | null;
|
|
54
|
-
version?: string | null;
|
|
55
|
-
};
|
|
56
|
-
rbacTeams?: string[];
|
|
57
|
-
excludedTypes?: string[];
|
|
58
|
-
excludedEntities?: string[];
|
|
59
|
-
}): Promise<BffCatalogEntity | null>;
|
|
60
|
-
getRelationsForEntity(key: string, version?: string | null, revision?: string | null): Promise<{
|
|
61
|
-
targetKey: string;
|
|
62
|
-
targetRevision: string;
|
|
63
|
-
sourceToTargetRelation: string;
|
|
64
|
-
direction: "outgoing" | "incoming";
|
|
65
|
-
priority: number;
|
|
66
|
-
}[]>;
|
|
67
|
-
getRelatedEntities({ key, paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
68
|
-
key: string;
|
|
69
|
-
paginationParams: PaginationParams;
|
|
70
|
-
rbacTeams?: string[];
|
|
71
|
-
excludedTypes?: string[];
|
|
72
|
-
excludedEntities?: string[];
|
|
73
|
-
}): Promise<ListResult<BffCatalogRelatedEntity>>;
|
|
74
|
-
getCatalogFilters({ entitiesTypes, emptyFilters, rbacTeams, excludedTypes, excludedEntities, }: CatalogFiltersParams): Promise<Record<string, FilterOption[]>>;
|
|
75
|
-
/**
|
|
76
|
-
* Returns total entity count for the given source. When `addedEntities` is provided (e.g.
|
|
77
|
-
* uncommitted entities in a transaction), only entities that do not already exist in the DB
|
|
78
|
-
* are added to the count, avoiding double-counting on conflict updates (onConflictDoUpdate).
|
|
79
|
-
*/
|
|
80
|
-
getEntitiesCount(source: 'file' | 'remote', addedEntities?: EntityReadModelSchema[], entitiesRemovedCount?: number): Promise<{
|
|
81
|
-
total: number;
|
|
82
|
-
}>;
|
|
83
|
-
/**
|
|
84
|
-
* Returns the count of duplicated entities: entities with the same (key, version, revision)
|
|
85
|
-
* present in both local and remote DBs.
|
|
86
|
-
*
|
|
87
|
-
* @param addedEntities - Optional entities not yet persisted (e.g. in a transaction). Each one
|
|
88
|
-
* whose (key, version, revision) already exists in either DB is counted as a duplicate,
|
|
89
|
-
* regardless of which DB it will be written to.
|
|
90
|
-
* @param removedEntities - Optional entities being removed. Any of these that would otherwise
|
|
91
|
-
* be counted as a duplicate (same triple in both DBs or in addedEntities) are excluded.
|
|
92
|
-
* @returns Total number of duplicated entities (existing in DB + matching added − removed).
|
|
93
|
-
*/
|
|
94
|
-
getDuplicatedEntitiesCount(addedEntities?: EntityReadModelSchema[], removedEntities?: EntityReadModelSchema[]): Promise<{
|
|
95
|
-
total: number;
|
|
96
|
-
}>;
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=catalog-entities-local-read-repository.d.ts.map
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import{and as u,count as A,eq as E,isNotNull as q,notExists as h,or as J,sql as e}from"drizzle-orm";import{unionAll as T}from"drizzle-orm/sqlite-core";import{logger as g}from"../../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as L}from"@redocly/theme/core/constants";import{applyPagination as v}from"../../../../../providers/database/pagination/index.js";import{applyFilter as P}from"../../../../../providers/database/pagination/filter.js";import{createEntityFieldsForSelect as p,FIELDS_TO_SELECT_FOR_ENTITY as N,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as d}from"../utils.js";import{createEntityReadModel as $}from"../../mappers/create-entity-read-model.js";import{entitiesTable as i}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as y}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{entitiesAttributesTable as _}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js";import{CatalogEntitiesRelationsRepository as D}from"./catalog-entities-relations-repository.js";import{CatalogEntitiesBffRepository as M}from"./catalog-entities-bff-repository.js";import{createMergedEntityFieldsForSelect as j}from"../utils/create-merged-entity-fields-for-select.js";import{buildSemanticVersionSortExpr as B}from"../utils/semantic-version-sort.js";import{normalizeRevisionFlags as x}from"../utils/normalize-revision-flags.js";import{buildEntitiesExclusionFilter as R}from"../utils/build-entities-exclusion-filter.js";import{buildRbacFilter as S,buildRbacFilterRaw as Y}from"../utils/build-rbac-filter.js";import{createEntityRelationReadModel as U}from"../../mappers/create-entity-relation-read-model.js";class ye{#e;#t=void 0;#i;#s;constructor(t){this.#e=t,this.#i=new D(this.#e,this.#t||""),this.#s=new M(this.#e,this.#t||"")}async attachDatabase(t){this.#t!==t&&(this.#t=t,await this.#e.client.run(e`ATTACH DATABASE ${t} AS remote`),this.#i=new D(this.#e,t),this.#s=new M(this.#e,t))}async getEntities({paginationParams:t,rbacTeams:s,excludedTypes:n,excludedEntities:r}){const o=R(n,r,"remote.entities"),l=R(n,r,"entities"),a=R(n,r,"r"),c=this.#t?T(this.#e.client.select(p("remote.entities")).from(e`remote.entities`).leftJoin(e`remote.entities_attributes`,E(i.key,_.entityKey)).where(u(S(s,"remote.entities_attributes"),o,h(this.#e.client.select({id:N.id}).from(i).where(u(e`${i.key} = remote.entities.key`,e`${i.version} = remote.entities.version`,e`${i.revision} = remote.entities.revision`))))),this.#e.client.select(p("entities")).from(i).leftJoin(_,E(i.key,_.entityKey)).where(u(S(s,"entities_attributes"),l,h(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as r`).where(u(e`r.key = ${i.key}`,e`r.version = ${i.version}`,e`r.revision = ${i.revision}`))))),this.#e.client.select(j("r","l")).from(e`remote.entities as r`).innerJoin(e`entities as l`,e`l.key = r.key AND l.version = r.version AND l.revision = r.revision`).leftJoin(e`entities_attributes as ea`,e`l.key = ea.entity_key`).where(u(S(s,"ea"),a))):this.#e.client.select(p("entities")).from(i).leftJoin(_,E(i.key,_.entityKey)).where(u(S(s,"entities_attributes"),l)),m=this.#e.client.select(N).from(c.as("combined_entities")),f=this.#e.client.select(N).from(c.as("combined_entities")).$dynamic(),k=v(f,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),O=this.#e.client.$count(k),w=m.$dynamic(),C=t.limit||10,W=v(w,{...t,limit:C+1}),[H,V]=await Promise.all([W.run(),O]),F=H.rows,X=F.length>C;return{items:F.slice(0,C).map(I=>$(I)).filter(I=>I!==null),hasMore:X,total:V}}async getEntityKeysAndVersionsBySourceFile(t){const s=this.#t?T(this.#e.client.select({keyVersion:e`key || ':' || COALESCE(version, ${L})`.as("keyVersion")}).from(e`remote.entities`).where(u(e`source_file = ${t}`,e`source = 'file'`,e`key IS NOT NULL`)),this.#e.client.select({keyVersion:e`${i.key} || ':' || COALESCE(${i.version}, ${L})`.as("keyVersion")}).from(i).where(u(E(i.sourceFile,t),E(i.source,"file"),e`${i.key} IS NOT NULL`,h(this.#e.client.select({key:e.raw("key")}).from(e`remote.entities as remote`).where(e`remote.key = ${i.key}`))))):this.#e.client.select({keyVersion:e`${i.key} || ':' || COALESCE(${i.version}, ${L})`.as("keyVersion")}).from(i).where(u(E(i.sourceFile,t),E(i.source,"file"),q(i.key))),n=await this.#e.client.selectDistinct({keyVersion:e`combined_keys_versions.keyVersion`}).from(s.as("combined_keys_versions")).run();return new Set(n.rows.map(r=>r.keyVersion))}async listEntityRevisions(t,s){const n=[E(i.key,t),E(i.isDeleted,!1),...s?[E(i.version,s)]:[]],r={version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")},o=this.#t?T(this.#e.client.select(r).from(e`remote.entities`).where(u(e`key = ${t}`,e`is_deleted = 0`,s?e`version = ${s}`:void 0,h(this.#e.client.select({id:e.raw("id")}).from(i).where(u(e`${i.key} = remote.entities.key`,e`${i.version} = remote.entities.version`,e`${i.revision} = remote.entities.revision`))))),this.#e.client.select({version:i.version,revision:i.revision,isCurrent:i.isCurrent,createdAt:i.createdAt,updatedAt:i.updatedAt,isDefaultVersion:i.isDefaultVersion}).from(i).where(u(...n,h(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as r`).where(u(e`r.key = ${i.key}`,e`r.version = ${i.version}`,e`r.revision = ${i.revision}`))))),this.#e.client.select({version:e.raw("r.version AS version"),revision:e.raw("r.revision AS revision"),isCurrent:e.raw("MAX(r.is_current, l.is_current) AS is_current"),createdAt:e.raw("MIN(r.created_at, l.created_at) AS created_at"),updatedAt:e.raw("MAX(r.updated_at, l.updated_at) AS updated_at"),isDefaultVersion:e.raw("MAX(r.is_default_version, l.is_default_version) AS is_default_version")}).from(e`remote.entities as r`).innerJoin(e`entities as l`,e`l.key = r.key AND l.version = r.version AND l.revision = r.revision`).where(u(e`r.key = ${t}`,e`r.is_deleted = 0`,e`l.is_deleted = 0`,s?e`r.version = ${s}`:void 0))):this.#e.client.select({version:i.version,revision:i.revision,isCurrent:i.isCurrent,createdAt:i.createdAt,updatedAt:i.updatedAt,isDefaultVersion:i.isDefaultVersion}).from(i).where(u(...n)),a=(await this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(o.as("combined_revisions")).orderBy(e`${B("version")} DESC`,e.raw("revision DESC")).run()).rows.map(c=>({version:c.version,revision:c.revision??"",isCurrent:c.is_current!==null?!!c.is_current:!1,createdAt:c.created_at,updatedAt:c.updated_at,isDefaultVersion:c.is_default_version!==null?!!c.is_default_version:!1}));return x(a),a}async getEntitiesCountByTypes(){if(this.#t){const t=e`
|
|
2
|
-
SELECT key, type, version,
|
|
3
|
-
ROW_NUMBER() OVER (
|
|
4
|
-
PARTITION BY key
|
|
5
|
-
ORDER BY ${B("version")} DESC
|
|
6
|
-
) as rn
|
|
7
|
-
FROM (
|
|
8
|
-
SELECT key, type, version FROM remote.entities WHERE is_current = 1 AND is_deleted = 0
|
|
9
|
-
UNION ALL
|
|
10
|
-
SELECT key, type, version FROM entities WHERE is_current = 1 AND is_deleted = 0
|
|
11
|
-
)
|
|
12
|
-
`;return this.#e.client.select({type:e`type`,count:A()}).from(e`(SELECT * FROM (${t}) WHERE rn = 1) as highest_version_entities`).groupBy(e`type`)}return this.#e.client.select({type:i.type,count:A()}).from(i).where(u(E(i.isCurrent,!0),E(i.isDeleted,!1))).groupBy(i.type)}async getEntityById(t,s){const{rbacTeams:n,excludedTypes:r,excludedEntities:o}=s||{},l=R(r,o,"remote.entities"),a=R(r,o,"entities"),f=(await(this.#t?T(this.#e.client.select(p("remote.entities")).from(e`remote.entities`).leftJoin(e`remote.entities_attributes`,E(i.key,_.entityKey)).where(u(e`remote.entities.id = ${t}`,S(n,"remote.entities_attributes"),l)),this.#e.client.select(p("entities")).from(i).leftJoin(_,E(i.key,_.entityKey)).where(u(E(i.id,t),S(n,"entities_attributes"),a))):this.#e.client.select(p("entities")).from(i).leftJoin(_,E(i.key,_.entityKey)).where(u(E(i.id,t),S(n,"entities_attributes"),a))).run()).rows[0];return f?$(f):null}async getOutdatedEntities(t){const s=this.#t?T(this.#e.client.select(N).from(e`remote.entities`),this.#e.client.select(N).from(i).where(h(this.#e.client.select({id:N.id}).from(e`remote.entities as remote`).where(e`remote.key = ${i.key}`)))):this.#e.client.select(N).from(i),n=this.#e.client.select(N).from(s.as("combined_entities")).$dynamic(),{whereCondition:r}=P(n,t),o=J(e`combined_entities.scorecards_status = 'OUTDATED'`,e`combined_entities.scorecards_status IS NULL`),l=r?u(r,o):o;return(await n.where(l).run()).rows.map(c=>$(c)).filter(c=>c!==null)}async getEntitiesRelations(t={}){const s=this.#t?T(this.#e.client.select(d).from(e`remote.entities_relations`),this.#e.client.select(d).from(y).where(h(this.#e.client.select({id:d.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${y.sourceKey}`)))):this.#e.client.select(d).from(y),n=this.#e.client.select(d).from(s.as("combined_entities_relations")).$dynamic(),r=this.#e.client.select(d).from(s.as("combined_entities_relations")).$dynamic(),o=v(r,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),l=this.#e.client.$count(o),a=t.limit||10,c=v(n,{...t,limit:a+1}),[m,f]=await Promise.all([c.run(),l]),k=m.rows,O=k.length>a;return{items:k.slice(0,a).map(w=>U(w)).filter(w=>w!==null),hasMore:O,total:f}}async getEntityRelationById(t){const r=(await(this.#t?T(this.#e.client.select(d).from(e`remote.entities_relations`).where(E(y.id,t)),this.#e.client.select(d).from(y).where(u(E(y.id,t),h(this.#e.client.select({id:d.id}).from(e`remote.entities_relations as remote`).where(e`remote.id = ${y.id}`))))):this.#e.client.select(d).from(y).where(E(y.id,t))).run()).rows[0];return r?U(r):null}async getEntitiesWithRelations({paginationParams:t,rbacTeams:s,excludedEntities:n,excludedTypes:r}){return this.#s.getEntitiesWithRelations({paginationParams:t,rbacTeams:s,excludedEntities:n,excludedTypes:r})}async getEntityWithRelationsByKey({entityKey:t,filter:s,rbacTeams:n,excludedTypes:r,excludedEntities:o}){return this.#s.getEntityWithRelationsByKey({entityKey:t,filter:s,rbacTeams:n,excludedTypes:r,excludedEntities:o})}async getRelationsForEntity(t,s,n){return this.#i.getRelationsForEntity(t,s,n)}async getRelatedEntities({key:t,paginationParams:s,rbacTeams:n,excludedTypes:r,excludedEntities:o}){return this.#i.getRelatedEntities({key:t,paginationParams:s,rbacTeams:n,excludedTypes:r,excludedEntities:o})}async getCatalogFilters({entitiesTypes:t=[],emptyFilters:s=[],rbacTeams:n,excludedTypes:r,excludedEntities:o}){if(!s.length)return{};try{return await this.#n({entitiesTypes:t,rbacTeams:n,excludedTypes:r,excludedEntities:o}),(s.includes("domains")||s.includes("owners"))&&await this.#o(),await this.#a(s)}catch(l){return console.error("Error fetching catalog filters:",l),{}}finally{await this.#u()}}async#n({entitiesTypes:t,rbacTeams:s,excludedTypes:n,excludedEntities:r}){const o=Y(s,"ea"),l=this.#r(n,r);if(this.#t){const a=["e.is_current = 1","e.is_deleted = 0"];o&&a.push(o),l&&a.push(l.replace(/ENTITY_ALIAS/g,"e"));const c=["r.key IS NULL","e.is_current = 1","e.is_deleted = 0"];o&&c.push(o),l&&c.push(l.replace(/ENTITY_ALIAS/g,"e")),await this.#e.client.run(e.raw(`
|
|
13
|
-
CREATE TEMP TABLE IF NOT EXISTS temp_combined_entities AS
|
|
14
|
-
SELECT
|
|
15
|
-
e.key,
|
|
16
|
-
e.type,
|
|
17
|
-
e.tags,
|
|
18
|
-
e.metadata
|
|
19
|
-
FROM remote.entities e
|
|
20
|
-
LEFT JOIN remote.entities_attributes ea ON ea.entity_key = e.key
|
|
21
|
-
WHERE ${a.join(" AND ")}
|
|
22
|
-
UNION ALL
|
|
23
|
-
SELECT
|
|
24
|
-
e.key,
|
|
25
|
-
e.type,
|
|
26
|
-
e.tags,
|
|
27
|
-
e.metadata
|
|
28
|
-
FROM entities e
|
|
29
|
-
LEFT JOIN remote.entities r ON r.key = e.key AND r.is_current = 1
|
|
30
|
-
LEFT JOIN entities_attributes ea ON ea.entity_key = e.key
|
|
31
|
-
WHERE ${c.join(" AND ")}
|
|
32
|
-
`))}else{const a=["e.is_current = 1","e.is_deleted = 0"];o&&a.push(o),l&&a.push(l.replace(/ENTITY_ALIAS/g,"e")),await this.#e.client.run(e.raw(`
|
|
33
|
-
CREATE TEMP TABLE IF NOT EXISTS temp_combined_entities AS
|
|
34
|
-
SELECT
|
|
35
|
-
e.key,
|
|
36
|
-
e.type,
|
|
37
|
-
e.tags,
|
|
38
|
-
e.metadata
|
|
39
|
-
FROM entities e
|
|
40
|
-
LEFT JOIN entities_attributes ea ON ea.entity_key = e.key
|
|
41
|
-
WHERE ${a.join(" AND ")}
|
|
42
|
-
`))}if(t.length){const a=t.map(c=>`'${c.replace(/'/g,"''")}'`).join(",");await this.#e.client.run(e.raw(`
|
|
43
|
-
CREATE TEMP TABLE IF NOT EXISTS temp_filtered_entities AS
|
|
44
|
-
SELECT * FROM temp_combined_entities
|
|
45
|
-
WHERE type IN (${a})
|
|
46
|
-
`))}else await this.#e.client.run(e`
|
|
47
|
-
CREATE TEMP TABLE IF NOT EXISTS temp_filtered_entities AS
|
|
48
|
-
SELECT * FROM temp_combined_entities
|
|
49
|
-
`);await this.#e.client.run(e`
|
|
50
|
-
CREATE INDEX IF NOT EXISTS idx_temp_filtered_type ON temp_filtered_entities(type)
|
|
51
|
-
`)}#r(t,s){const n=[];if(t&&t.length>0){const r=t.map(o=>`'${o.replace(/'/g,"''")}'`).join(", ");n.push(`ENTITY_ALIAS.type NOT IN (${r})`)}if(s&&s.length>0){const r=s.map(o=>`'${o.replace(/'/g,"''")}'`).join(", ");n.push(`ENTITY_ALIAS.key NOT IN (${r})`)}return n.length>0?`(${n.join(" AND ")})`:null}async#o(){this.#t?await this.#e.client.run(e`
|
|
52
|
-
CREATE TEMP TABLE IF NOT EXISTS temp_combined_relations AS
|
|
53
|
-
SELECT
|
|
54
|
-
source_key,
|
|
55
|
-
target_key,
|
|
56
|
-
source_to_target_relation
|
|
57
|
-
FROM remote.entities_relations
|
|
58
|
-
WHERE COALESCE(is_deleted, 0) = 0
|
|
59
|
-
UNION ALL
|
|
60
|
-
SELECT
|
|
61
|
-
er.source_key,
|
|
62
|
-
er.target_key,
|
|
63
|
-
er.source_to_target_relation
|
|
64
|
-
FROM entities_relations er
|
|
65
|
-
LEFT JOIN remote.entities_relations r ON r.source_key = er.source_key AND r.target_key = er.target_key
|
|
66
|
-
WHERE r.source_key IS NULL AND COALESCE(er.is_deleted, 0) = 0
|
|
67
|
-
`):await this.#e.client.run(e`
|
|
68
|
-
CREATE TEMP TABLE IF NOT EXISTS temp_combined_relations AS
|
|
69
|
-
SELECT
|
|
70
|
-
source_key,
|
|
71
|
-
target_key,
|
|
72
|
-
source_to_target_relation
|
|
73
|
-
FROM entities_relations
|
|
74
|
-
WHERE COALESCE(is_deleted, 0) = 0
|
|
75
|
-
`),await this.#e.client.run(e`
|
|
76
|
-
CREATE INDEX IF NOT EXISTS idx_temp_rel_source ON temp_combined_relations(source_key)
|
|
77
|
-
`),await this.#e.client.run(e`
|
|
78
|
-
CREATE INDEX IF NOT EXISTS idx_temp_rel_target ON temp_combined_relations(target_key)
|
|
79
|
-
`),await this.#e.client.run(e`
|
|
80
|
-
CREATE INDEX IF NOT EXISTS idx_temp_rel_relation ON temp_combined_relations(source_to_target_relation)
|
|
81
|
-
`)}async#a(t){const s={},n=[],r=t.filter(a=>a.startsWith("metadata."));t.includes("type")&&n.push(`
|
|
82
|
-
SELECT 'type' as filter_name, type as value, COUNT(*) as count
|
|
83
|
-
FROM temp_filtered_entities
|
|
84
|
-
WHERE type IS NOT NULL
|
|
85
|
-
GROUP BY type
|
|
86
|
-
`),t.includes("tags")&&n.push(`
|
|
87
|
-
SELECT 'tags' as filter_name, tag.value as value, COUNT(DISTINCT tfe.key) as count
|
|
88
|
-
FROM temp_filtered_entities tfe,
|
|
89
|
-
json_each(COALESCE(tfe.tags, json_array())) as tag
|
|
90
|
-
WHERE tfe.tags IS NOT NULL
|
|
91
|
-
AND tfe.tags != ''
|
|
92
|
-
AND tag.value IS NOT NULL
|
|
93
|
-
AND tag.value != ''
|
|
94
|
-
GROUP BY tag.value
|
|
95
|
-
`),t.includes("domains")&&n.push(`
|
|
96
|
-
SELECT 'domains' as filter_name, tcr.source_key as value, COUNT(DISTINCT tfe.key) as count
|
|
97
|
-
FROM temp_combined_relations tcr
|
|
98
|
-
INNER JOIN temp_filtered_entities tfe ON tfe.key = tcr.target_key
|
|
99
|
-
INNER JOIN temp_combined_entities tce ON tce.key = tcr.source_key
|
|
100
|
-
WHERE tce.type = 'domain'
|
|
101
|
-
AND tcr.source_to_target_relation = 'hasParts'
|
|
102
|
-
GROUP BY tcr.source_key
|
|
103
|
-
`),t.includes("owners")&&n.push(`
|
|
104
|
-
SELECT 'owners' as filter_name, owner_key as value, COUNT(DISTINCT entity_key) as count
|
|
105
|
-
FROM (
|
|
106
|
-
SELECT
|
|
107
|
-
tfe.key as entity_key,
|
|
108
|
-
CASE
|
|
109
|
-
WHEN tfe.key = tcr.target_key AND tcr.source_to_target_relation = 'owns'
|
|
110
|
-
THEN tcr.source_key
|
|
111
|
-
WHEN tfe.key = tcr.source_key AND tcr.source_to_target_relation = 'ownedBy'
|
|
112
|
-
THEN tcr.target_key
|
|
113
|
-
END as owner_key
|
|
114
|
-
FROM temp_combined_relations tcr
|
|
115
|
-
INNER JOIN temp_filtered_entities tfe ON (
|
|
116
|
-
(tcr.target_key = tfe.key AND tcr.source_to_target_relation = 'owns') OR
|
|
117
|
-
(tcr.source_key = tfe.key AND tcr.source_to_target_relation = 'ownedBy')
|
|
118
|
-
)
|
|
119
|
-
) AS entity_owners
|
|
120
|
-
INNER JOIN temp_combined_entities tce ON tce.key = owner_key
|
|
121
|
-
WHERE owner_key IS NOT NULL
|
|
122
|
-
GROUP BY owner_key
|
|
123
|
-
`);for(const a of r)await this.#l(a,s);if(n.length===0)return s;const o=n.join(" UNION ALL "),l=await this.#e.client.run(e.raw(o));if(l?.rows)for(const a of l.rows){const c=a.filter_name,m=a.value,f=Number(a.count)||0;s[c]||(s[c]=[]),m&&s[c].push({value:m,count:f})}return s}async#l(t,s){const n=t.substring(9),r=`$.${K(n)}`,o=await this.#e.client.run(e.raw(`
|
|
124
|
-
SELECT json_extract(metadata, '${r}') as value, COUNT(*) as count
|
|
125
|
-
FROM temp_filtered_entities
|
|
126
|
-
WHERE metadata IS NOT NULL
|
|
127
|
-
AND metadata != ''
|
|
128
|
-
AND json_extract(metadata, '${r}') IS NOT NULL
|
|
129
|
-
AND json_extract(metadata, '${r}') != ''
|
|
130
|
-
GROUP BY value
|
|
131
|
-
`));o?.rows&&(s[t]=o.rows.map(l=>({value:l.value,count:Number(l.count)||0})).filter(l=>l.value))}async getEntitiesCount(t,s,n){let r;try{if(this.#t){const o=e`
|
|
132
|
-
SELECT key, version, revision FROM entities WHERE source = ${t}
|
|
133
|
-
UNION
|
|
134
|
-
SELECT key, version, revision FROM remote.entities WHERE source = ${t}
|
|
135
|
-
`,l=await this.#e.client.select({count:A()}).from(e`(${o}) AS combined`);r=Number(l[0]?.count??0)}else{const o=await this.#e.client.select({count:A()}).from(i).where(E(i.source,t));r=Number(o[0]?.count??0)}if(s?.length){const o=await this.#c(t,s);r+=s.length-o}return n!==void 0&&(r-=n),{total:r}}catch(o){throw g.error("Error getting entities count:",o),new Error(`Error getting entities count: ${o?.message}`)}}async#c(t,s){const n=e.join(s.map(a=>e`(${a.key}, ${a.version}, ${a.revision})`),e`, `),r=this.#t?e`SELECT count(*) AS count FROM (
|
|
136
|
-
SELECT key, version, revision FROM entities WHERE source = ${t}
|
|
137
|
-
UNION
|
|
138
|
-
SELECT key, version, revision FROM remote.entities WHERE source = ${t}
|
|
139
|
-
) AS combined WHERE (key, version, revision) IN (VALUES ${n})`:e`SELECT count(*) AS count FROM entities WHERE source = ${t} AND (key, version, revision) IN (VALUES ${n})`,l=(await this.#e.client.run(r)).rows?.[0];return Number(l?.count??0)}async getDuplicatedEntitiesCount(t,s){if(!this.#t)return{total:0};try{const n=a=>`${a.key}|${a.version}|${a.revision}`,r=await this.#e.client.run(e`
|
|
140
|
-
SELECT key, version, revision FROM entities
|
|
141
|
-
INTERSECT
|
|
142
|
-
SELECT key, version, revision FROM remote.entities
|
|
143
|
-
`),o=new Set((r.rows??[]).map(a=>n(a)));if(t?.length){const a=e.join(t.map(m=>e`(${m.key}, ${m.version}, ${m.revision})`),e`, `),c=await this.#e.client.run(e`SELECT key, version, revision FROM entities WHERE (key, version, revision) IN (VALUES ${a})
|
|
144
|
-
UNION
|
|
145
|
-
SELECT key, version, revision FROM remote.entities WHERE (key, version, revision) IN (VALUES ${a})`);for(const m of c.rows??[])o.add(n(m))}let l=0;if(s?.length){const a=new Set;for(const c of s){const m=n(c);o.has(m)&&a.add(m)}l=a.size}return{total:o.size-l}}catch(n){throw g.error("Error getting duplicated entities count:",n),new Error(`Error getting duplicated entities count: ${n?.message}`)}}async#u(){try{await this.#e.client.run(e`DROP TABLE IF EXISTS temp_combined_entities`),await this.#e.client.run(e`DROP TABLE IF EXISTS temp_filtered_entities`),await this.#e.client.run(e`DROP TABLE IF EXISTS temp_combined_relations`)}catch(t){g.error("Error cleaning up temp tables:",t)}}}function K(b){return b.replace(/[^a-zA-Z0-9._-]/g,"")}export{ye as CatalogEntitiesLocalReadRepository};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import type { Filter } from '../../../../../providers/database/pagination/types.js';
|
|
2
|
-
import type { PaginationParams } from '../../../../../providers/database/pagination/schemas.js';
|
|
3
|
-
import type { EntityRelationDtoSchema } from '../../../../../plugins/catalog-entities/schemas/dto-schemas.js';
|
|
4
|
-
import type { ScorecardsStatus } from '../../../../../plugins/catalog-entities/entities/types.js';
|
|
5
|
-
import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../../../providers/database/types.js';
|
|
6
|
-
import type { CatalogFiltersParams } from './catalog-entities-local-read-repository.js';
|
|
7
|
-
import type { SidebarConnectedEntity } from '@redocly/theme/core/types';
|
|
8
|
-
import type { EntityReadModelSchema } from '../../../../../plugins/catalog-entities/schemas/read-model-schemas.js';
|
|
9
|
-
import type { GetEntityByIdParams } from '../../../types/params.js';
|
|
10
|
-
import { BaseRepository } from '../../../../../providers/database/base-repository.js';
|
|
11
|
-
import { type CreateEntityParams, type CreateEntityResult } from './catalog-entities-local-write-repository.js';
|
|
12
|
-
export declare class CatalogEntitiesLocalRepository extends BaseRepository {
|
|
13
|
-
#private;
|
|
14
|
-
constructor(dbConnection: DatabaseConnection);
|
|
15
|
-
get transactionsManager(): import("../../../../../providers/database/transactions-manager.js").TransactionsManager;
|
|
16
|
-
getEntitySources(): Record<string, SidebarConnectedEntity>;
|
|
17
|
-
static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesLocalRepository>;
|
|
18
|
-
attachDatabase(databasePath: string): Promise<void>;
|
|
19
|
-
getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
20
|
-
paginationParams: PaginationParams;
|
|
21
|
-
rbacTeams?: string[];
|
|
22
|
-
excludedTypes?: string[];
|
|
23
|
-
excludedEntities?: string[];
|
|
24
|
-
}): Promise<import("./catalog-entities-local-read-repository.js").ListResult<EntityReadModelSchema>>;
|
|
25
|
-
getEntityById(id: string, params?: GetEntityByIdParams): Promise<EntityReadModelSchema | null>;
|
|
26
|
-
getEntityKeysAndVersionsBySourceFile(sourceFile: string): Promise<Set<string>>;
|
|
27
|
-
getEntitiesCountByTypes(): Promise<{
|
|
28
|
-
type: string;
|
|
29
|
-
count: number;
|
|
30
|
-
}[]>;
|
|
31
|
-
getEntitiesRelations(paginationParams?: PaginationParams): Promise<import("./catalog-entities-local-read-repository.js").ListResult<import("../../../../../plugins/catalog-entities/schemas/read-model-schemas.js").EntityRelationReadModelSchema>>;
|
|
32
|
-
getEntityRelationById(id: string): Promise<import("../../../../../plugins/catalog-entities/schemas/read-model-schemas.js").EntityRelationReadModelSchema | null>;
|
|
33
|
-
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
34
|
-
paginationParams: PaginationParams;
|
|
35
|
-
rbacTeams?: string[];
|
|
36
|
-
excludedTypes?: string[];
|
|
37
|
-
excludedEntities?: string[];
|
|
38
|
-
}): Promise<import("./catalog-entities-local-read-repository.js").ListResult<import("@redocly/theme").BffCatalogEntity>>;
|
|
39
|
-
getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
40
|
-
entityKey: string;
|
|
41
|
-
filter?: {
|
|
42
|
-
revision?: string | null;
|
|
43
|
-
version?: string | null;
|
|
44
|
-
};
|
|
45
|
-
rbacTeams?: string[];
|
|
46
|
-
excludedTypes?: string[];
|
|
47
|
-
excludedEntities?: string[];
|
|
48
|
-
}): Promise<import("@redocly/theme").BffCatalogEntity | null>;
|
|
49
|
-
getRelatedEntities({ key, paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
|
|
50
|
-
key: string;
|
|
51
|
-
paginationParams: PaginationParams;
|
|
52
|
-
rbacTeams?: string[];
|
|
53
|
-
excludedTypes?: string[];
|
|
54
|
-
excludedEntities?: string[];
|
|
55
|
-
}): Promise<import("./catalog-entities-local-read-repository.js").ListResult<import("@redocly/theme").BffCatalogRelatedEntity>>;
|
|
56
|
-
createEntity(createEntityParams: CreateEntityParams): Promise<CreateEntityResult>;
|
|
57
|
-
createEntities(createEntitiesParams: CreateEntityParams[]): Promise<void>;
|
|
58
|
-
createEntityRelation(entityRelation: EntityRelationDtoSchema): Promise<{
|
|
59
|
-
id: string;
|
|
60
|
-
organizationId: string;
|
|
61
|
-
projectId: string;
|
|
62
|
-
createdAt: string;
|
|
63
|
-
updatedAt: string;
|
|
64
|
-
sourceFile: string | null;
|
|
65
|
-
isDeleted: boolean | null;
|
|
66
|
-
fileHash: string | null;
|
|
67
|
-
sourceKey: string;
|
|
68
|
-
sourceVersion: string;
|
|
69
|
-
sourceRevision: string;
|
|
70
|
-
sourceToTargetRelation: string;
|
|
71
|
-
targetKey: string;
|
|
72
|
-
targetVersion: string;
|
|
73
|
-
targetRevision: string;
|
|
74
|
-
targetToSourceRelation: string;
|
|
75
|
-
} | null>;
|
|
76
|
-
createEntityRelations(relations: EntityRelationDtoSchema[]): Promise<void>;
|
|
77
|
-
deleteEntity(entityKey: string): Promise<string | null>;
|
|
78
|
-
softDeleteEntities({ filter, revision, fileHash, }: {
|
|
79
|
-
filter: Filter;
|
|
80
|
-
revision: string;
|
|
81
|
-
fileHash: string;
|
|
82
|
-
}): Promise<void>;
|
|
83
|
-
softDeleteEntitiesRelations(entities: CreateEntityResult[], revision: string): Promise<boolean>;
|
|
84
|
-
deleteEntities(filter: Filter): Promise<boolean>;
|
|
85
|
-
deleteEntityRelation(id: string): Promise<string | null>;
|
|
86
|
-
deleteEntityRelations(filter: Filter): Promise<boolean>;
|
|
87
|
-
getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./catalog-entities-local-read-repository.js").FilterOption[]>>;
|
|
88
|
-
listEntityRevisions(entityKey: string, version?: string | null): Promise<import("../../../../../plugins/catalog-entities/schemas/read-model-schemas.js").EntityRevisionSummary[]>;
|
|
89
|
-
updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
|
|
90
|
-
updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
|
|
91
|
-
getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
|
|
92
|
-
setEntitiesAsOutdated(filter: Filter): Promise<void>;
|
|
93
|
-
getEntitiesCount(source: 'file' | 'remote', addedEntities?: EntityReadModelSchema[], entitiesRemovedCount?: number): Promise<{
|
|
94
|
-
total: number;
|
|
95
|
-
}>;
|
|
96
|
-
getDuplicatedEntitiesCount(addedEntities?: EntityReadModelSchema[], removedEntities?: EntityReadModelSchema[]): Promise<{
|
|
97
|
-
total: number;
|
|
98
|
-
}>;
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=catalog-entities-local-repository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{promiseMapLimit as l}from"../../../../../utils/async/promise-map-limit.js";import{logger as R}from"../../../../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as p}from"../../../../../providers/database/database-connection-factory.js";import{BaseRepository as f}from"../../../../../providers/database/base-repository.js";import{CatalogEntitiesLocalReadRepository as m}from"./catalog-entities-local-read-repository.js";import{CatalogEntitiesLocalWriteRepository as w}from"./catalog-entities-local-write-repository.js";import{createEntityRelationDbRecordFromDto as h}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{hasOptionsChanged as C}from"../../../utils/has-options-changed.js";const c=50;class r extends f{static#i;static#n;#t;#e;#s={};constructor(t){super(t),this.#t=new m(this.databaseClient),this.#e=new w(this.databaseClient,this.organizationId,this.projectId)}get transactionsManager(){return this.databaseClient.transactionsManager}getEntitySources(){return this.#s}static async getInstance(t){const e=C(r.#n,t);if(!r.#i||e){const i=await p.create("catalog-local",t);if(!i)throw new Error("Failed to create db connection for catalog entities local repository");r.#i=new r(i),r.#n=t}return r.#i}async attachDatabase(t){await this.#t.attachDatabase(t)}getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:s}){return this.#t.getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:s})}getEntityById(t,e){return this.#t.getEntityById(t,e)}getEntityKeysAndVersionsBySourceFile(t){return this.#t.getEntityKeysAndVersionsBySourceFile(t)}getEntitiesCountByTypes(){return this.#t.getEntitiesCountByTypes()}getEntitiesRelations(t={}){return this.#t.getEntitiesRelations(t)}getEntityRelationById(t){return this.#t.getEntityRelationById(t)}getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:s}){return this.#t.getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:s})}getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:s,excludedEntities:n}){return this.#t.getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:s,excludedEntities:n})}getRelatedEntities({key:t,paginationParams:e,rbacTeams:i,excludedTypes:s,excludedEntities:n}){return this.#t.getRelatedEntities({key:t,paginationParams:e,rbacTeams:i,excludedTypes:s,excludedEntities:n})}createEntity(t){return t.isRootEntity&&(this.#s[t.sourceFile]={key:t.entity.key,version:t.entity.version??void 0}),this.#e.createEntity(t)}async createEntities(t){await l(t,c,async e=>this.createEntity(e))}createEntityRelation(t){const e=h(t,this.organizationId,this.projectId);return this.#e.upsertEntityRelation(e)}async createEntityRelations(t){await l(t,c,async e=>this.createEntityRelation(e))}deleteEntity(t){return this.#e.deleteEntity(t)}async softDeleteEntities({filter:t,revision:e,fileHash:i}){const s=await this.getEntities({paginationParams:{filter:t}}),n=await this.#e.softDeleteEntities(s.items,e,i);await this.softDeleteEntitiesRelations(n,e)}async softDeleteEntitiesRelations(t,e){try{const i=t.filter(n=>n.result==="created");if(i.length===0)return!0;const s=await l(i,c,async n=>(await this.#t.getRelationsForEntity(n.entityKey,n.entityVersion,e)).map(a=>{if(!a)return null;const u=a.direction,o=a.sourceToTargetRelation,y=a.targetKey,d=u==="outgoing"?n.entityKey:y,E=u==="outgoing"?y:n.entityKey,g=u==="outgoing"?o:o.startsWith("reverse:")?o.slice(8):o;return!g||!d||!E?null:h({type:g,sourceKey:d,targetKey:E,sourceVersion:n.entityVersion,targetVersion:n.entityVersion,sourceRevision:e,targetRevision:e,isDeleted:!0},this.organizationId,this.projectId)}).filter(a=>a!==null));return await l(s.flat(),c,async n=>this.#e.upsertEntityRelation(n)),!0}catch(i){return R.error("Error soft deleting entity relations",i),!1}}deleteEntities(t){return this.#e.deleteEntities(t)}deleteEntityRelation(t){return this.#e.deleteEntityRelation(t)}deleteEntityRelations(t){return this.#e.deleteEntityRelations(t)}getCatalogFilters(t){return this.#t.getCatalogFilters(t)}listEntityRevisions(t,e){return this.#t.listEntityRevisions(t,e)}updateEntityScorecardsStatus(t,e){return this.#e.updateEntityScorecardsStatus(t,e)}updateEntityScorecardsStatusIfCalculating(t,e){return this.#e.updateEntityScorecardsStatusIfCalculating(t,e)}getOutdatedEntities(t){return this.#t.getOutdatedEntities(t)}async setEntitiesAsOutdated(t){await this.#e.setEntitiesAsOutdated(t)}getEntitiesCount(t,e,i){return this.#t.getEntitiesCount(t,e,i)}getDuplicatedEntitiesCount(t,e){return this.#t.getDuplicatedEntitiesCount(t,e)}}export{r as CatalogEntitiesLocalRepository};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { EntityBaseFileSchema } from '@redocly/config';
|
|
2
|
-
import type { DatabaseClient } from '../../../../../providers/database/client.js';
|
|
3
|
-
import type { Filter } from '../../../../../providers/database/pagination/types.js';
|
|
4
|
-
import type { EntityReadModelSchema } from '../../../schemas/read-model-schemas.js';
|
|
5
|
-
import type { ScorecardsStatus } from '../../../entities/types.js';
|
|
6
|
-
import { type DatabaseEntityRelation, type DatabaseEntityRelationDto } from '../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
|
|
7
|
-
export type CreateEntityParams = {
|
|
8
|
-
entity: EntityBaseFileSchema;
|
|
9
|
-
fileHash: string;
|
|
10
|
-
sourceFile: string;
|
|
11
|
-
isRootEntity?: boolean;
|
|
12
|
-
revision?: string;
|
|
13
|
-
isDeleted?: boolean;
|
|
14
|
-
rbacTeams?: string[];
|
|
15
|
-
};
|
|
16
|
-
export type CreateEntityResult = {
|
|
17
|
-
result: 'created';
|
|
18
|
-
entityKey: string;
|
|
19
|
-
entityRevision: string;
|
|
20
|
-
entityVersion: string | null;
|
|
21
|
-
} | {
|
|
22
|
-
result: 'skipped' | 'error';
|
|
23
|
-
entityKey: string;
|
|
24
|
-
};
|
|
25
|
-
export declare class CatalogEntitiesLocalWriteRepository {
|
|
26
|
-
#private;
|
|
27
|
-
constructor(db: DatabaseClient, organizationId: string, projectId: string);
|
|
28
|
-
createEntity({ entity, fileHash, sourceFile, revision, isRootEntity, isDeleted, rbacTeams, }: CreateEntityParams): Promise<CreateEntityResult>;
|
|
29
|
-
deleteEntity(entityKey: string): Promise<string | null>;
|
|
30
|
-
/**
|
|
31
|
-
* Deletes entities based on a filter.
|
|
32
|
-
* If the entity is current or default version, we need to promote the different version as current and default.
|
|
33
|
-
*/
|
|
34
|
-
deleteEntities(filter: Filter): Promise<boolean>;
|
|
35
|
-
deleteEntityRelation(id: string): Promise<string | null>;
|
|
36
|
-
softDeleteEntities(entities: EntityReadModelSchema[], revision: string, fileHash: string): Promise<CreateEntityResult[]>;
|
|
37
|
-
deleteEntityRelations(filter: Filter): Promise<boolean>;
|
|
38
|
-
upsertEntityRelation(entityRelation: DatabaseEntityRelationDto): Promise<DatabaseEntityRelation | null>;
|
|
39
|
-
updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
|
|
40
|
-
updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
|
|
41
|
-
setEntitiesAsOutdated(filter: Filter): Promise<void>;
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=catalog-entities-local-write-repository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{and as m,eq as c,isNull as v,or as T,sql as F}from"drizzle-orm";import{logger as u}from"../../../../../tools/notifiers/logger.js";import{promiseMapLimit as E}from"../../../../../utils/async/promise-map-limit.js";import{sha1 as O}from"../../../../../utils/crypto/sha1.js";import{envConfig as V}from"../../../../../config/env-config.js";import{VERSION_NOT_SPECIFIED as U}from"@redocly/theme/core/constants";import{entitiesAttributesTable as I}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js";import{createEntityDbRecord as b}from"../../mappers/create-entity-db-record.js";import{createEntityRelationDbRecordFromFileSchema as K}from"../../mappers/create-entity-relation-db-record-from-file-schema.js";import{entitiesTable as r}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as i}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{convertFilterToWhereCondition as C}from"../../../../../providers/database/pagination/filter.js";import{createEntityAttributesDbRecord as z}from"../../mappers/create-entity-attributes-db-record.js";import{RevisionRepository as L}from"../common/revision-repository.js";import{VersionRepository as P}from"../common/version-repository.js";const w=15;class re{#e;#t;#r;#i;#s;constructor(e,t,s){this.#e=e,this.#t=t,this.#r=s,this.#i=new L(e),this.#s=new P(e)}async createEntity({entity:e,fileHash:t,sourceFile:s,revision:a=new Date().toISOString(),isRootEntity:o=!1,isDeleted:n=!1,rbacTeams:d}){try{const{relations:l=[],...f}=e,p=O(JSON.stringify(f)),y=e.version??U,g=await this.#i.shouldSkipRevisionCreation(e.key,y,p,o,n);if(Array.isArray(d)&&await this.#o({entityKey:e.key,rbacTeams:d}),g)return{result:"skipped",entityKey:e.key};const h=await this.#i.shouldSetNewCurrentRevision({key:e.key,version:y,revision:a}),R=b({entity:{...e,revision:a,hash:p,isCurrent:h,isDefaultVersion:h,isDeleted:n,version:y},sourceFile:s,organizationId:this.#t,projectId:this.#r,source:"file",fileHash:t}),{key:D,source:x,...S}=R;if(h&&(await this.#i.markAllRevisionsAsNotCurrent(D),await this.#s.markAllVersionsAsNotDefault(D)),V.isDevelopMode&&!V.REDOCLY_INTERNAL_DEV)return await this.#n(R,l),{result:"created",entityKey:e.key,entityRevision:a,entityVersion:y};const A=this.#e.client.insert(r).values(R).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:S}),N=l?.length&&l.length>0?this.#e.client.insert(i).values(l.map(k=>K({relation:k,sourceFile:s,fileHash:t,sourceKey:e.key,sourceVersion:y,sourceRevision:a??null,organizationId:this.#t,projectId:this.#r}))).onConflictDoNothing({target:[i.sourceKey,i.targetKey,i.sourceVersion,i.targetVersion,i.sourceRevision,i.targetRevision,i.sourceToTargetRelation]}).run():Promise.resolve();return await E([A,N],w,async k=>k),{result:"created",entityKey:e.key,entityRevision:a,entityVersion:y}}catch(l){return u.error("Error adding entity",l),{result:"error",entityKey:e.key}}}async deleteEntity(e){try{return await this.#e.client.delete(r).where(c(r.key,e)),e}catch(t){return u.error("Error deleting entity",t),null}}async deleteEntities(e){try{const t=C(e);if(!t)return!1;const s=await this.#e.client.delete(r).where(t).returning({key:r.key,source:r.source,isCurrent:r.isCurrent,isDefaultVersion:r.isDefaultVersion,version:r.version});if(s.length===0)return!0;const a=s.reduce((o,n)=>((n.isCurrent||n.isDefaultVersion)&&o.add(n.key),o),new Set);if(a.size===0)return!0;await E(Array.from(a),w,async o=>this.#i.ensureDefaultAndCurrentRevisionForKey(o));for(const o of s)await this.#e.client.delete(i).where(T(m(c(i.sourceKey,o.key),...o.version?[c(i.sourceVersion,o.version)]:[v(i.sourceVersion)]),m(c(i.targetKey,o.key),...o.version?[c(i.targetVersion,o.version)]:[v(i.targetVersion)])));return!0}catch(t){return u.error("Error deleting entities",t),!1}}async deleteEntityRelation(e){try{return await this.#e.client.delete(i).where(c(i.id,e)),e}catch{return null}}async softDeleteEntities(e,t,s){try{const a=e.map(n=>{const d={type:n.type,key:n.key,title:n.title,summary:n.summary??void 0,tags:n.tags??void 0,metadata:n.metadata??void 0,git:n.git??void 0,contact:n.contact??void 0,links:n.links??void 0,version:n.version??void 0};return this.createEntity({entity:d,revision:t,sourceFile:n.sourceFile??"",fileHash:s,isDeleted:!0})});return await E(a,w,async n=>n)}catch(a){return u.error("Error soft deleting entities",a),[]}}async deleteEntityRelations(e){try{const t=C(e);return t?(await this.#e.client.delete(i).where(t),!0):!1}catch(t){return u.error("Error deleting entity relations",t),!1}}async upsertEntityRelation(e){if(!e)return null;try{const{sourceKey:t,targetKey:s,sourceVersion:a,targetVersion:o,sourceRevision:n,targetRevision:d,...l}=e,f=await this.#e.client.insert(i).values(e).onConflictDoUpdate({target:[i.sourceKey,i.targetKey,i.sourceVersion,i.targetVersion,i.sourceRevision,i.targetRevision,i.sourceToTargetRelation],set:l}).returning();return f?.length?f[0]:null}catch(t){return u.error("Error creating entity relation",t),null}}async#n(e,t){const{key:s,source:a,version:o,isDefaultVersion:n,...d}=e,p=(await this.#e.client.select({id:r.id}).from(r).where(m(c(r.key,s),c(r.source,a??"file"),o?c(r.version,o):v(r.version))).limit(1).run()).rows.length>0?this.#e.client.update(r).set(d).where(m(c(r.key,s),c(r.source,a??"file"),o?c(r.version,o):v(r.version))).run():this.#e.client.insert(r).values(e).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:d}).run(),y=t?.map(g=>{const h=K({relation:g,sourceFile:e.sourceFile??"",fileHash:e.fileHash??"",sourceKey:e.key,sourceVersion:e.version??null,sourceRevision:e.revision??null,organizationId:this.#t,projectId:this.#r});return this.#e.client.insert(i).values(h).onConflictDoUpdate({target:[i.sourceKey,i.targetKey,i.sourceVersion,i.targetVersion,i.sourceRevision,i.targetRevision,i.sourceToTargetRelation],set:h}).run()})??[];await E([p,...y],w,async g=>g)}async updateEntityScorecardsStatus(e,t){try{return(await this.#e.client.update(r).set({scorecardsStatus:t}).where(c(r.id,e)).returning()).length>0}catch(s){return u.error("Error updating entity scorecards status",s),!1}}async updateEntityScorecardsStatusIfCalculating(e,t){try{return(await this.#e.client.update(r).set({scorecardsStatus:t}).where(F`${r.id} = ${e} AND ${r.scorecardsStatus} = 'CALCULATING'`).returning()).length>0}catch(s){return u.error("Error updating entity scorecards status if calculating",s),!1}}async#o({entityKey:e,rbacTeams:t}){try{await this.#e.client.insert(I).values(z({rbacTeams:t,entityKey:e,organizationId:this.#t,projectId:this.#r})).onConflictDoUpdate({target:[I.entityKey],set:{rbacTeams:JSON.stringify(t)}}).run()}catch(s){u.error("Error saving entity attributes",s)}}async setEntitiesAsOutdated(e){try{const t=C(e);await this.#e.client.update(r).set({scorecardsStatus:"OUTDATED"}).where(t)}catch(t){u.error("Error updating entities as outdated",t)}}}export{re as CatalogEntitiesLocalWriteRepository};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{unionAll as C}from"drizzle-orm/sqlite-core";import{and as d,desc as D,eq as u,notExists as N,sql as i}from"drizzle-orm";import{VERSION_NOT_SPECIFIED as A}from"@redocly/theme/core/constants";import{entitiesTable as e}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as t}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{entitiesAttributesTable as p}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js";import{excludeFieldsFromFilter as W,getFirstFilterFieldValue as O}from"../../../../../providers/database/pagination/filter.js";import{applyPagination as S}from"../../../../../providers/database/pagination/index.js";import{createBffRelatedEntityFromQueryRow as k}from"../../mappers/create-bff-related-entity.js";import{mapEntityRelationRow as H}from"../../mappers/map-entity-relation-row.js";import{buildEntitiesExclusionFilter as L}from"../utils/build-entities-exclusion-filter.js";import{buildRbacFilter as q}from"../utils/build-rbac-filter.js";class te{#e;#i;constructor(n,r){this.#e=n,this.#i=r}async getRelationsForEntity(n,r,m){const y=await this.#t(n,r,m);return y?(await this.#e.client.select().from(y).run()).rows.map(a=>H(a)):[]}async getRelatedEntities({key:n,paginationParams:r,rbacTeams:m,excludedTypes:y,excludedEntities:l}){const a=O(r.filter,"version"),v=O(r.filter,"revision"),o=await this.#t(n,a,v);if(!o)return{items:[],total:0};const R=this.#e.client.select({relationType:o.relationName,direction:o.direction,key:e.key,revision:e.revision,id:e.id,type:e.type,title:e.title,summary:e.summary,tags:e.tags,metadata:e.metadata,createdAt:e.createdAt,updatedAt:e.updatedAt,source:e.source,sourceFile:e.sourceFile,version:e.version,isDeleted:e.isDeleted,isCurrent:e.isCurrent,rbacTeams:p.rbacTeams,dedupRn:i`ROW_NUMBER() OVER (PARTITION BY ${o.entityKey} ORDER BY ${o.priority} ASC, CASE WHEN ${o.entityRevision} = ${e.revision} THEN 1 ELSE 0 END DESC, CASE WHEN ${o.entityVersion} = ${e.version} THEN 1 ELSE 0 END DESC, ${e.isCurrent} DESC, ${e.revision} DESC)`.as("dedupRn")}).from(o).innerJoin(e,i`${o.entityKey} = ${e.key} AND (${o.entityRevision} = ${e.revision} OR ${o.entityRevision} = '' OR ${e.isCurrent} = 1) AND (${o.entityVersion} = ${e.version} OR ${o.entityVersion} = '' OR ${e.version} = ${A})`).leftJoin(p,u(e.key,p.entityKey)).as("unique_relations"),$=q(m,"unique_relations"),f=L(y,l,"unique_relations");let s=i`${R.dedupRn} = 1 AND COALESCE(${R.isDeleted}, 0) = 0`;$&&(s=i`${s} AND ${$}`),f&&(s=i`${s} AND ${f}`);const c=this.#e.client.select().from(R).$dynamic(),V=this.#e.client.select().from(R).$dynamic(),T=W(r.filter,["version","revision"]),g={...r,filter:T,baseWhereCondition:s},F=S(V,{...g,limit:void 0,skip:void 0,after:void 0,before:void 0}),B=this.#e.client.$count(F),h=r.limit||10,K=S(c,{...g,limit:h+1}),[b,_]=await Promise.all([K.run(),B]),w=b.rows.filter(E=>E.id!=null).map(E=>k(E)).filter(E=>E!==null),Q=w.slice(0,h),I=w.length>h;return{items:Q,hasMore:I,total:_}}async#r(n,r){if(r){const a=await(this.#i?C(this.#e.client.select({version:i.raw("version"),revision:i.raw("revision")}).from(i`remote.entities`).where(d(i`key = ${n}`,i`version = ${r}`)).orderBy(i.raw("revision DESC")),this.#e.client.select({version:e.version,revision:e.revision}).from(e).where(d(u(e.key,n),u(e.version,r),N(this.#e.client.select({id:i.raw("id")}).from(i`remote.entities as remote`).where(d(i`remote.key = ${e.key}`,i`remote.version = ${r}`))))).orderBy(D(e.revision))):this.#e.client.select({version:e.version,revision:e.revision}).from(e).where(d(u(e.key,n),u(e.version,r))).orderBy(D(e.revision))).limit(1).run();if(a.rows.length>0){const v=a.rows[0];return{version:v.version||null,revision:v.revision||null}}return null}const y=await(this.#i?C(this.#e.client.select({version:i.raw("version"),revision:i.raw("revision")}).from(i`remote.entities`).where(d(i`key = ${n}`,i`is_current = 1`)),this.#e.client.select({version:e.version,revision:e.revision}).from(e).where(d(u(e.key,n),u(e.isCurrent,!0),N(this.#e.client.select({id:i.raw("id")}).from(i`remote.entities as remote`).where(d(i`remote.key = ${e.key}`,i`remote.is_current = 1`)))))):this.#e.client.select({version:e.version,revision:e.revision}).from(e).where(d(u(e.key,n),u(e.isCurrent,!0)))).limit(1).run();if(y.rows.length>0){const l=y.rows[0];return{version:l.version||null,revision:l.revision||null}}return null}async#t(n,r,m){const y=m?{version:r||null,revision:m}:await this.#r(n,r||null),l=r||y?.version||null,a=m||y?.revision||null,v=!l||l===A,o=v?i`1 = 1`:i`(${t.sourceVersion} = ${l} OR ${t.sourceVersion} = '')`,R=v?i`1 = 1`:i`(${t.targetVersion} = ${l} OR ${t.targetVersion} = '')`,$=a?i`(${t.sourceRevision} <= ${a} OR ${t.sourceRevision} = '')`:i`1 = 0`,f=a?i`(${t.targetRevision} <= ${a} OR ${t.targetRevision} = '')`:i`1 = 0`,s=this.#e.client.select({entityKey:t.targetKey,entityRevision:t.targetRevision,entityVersion:t.targetVersion,relationName:t.sourceToTargetRelation,direction:i`'outgoing'`.as("direction"),priority:i`1`.as("priority"),isDeleted:t.isDeleted,rn:i`ROW_NUMBER() OVER (PARTITION BY ${t.targetKey}, ${t.sourceToTargetRelation} ORDER BY CASE WHEN ${t.sourceVersion} != '' THEN 1 ELSE 0 END DESC, ${t.sourceRevision} DESC)`.as("rn")}).from(t).where(d(u(t.sourceKey,n),o,$)).as("outgoing_filtered"),c=this.#e.client.select({entityKey:t.sourceKey,entityRevision:t.sourceRevision,entityVersion:t.sourceVersion,relationName:t.targetToSourceRelation,direction:i`'incoming'`.as("direction"),priority:i`2`.as("priority"),isDeleted:t.isDeleted,rn:i`ROW_NUMBER() OVER (PARTITION BY ${t.sourceKey}, ${t.targetToSourceRelation} ORDER BY CASE WHEN ${t.targetVersion} != '' THEN 1 ELSE 0 END DESC, ${t.targetRevision} DESC)`.as("rn")}).from(t).where(d(u(t.targetKey,n),R,f)).as("incoming_filtered");return this.#e.client.select({entityKey:s.entityKey,entityRevision:s.entityRevision,entityVersion:s.entityVersion,relationName:s.relationName,direction:s.direction,priority:s.priority}).from(s).where(i`${s.rn} = 1 AND COALESCE(${s.isDeleted}, 0) = 0`).unionAll(this.#e.client.select({entityKey:c.entityKey,entityRevision:c.entityRevision,entityVersion:c.entityVersion,relationName:c.relationName,direction:c.direction,priority:c.priority}).from(c).where(i`${c.rn} = 1 AND COALESCE(${c.isDeleted}, 0) = 0`)).as("all_relations")}}export{te as CatalogEntitiesRelationsRepository};
|