@redocly/realm 0.129.2 → 0.130.0-custom.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/CHANGELOG.md +392 -83
  2. package/dist/bin.d.ts +1 -0
  3. package/dist/bin.js +1 -1
  4. package/dist/cli/develop.js +1 -1
  5. package/dist/cli/eject/resolveEjectParams.js +1 -1
  6. package/dist/cli/prepare/copy-env-files.js +1 -1
  7. package/dist/cli/prepare/index.js +1 -1
  8. package/dist/cli/stats/collectors/openapi.d.ts +3 -0
  9. package/dist/cli/stats/collectors/openapi.js +1 -0
  10. package/dist/cli/stats/index.d.ts +7 -0
  11. package/dist/cli/stats/index.js +1 -0
  12. package/dist/cli/stats/options.d.ts +3 -0
  13. package/dist/cli/stats/options.js +1 -0
  14. package/dist/cli/telemetry/index.d.ts +2 -2
  15. package/dist/cli/telemetry/index.js +1 -1
  16. package/dist/client/App.js +1 -1
  17. package/dist/client/ErrorBoundary.js +1 -1
  18. package/dist/client/app/Sidebar/RequestAccessButton.js +2 -2
  19. package/dist/client/app/Sidebar/Sidebar.js +2 -2
  20. package/dist/client/app/Sidebar/helpers/filter-out-versioned-items.d.ts +23 -0
  21. package/dist/client/app/Sidebar/helpers/filter-out-versioned-items.js +1 -0
  22. package/dist/client/app/Sidebar/useSidebarItems.d.ts +2 -2
  23. package/dist/client/app/Sidebar/useSidebarItems.js +1 -1
  24. package/dist/client/app/hooks/catalog/useCatalogClassic.d.ts +1 -1
  25. package/dist/client/app/hooks/catalog/useCatalogClassic.js +1 -1
  26. package/dist/client/app/hooks/catalog/useCatalogFilter.js +1 -1
  27. package/dist/client/app/hooks/catalog/useCatalogViewMode.js +1 -1
  28. package/dist/client/app/hooks/catalog/useSearchTracker.js +1 -1
  29. package/dist/client/app/hooks/codeHighlight/useCodeHighlight.js +1 -1
  30. package/dist/client/app/hooks/usePageTimeTracker.js +1 -1
  31. package/dist/client/app/hooks/useRouteChangeTracker.js +1 -1
  32. package/dist/client/app/hooks/useTelemetry.d.ts +2 -2
  33. package/dist/client/app/pages/DevLogin/DevLogin.js +1 -1
  34. package/dist/client/app/search/message-handlers.d.ts +29 -0
  35. package/dist/client/app/search/message-handlers.js +1 -0
  36. package/dist/client/app/search/sse-parser.d.ts +10 -0
  37. package/dist/client/app/search/sse-parser.js +2 -0
  38. package/dist/client/app/search/useAiSearch.d.ts +9 -11
  39. package/dist/client/app/search/useAiSearch.js +1 -1
  40. package/dist/client/app/search/useSearch.js +1 -1
  41. package/dist/client/app/telemetry/index.d.ts +11 -1
  42. package/dist/client/app/telemetry/index.js +1 -1
  43. package/dist/client/browser-entry.js +5 -5
  44. package/dist/client/constants/ai-search.d.ts +30 -0
  45. package/dist/client/constants/ai-search.js +1 -0
  46. package/dist/client/constants/index.d.ts +2 -0
  47. package/dist/client/constants/index.js +1 -0
  48. package/dist/client/providers/hooks.js +1 -1
  49. package/dist/client/runtime/loader.js +1 -1
  50. package/dist/client/types/ai-search.d.ts +73 -0
  51. package/dist/client/types/ai-search.js +0 -0
  52. package/dist/client/types/index.d.ts +1 -0
  53. package/dist/config/env-config.d.ts +17 -0
  54. package/dist/config/env-config.js +1 -0
  55. package/dist/config/env-schema.d.ts +242 -0
  56. package/dist/config/env-schema.js +3 -0
  57. package/dist/config/env-schemas/api-urls.d.ts +24 -0
  58. package/dist/config/env-schemas/api-urls.js +1 -0
  59. package/dist/config/env-schemas/auth.d.ts +42 -0
  60. package/dist/config/env-schemas/auth.js +1 -0
  61. package/dist/config/env-schemas/catalog.d.ts +12 -0
  62. package/dist/config/env-schemas/catalog.js +1 -0
  63. package/dist/config/env-schemas/database.d.ts +15 -0
  64. package/dist/config/env-schemas/database.js +1 -0
  65. package/dist/config/env-schemas/environment-detection.d.ts +24 -0
  66. package/dist/config/env-schemas/environment-detection.js +1 -0
  67. package/dist/config/env-schemas/feature-flags.d.ts +24 -0
  68. package/dist/config/env-schemas/feature-flags.js +1 -0
  69. package/dist/config/env-schemas/organization-project.d.ts +27 -0
  70. package/dist/config/env-schemas/organization-project.js +1 -0
  71. package/dist/config/env-schemas/scorecards.d.ts +12 -0
  72. package/dist/config/env-schemas/scorecards.js +1 -0
  73. package/dist/config/env-schemas/search.d.ts +21 -0
  74. package/dist/config/env-schemas/search.js +1 -0
  75. package/dist/config/env-schemas/server-config.d.ts +51 -0
  76. package/dist/config/env-schemas/server-config.js +1 -0
  77. package/dist/config/env-schemas/site.d.ts +12 -0
  78. package/dist/config/env-schemas/site.js +1 -0
  79. package/dist/config/env-schemas/ssr.d.ts +18 -0
  80. package/dist/config/env-schemas/ssr.js +1 -0
  81. package/dist/config/env-schemas/telemetry.d.ts +15 -0
  82. package/dist/config/env-schemas/telemetry.js +1 -0
  83. package/dist/config/env-schemas/test.d.ts +22 -0
  84. package/dist/config/env-schemas/test.js +1 -0
  85. package/dist/constants/common.d.ts +4 -2
  86. package/dist/constants/common.js +1 -1
  87. package/dist/constants/l10n/langs/ar.js +1 -1
  88. package/dist/constants/l10n/langs/de.js +1 -1
  89. package/dist/constants/l10n/langs/en.js +1 -1
  90. package/dist/constants/l10n/langs/es.js +1 -1
  91. package/dist/constants/l10n/langs/fr.js +1 -1
  92. package/dist/constants/l10n/langs/hi.js +1 -1
  93. package/dist/constants/l10n/langs/it.js +1 -1
  94. package/dist/constants/l10n/langs/ja.js +1 -1
  95. package/dist/constants/l10n/langs/ko.js +1 -1
  96. package/dist/constants/l10n/langs/pl.js +1 -1
  97. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  98. package/dist/constants/l10n/langs/pt.js +1 -1
  99. package/dist/constants/l10n/langs/ru.js +1 -1
  100. package/dist/constants/l10n/langs/uk.js +1 -1
  101. package/dist/constants/l10n/langs/zh.js +1 -1
  102. package/dist/server/api-routes/execute-api-route.js +1 -1
  103. package/dist/server/api-routes/import-api-routes-handlers.js +1 -1
  104. package/dist/server/api-routes/run-api-routes-worker.js +1 -1
  105. package/dist/server/constants/common.js +1 -1
  106. package/dist/server/constants/plugins/catalog-entities.d.ts +1 -0
  107. package/dist/server/constants/plugins/catalog-entities.js +1 -1
  108. package/dist/server/entitlements/entitlements-provider.js +1 -1
  109. package/dist/server/esbuild/esbuild-logger.js +2 -2
  110. package/dist/server/esbuild/esbuild.js +3 -3
  111. package/dist/server/esbuild/plugins/assets-resolver.js +1 -1
  112. package/dist/server/esbuild/plugins/esbuild-compile-resolver.js +1 -1
  113. package/dist/server/esbuild/plugins/styled-components-ssr.js +1 -1
  114. package/dist/server/fs/cache.js +1 -1
  115. package/dist/server/fs/content-fs.d.ts +1 -0
  116. package/dist/server/fs/content-fs.js +1 -1
  117. package/dist/server/fs/last-modified-tracker.js +1 -1
  118. package/dist/server/fs/utils/is-loader-cache-enabled.js +1 -1
  119. package/dist/server/node-bundle-entry.js +1 -1
  120. package/dist/server/persistence/kv/repositories/kv-remote-repository.d.ts +1 -0
  121. package/dist/server/persistence/kv/repositories/kv-remote-repository.js +2 -1
  122. package/dist/server/persistence/kv/services/kv-service.js +1 -1
  123. package/dist/server/plugins/analytics/adobe/index.js +1 -1
  124. package/dist/server/plugins/analytics/amplitude/index.js +1 -1
  125. package/dist/server/plugins/analytics/fullstory/index.js +1 -1
  126. package/dist/server/plugins/analytics/ga/index.js +1 -1
  127. package/dist/server/plugins/analytics/gtm/browser-hooks.js +1 -1
  128. package/dist/server/plugins/analytics/gtm/index.js +1 -1
  129. package/dist/server/plugins/analytics/heap/index.js +1 -1
  130. package/dist/server/plugins/analytics/rudderstack/index.js +1 -1
  131. package/dist/server/plugins/analytics/segment/index.js +1 -1
  132. package/dist/server/plugins/asyncapi-docs/asyncapi-doc-loader.js +3 -3
  133. package/dist/server/plugins/asyncapi-docs/get-server-props.js +1 -1
  134. package/dist/server/plugins/asyncapi-docs/index.js +1 -1
  135. package/dist/server/plugins/asyncapi-docs/search/schema-processor.js +1 -1
  136. package/dist/server/plugins/asyncapi-docs/search/search-resolver.js +1 -1
  137. package/dist/server/plugins/asyncapi-docs/store-definition-bundles.js +1 -1
  138. package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.d.ts +2 -1
  139. package/dist/server/plugins/asyncapi-docs/template/AsyncApiDocs.js +9 -3
  140. package/dist/server/plugins/catalog-classic/get-server-props.d.ts +8 -3
  141. package/dist/server/plugins/catalog-classic/get-server-props.js +1 -1
  142. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +38 -64
  143. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  144. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +8 -0
  145. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.js +1 -0
  146. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +2 -1
  147. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
  148. package/dist/server/plugins/catalog-entities/database/mappers/{create-entity-relation.d.ts → create-entity-relation-read-model.d.ts} +2 -2
  149. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -0
  150. package/dist/server/plugins/catalog-entities/database/mappers/map-entity-relation-row.js +1 -1
  151. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +27 -0
  152. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -0
  153. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.d.ts +36 -0
  154. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -0
  155. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.d.ts +15 -4
  156. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +38 -27
  157. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +36 -9
  158. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +37 -21
  159. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +41 -42
  160. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
  161. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +3 -1
  162. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +1 -1
  163. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.d.ts +7 -1
  164. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +1 -1
  165. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +5 -9
  166. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
  167. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.d.ts +13 -0
  168. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.js +1 -0
  169. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.d.ts +31 -0
  170. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.js +9 -0
  171. package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.d.ts +34 -0
  172. package/dist/server/plugins/catalog-entities/database/repositories/utils/create-merged-entity-fields-for-select.js +13 -0
  173. package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.d.ts +23 -0
  174. package/dist/server/plugins/catalog-entities/database/repositories/utils/normalize-revision-flags.js +1 -0
  175. package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.d.ts +78 -0
  176. package/dist/server/plugins/catalog-entities/database/repositories/utils/semantic-version-sort.js +34 -0
  177. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  178. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  179. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +6 -4
  180. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  181. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  182. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +1 -1
  183. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  184. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
  185. package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
  186. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  187. package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +3 -0
  188. package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
  189. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +15 -1
  190. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.js +1 -1
  191. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +26 -164
  192. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.js +0 -1
  193. package/dist/server/plugins/catalog-entities/types/extractors.d.ts +4 -4
  194. package/dist/server/plugins/catalog-entities/types/openapi.d.ts +11 -0
  195. package/dist/server/plugins/catalog-entities/types/openapi.js +0 -0
  196. package/dist/server/plugins/catalog-entities/types/params.d.ts +6 -0
  197. package/dist/server/plugins/catalog-entities/types/params.js +0 -0
  198. package/dist/server/plugins/catalog-entities/utils/ajv-validator.js +1 -1
  199. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
  200. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +11 -0
  201. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.js +1 -0
  202. package/dist/server/plugins/config-parser/index.js +1 -1
  203. package/dist/server/plugins/config-parser/loaders/content-slugs-loader.js +1 -1
  204. package/dist/server/plugins/config-parser/loaders/nearest-redocly-config-loader.js +1 -1
  205. package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
  206. package/dist/server/plugins/default-theme/index.js +1 -1
  207. package/dist/server/plugins/entitlements/index.js +1 -1
  208. package/dist/server/plugins/graphql-docs/graphql-doc-loader.js +1 -1
  209. package/dist/server/plugins/graphql-docs/index.js +1 -1
  210. package/dist/server/plugins/graphql-docs/search/search-resolver.js +1 -1
  211. package/dist/server/plugins/graphql-docs/template/GraphQLDocs.js +6 -2
  212. package/dist/server/plugins/lifecycle.js +2 -2
  213. package/dist/server/plugins/markdown/attribute-resolvers/resolve-link.js +1 -1
  214. package/dist/server/plugins/markdown/compiler.d.ts +1 -0
  215. package/dist/server/plugins/markdown/compiler.js +1 -1
  216. package/dist/server/plugins/markdown/index.js +1 -1
  217. package/dist/server/plugins/markdown/is-partial.d.ts +1 -1
  218. package/dist/server/plugins/markdown/is-partial.js +1 -1
  219. package/dist/server/plugins/markdown/markdoc/import-user-tags.js +1 -1
  220. package/dist/server/plugins/markdown/markdoc/plugins/render-mermaid.js +1 -1
  221. package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.d.ts +1 -1
  222. package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.js +2 -2
  223. package/dist/server/plugins/markdown/markdown-static-data-loader.js +1 -1
  224. package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
  225. package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.d.ts +54 -0
  226. package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.js +1 -0
  227. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.d.ts +9 -8
  228. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
  229. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.d.ts +9 -8
  230. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
  231. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.d.ts +9 -8
  232. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
  233. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.d.ts +9 -8
  234. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
  235. package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +7 -13
  236. package/dist/server/plugins/mcp/docs-mcp/tools/index.js +1 -1
  237. package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.d.ts +9 -6
  238. package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.js +1 -1
  239. package/dist/server/plugins/mcp/docs-mcp/tools/search.d.ts +9 -2
  240. package/dist/server/plugins/mcp/docs-mcp/tools/search.js +1 -1
  241. package/dist/server/plugins/mcp/docs-mcp/tools/utils.d.ts +2 -1
  242. package/dist/server/plugins/mcp/docs-mcp/tools/utils.js +6 -6
  243. package/dist/server/plugins/mcp/docs-mcp/tools/whoami.d.ts +9 -2
  244. package/dist/server/plugins/mcp/docs-mcp/tools/whoami.js +1 -1
  245. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  246. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  247. package/dist/server/plugins/mcp/handlers/handle-mcp-request.d.ts +5 -0
  248. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -0
  249. package/dist/server/plugins/mcp/handlers/mcp-request-handler.d.ts +0 -1
  250. package/dist/server/plugins/mcp/handlers/mcp-request-handler.js +1 -1
  251. package/dist/server/plugins/mcp/servers/base-server.js +1 -1
  252. package/dist/server/plugins/mcp/types.d.ts +40 -0
  253. package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +3 -0
  254. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -0
  255. package/dist/server/plugins/nav-utils.d.ts +1 -1
  256. package/dist/server/plugins/nav-utils.js +1 -1
  257. package/dist/server/plugins/openapi-docs/decorators.d.ts +3 -0
  258. package/dist/server/plugins/openapi-docs/decorators.js +1 -1
  259. package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.d.ts +2 -4
  260. package/dist/server/plugins/openapi-docs/get-server-props-custom-fields.js +1 -1
  261. package/dist/server/plugins/openapi-docs/get-server-props.js +1 -1
  262. package/dist/server/plugins/openapi-docs/index.js +1 -1
  263. package/dist/server/plugins/openapi-docs/load-definition.d.ts +1 -0
  264. package/dist/server/plugins/openapi-docs/load-definition.js +3 -3
  265. package/dist/server/plugins/openapi-docs/openrpc-converter.d.ts +2 -0
  266. package/dist/server/plugins/openapi-docs/openrpc-converter.js +1 -0
  267. package/dist/server/plugins/openapi-docs/search/search-resolver.js +1 -1
  268. package/dist/server/plugins/openapi-docs/search-indexer.js +1 -1
  269. package/dist/server/plugins/openapi-docs/store-definition-bundles.js +1 -1
  270. package/dist/server/plugins/openapi-docs/template/OpenAPIDocs.js +8 -4
  271. package/dist/server/plugins/openapi-docs/template/helpers.d.ts +2 -2
  272. package/dist/server/plugins/openapi-docs/template/helpers.js +3 -3
  273. package/dist/server/plugins/openapi-docs/utils.d.ts +1 -0
  274. package/dist/server/plugins/scorecard-classic/compute-scorecard.d.ts +2 -1
  275. package/dist/server/plugins/scorecard-classic/compute-scorecard.js +4 -4
  276. package/dist/server/plugins/scorecard-classic/get-scorecard-config.d.ts +2 -1
  277. package/dist/server/plugins/scorecard-classic/index.js +1 -1
  278. package/dist/server/plugins/scorecard-classic/lint.d.ts +1 -1
  279. package/dist/server/plugins/scorecard-classic/lint.js +1 -1
  280. package/dist/server/plugins/scorecard-classic/loaders/scorecard-config.js +1 -1
  281. package/dist/server/plugins/scorecard-classic/loaders/scorecard.d.ts +6 -4
  282. package/dist/server/plugins/scorecard-classic/loaders/scorecard.js +1 -1
  283. package/dist/server/plugins/scorecard-classic/shared-utils.d.ts +1 -1
  284. package/dist/server/plugins/scorecard-classic/shared-utils.js +1 -1
  285. package/dist/server/plugins/scorecard-classic/template/Grid/Grid.d.ts +2 -1
  286. package/dist/server/plugins/scorecard-classic/template/Grid/Grid.js +3 -3
  287. package/dist/server/plugins/scorecard-classic/template/LevelIndicator.d.ts +1 -0
  288. package/dist/server/plugins/scorecard-classic/template/LevelIndicator.js +4 -4
  289. package/dist/server/plugins/scorecard-classic/template/components.js +1 -1
  290. package/dist/server/plugins/scorecard-classic/template/index.styles.d.ts +1 -0
  291. package/dist/server/plugins/scorecard-classic/template/index.styles.js +93 -19
  292. package/dist/server/plugins/scorecard-classic/template/index.types.d.ts +5 -1
  293. package/dist/server/plugins/scorecard-classic/template/useData.js +1 -1
  294. package/dist/server/plugins/scorecard-classic/template/views.js +1 -1
  295. package/dist/server/plugins/scorecard-classic/types.d.ts +5 -3
  296. package/dist/server/plugins/scorecard-classic/types.js +1 -1
  297. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.d.ts +12 -0
  298. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +1 -0
  299. package/dist/server/plugins/scorecards/database/scorecards-config-service.d.ts +11 -0
  300. package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -0
  301. package/dist/server/plugins/scorecards/plugin.js +1 -1
  302. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.d.ts +2 -1
  303. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.js +1 -1
  304. package/dist/server/plugins/scorecards/workers/scorecards.d.ts +1 -12
  305. package/dist/server/plugins/scorecards/workers/scorecards.js +1 -1
  306. package/dist/server/plugins/search/ai-indexer/prepare-ai-search-documents.js +1 -1
  307. package/dist/server/plugins/search/documents/search-documents.js +1 -1
  308. package/dist/server/plugins/search/engines/flexsearch/index.js +1 -1
  309. package/dist/server/plugins/search/engines/typesense/index.js +1 -1
  310. package/dist/server/plugins/search/index.js +1 -1
  311. package/dist/server/plugins/search/llmstxt/index.js +5 -5
  312. package/dist/server/plugins/search/utils.js +2 -2
  313. package/dist/server/plugins/sidebars/index.d.ts +0 -2
  314. package/dist/server/plugins/sidebars/index.js +3 -3
  315. package/dist/server/plugins/sso/index.js +1 -1
  316. package/dist/server/providers/database/base-repository.d.ts +1 -0
  317. package/dist/server/providers/database/base-repository.js +1 -1
  318. package/dist/server/providers/database/database-connection-factory.js +1 -1
  319. package/dist/server/providers/database/database-initialization-strategy.js +1 -1
  320. package/dist/server/providers/database/database-preconnect-service.js +1 -1
  321. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0005_catalog-relations-constraint-fix.sql +2 -0
  322. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0006_add-catalog-entitities-attributes-table.sql +11 -0
  323. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0005_snapshot.json +393 -0
  324. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0006_snapshot.json +458 -0
  325. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +14 -0
  326. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.d.ts +143 -0
  327. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js +1 -0
  328. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js +1 -1
  329. package/dist/server/providers/database/databases/main-sqlite/migrations/0006_change-scorecards-config-timestamps-field-types.sql +19 -0
  330. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0006_snapshot.json +261 -0
  331. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +7 -0
  332. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.d.ts +24 -18
  333. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.js +1 -1
  334. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
  335. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0007_catalog-relations-constraint-fix.sql +2 -0
  336. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0008_add-catalog-entitities-attributes-table.sql +11 -0
  337. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0007_snapshot.json +833 -0
  338. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0008_snapshot.json +898 -0
  339. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/_journal.json +14 -0
  340. package/dist/server/providers/database/pagination/entities-to-filter.d.ts +15 -0
  341. package/dist/server/providers/database/pagination/entities-to-filter.js +1 -0
  342. package/dist/server/providers/database/pagination/utils/index.d.ts +4 -0
  343. package/dist/server/providers/database/pagination/utils/index.js +1 -1
  344. package/dist/server/providers/database/pagination/utils/is-nested-condition.d.ts +16 -0
  345. package/dist/server/providers/database/pagination/utils/is-nested-condition.js +1 -0
  346. package/dist/server/providers/database/pagination/utils/is-simple-condition.d.ts +18 -0
  347. package/dist/server/providers/database/pagination/utils/is-simple-condition.js +1 -0
  348. package/dist/server/providers/database/pagination/utils/map-operator.d.ts +10 -0
  349. package/dist/server/providers/database/pagination/utils/map-operator.js +1 -0
  350. package/dist/server/providers/database/pagination/utils/transform-condition.d.ts +12 -0
  351. package/dist/server/providers/database/pagination/utils/transform-condition.js +1 -0
  352. package/dist/server/providers/database/sqld-not-running-error.d.ts +5 -0
  353. package/dist/server/providers/database/sqld-not-running-error.js +1 -0
  354. package/dist/server/ssr/render.js +1 -1
  355. package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.js +1 -1
  356. package/dist/server/ssr/utils.js +8 -8
  357. package/dist/server/store.d.ts +14 -6
  358. package/dist/server/store.js +1 -1
  359. package/dist/server/telemetry/index.js +1 -1
  360. package/dist/server/tools/notifiers/formatter.js +3 -3
  361. package/dist/server/tools/notifiers/helpers/colors.js +1 -1
  362. package/dist/server/tools/notifiers/logger.js +2 -2
  363. package/dist/server/tools/notifiers/reporter.js +9 -9
  364. package/dist/server/tools/notifiers/terminal-manager.js +4 -4
  365. package/dist/server/types/plugins/common.d.ts +7 -1
  366. package/dist/server/types/plugins/markdown.d.ts +2 -0
  367. package/dist/server/types/plugins/scorecards.d.ts +30 -0
  368. package/dist/server/types/plugins/scorecards.js +0 -0
  369. package/dist/server/utils/envs/get-api-route-allowed-env-variables.js +1 -1
  370. package/dist/server/utils/envs/load-env-variables.d.ts +1 -1
  371. package/dist/server/utils/envs/load-env-variables.js +1 -1
  372. package/dist/server/utils/envs/sanitize-branch-name.d.ts +6 -0
  373. package/dist/server/utils/envs/sanitize-branch-name.js +1 -0
  374. package/dist/server/utils/globs.js +1 -1
  375. package/dist/server/utils/is-catalog-entities-enabled.js +1 -1
  376. package/dist/server/utils/is-scorecards-enabled.js +1 -1
  377. package/dist/server/utils/lifecycle-hooks.js +1 -1
  378. package/dist/server/utils/rbac.d.ts +76 -7
  379. package/dist/server/utils/rbac.js +1 -1
  380. package/dist/server/utils/report-all-errors.js +1 -1
  381. package/dist/server/utils/set-execution-mode.d.ts +5 -0
  382. package/dist/server/utils/set-execution-mode.js +1 -0
  383. package/dist/server/utils/time/with-timestamp.d.ts +42 -10
  384. package/dist/server/utils/time/with-timestamp.js +1 -1
  385. package/dist/server/version.js +1 -1
  386. package/dist/server/web-server/auth.js +3 -3
  387. package/dist/server/web-server/dev-server.js +1 -1
  388. package/dist/server/web-server/handle-api-route-request.js +1 -1
  389. package/dist/server/web-server/http.js +2 -2
  390. package/dist/server/web-server/middleware/apiKeyMiddleware.js +1 -1
  391. package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +4 -6
  392. package/dist/server/web-server/middleware/catalogAuthMiddleware.js +1 -1
  393. package/dist/server/web-server/middleware/corsMiddleware.js +1 -1
  394. package/dist/server/web-server/middleware/dynamic-middleware/dynamic-middleware.js +1 -1
  395. package/dist/server/web-server/middleware/idleTimeoutMiddleware.js +1 -1
  396. package/dist/server/web-server/routes/ask-ai.js +1 -1
  397. package/dist/server/web-server/routes/auth.js +1 -1
  398. package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
  399. package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
  400. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  401. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  402. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.d.ts +3 -0
  403. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.js +0 -0
  404. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.d.ts +43 -0
  405. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.js +1 -0
  406. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +6823 -0
  407. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -0
  408. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +1102 -0
  409. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.js +1 -0
  410. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +10 -0
  411. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.js +1 -0
  412. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.d.ts +4 -0
  413. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.js +1 -0
  414. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +4 -0
  415. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.js +1 -0
  416. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +4 -0
  417. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.js +1 -0
  418. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +4 -0
  419. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.js +1 -0
  420. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +13 -0
  421. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.js +1 -0
  422. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +13 -0
  423. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.js +1 -0
  424. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +13 -0
  425. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.js +1 -0
  426. package/dist/server/web-server/routes/dynamic-route.js +1 -1
  427. package/dist/server/web-server/routes/error.js +1 -1
  428. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.d.ts +3 -0
  429. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.js +1 -0
  430. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.d.ts +11 -0
  431. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.js +1 -0
  432. package/dist/server/web-server/routes/index.js +1 -1
  433. package/dist/server/web-server/routes/info.js +1 -1
  434. package/dist/server/web-server/routes/mcp-oauth.js +1 -1
  435. package/dist/server/web-server/routes/otel/otel.js +1 -1
  436. package/dist/server/web-server/routes/page-data.js +1 -1
  437. package/dist/server/web-server/routes/path-prefix-redirect.js +1 -1
  438. package/dist/server/web-server/utils.d.ts +2 -2
  439. package/dist/server/workers/mcp-tool-worker-pool.d.ts +4 -0
  440. package/dist/server/workers/mcp-tool-worker-pool.js +1 -0
  441. package/dist/server/workers/mcp-tool-worker.d.ts +2 -0
  442. package/dist/server/workers/mcp-tool-worker.js +1 -0
  443. package/dist/server/workers/types.d.ts +7 -1
  444. package/dist/server/workers/worker-pool.js +1 -1
  445. package/package.json +21 -23
  446. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation.js +0 -1
  447. package/dist/server/plugins/catalog-entities/entities/validate-entity.d.ts +0 -6
  448. package/dist/server/plugins/catalog-entities/entities/validate-entity.js +0 -1
  449. package/dist/server/plugins/mcp/workers/run-api-routes-worker.d.ts +0 -5
  450. package/dist/server/plugins/mcp/workers/run-api-routes-worker.js +0 -1
  451. package/dist/server/utils/envs/is-build-mode.d.ts +0 -2
  452. package/dist/server/utils/envs/is-build-mode.js +0 -1
  453. package/dist/server/utils/envs/is-develop-mode.d.ts +0 -7
  454. package/dist/server/utils/envs/is-develop-mode.js +0 -1
  455. package/dist/server/utils/envs/is-production-mode.d.ts +0 -10
  456. package/dist/server/utils/envs/is-production-mode.js +0 -1
  457. package/dist/server/workers/mcp-worker-pool.d.ts +0 -4
  458. package/dist/server/workers/mcp-worker-pool.js +0 -1
  459. package/dist/utils/env/is-local-development.d.ts +0 -13
  460. package/dist/utils/env/is-local-development.js +0 -1
  461. package/dist/utils/env/is-production.d.ts +0 -13
  462. package/dist/utils/env/is-production.js +0 -1
  463. package/dist/utils/env/is-web-view.d.ts +0 -14
  464. package/dist/utils/env/is-web-view.js +0 -1
@@ -1,38 +1,45 @@
1
- import{and as c,desc as M,eq as s,notExists as $,sql as e}from"drizzle-orm";import{unionAll as C}from"drizzle-orm/sqlite-core";import{logger as Q}from"../../../../../tools/notifiers/logger.js";import{entitiesTable as i}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{applyPagination as D}from"../../../../../providers/database/pagination/index.js";import{applyFilter as j,excludeFieldsFromFilter as H,getAllFilterFieldValues as S}from"../../../../../providers/database/pagination/filter.js";import{createBffEntity as O}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as n,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as R,createEntityFieldsForSelect as A}from"../utils.js";class U{#e;#t;constructor(t,o){this.#e=t,this.#t=o}async getEntitiesWithRelations(t={}){const o=S(t.filter,"owners");if(o.length>0)return this.#c(t,o);const d=S(t.filter,"domains");return d.length>0?this.#l(t,d):this.#a(t)}async#c(t,o){const d=this.#s(),l=this.#n(),m=this.#o(),y=l.as("combined_relations"),u=m.as("combined_target_entities"),h=o.map(r=>e`
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
2
  EXISTS (
3
- SELECT 1 FROM (${l}) cr
4
- WHERE cr.source_key = ${r}
3
+ SELECT 1 FROM (${h}) cr
4
+ WHERE cr.source_key = ${c}
5
5
  AND cr.source_to_target_relation = 'owns'
6
6
  AND cr.target_key = base_entities.key
7
7
  )
8
- `),_=h.length===1?h[0]:e`(${e.join(h,e` OR `)})`,b=S(t.filter,"domains");let w=_;if(b.length>0){const r=b.map(a=>e`
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
9
  EXISTS (
10
- SELECT 1 FROM (${l}) cr
11
- JOIN (${m}) d ON d.key = ${a}
10
+ SELECT 1 FROM (${h}) cr
11
+ JOIN (${b}) d ON d.key = ${m}
12
12
  WHERE d.type = 'domain'
13
13
  AND d.is_current = 1
14
- AND cr.source_key = ${a}
14
+ AND cr.source_key = ${m}
15
15
  AND cr.target_key = base_entities.key
16
16
  AND cr.source_to_target_relation = 'hasParts'
17
17
  )
18
- `),f=r.length===1?r[0]:e`(${e.join(r,e` OR `)})`;w=e`(${_} AND ${f})`}const p=H(t.filter,["owners","domains"]),g={...t,filter:p,baseWhereCondition:w},E=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();try{const r=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();D(r,{...g,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#e.client.$count(r),a=t.limit||10;D(E,{...g,limit:a+1});const v=E.as("paged_entities"),W=this.#e.client.with(y,u,v).select({...A("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(v),[F,I]=await Promise.all([W.run(),f]),k=F.rows,L=k.length>a;return{items:k.slice(0,a).map(N=>O(N)).filter(N=>N!==null),hasMore:L,total:I}}catch(r){return Q.error("Error getting entities with relations (owner optimized path):",r),{items:[],hasMore:!1,total:0}}}async#l(t,o){const d=this.#s(),l=this.#n(),m=this.#o(),y=l.as("combined_relations"),u=m.as("combined_target_entities"),h=o.map(r=>e`
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
19
  EXISTS (
20
- SELECT 1 FROM (${l}) cr
21
- JOIN (${m}) d ON d.key = ${r}
20
+ SELECT 1 FROM (${h}) cr
21
+ JOIN (${b}) d ON d.key = ${c}
22
22
  WHERE d.type = 'domain'
23
23
  AND d.is_current = 1
24
- AND cr.source_key = ${r}
24
+ AND cr.source_key = ${c}
25
25
  AND cr.target_key = base_entities.key
26
26
  AND cr.source_to_target_relation = 'hasParts'
27
27
  )
28
- `),_=h.length===1?h[0]:e`(${e.join(h,e` OR `)})`,b=S(t.filter,"owners");let w=_;if(b.length>0){const r=b.map(a=>e`
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
29
  EXISTS (
30
- SELECT 1 FROM (${l}) cr
31
- WHERE cr.source_key = ${a}
30
+ SELECT 1 FROM (${h}) cr
31
+ WHERE cr.source_key = ${m}
32
32
  AND cr.source_to_target_relation = 'owns'
33
33
  AND cr.target_key = base_entities.key
34
34
  )
35
- `),f=r.length===1?r[0]:e`(${e.join(r,e` OR `)})`;w=e`(${_} AND ${f})`}const p=H(t.filter,["domains","owners"]),g={...t,filter:p,baseWhereCondition:w},E=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();try{const r=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();D(r,{...g,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#e.client.$count(r),a=t.limit||10;D(E,{...g,limit:a+1});const v=E.as("paged_entities"),W=this.#e.client.with(y,u,v).select({...A("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(v),[F,I]=await Promise.all([W.run(),f]),k=F.rows,L=k.length>a;return{items:k.slice(0,a).map(N=>O(N)).filter(N=>N!==null),hasMore:L,total:I}}catch(r){return Q.error("Error getting entities with relations (domain optimized path):",r),{items:[],hasMore:!1,total:0}}}async#a(t){const o=this.#s(),d=this.#n(),l=this.#o(),m=d.as("combined_relations"),y=l.as("combined_target_entities"),u=this.#e.client.select(n).from(o.as("base_entities")).$dynamic(),{whereCondition:h}=j(u,t.filter);h&&u.where(h);try{const _=this.#e.client.select(n).from(o.as("base_entities")).$dynamic();h&&_.where(h);const b=this.#e.client.$count(_),w=t.limit||10;D(u,{...t,limit:w+1});const p=u.as("paged_entities"),g=this.#e.client.with(m,y,p).select({...A("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(p),[E,r]=await Promise.all([g.run(),b]),f=E.rows,a=f.length>w;return{items:f.slice(0,w).map(v=>O(v)).filter(v=>v!==null),hasMore:a,total:r}}catch(_){return Q.error("Error getting entities with relations (optimized path):",_),{items:[],hasMore:!1,total:0}}}#s(){return this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(c(s(e.raw("is_current"),1),s(e.raw("is_deleted"),!1))),this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1),$(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1)))}#n(){return this.#t?C(this.#e.client.select(R).from(e`remote.entities_relations`),this.#e.client.select(R).from(T).where($(this.#e.client.select({id:R.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${T.sourceKey}`)))):this.#e.client.select(R).from(T)}#o(){return this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(c(s(e.raw("is_current"),1),s(e.raw("is_deleted"),!1))),this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1),$(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1)))}async getEntityWithRelationsByKey(t,o){if(!t||t.trim()==="")return null;const d=o?.revision,l=o?.version,m=d?null:await this.#d(t,l||null),y=l??m?.version,u=d||m?.revision||null,_=(this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(s(i.key,t)),this.#e.client.select(n).from(i).where(c(s(i.key,t),$(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).where(s(i.key,t))).as("e"),w=(this.#t?C(this.#e.client.select(R).from(e`remote.entities_relations`),this.#e.client.select(R).from(T).where($(this.#e.client.select({id:R.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${T.sourceKey}`)))):this.#e.client.select(R).from(T)).as("combined_relations"),g=(this.#t?C(this.#e.client.select(n).from(e`remote.entities`),this.#e.client.select(n).from(i).where($(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)).as("combined_target_entities"),E=this.#e.client.with(_,w,g).select({...A("e"),domains:this.#i("e").as("domains"),owners:this.#r("e").as("owners")}).from(_).$dynamic();u?E.where(c(s(e.raw("revision"),u),y?s(e.raw("version"),y):void 0)):E.where(s(e.raw("is_current"),1)),E.limit(1);const r=await E.run();if(r.rows.length===0)return null;const f=r.rows[0];return O(f)}async#d(t,o){if(o){const y=await(this.#t?C(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`remote.entities`).where(c(e`key = ${t}`,e`version = ${o}`)).orderBy(e.raw("revision DESC")),this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.version,o),$(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.version = ${o}`))))).orderBy(M(i.revision))):this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.version,o))).orderBy(M(i.revision))).limit(1).run();if(y.rows.length>0){const u=y.rows[0];return{version:u.version||null,revision:u.revision||null}}return null}const l=await(this.#t?C(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`remote.entities`).where(c(e`key = ${t}`,e`is_current = 1`)),this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.isCurrent,!0),$(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.isCurrent,!0)))).limit(1).run();if(l.rows.length>0){const m=l.rows[0];return{version:m.version||null,revision:m.revision||null}}return null}#i(t){return e`
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`
36
43
  COALESCE(
37
44
  (
38
45
  SELECT json_group_array(
@@ -52,26 +59,28 @@ import{and as c,desc as M,eq as s,notExists as $,sql as e}from"drizzle-orm";impo
52
59
  SELECT DISTINCT d.*
53
60
  FROM combined_relations er
54
61
  JOIN combined_target_entities d ON d.key = er.source_key
62
+ ${n}
55
63
  WHERE er.source_to_target_relation = 'hasParts'
56
- AND er.target_key = ${e.raw(`${t}.key`)}
64
+ AND er.target_key = ${e.raw(`${i}.key`)}
57
65
  AND d.type = 'domain'
58
66
  AND d.is_current = 1
67
+ ${o}
59
68
  AND CASE
60
- WHEN ${e.raw(`${t}.version`)} = ''
69
+ WHEN ${e.raw(`${i}.version`)} = ''
61
70
  THEN er.target_version = ''
62
- ELSE (er.target_version = ${e.raw(`${t}.version`)} OR er.target_version = '')
71
+ ELSE (er.target_version = ${e.raw(`${i}.version`)} OR er.target_version = '')
63
72
  END
64
73
  AND CASE
65
- WHEN ${e.raw(`${t}.revision`)} = ''
74
+ WHEN ${e.raw(`${i}.revision`)} = ''
66
75
  THEN 1 = 1
67
- ELSE (er.target_revision <= ${e.raw(`${t}.revision`)} OR er.target_revision = '')
76
+ ELSE (er.target_revision <= ${e.raw(`${i}.revision`)} OR er.target_revision = '')
68
77
  END
69
78
  LIMIT 10
70
79
  ) d
71
80
  ),
72
81
  json_array()
73
82
  )
74
- `}#r(t){return e`
83
+ `}#s(i,s){const{join:n,filter:o}=G(s,"o.key");return e`
75
84
  COALESCE(
76
85
  (
77
86
  SELECT json_group_array(
@@ -91,22 +100,24 @@ import{and as c,desc as M,eq as s,notExists as $,sql as e}from"drizzle-orm";impo
91
100
  SELECT DISTINCT o.*
92
101
  FROM combined_relations er
93
102
  JOIN combined_target_entities o ON o.key = er.source_key
103
+ ${n}
94
104
  WHERE er.source_to_target_relation = 'owns'
95
- AND er.target_key = ${e.raw(`${t}.key`)}
105
+ AND er.target_key = ${e.raw(`${i}.key`)}
96
106
  AND o.is_current = 1
107
+ ${o}
97
108
  AND CASE
98
- WHEN ${e.raw(`${t}.version`)} = ''
109
+ WHEN ${e.raw(`${i}.version`)} = ''
99
110
  THEN er.target_version = ''
100
- ELSE (er.target_version = ${e.raw(`${t}.version`)} OR er.target_version = '')
111
+ ELSE (er.target_version = ${e.raw(`${i}.version`)} OR er.target_version = '')
101
112
  END
102
113
  AND CASE
103
- WHEN ${e.raw(`${t}.revision`)} = ''
114
+ WHEN ${e.raw(`${i}.revision`)} = ''
104
115
  THEN 1 = 1
105
- ELSE (er.target_revision <= ${e.raw(`${t}.revision`)} OR er.target_revision = '')
116
+ ELSE (er.target_revision <= ${e.raw(`${i}.revision`)} OR er.target_revision = '')
106
117
  END
107
118
  LIMIT 10
108
119
  ) o
109
120
  ),
110
121
  json_array()
111
122
  )
112
- `}}export{U as CatalogEntitiesBffRepository};
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};
@@ -2,6 +2,8 @@ import type { BffCatalogEntity, BffCatalogRelatedEntity } from '@redocly/theme/c
2
2
  import type { PaginationParams } from '../../../../../providers/database/pagination/schemas.js';
3
3
  import type { EntityRelationReadModelSchema } from '../../../schemas/read-model-schemas.js';
4
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';
5
7
  import { type EntityReadModelSchema, type EntityRevisionSummary } from '../../../schemas/read-model-schemas.js';
6
8
  export type ListResult<T> = {
7
9
  items: T[];
@@ -11,6 +13,9 @@ export type ListResult<T> = {
11
13
  export type CatalogFiltersParams = {
12
14
  entitiesTypes?: string[];
13
15
  emptyFilters?: string[];
16
+ rbacTeams?: string[];
17
+ excludedTypes?: string[];
18
+ excludedEntities?: string[];
14
19
  };
15
20
  export type FilterOption = {
16
21
  value: string;
@@ -20,21 +25,37 @@ export declare class CatalogEntitiesLocalReadRepository {
20
25
  #private;
21
26
  constructor(db: DatabaseClient);
22
27
  attachDatabase(databasePath: string): Promise<void>;
23
- getEntities(paginationParams?: PaginationParams): Promise<ListResult<EntityReadModelSchema>>;
28
+ getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
29
+ paginationParams: PaginationParams;
30
+ rbacTeams?: string[];
31
+ excludedTypes?: string[];
32
+ excludedEntities?: string[];
33
+ }): Promise<ListResult<EntityReadModelSchema>>;
24
34
  getEntityKeysAndVersionsBySourceFile(sourceFile: string): Promise<Set<string>>;
25
35
  listEntityRevisions(entityKey: string, version?: string | null): Promise<EntityRevisionSummary[]>;
26
36
  getEntitiesCountByTypes(): Promise<{
27
37
  type: string;
28
38
  count: number;
29
39
  }[]>;
30
- getEntityByKey(key: string): Promise<EntityReadModelSchema | null>;
31
- getOneOutdatedEntity(): Promise<EntityReadModelSchema | null>;
40
+ getEntityById(id: string, params?: GetEntityByIdParams): Promise<EntityReadModelSchema | null>;
41
+ getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
32
42
  getEntitiesRelations(paginationParams?: PaginationParams): Promise<ListResult<EntityRelationReadModelSchema>>;
33
43
  getEntityRelationById(id: string): Promise<EntityRelationReadModelSchema | null>;
34
- getEntitiesWithRelations(paginationParams?: PaginationParams): Promise<ListResult<BffCatalogEntity>>;
35
- getEntityWithRelationsByKey(entityKey: string, filter?: {
36
- revision?: string | null;
37
- version?: string | 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[];
38
59
  }): Promise<BffCatalogEntity | null>;
39
60
  getRelationsForEntity(key: string, version?: string | null, revision?: string | null): Promise<{
40
61
  targetKey: string;
@@ -43,7 +64,13 @@ export declare class CatalogEntitiesLocalReadRepository {
43
64
  direction: "outgoing" | "incoming";
44
65
  priority: number;
45
66
  }[]>;
46
- getRelatedEntities(key: string, paginationParams?: PaginationParams): Promise<ListResult<BffCatalogRelatedEntity>>;
47
- getCatalogFilters({ entitiesTypes, emptyFilters, }: CatalogFiltersParams): Promise<Record<string, FilterOption[]>>;
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[]>>;
48
75
  }
49
76
  //# sourceMappingURL=catalog-entities-local-read-repository.d.ts.map
@@ -1,4 +1,15 @@
1
- import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as e}from"drizzle-orm";import{unionAll as f}from"drizzle-orm/sqlite-core";import{logger as b}from"../../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as k}from"@redocly/theme/core/constants";import{applyPagination as S}from"../../../../../providers/database/pagination/index.js";import{FIELDS_TO_SELECT_FOR_ENTITY as c,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as m}from"../utils.js";import{createEntityReadModel as O}from"../../mappers/create-entity-read-model.js";import{createEntityRelation as C}from"../../mappers/create-entity-relation.js";import{entitiesTable as t}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{CatalogEntitiesRelationsRepository as I}from"./catalog-entities-relations-repository.js";import{CatalogEntitiesBffRepository as g}from"./catalog-entities-bff-repository.js";class j{#e;#t=void 0;#i;#s;constructor(i){this.#e=i,this.#i=new I(this.#e,this.#t||""),this.#s=new g(this.#e,this.#t||"")}async attachDatabase(i){this.#t!==i&&(this.#t=i,await this.#e.client.run(e`ATTACH DATABASE ${i} AS remote`),this.#i=new I(this.#e,i),this.#s=new g(this.#e,i))}async getEntities(i={}){const s=this.#t?f(this.#e.client.select(c).from(e`remote.entities`),this.#e.client.select(c).from(t).where(E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`)))):this.#e.client.select(c).from(t),r=this.#e.client.select(c).from(s.as("combined_entities")),o=this.#e.client.select(c).from(s.as("combined_entities")).$dynamic(),_=S(o,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),a=this.#e.client.$count(_),u=r.$dynamic(),d=i.limit||10,h=S(u,{...i,limit:d+1}),[T,N]=await Promise.all([h.run(),a]),p=T.rows,w=p.length>d;return{items:p.slice(0,d).map(R=>O(R)).filter(R=>R!==null),hasMore:w,total:N}}async getEntityKeysAndVersionsBySourceFile(i){const s=this.#t?f(this.#e.client.select({keyVersion:e`key || ':' || COALESCE(version, ${k})`.as("keyVersion")}).from(e`remote.entities`).where(l(e`source_file = ${i}`,e`source = 'file'`,e`key IS NOT NULL`)),this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${k})`.as("keyVersion")}).from(t).where(l(n(t.sourceFile,i),n(t.source,"file"),e`${t.key} IS NOT NULL`,E(this.#e.client.select({key:e.raw("key")}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`))))):this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${k})`.as("keyVersion")}).from(t).where(l(n(t.sourceFile,i),n(t.source,"file"),v(t.key))),r=await this.#e.client.selectDistinct({keyVersion:e`combined_keys_versions.keyVersion`}).from(s.as("combined_keys_versions")).run();return new Set(r.rows.map(o=>o.keyVersion))}async listEntityRevisions(i,s){const r=[n(t.key,i),n(t.isDeleted,!1),...s?[n(t.version,s)]:[]],o=this.#t?f(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(e`remote.entities`).where(l(e`key = ${i}`,s?e`version = ${s}`:void 0)),this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(l(...r,E(this.#e.client.select({version:e.raw("version")}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.version = ${t.version}`,e`remote.revision = ${t.revision}`)))))):this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(l(...r));return(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.raw("is_current DESC"),e.raw("updated_at DESC"),e.raw("created_at DESC")).run()).rows.map(a=>({version:a.version||null,revision:a.revision??"",isCurrent:a.is_current!==null?!!a.is_current:!1,createdAt:a.created_at||null,updatedAt:a.updated_at||null,isDefaultVersion:a.is_default_version!==null?!!a.is_default_version:!1}))}async getEntitiesCountByTypes(){const i=this.#t?f(this.#e.client.select({type:e`type`}).from(e`remote.entities`).where(l(n(e.raw("is_current"),1),n(e.raw("is_deleted"),!1))),this.#e.client.select({type:t.type}).from(t).where(l(n(t.isCurrent,!0),n(t.isDeleted,!1),E(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.is_current = 1`)))))):this.#e.client.select({type:t.type}).from(t).where(l(n(t.isCurrent,!0),n(t.isDeleted,!1)));return this.#e.client.select({type:t.type,count:L()}).from(i.as("combined_entities")).groupBy(t.type).where(n(t.isDeleted,!1))}async getEntityByKey(i){const o=(await(this.#t?f(this.#e.client.select(c).from(e`remote.entities`).where(l(n(t.key,i),n(e.raw("is_current"),1),n(e.raw("is_deleted"),!1))),this.#e.client.select(c).from(t).where(l(n(t.key,i),n(t.isCurrent,!0),n(t.isDeleted,!1),E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(c).from(t).where(l(n(t.key,i),n(t.isCurrent,!0),n(t.isDeleted,!1)))).run()).rows[0];return o?O(o):null}async getOneOutdatedEntity(){const i=this.#t?f(this.#e.client.select(c).from(e`remote.entities`),this.#e.client.select(c).from(t).where(E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`)))):this.#e.client.select(c).from(t),r=(await this.#e.client.select(c).from(i.as("combined_entities")).where(D(e`combined_entities.scorecards_status = 'OUTDATED'`,e`combined_entities.scorecards_status IS NULL`)).orderBy(e`combined_entities.updated_at ASC`).limit(1).run()).rows[0];return r?O(r):null}async getEntitiesRelations(i={}){const s=this.#t?f(this.#e.client.select(m).from(e`remote.entities_relations`),this.#e.client.select(m).from(y).where(E(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${y.sourceKey}`)))):this.#e.client.select(m).from(y),r=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),o=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),_=S(o,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),a=this.#e.client.$count(_),u=i.limit||10,d=S(r,{...i,limit:u+1}),[h,T]=await Promise.all([d.run(),a]),N=h.rows,p=N.length>u;return{items:N.slice(0,u).map(w=>C(w)).filter(w=>w!==null),hasMore:p,total:T}}async getEntityRelationById(i){const o=(await(this.#t?f(this.#e.client.select(m).from(e`remote.entities_relations`).where(n(y.id,i)),this.#e.client.select(m).from(y).where(l(n(y.id,i),E(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.id = ${y.id}`))))):this.#e.client.select(m).from(y).where(n(y.id,i))).run()).rows[0];return o?C(o):null}async getEntitiesWithRelations(i={}){return this.#s.getEntitiesWithRelations(i)}async getEntityWithRelationsByKey(i,s){return this.#s.getEntityWithRelationsByKey(i,s)}async getRelationsForEntity(i,s,r){return this.#i.getRelationsForEntity(i,s,r)}async getRelatedEntities(i,s={}){return this.#i.getRelatedEntities(i,s)}async getCatalogFilters({entitiesTypes:i=[],emptyFilters:s=[]}){if(!s.length)return{};try{return await this.#r(i),(s.includes("domains")||s.includes("owners"))&&await this.#n(),await this.#o(s)}catch(r){return console.error("Error fetching catalog filters:",r),{}}finally{await this.#l()}}async#r(i){if(this.#t?await this.#e.client.run(e`
1
+ import{and as u,count as F,eq as _,isNotNull as X,notExists as f,or as J,sql as e}from"drizzle-orm";import{unionAll as p}from"drizzle-orm/sqlite-core";import{logger as q}from"../../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as v}from"@redocly/theme/core/constants";import{applyPagination as R}from"../../../../../providers/database/pagination/index.js";import{applyFilter as P}from"../../../../../providers/database/pagination/filter.js";import{createEntityFieldsForSelect as S,FIELDS_TO_SELECT_FOR_ENTITY as h,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as m}from"../utils.js";import{createEntityReadModel as g}from"../../mappers/create-entity-read-model.js";import{entitiesTable as t}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 d}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-attributes-table.js";import{CatalogEntitiesRelationsRepository as b}from"./catalog-entities-relations-repository.js";import{CatalogEntitiesBffRepository as $}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 A}from"../utils/build-entities-exclusion-filter.js";import{buildRbacFilter as T,buildRbacFilterRaw as Y}from"../utils/build-rbac-filter.js";import{createEntityRelationReadModel as M}from"../../mappers/create-entity-relation-read-model.js";class Ee{#e;#t=void 0;#i;#s;constructor(i){this.#e=i,this.#i=new b(this.#e,this.#t||""),this.#s=new $(this.#e,this.#t||"")}async attachDatabase(i){this.#t!==i&&(this.#t=i,await this.#e.client.run(e`ATTACH DATABASE ${i} AS remote`),this.#i=new b(this.#e,i),this.#s=new $(this.#e,i))}async getEntities({paginationParams:i,rbacTeams:s,excludedTypes:r,excludedEntities:n}){const o=A(r,n,"remote.entities"),c=A(r,n,"entities"),a=A(r,n,"r"),l=this.#t?p(this.#e.client.select(S("remote.entities")).from(e`remote.entities`).leftJoin(e`remote.entities_attributes`,_(t.key,d.entityKey)).where(u(T(s,"remote.entities_attributes"),o,f(this.#e.client.select({id:h.id}).from(t).where(u(e`${t.key} = remote.entities.key`,e`${t.version} = remote.entities.version`,e`${t.revision} = remote.entities.revision`))))),this.#e.client.select(S("entities")).from(t).leftJoin(d,_(t.key,d.entityKey)).where(u(T(s,"entities_attributes"),c,f(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as r`).where(u(e`r.key = ${t.key}`,e`r.version = ${t.version}`,e`r.revision = ${t.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(T(s,"ea"),a))):this.#e.client.select(S("entities")).from(t).leftJoin(d,_(t.key,d.entityKey)).where(u(T(s,"entities_attributes"),c)),N=this.#e.client.select(h).from(l.as("combined_entities")),E=this.#e.client.select(h).from(l.as("combined_entities")).$dynamic(),k=R(E,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),O=this.#e.client.$count(k),w=N.$dynamic(),I=i.limit||10,U=R(w,{...i,limit:I+1}),[W,V]=await Promise.all([U.run(),O]),D=W.rows,H=D.length>I;return{items:D.slice(0,I).map(C=>g(C)).filter(C=>C!==null),hasMore:H,total:V}}async getEntityKeysAndVersionsBySourceFile(i){const s=this.#t?p(this.#e.client.select({keyVersion:e`key || ':' || COALESCE(version, ${v})`.as("keyVersion")}).from(e`remote.entities`).where(u(e`source_file = ${i}`,e`source = 'file'`,e`key IS NOT NULL`)),this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${v})`.as("keyVersion")}).from(t).where(u(_(t.sourceFile,i),_(t.source,"file"),e`${t.key} IS NOT NULL`,f(this.#e.client.select({key:e.raw("key")}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`))))):this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${v})`.as("keyVersion")}).from(t).where(u(_(t.sourceFile,i),_(t.source,"file"),X(t.key))),r=await this.#e.client.selectDistinct({keyVersion:e`combined_keys_versions.keyVersion`}).from(s.as("combined_keys_versions")).run();return new Set(r.rows.map(n=>n.keyVersion))}async listEntityRevisions(i,s){const r=[_(t.key,i),_(t.isDeleted,!1),...s?[_(t.version,s)]:[]],n={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?p(this.#e.client.select(n).from(e`remote.entities`).where(u(e`key = ${i}`,e`is_deleted = 0`,s?e`version = ${s}`:void 0,f(this.#e.client.select({id:e.raw("id")}).from(t).where(u(e`${t.key} = remote.entities.key`,e`${t.version} = remote.entities.version`,e`${t.revision} = remote.entities.revision`))))),this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(u(...r,f(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as r`).where(u(e`r.key = ${t.key}`,e`r.version = ${t.version}`,e`r.revision = ${t.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 = ${i}`,e`r.is_deleted = 0`,e`l.is_deleted = 0`,s?e`r.version = ${s}`:void 0))):this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(u(...r)),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(l=>({version:l.version,revision:l.revision??"",isCurrent:l.is_current!==null?!!l.is_current:!1,createdAt:l.created_at,updatedAt:l.updated_at,isDefaultVersion:l.is_default_version!==null?!!l.is_default_version:!1}));return x(a),a}async getEntitiesCountByTypes(){if(this.#t){const i=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:F()}).from(e`(SELECT * FROM (${i}) WHERE rn = 1) as highest_version_entities`).groupBy(e`type`)}return this.#e.client.select({type:t.type,count:F()}).from(t).where(u(_(t.isCurrent,!0),_(t.isDeleted,!1))).groupBy(t.type)}async getEntityById(i,s){const{rbacTeams:r,excludedTypes:n,excludedEntities:o}=s||{},c=A(n,o,"remote.entities"),a=A(n,o,"entities"),E=(await(this.#t?p(this.#e.client.select(S("remote.entities")).from(e`remote.entities`).leftJoin(e`remote.entities_attributes`,_(t.key,d.entityKey)).where(u(e`remote.entities.id = ${i}`,T(r,"remote.entities_attributes"),c)),this.#e.client.select(S("entities")).from(t).leftJoin(d,_(t.key,d.entityKey)).where(u(_(t.id,i),T(r,"entities_attributes"),a))):this.#e.client.select(S("entities")).from(t).leftJoin(d,_(t.key,d.entityKey)).where(u(_(t.id,i),T(r,"entities_attributes"),a))).run()).rows[0];return E?g(E):null}async getOutdatedEntities(i){const s=this.#t?p(this.#e.client.select(h).from(e`remote.entities`),this.#e.client.select(h).from(t).where(f(this.#e.client.select({id:h.id}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`)))):this.#e.client.select(h).from(t),r=this.#e.client.select(h).from(s.as("combined_entities")).$dynamic(),{whereCondition:n}=P(r,i),o=J(e`combined_entities.scorecards_status = 'OUTDATED'`,e`combined_entities.scorecards_status IS NULL`),c=n?u(n,o):o;return(await r.where(c).run()).rows.map(l=>g(l)).filter(l=>l!==null)}async getEntitiesRelations(i={}){const s=this.#t?p(this.#e.client.select(m).from(e`remote.entities_relations`),this.#e.client.select(m).from(y).where(f(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${y.sourceKey}`)))):this.#e.client.select(m).from(y),r=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),n=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),o=R(n,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),c=this.#e.client.$count(o),a=i.limit||10,l=R(r,{...i,limit:a+1}),[N,E]=await Promise.all([l.run(),c]),k=N.rows,O=k.length>a;return{items:k.slice(0,a).map(w=>M(w)).filter(w=>w!==null),hasMore:O,total:E}}async getEntityRelationById(i){const n=(await(this.#t?p(this.#e.client.select(m).from(e`remote.entities_relations`).where(_(y.id,i)),this.#e.client.select(m).from(y).where(u(_(y.id,i),f(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.id = ${y.id}`))))):this.#e.client.select(m).from(y).where(_(y.id,i))).run()).rows[0];return n?M(n):null}async getEntitiesWithRelations({paginationParams:i,rbacTeams:s,excludedEntities:r,excludedTypes:n}){return this.#s.getEntitiesWithRelations({paginationParams:i,rbacTeams:s,excludedEntities:r,excludedTypes:n})}async getEntityWithRelationsByKey({entityKey:i,filter:s,rbacTeams:r,excludedTypes:n,excludedEntities:o}){return this.#s.getEntityWithRelationsByKey({entityKey:i,filter:s,rbacTeams:r,excludedTypes:n,excludedEntities:o})}async getRelationsForEntity(i,s,r){return this.#i.getRelationsForEntity(i,s,r)}async getRelatedEntities({key:i,paginationParams:s,rbacTeams:r,excludedTypes:n,excludedEntities:o}){return this.#i.getRelatedEntities({key:i,paginationParams:s,rbacTeams:r,excludedTypes:n,excludedEntities:o})}async getCatalogFilters({entitiesTypes:i=[],emptyFilters:s=[],rbacTeams:r,excludedTypes:n,excludedEntities:o}){if(!s.length)return{};try{return await this.#r({entitiesTypes:i,rbacTeams:r,excludedTypes:n,excludedEntities:o}),(s.includes("domains")||s.includes("owners"))&&await this.#o(),await this.#a(s)}catch(c){return console.error("Error fetching catalog filters:",c),{}}finally{await this.#c()}}async#r({entitiesTypes:i,rbacTeams:s,excludedTypes:r,excludedEntities:n}){const o=Y(s,"ea"),c=this.#n(r,n);if(this.#t){const a=["e.is_current = 1","e.is_deleted = 0"];o&&a.push(o),c&&a.push(c.replace(/ENTITY_ALIAS/g,"e"));const l=["r.key IS NULL","e.is_current = 1","e.is_deleted = 0"];o&&l.push(o),c&&l.push(c.replace(/ENTITY_ALIAS/g,"e")),await this.#e.client.run(e.raw(`
2
13
  CREATE TEMP TABLE IF NOT EXISTS temp_combined_entities AS
3
14
  SELECT
4
15
  e.key,
@@ -6,7 +17,8 @@ import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as
6
17
  e.tags,
7
18
  e.metadata
8
19
  FROM remote.entities e
9
- WHERE e.is_current = 1
20
+ LEFT JOIN remote.entities_attributes ea ON ea.entity_key = e.key
21
+ WHERE ${a.join(" AND ")}
10
22
  UNION ALL
11
23
  SELECT
12
24
  e.key,
@@ -15,40 +27,43 @@ import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as
15
27
  e.metadata
16
28
  FROM entities e
17
29
  LEFT JOIN remote.entities r ON r.key = e.key AND r.is_current = 1
18
- WHERE r.key IS NULL AND e.is_current = 1
19
- `):await this.#e.client.run(e`
30
+ LEFT JOIN entities_attributes ea ON ea.entity_key = e.key
31
+ WHERE ${l.join(" AND ")}
32
+ `))}else{const a=["e.is_current = 1","e.is_deleted = 0"];o&&a.push(o),c&&a.push(c.replace(/ENTITY_ALIAS/g,"e")),await this.#e.client.run(e.raw(`
20
33
  CREATE TEMP TABLE IF NOT EXISTS temp_combined_entities AS
21
34
  SELECT
22
- key,
23
- type,
24
- tags,
25
- metadata
26
- FROM entities
27
- WHERE is_current = 1
28
- `),i.length){const s=i.map(r=>`'${r.replace(/'/g,"''")}'`).join(",");await this.#e.client.run(e.raw(`
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(i.length){const a=i.map(l=>`'${l.replace(/'/g,"''")}'`).join(",");await this.#e.client.run(e.raw(`
29
43
  CREATE TEMP TABLE IF NOT EXISTS temp_filtered_entities AS
30
44
  SELECT * FROM temp_combined_entities
31
- WHERE type IN (${s})
45
+ WHERE type IN (${a})
32
46
  `))}else await this.#e.client.run(e`
33
47
  CREATE TEMP TABLE IF NOT EXISTS temp_filtered_entities AS
34
48
  SELECT * FROM temp_combined_entities
35
49
  `);await this.#e.client.run(e`
36
50
  CREATE INDEX IF NOT EXISTS idx_temp_filtered_type ON temp_filtered_entities(type)
37
- `)}async#n(){this.#t?await this.#e.client.run(e`
51
+ `)}#n(i,s){const r=[];if(i&&i.length>0){const n=i.map(o=>`'${o.replace(/'/g,"''")}'`).join(", ");r.push(`ENTITY_ALIAS.type NOT IN (${n})`)}if(s&&s.length>0){const n=s.map(o=>`'${o.replace(/'/g,"''")}'`).join(", ");r.push(`ENTITY_ALIAS.key NOT IN (${n})`)}return r.length>0?`(${r.join(" AND ")})`:null}async#o(){this.#t?await this.#e.client.run(e`
38
52
  CREATE TEMP TABLE IF NOT EXISTS temp_combined_relations AS
39
53
  SELECT
40
54
  source_key,
41
55
  target_key,
42
56
  source_to_target_relation
43
57
  FROM remote.entities_relations
58
+ WHERE COALESCE(is_deleted, 0) = 0
44
59
  UNION ALL
45
60
  SELECT
46
61
  er.source_key,
47
62
  er.target_key,
48
63
  er.source_to_target_relation
49
64
  FROM entities_relations er
50
- LEFT JOIN remote.entities_relations r ON r.source_key = er.source_key
51
- WHERE r.source_key IS NULL
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
52
67
  `):await this.#e.client.run(e`
53
68
  CREATE TEMP TABLE IF NOT EXISTS temp_combined_relations AS
54
69
  SELECT
@@ -56,13 +71,14 @@ import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as
56
71
  target_key,
57
72
  source_to_target_relation
58
73
  FROM entities_relations
74
+ WHERE COALESCE(is_deleted, 0) = 0
59
75
  `),await this.#e.client.run(e`
60
76
  CREATE INDEX IF NOT EXISTS idx_temp_rel_source ON temp_combined_relations(source_key)
61
77
  `),await this.#e.client.run(e`
62
78
  CREATE INDEX IF NOT EXISTS idx_temp_rel_target ON temp_combined_relations(target_key)
63
79
  `),await this.#e.client.run(e`
64
80
  CREATE INDEX IF NOT EXISTS idx_temp_rel_relation ON temp_combined_relations(source_to_target_relation)
65
- `)}async#o(i){const s={},r=[],o=i.filter(u=>u.startsWith("metadata."));i.includes("type")&&r.push(`
81
+ `)}async#a(i){const s={},r=[],n=i.filter(a=>a.startsWith("metadata."));i.includes("type")&&r.push(`
66
82
  SELECT 'type' as filter_name, type as value, COUNT(*) as count
67
83
  FROM temp_filtered_entities
68
84
  WHERE type IS NOT NULL
@@ -104,12 +120,12 @@ import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as
104
120
  INNER JOIN temp_combined_entities tce ON tce.key = owner_key
105
121
  WHERE owner_key IS NOT NULL
106
122
  GROUP BY owner_key
107
- `);for(const u of o)await this.#a(u,s);if(r.length===0)return s;const _=r.join(" UNION ALL "),a=await this.#e.client.run(e.raw(_));if(a?.rows)for(const u of a.rows){const d=u.filter_name,h=u.value,T=Number(u.count)||0;s[d]||(s[d]=[]),h&&s[d].push({value:h,count:T})}return s}async#a(i,s){const r=i.substring(9),o=`$.${$(r)}`,_=await this.#e.client.run(e.raw(`
108
- SELECT json_extract(metadata, '${o}') as value, COUNT(*) as count
123
+ `);for(const a of n)await this.#l(a,s);if(r.length===0)return s;const o=r.join(" UNION ALL "),c=await this.#e.client.run(e.raw(o));if(c?.rows)for(const a of c.rows){const l=a.filter_name,N=a.value,E=Number(a.count)||0;s[l]||(s[l]=[]),N&&s[l].push({value:N,count:E})}return s}async#l(i,s){const r=i.substring(9),n=`$.${Q(r)}`,o=await this.#e.client.run(e.raw(`
124
+ SELECT json_extract(metadata, '${n}') as value, COUNT(*) as count
109
125
  FROM temp_filtered_entities
110
126
  WHERE metadata IS NOT NULL
111
127
  AND metadata != ''
112
- AND json_extract(metadata, '${o}') IS NOT NULL
113
- AND json_extract(metadata, '${o}') != ''
128
+ AND json_extract(metadata, '${n}') IS NOT NULL
129
+ AND json_extract(metadata, '${n}') != ''
114
130
  GROUP BY value
115
- `));_?.rows&&(s[i]=_.rows.map(a=>({value:a.value,count:Number(a.count)||0})).filter(a=>a.value))}async#l(){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(i){b.error("Error cleaning up temp tables:",i)}}}function $(A){return A.replace(/[^a-zA-Z0-9._-]/g,"")}export{j as CatalogEntitiesLocalReadRepository};
131
+ `));o?.rows&&(s[i]=o.rows.map(c=>({value:c.value,count:Number(c.count)||0})).filter(c=>c.value))}async#c(){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(i){q.error("Error cleaning up temp tables:",i)}}}function Q(L){return L.replace(/[^a-zA-Z0-9._-]/g,"")}export{Ee as CatalogEntitiesLocalReadRepository};
@@ -5,6 +5,8 @@ import type { ScorecardsStatus } from '../../../../../plugins/catalog-entities/e
5
5
  import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../../../providers/database/types.js';
6
6
  import type { CatalogFiltersParams } from './catalog-entities-local-read-repository.js';
7
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';
8
10
  import { BaseRepository } from '../../../../../providers/database/base-repository.js';
9
11
  import { type CreateEntityParams, type CreateEntityResult } from './catalog-entities-local-write-repository.js';
10
12
  export declare class CatalogEntitiesLocalRepository extends BaseRepository {
@@ -14,65 +16,61 @@ export declare class CatalogEntitiesLocalRepository extends BaseRepository {
14
16
  getEntitySources(): Record<string, SidebarConnectedEntity>;
15
17
  static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesLocalRepository>;
16
18
  attachDatabase(databasePath: string): Promise<void>;
17
- getEntities(paginationParams?: PaginationParams): Promise<import("./catalog-entities-local-read-repository.js").ListResult<import("../../../schemas/read-model-schemas.js").EntityReadModelSchema>>;
18
- getEntityByKey(key: string): Promise<import("../../../schemas/read-model-schemas.js").EntityReadModelSchema | null>;
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>;
19
26
  getEntityKeysAndVersionsBySourceFile(sourceFile: string): Promise<Set<string>>;
20
27
  getEntitiesCountByTypes(): Promise<{
21
28
  type: string;
22
29
  count: number;
23
30
  }[]>;
24
- getEntitiesRelations(paginationParams?: PaginationParams): Promise<import("./catalog-entities-local-read-repository.js").ListResult<{
25
- createdAt?: string | null | undefined;
26
- updatedAt?: string | null | undefined;
27
- sourceVersion?: string | null | undefined;
28
- sourceRevision?: string | null | undefined;
29
- targetVersion?: string | null | undefined;
30
- targetRevision?: string | null | undefined;
31
- type: string;
32
- id: string;
33
- organizationId: string;
34
- projectId: string;
35
- sourceKey: string;
36
- targetKey: string;
37
- }>>;
38
- getEntityRelationById(id: string): Promise<{
39
- createdAt?: string | null | undefined;
40
- updatedAt?: string | null | undefined;
41
- sourceVersion?: string | null | undefined;
42
- sourceRevision?: string | null | undefined;
43
- targetVersion?: string | null | undefined;
44
- targetRevision?: string | null | undefined;
45
- type: string;
46
- id: string;
47
- organizationId: string;
48
- projectId: string;
49
- sourceKey: string;
50
- targetKey: string;
51
- } | null>;
52
- getEntitiesWithRelations(paginationParams?: PaginationParams): Promise<import("./catalog-entities-local-read-repository.js").ListResult<import("@redocly/theme").BffCatalogEntity>>;
53
- getEntityWithRelationsByKey(entityKey: string, filter?: {
54
- revision?: string | null;
55
- version?: string | null;
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[];
56
48
  }): Promise<import("@redocly/theme").BffCatalogEntity | null>;
57
- getRelatedEntities(entityKey: string, paginationParams?: PaginationParams): Promise<import("./catalog-entities-local-read-repository.js").ListResult<import("@redocly/theme").BffCatalogRelatedEntity>>;
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>>;
58
56
  createEntity(createEntityParams: CreateEntityParams): Promise<CreateEntityResult>;
59
57
  createEntities(createEntitiesParams: CreateEntityParams[]): Promise<void>;
60
58
  createEntityRelation(entityRelation: EntityRelationDtoSchema): Promise<{
61
59
  id: string;
60
+ createdAt: string;
61
+ updatedAt: string;
62
62
  organizationId: string;
63
63
  projectId: string;
64
64
  sourceFile: string | null;
65
65
  isDeleted: boolean | null;
66
- createdAt: string;
67
- updatedAt: string;
66
+ fileHash: string | null;
68
67
  sourceKey: string;
69
- targetKey: string;
70
68
  sourceVersion: string;
71
69
  sourceRevision: string;
70
+ sourceToTargetRelation: string;
71
+ targetKey: string;
72
72
  targetVersion: string;
73
73
  targetRevision: string;
74
- fileHash: string | null;
75
- sourceToTargetRelation: string;
76
74
  targetToSourceRelation: string;
77
75
  } | null>;
78
76
  createEntityRelations(relations: EntityRelationDtoSchema[]): Promise<void>;
@@ -87,9 +85,10 @@ export declare class CatalogEntitiesLocalRepository extends BaseRepository {
87
85
  deleteEntityRelation(id: string): Promise<string | null>;
88
86
  deleteEntityRelations(filter: Filter): Promise<boolean>;
89
87
  getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./catalog-entities-local-read-repository.js").FilterOption[]>>;
90
- listEntityRevisions(entityKey: string, version?: string | null): Promise<import("../../../schemas/read-model-schemas.js").EntityRevisionSummary[]>;
88
+ listEntityRevisions(entityKey: string, version?: string | null): Promise<import("../../../../../plugins/catalog-entities/schemas/read-model-schemas.js").EntityRevisionSummary[]>;
91
89
  updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
92
90
  updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
93
- getOneOutdatedEntity(): Promise<import("../../../schemas/read-model-schemas.js").EntityReadModelSchema | null>;
91
+ getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
92
+ setEntitiesAsOutdated(filter: Filter): Promise<void>;
94
93
  }
95
94
  //# sourceMappingURL=catalog-entities-local-repository.d.ts.map
@@ -1 +1 @@
1
- import{promiseMapLimit as o}from"../../../../../utils/async/promise-map-limit.js";import{logger as R}from"../../../../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as f}from"../../../../../providers/database/database-connection-factory.js";import{BaseRepository as p}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 E}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{hasOptionsChanged as C}from"../../../utils/has-options-changed.js";const l=50;class s extends p{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(s.#n,t);if(!s.#i||e){const n=await f.create("catalog-local",t);if(!n)throw new Error("Failed to create db connection for catalog entities local repository");s.#i=new s(n),s.#n=t}return s.#i}async attachDatabase(t){await this.#t.attachDatabase(t)}getEntities(t={}){return this.#t.getEntities(t)}getEntityByKey(t){return this.#t.getEntityByKey(t)}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(t={}){return this.#t.getEntitiesWithRelations(t)}getEntityWithRelationsByKey(t,e){return this.#t.getEntityWithRelationsByKey(t,e)}getRelatedEntities(t,e={}){return this.#t.getRelatedEntities(t,e)}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 o(t,l,async e=>this.createEntity(e))}createEntityRelation(t){const e=E(t,this.organizationId,this.projectId);return this.#e.upsertEntityRelation(e)}async createEntityRelations(t){await o(t,l,async e=>this.createEntityRelation(e))}deleteEntity(t){return this.#e.deleteEntity(t)}async softDeleteEntities({filter:t,revision:e,fileHash:n}){const c=await this.getEntities({filter:t}),i=await this.#e.softDeleteEntities(c.items,e,n);await this.softDeleteEntitiesRelations(i,e)}async softDeleteEntitiesRelations(t,e){try{const n=t.filter(i=>i.result==="created");if(n.length===0)return!0;const c=await o(n,l,async i=>(await this.#t.getRelationsForEntity(i.entityKey,i.entityVersion,e)).map(r=>{if(!r)return null;const y=r.direction,a=r.sourceToTargetRelation,u=r.targetKey,d=y==="outgoing"?i.entityKey:u,h=y==="outgoing"?u:i.entityKey,g=y==="outgoing"?a:a.startsWith("reverse:")?a.slice(8):a;return!g||!d||!h?null:E({type:g,sourceKey:d,targetKey:h,sourceVersion:i.entityVersion,targetVersion:i.entityVersion,sourceRevision:e,targetRevision:e,isDeleted:!0},this.organizationId,this.projectId)}).filter(r=>r!==null));return await o(c.flat(),l,async i=>this.#e.upsertEntityRelation(i)),!0}catch(n){return R.error("Error soft deleting entity relations",n),!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)}getOneOutdatedEntity(){return this.#t.getOneOutdatedEntity()}}export{s as CatalogEntitiesLocalRepository};
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 g}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{hasOptionsChanged as I}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=I(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=g(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 y=a.direction,o=a.sourceToTargetRelation,u=a.targetKey,d=y==="outgoing"?n.entityKey:u,h=y==="outgoing"?u:n.entityKey,E=y==="outgoing"?o:o.startsWith("reverse:")?o.slice(8):o;return!E||!d||!h?null:g({type:E,sourceKey:d,targetKey:h,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)}}export{r as CatalogEntitiesLocalRepository};