@redocly/reef 0.133.0-next.0 → 0.133.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/CHANGELOG.md +71 -2
  2. package/dist/cli/develop.js +1 -1
  3. package/dist/constants/l10n/langs/ar.js +1 -1
  4. package/dist/constants/l10n/langs/de.js +1 -1
  5. package/dist/constants/l10n/langs/en.js +1 -1
  6. package/dist/constants/l10n/langs/es.js +1 -1
  7. package/dist/constants/l10n/langs/fr.js +1 -1
  8. package/dist/constants/l10n/langs/hi.js +1 -1
  9. package/dist/constants/l10n/langs/it.js +1 -1
  10. package/dist/constants/l10n/langs/ja.js +1 -1
  11. package/dist/constants/l10n/langs/ko.js +1 -1
  12. package/dist/constants/l10n/langs/pl.js +1 -1
  13. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  14. package/dist/constants/l10n/langs/pt.js +1 -1
  15. package/dist/constants/l10n/langs/ru.js +1 -1
  16. package/dist/constants/l10n/langs/uk.js +1 -1
  17. package/dist/constants/l10n/langs/zh.js +1 -1
  18. package/dist/server/api-routes/helpers/enhance-context.js +1 -1
  19. package/dist/server/constants/plugins/catalog-entities.d.ts +2 -0
  20. package/dist/server/constants/plugins/catalog-entities.js +1 -1
  21. package/dist/server/esbuild/esbuild.js +3 -3
  22. package/dist/server/esbuild/generate.d.ts +3 -0
  23. package/dist/server/esbuild/generate.js +8 -8
  24. package/dist/server/esbuild/plugins/api-request-handlers-resolver.js +1 -1
  25. package/dist/server/persistence/cache/mappers/create-cache-db-record.d.ts +1 -1
  26. package/dist/server/persistence/cache/mappers/create-cache-read-model.d.ts +1 -1
  27. package/dist/server/persistence/cache/repositories/{cache-local-repository.d.ts → cache-repository.d.ts} +3 -3
  28. package/dist/server/persistence/cache/repositories/cache-repository.js +1 -0
  29. package/dist/server/persistence/cache/services/cache-service.d.ts +2 -2
  30. package/dist/server/persistence/cache/services/cache-service.js +1 -1
  31. package/dist/server/persistence/file-hashes/mappers/create-file-hash-db-record.d.ts +1 -1
  32. package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.d.ts +2 -2
  33. package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.js +1 -1
  34. package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-read-repository.d.ts → file-hashes-read-repository.d.ts} +3 -7
  35. package/dist/server/persistence/file-hashes/repositories/file-hashes-read-repository.js +1 -0
  36. package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-repository.d.ts → file-hashes-repository.d.ts} +4 -3
  37. package/dist/server/persistence/file-hashes/repositories/file-hashes-repository.js +1 -0
  38. package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-write-repository.d.ts → file-hashes-write-repository.d.ts} +2 -2
  39. package/dist/server/persistence/file-hashes/repositories/file-hashes-write-repository.js +1 -0
  40. package/dist/server/persistence/file-hashes/services/file-hashes-service.d.ts +3 -5
  41. package/dist/server/persistence/file-hashes/services/file-hashes-service.js +1 -1
  42. package/dist/server/persistence/kv/mappers/create-kv-db-record.d.ts +1 -1
  43. package/dist/server/persistence/kv/mappers/create-kv-list-entry.d.ts +1 -1
  44. package/dist/server/persistence/kv/mappers/create-kv-value.d.ts +1 -1
  45. package/dist/server/persistence/kv/repositories/{kv-remote-repository.d.ts → kv-repository.d.ts} +3 -3
  46. package/dist/server/persistence/kv/repositories/kv-repository.js +2 -0
  47. package/dist/server/persistence/kv/services/kv-service.d.ts +2 -2
  48. package/dist/server/persistence/kv/services/kv-service.js +1 -1
  49. package/dist/server/plugins/api-functions/index.js +1 -1
  50. package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.d.ts +6 -0
  51. package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.js +12 -0
  52. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +29 -66
  53. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  54. package/dist/server/plugins/catalog-entities/database/consts.d.ts +45 -0
  55. package/dist/server/plugins/catalog-entities/database/consts.js +1 -0
  56. package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.d.ts +1 -2
  57. package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.js +1 -1
  58. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +1 -1
  59. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -1
  60. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.d.ts +1 -3
  61. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
  62. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-dto.d.ts +1 -1
  63. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-file-schema.d.ts +1 -1
  64. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.d.ts +3 -3
  65. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -1
  66. package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-bff-repository.d.ts → bffEntities/bff-entities-read-repository.d.ts} +4 -4
  67. package/dist/server/plugins/catalog-entities/database/repositories/bffEntities/bff-entities-read-repository.js +131 -0
  68. package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.d.ts +26 -0
  69. package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js +1 -0
  70. package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts +8 -0
  71. package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.js +82 -0
  72. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +7 -7
  73. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -1
  74. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -1
  75. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.d.ts +27 -0
  76. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.js +1 -0
  77. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.d.ts +27 -0
  78. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -0
  79. package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.d.ts +12 -0
  80. package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.js +1 -0
  81. package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-relations-repository.d.ts → relations/relations-read-repository.d.ts} +7 -4
  82. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-read-repository.js +1 -0
  83. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.d.ts +28 -0
  84. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.js +1 -0
  85. package/dist/server/plugins/catalog-entities/database/repositories/types.d.ts +39 -0
  86. package/dist/server/plugins/catalog-entities/database/repositories/types.js +0 -0
  87. package/dist/server/plugins/catalog-entities/database/types.d.ts +26 -0
  88. package/dist/server/plugins/catalog-entities/database/types.js +0 -0
  89. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  90. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.d.ts +2 -2
  91. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  92. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +2 -2
  93. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  94. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.d.ts +2 -2
  95. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  96. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +2 -2
  97. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  98. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
  99. package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
  100. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  101. package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +38 -36
  102. package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
  103. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +1 -3
  104. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +3 -1
  105. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.d.ts +15 -0
  106. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
  107. package/dist/server/plugins/catalog-entities/utils/hash-manager.d.ts +1 -0
  108. package/dist/server/plugins/catalog-entities/utils/hash-manager.js +1 -1
  109. package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.d.ts +18 -0
  110. package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.js +1 -0
  111. package/dist/server/plugins/dev-onboarding/api/adapters/apigee/adapter.js +3 -3
  112. package/dist/server/plugins/dev-onboarding/api/routes/index.js +1 -1
  113. package/dist/server/plugins/dev-onboarding/api/routes/meta.d.ts +4 -0
  114. package/dist/server/plugins/dev-onboarding/api/routes/meta.js +1 -0
  115. package/dist/server/plugins/dev-onboarding/api/types.d.ts +1 -0
  116. package/dist/server/plugins/dev-onboarding/template/App.js +5 -5
  117. package/dist/server/plugins/dev-onboarding/template/CreateAppDialog.js +3 -3
  118. package/dist/server/plugins/dev-onboarding/template/components/CallbackUrl.d.ts +5 -0
  119. package/dist/server/plugins/dev-onboarding/template/components/CallbackUrl.js +17 -0
  120. package/dist/server/plugins/dev-onboarding/template/components/DialogStyledComponents.d.ts +1 -0
  121. package/dist/server/plugins/dev-onboarding/template/components/DialogStyledComponents.js +6 -2
  122. package/dist/server/plugins/dev-onboarding/template/components/EditCallbackUrlDialog.d.ts +8 -0
  123. package/dist/server/plugins/dev-onboarding/template/components/EditCallbackUrlDialog.js +1 -0
  124. package/dist/server/plugins/entitlements/index.js +1 -1
  125. package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.d.ts +0 -1
  126. package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.js +1 -1
  127. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
  128. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.d.ts +6 -1
  129. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
  130. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.d.ts +4 -1
  131. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
  132. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.d.ts +4 -1
  133. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
  134. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.d.ts +4 -1
  135. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
  136. package/dist/server/plugins/mcp/docs-mcp/tools/helpers/load-api-description.d.ts +1 -1
  137. package/dist/server/plugins/mcp/docs-mcp/tools/helpers/load-api-description.js +1 -1
  138. package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +23 -5
  139. package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.d.ts +5 -1
  140. package/dist/server/plugins/mcp/docs-mcp/utils.d.ts +1 -1
  141. package/dist/server/plugins/mcp/docs-mcp/utils.js +1 -1
  142. package/dist/server/plugins/mcp/index.js +1 -1
  143. package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
  144. package/dist/server/plugins/mcp/types.d.ts +5 -0
  145. package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +1 -0
  146. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
  147. package/dist/server/plugins/openapi-docs/ast-utils.js +2 -2
  148. package/dist/server/plugins/scorecards/database/repositories/{local/scorecards-config-local-repository.d.ts → scorecards-config-repository.d.ts} +4 -4
  149. package/dist/server/plugins/scorecards/database/repositories/scorecards-config-repository.js +1 -0
  150. package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -1
  151. package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.js +1 -1
  152. package/dist/server/providers/database/base-repository.js +2 -2
  153. package/dist/server/providers/database/client.d.ts +1 -1
  154. package/dist/server/providers/database/client.js +1 -1
  155. package/dist/server/providers/database/constants.d.ts +4 -9
  156. package/dist/server/providers/database/constants.js +1 -1
  157. package/dist/server/providers/database/copy-migrations.js +1 -1
  158. package/dist/server/providers/database/database-connection-factory.d.ts +2 -2
  159. package/dist/server/providers/database/database-connection-factory.js +1 -1
  160. package/dist/server/providers/database/database-connections-manager.d.ts +3 -8
  161. package/dist/server/providers/database/database-connections-manager.js +1 -1
  162. package/dist/server/providers/database/database-preconnect-service.js +1 -1
  163. package/dist/server/providers/database/databases/sqlite-db/drizzle.config.d.ts +12 -0
  164. package/dist/server/providers/database/databases/sqlite-db/drizzle.config.js +1 -0
  165. package/dist/server/providers/database/databases/sqlite-db/migrations/0009_add-missing-local-tables.sql +41 -0
  166. package/dist/server/providers/database/databases/sqlite-db/migrations/0010_add-last-seen-run-id-to-entities-tables.sql +4 -0
  167. package/dist/server/providers/database/databases/sqlite-db/migrations/0011_update-entities-relations-index.sql +2 -0
  168. package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0009_snapshot.json +1141 -0
  169. package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0010_snapshot.json +1165 -0
  170. package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0011_snapshot.json +1165 -0
  171. package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/_journal.json +21 -0
  172. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.d.ts +19 -0
  173. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.js +1 -1
  174. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.d.ts +19 -0
  175. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.js +1 -1
  176. package/dist/server/providers/database/pagination/limit.d.ts +5 -0
  177. package/dist/server/providers/database/pagination/limit.js +1 -1
  178. package/dist/server/providers/database/transient-sqld-error.d.ts +14 -0
  179. package/dist/server/providers/database/transient-sqld-error.js +1 -0
  180. package/dist/server/providers/database/types.d.ts +6 -6
  181. package/dist/server/providers/database/utils/get-first-row.d.ts +19 -0
  182. package/dist/server/providers/database/utils/get-first-row.js +1 -0
  183. package/dist/server/store.d.ts +2 -0
  184. package/dist/server/store.js +1 -1
  185. package/dist/server/types/plugins/common.d.ts +2 -0
  186. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  187. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  188. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +0 -147
  189. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -1
  190. package/dist/server/web-server/routes/catalog/helpers/upsert-pages-stats.js +1 -1
  191. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +1 -2
  192. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +1 -2
  193. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +1 -2
  194. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +1 -1
  195. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +1 -1
  196. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +1 -1
  197. package/dist/server/workers/mcp-tool-worker-pool.d.ts +1 -0
  198. package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
  199. package/dist/server/workers/mcp-tool-worker.js +1 -1
  200. package/dist/server/workers/types.d.ts +5 -1
  201. package/package.json +16 -16
  202. package/dist/server/persistence/cache/repositories/cache-local-repository.js +0 -1
  203. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-read-repository.js +0 -1
  204. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-repository.js +0 -1
  205. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-write-repository.js +0 -1
  206. package/dist/server/persistence/file-hashes/repositories/utils.d.ts +0 -10
  207. package/dist/server/persistence/file-hashes/repositories/utils.js +0 -1
  208. package/dist/server/persistence/kv/repositories/kv-remote-repository.js +0 -2
  209. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +0 -123
  210. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +0 -98
  211. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +0 -145
  212. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +0 -100
  213. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +0 -1
  214. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +0 -43
  215. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +0 -1
  216. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +0 -1
  217. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +0 -20
  218. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +0 -1
  219. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +0 -1
  220. package/dist/server/providers/database/database-initialization-strategy.d.ts +0 -17
  221. package/dist/server/providers/database/database-initialization-strategy.js +0 -1
  222. package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.d.ts +0 -11
  223. package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.js +0 -1
  224. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0001_catalog-versions-and-revisions.sql +0 -20
  225. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0002_add-scorecards-status.sql +0 -1
  226. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0003_catalog_versions_and_revisions_relations.sql +0 -46
  227. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0004_normalize_relation_types.sql +0 -147
  228. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0005_catalog-relations-constraint-fix.sql +0 -2
  229. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0006_add-catalog-entitities-attributes-table.sql +0 -11
  230. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0001_snapshot.json +0 -378
  231. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0002_snapshot.json +0 -385
  232. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0003_snapshot.json +0 -392
  233. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0004_snapshot.json +0 -392
  234. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0005_snapshot.json +0 -393
  235. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0006_snapshot.json +0 -458
  236. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +0 -55
  237. package/dist/server/providers/database/databases/main-sqlite/drizzle.config.d.ts +0 -10
  238. package/dist/server/providers/database/databases/main-sqlite/drizzle.config.js +0 -1
  239. package/dist/server/providers/database/databases/main-sqlite/migrations/0000_initial_migration.sql +0 -11
  240. package/dist/server/providers/database/databases/main-sqlite/migrations/0001_update_file_hashes_file_type_values.sql +0 -10
  241. package/dist/server/providers/database/databases/main-sqlite/migrations/0002_cache-table.sql +0 -11
  242. package/dist/server/providers/database/databases/main-sqlite/migrations/0003_file-path-added.sql +0 -6
  243. package/dist/server/providers/database/databases/main-sqlite/migrations/0004_add-scorecards-tables.sql +0 -10
  244. package/dist/server/providers/database/databases/main-sqlite/migrations/0005_recreate-scorecards-config.sql +0 -25
  245. package/dist/server/providers/database/databases/main-sqlite/migrations/0006_change-scorecards-config-timestamps-field-types.sql +0 -19
  246. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0000_snapshot.json +0 -82
  247. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0001_snapshot.json +0 -82
  248. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0002_snapshot.json +0 -146
  249. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0003_snapshot.json +0 -153
  250. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0004_snapshot.json +0 -221
  251. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0005_snapshot.json +0 -263
  252. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0006_snapshot.json +0 -261
  253. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +0 -55
  254. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.d.ts +0 -14
  255. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +0 -1
  256. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0000_initial_migration.sql +0 -46
  257. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0000_snapshot.json +0 -307
  258. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/migrations/0000_initial_migration.sql +0 -0
  259. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0001_add_kv_table.sql +0 -0
  260. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0002_catalog-versions-and-revisions.sql +0 -0
  261. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0003_add-scorecards-tables.sql +0 -0
  262. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0004_add-scorecards-status.sql +0 -0
  263. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0005_recreate-scorecards-tables.sql +0 -0
  264. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0006_catalog-versions-and-revisions-relations.sql +0 -0
  265. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0007_catalog-relations-constraint-fix.sql +0 -0
  266. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0008_add-catalog-entitities-attributes-table.sql +0 -0
  267. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/migrations/meta/0000_snapshot.json +0 -0
  268. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0001_snapshot.json +0 -0
  269. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0002_snapshot.json +0 -0
  270. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0003_snapshot.json +0 -0
  271. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0004_snapshot.json +0 -0
  272. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0005_snapshot.json +0 -0
  273. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0006_snapshot.json +0 -0
  274. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0007_snapshot.json +0 -0
  275. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0008_snapshot.json +0 -0
  276. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.d.ts +0 -0
  277. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.js +0 -0
  278. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.d.ts +0 -0
  279. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.js +0 -0
  280. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.d.ts +0 -0
  281. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.js +0 -0
  282. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.d.ts +0 -0
  283. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.js +0 -0
  284. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.d.ts +0 -0
  285. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.js +0 -0
  286. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.d.ts +0 -0
  287. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.js +0 -0
  288. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.d.ts +0 -0
  289. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.js +0 -0
  290. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.d.ts +0 -0
  291. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.js +0 -0
  292. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.d.ts +0 -0
  293. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.js +0 -0
  294. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.d.ts +0 -0
  295. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.js +0 -0
@@ -1 +1 @@
1
- import{join as p}from"path";import{REDOCLY_ROUTE_RBAC as f}from"@redocly/config";import{removeTrailingSlash as l}from"../../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as d}from"../../../utils/url/remove-leading-slash.js";import{USER_DEFINED_API_FUNCTIONS_COUNTER_KEY as m}from"../../../server/store.js";import{parseRouteFsPathForHono as h}from"./helpers/parse-route-fs-path-for-hono.js";import{telemetryTraceStep as F}from"../../../cli/telemetry/helpers/trace-step.js";const g="api-functions";function A(t){return d(l(t))}function R(t){return`^${A(t)}`}function E(t){const i=t.map(R);return i.push(".*@api"),new RegExp(`(${i.join("|")})/.*.(ts|js)$`)}async function T(){return{id:"ApiFunctions",requiredEntitlements:["apiFunctions"],async processContent(t,i){await F("build.plugin.api_functions",async r=>{const s=await i.getConfig();r?.setAttribute("config",JSON.stringify(s.apiFunctions||{}));const a=E(s.apiFunctions?.folders||[]);let o=0;for(const e of i.fs.scan(a)){if(e.isVirtual)continue;const n=h(e.relativePath);if(!n)continue;const u=`${g}:${n.handler}`,c=p(t.contentDir,n.handler);t.createRequestHandler(u,c),t.addApiRoute({requestHandlerId:u,slug:n.path,fsPath:e.relativePath,httpMethod:n.method,[f]:{fsPath:e.relativePath,slug:n.path}}),o++}r?.setAttribute("definedApiFunctions",String(o)),t.setGlobalConfig({[m]:o})})}}}export{g as API_FUNCTIONS_REQUEST_HANDLER_ID,T as apiFunctionsPlugin};
1
+ import{join as p}from"path";import{transformSync as l}from"esbuild";import{REDOCLY_ROUTE_RBAC as d}from"@redocly/config";import{removeTrailingSlash as m}from"../../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as g}from"../../../utils/url/remove-leading-slash.js";import{logger as h}from"../../tools/notifiers/logger.js";import{USER_DEFINED_API_FUNCTIONS_COUNTER_KEY as F}from"../../../server/store.js";import{parseRouteFsPathForHono as A}from"./helpers/parse-route-fs-path-for-hono.js";import{telemetryTraceStep as P}from"../../../cli/telemetry/helpers/trace-step.js";const u="api-functions";async function R(t,n){try{const e=await n.fs.read(t);return l(e,{loader:t.endsWith(".js")?"js":"ts"}),!0}catch(e){const r=e instanceof Error?e.message:String(e);return h.warn(`Skipping API function ${t} because it cannot be parsed: ${r}`),!1}}function E(t){return g(m(t))}function _(t){return`^${E(t)}`}function S(t){const n=t.map(_);return n.push(".*@api"),new RegExp(`(${n.join("|")})/.*.(ts|js)$`)}async function O(){return{id:"ApiFunctions",requiredEntitlements:["apiFunctions"],async processContent(t,n){await P("build.plugin.api_functions",async e=>{const r=await n.getConfig();e?.setAttribute("config",JSON.stringify(r.apiFunctions||{}));const c=S(r.apiFunctions?.folders||[]);let s=0;t.clearRequestHandlersByPrefix(`${u}:`);for(const o of n.fs.scan(c)){if(o.isVirtual)continue;const i=A(o.relativePath);if(!i)continue;const a=`${u}:${i.handler}`,f=p(t.contentDir,i.handler);await R(o.relativePath,n)&&(t.createRequestHandler(a,f),t.addApiRoute({requestHandlerId:a,slug:i.path,fsPath:o.relativePath,httpMethod:i.method,[d]:{fsPath:o.relativePath,slug:i.path}}),s++)}e?.setAttribute("definedApiFunctions",String(s)),t.setGlobalConfig({[F]:s})})}}}export{u as API_FUNCTIONS_REQUEST_HANDLER_ID,O as apiFunctionsPlugin};
@@ -0,0 +1,6 @@
1
+ import type { PublishCatalogEntitiesParams } from './types';
2
+ export declare class CatalogEntitiesPublisher {
3
+ #private;
4
+ static publishFromLocalToRemote(params: PublishCatalogEntitiesParams): Promise<boolean>;
5
+ }
6
+ //# sourceMappingURL=catalog-entities-publisher.d.ts.map
@@ -0,0 +1,12 @@
1
+ import{and as h,eq as g,inArray as R,isNotNull as A,isNull as E,ne as k,or as I,sql as S}from"drizzle-orm";import{ulid as N}from"ulid";import{logger as F}from"../../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as D}from"../../../providers/database/database-connection-factory.js";import{entitiesAttributesTable as m}from"../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js";import{entitiesRelationsTable as u}from"../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js";import{entitiesTable as d}from"../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{BATCH_TRANSIENT_RETRY as $,withTransientErrorRetry as L}from"../../../providers/database/transient-sqld-error.js";import{envConfig as O}from"../../../config/env-config.js";import{ATTRIBUTES_UPSERT_SET as U,DEFAULT_CHUNK_SIZE as B,ENTITIES_UPSERT_SET as K,MAX_BATCH_PAYLOAD_BYTES as M,MAX_LOGGED_DB_ERROR_LENGTH as b,MIN_RETRYABLE_BATCH_SIZE as H,RELATIONS_UPSERT_SET as x}from"./consts.js";class c{static async publishFromLocalToRemote(e){if(O.isDevelopMode)return!1;const{baseDbDir:t,chunkSize:s=B,changedSourceFiles:o=[],removedSourceFiles:n=[]}=e,a=N(),[i,r]=await Promise.all([D.create({baseDbDir:t,databaseType:"local"}),D.create({baseDbDir:t,databaseType:"remote"})]);if(!i||!r)return F.warn("Skipping entities remote sync: local or remote connection is unavailable"),!1;const l="changedSourceFiles"in e||"removedSourceFiles"in e,p=Array.from(new Set([...o,...n]));if(l&&p.length===0)return!0;const y=l?o.length?o:"none":void 0;try{return await c.#i({runId:a,chunkSize:s,localConnection:i,remoteConnection:r,sourceFilesFilter:y}),await c.#c({runId:a,chunkSize:s,localConnection:i,remoteConnection:r,sourceFilesFilter:y}),await c.#a({chunkSize:s,localConnection:i,remoteConnection:r,sourceFilesFilter:y}),await c.#l({runId:a,remoteConnection:r,sourceFilesFilter:l?p:void 0}),!0}catch(f){const w=c.#o(f);throw F.error(`[CatalogEntitiesPublisher.publishFromLocalToRemote] Failed runId=${a}. ${w}`),new Error(`[CatalogEntitiesPublisher.publishFromLocalToRemote] Failed runId=${a}. ${w}`,{cause:f instanceof Error?f:void 0})}}static#i(e){const{runId:t,localConnection:s,remoteConnection:o,sourceFilesFilter:n,chunkSize:a}=e,i=c.#e(n);return c.#t({chunkSize:a,sourceFilesFilter:n,selectRows:(r,l)=>s.client.client.select().from(d).where(h(g(d.source,"file"),i?R(d.sourceFile,i):void 0)).limit(l).offset(r).all(),decorateRow:r=>({...r,lastSeenRunId:t}),runUpsert:async r=>{await o.client.client.insert(d).values(r).onConflictDoUpdate({target:[d.key,d.source,d.revision,d.version],set:K}).run()},describeSkippedRow:r=>`entity key=${String(r.key)}`})}static#c(e){const{runId:t,localConnection:s,remoteConnection:o,sourceFilesFilter:n,chunkSize:a}=e,i=c.#e(n);return c.#t({chunkSize:a,sourceFilesFilter:n,selectRows:(r,l)=>s.client.client.select().from(u).where(h(A(u.sourceFile),i?R(u.sourceFile,i):void 0)).limit(l).offset(r).all(),decorateRow:r=>({...r,lastSeenRunId:t}),runUpsert:async r=>{await o.client.client.insert(u).values(r).onConflictDoUpdate({target:[u.sourceKey,u.targetKey,u.sourceVersion,u.targetVersion,u.sourceRevision,u.targetRevision,u.sourceToTargetRelation],set:x}).run()},describeSkippedRow:r=>{const l=r;return`relation sourceKey=${String(l.sourceKey)} targetKey=${String(l.targetKey)}`}})}static#a(e){const{localConnection:t,remoteConnection:s,sourceFilesFilter:o,chunkSize:n}=e,a=c.#e(o);return c.#t({chunkSize:n,sourceFilesFilter:o,selectRows:(i,r)=>t.client.client.select().from(m).where(a?S`EXISTS (
2
+ SELECT 1
3
+ FROM entities e
4
+ WHERE e.key = ${m.entityKey}
5
+ AND e.source = 'file'
6
+ AND e.source_file IN (${S.join(a.map(l=>S`${l}`),S`, `)})
7
+ )`:void 0).limit(r).offset(i).all(),runUpsert:async i=>{await s.client.client.insert(m).values(i).onConflictDoUpdate({target:[m.entityKey],set:U}).run()}})}static#e(e){return Array.isArray(e)&&e.length>0?e:void 0}static async#t({chunkSize:e,sourceFilesFilter:t,selectRows:s,decorateRow:o,runUpsert:n,describeSkippedRow:a}){if(t==="none")return{upserted:0,skipped:0};let i=0,r=0,l=0;for(;;){const p=await s(i,e);if(!p.length)return{upserted:r,skipped:l};const y=o?p.map(f=>o(f)):p;for(const f of c.#u(y,e,M)){const w=await c.#n({rows:f,runOperation:n,shouldSkipIsolatedRow:a?(v,T)=>c.#f(T)?(F.warn(`[CatalogEntitiesPublisher.publishFromLocalToRemote] Skipping ${a(v)} due to remote insert error: ${c.#o(T)}`),!0):!1:void 0});r+=w.upserted,l+=w.skipped}i+=e}}static async#l({runId:e,remoteConnection:t,sourceFilesFilter:s}){const o=t.client.client,n=s?.length?s:void 0,a=await c.#r(()=>o.delete(u).where(h(A(u.sourceFile),n?R(u.sourceFile,n):void 0,I(E(u.lastSeenRunId),k(u.lastSeenRunId,e)))).run()),i=await c.#r(()=>o.delete(d).where(h(g(d.source,"file"),n?R(d.sourceFile,n):void 0,I(E(d.lastSeenRunId),k(d.lastSeenRunId,e)))).run()),r=await c.#r(()=>o.delete(m).where(S`NOT EXISTS (
8
+ SELECT 1
9
+ FROM entities e
10
+ WHERE e.key = ${m.entityKey}
11
+ AND COALESCE(e.is_deleted, 0) = 0
12
+ )`).run());return{staleEntitiesDeleted:i,staleRelationsDeleted:a,orphanAttributesDeleted:r}}static async#r(e){const t=await c.#s(e);return Number(t.rowsAffected??0)}static#u(e,t,s){const o=[];let n=[],a=0;for(const i of e){const r=c.#d(i);n.length>0&&(n.length>=t||a+r>s)&&(o.push(n),n=[],a=0),n.push(i),a+=r}return n.length>0&&o.push(n),o}static#d(e){try{return JSON.stringify(e).length}catch{return 0}}static async#n({rows:e,runOperation:t,shouldSkipIsolatedRow:s}){try{return await c.#s(()=>t(e)),{upserted:e.length,skipped:0}}catch(o){if(e.length<H){if(!s)throw o;if(await s(e[0],o))return{upserted:0,skipped:1};throw o}const n=Math.floor(e.length/2),a=await c.#n({rows:e.slice(0,n),runOperation:t,shouldSkipIsolatedRow:s}),i=await c.#n({rows:e.slice(n),runOperation:t,shouldSkipIsolatedRow:s});return{upserted:a.upserted+i.upserted,skipped:a.skipped+i.skipped}}}static#f(e){if(!(e instanceof Error))return!1;const t=e.message.toLowerCase();return t.includes("code: 11")||t.includes("too many sql variables")||t.includes("string or blob too big")||t.includes("statement too long")||t.includes("request body too large")||t.includes("payload too large")||t.includes("body too large")||t.includes("resource exhausted")}static#o(e){const s=(e instanceof Error?e.message:typeof e=="string"?e:JSON.stringify(e)).split(" params:")[0],n=c.#p(s).replace(/\s+/g," ").trim();return n.length>b?`${n.slice(0,b)}...`:n}static#p(e){const t="Failed query:",s=e.indexOf(t);if(s===-1)return e;const o=e.slice(0,s).trim();return o?`${o}. ${t} <omitted for brevity>`:`${t} <omitted for brevity>`}static#s(e){return L(e,$)}}export{c as CatalogEntitiesPublisher};
@@ -1,31 +1,22 @@
1
1
  import type { PaginationParams } from '../../../providers/database/pagination/schemas.js';
2
- import type { EntityReadModelSchema, EntityRelationReadModelSchema } from '../schemas/read-model-schemas.js';
3
- import type { CatalogFiltersParams } from './repositories/local/catalog-entities-local-read-repository.js';
4
- import type { BffCatalogEntity, BffCatalogEntityList, BffCatalogRelatedEntityList } from '@redocly/theme/core/types';
2
+ import type { EntityReadModelSchema, EntitySource, EntityRelationReadModelSchema } from '../schemas/read-model-schemas.js';
3
+ import type { CatalogFiltersParams, CreateEntityParams } from './repositories/types.js';
4
+ import type { BffCatalogEntity, BffCatalogEntityList, BffCatalogRelatedEntityList, SidebarConnectedEntity } from '@redocly/theme/core/types';
5
5
  import type { ServiceInstanceOptions } from '../../../providers/database/types.js';
6
6
  import type { TransactionsManager } from '../../../providers/database/transactions-manager.js';
7
- import type { CreateEntityParams } from './repositories/local/catalog-entities-local-write-repository.js';
8
7
  import type { Filter } from '../../../providers/database/pagination/types.js';
9
8
  import type { ScorecardsStatus } from '../entities/types.js';
10
9
  import type { GetEntityByIdParams } from '../types/params.js';
10
+ import type { BulkSyncResult } from './types.js';
11
11
  import { type EntityDtoSchema, type EntityRelationDtoSchema } from '../schemas/dto-schemas.js';
12
- import { CatalogEntitiesLocalRepository } from './repositories/local/catalog-entities-local-repository.js';
13
- import { CatalogEntitiesRemoteRepository } from './repositories/remote/catalog-entities-remote-repository.js';
12
+ import { CatalogEntitiesRepository } from './repositories/catalog-entities-repository.js';
14
13
  import { type ListResponseResult } from '../../../web-server/utils/prepare-list-response.js';
15
- type BulkSyncResult<T> = Array<{
16
- status: 'ok';
17
- resource: T | null;
18
- } | {
19
- key: string;
20
- status: 'error';
21
- error: string;
22
- }>;
23
14
  export declare class CatalogEntitiesService {
24
15
  #private;
25
- constructor(localRepository: CatalogEntitiesLocalRepository, remoteRepository: CatalogEntitiesRemoteRepository | null);
16
+ constructor(catalogEntitiesRepository: CatalogEntitiesRepository, options?: ServiceInstanceOptions);
26
17
  static getInstance(options: ServiceInstanceOptions): Promise<CatalogEntitiesService>;
18
+ sync(): Promise<void>;
27
19
  transaction<T>(...args: Parameters<TransactionsManager['transaction']>): Promise<T>;
28
- remoteTransaction<T>(operation: () => Promise<T>): Promise<T>;
29
20
  getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
30
21
  paginationParams: PaginationParams;
31
22
  rbacTeams?: string[];
@@ -38,48 +29,9 @@ export declare class CatalogEntitiesService {
38
29
  type: string;
39
30
  count: number;
40
31
  }[]>;
41
- getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./repositories/local/catalog-entities-local-read-repository.js").FilterOption[]>>;
42
- createEntity(entity: EntityDtoSchema): Promise<EntityReadModelSchema | null>;
43
- createEntities(entities: EntityDtoSchema[]): Promise<BulkSyncResult<EntityReadModelSchema>>;
44
- getEntitySources(): Record<string, import("@redocly/theme").SidebarConnectedEntity>;
45
- /**
46
- * Use only internally, everything that is created via API should be created in the remote database.
47
- * @param entity - The entity to create.
48
- */
49
- createEntityInLocalDatabase(createEntityParams: CreateEntityParams): Promise<import("./repositories/local/catalog-entities-local-write-repository.js").CreateEntityResult>;
50
- /**
51
- * Use only internally, everything that is created via API should be created in the remote database.
52
- * @param entities - The entities to create.
53
- */
54
- createEntitiesInLocalDatabase(createEntitiesParams: CreateEntityParams[]): Promise<void>;
55
- /**
56
- * Use only internally, everything that is created via API should be created in the remote database.
57
- * @param relation - The entity to create.
58
- */
59
- createEntityRelationInLocalDatabase(relation: EntityRelationDtoSchema): Promise<void>;
60
- /**
61
- * Use only internally, everything that is created via API should be created in the remote database.
62
- * @param relations - The entity to create.
63
- */
64
- createEntityRelationsInLocalDatabase(relations: EntityRelationDtoSchema[]): Promise<void>;
65
- updateEntity(incomingEntity: Partial<EntityDtoSchema>, entityToBeUpdated: EntityReadModelSchema): Promise<EntityReadModelSchema | null | undefined>;
66
- deleteEntity(entityToBeRemoved: EntityReadModelSchema): Promise<string | null | undefined>;
67
- /**
68
- * Use only internally, everything that is created via API should be created in the remote database.
69
- * @param filter - The conditions used to select which entities to delete.
70
- */
71
- deleteEntitiesInLocalDatabase(filter: Filter): Promise<void>;
32
+ getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./repositories/types.js").FilterOption[]>>;
72
33
  getEntityRelationById(id: string): Promise<EntityRelationReadModelSchema | null>;
73
34
  getEntitiesRelations(paginationParams?: PaginationParams): Promise<ListResponseResult<EntityRelationReadModelSchema>>;
74
- createEntityRelation(relation: EntityRelationDtoSchema): Promise<EntityRelationReadModelSchema | null | undefined>;
75
- createEntitiesRelations(entities: EntityRelationDtoSchema[]): Promise<BulkSyncResult<EntityRelationReadModelSchema>>;
76
- updateEntityRelation(incomingRelationData: Partial<EntityRelationDtoSchema>, relationToBeUpdated: EntityRelationReadModelSchema): Promise<EntityRelationReadModelSchema | null | undefined>;
77
- deleteEntityRelation(id: string): Promise<string | null>;
78
- /**
79
- * Use only internally, everything that is created via API should be created in the remote database.
80
- * @param filter - The conditions used to select which entity relations to delete.
81
- */
82
- deleteEntityRelationsInLocalDatabase(filter: Filter): Promise<void>;
83
35
  getEntitiesWithRelations({ paginationParams, rbacTeams, excludedTypes, excludedEntities, }: {
84
36
  paginationParams: PaginationParams;
85
37
  rbacTeams?: string[];
@@ -103,22 +55,33 @@ export declare class CatalogEntitiesService {
103
55
  excludedTypes?: string[];
104
56
  excludedEntities?: string[];
105
57
  }): Promise<BffCatalogRelatedEntityList>;
106
- softDeleteEntitiesInLocalDatabase({ filter, revision, fileHash, }: {
58
+ listEntityRevisions(entityKey: string, version?: string | null): Promise<import("../schemas/read-model-schemas.js").EntityRevisionSummary[]>;
59
+ getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
60
+ getEntitiesCount(source: EntitySource, addedEntities?: EntityReadModelSchema[], entitiesRemovedCount?: number): Promise<{
61
+ total: number;
62
+ }>;
63
+ createEntity(createEntityParams: CreateEntityParams): Promise<EntityReadModelSchema | null>;
64
+ createEntities(entities: EntityDtoSchema[], source: EntitySource): Promise<BulkSyncResult<EntityReadModelSchema>>;
65
+ getEntitySources(): Record<string, SidebarConnectedEntity>;
66
+ /**
67
+ * Use only internally, everything that is created via API should be created in the remote database.
68
+ * @param relations - The entity to create.
69
+ */
70
+ createEntityRelations(relations: EntityRelationDtoSchema[]): Promise<void>;
71
+ updateEntity(incomingEntity: Partial<EntityDtoSchema>, entityToBeUpdated: EntityReadModelSchema): Promise<EntityReadModelSchema | null>;
72
+ deleteEntity(entityToBeRemoved: EntityReadModelSchema): Promise<string | null>;
73
+ deleteEntities(filter: Filter): Promise<void>;
74
+ createEntityRelation(relation: EntityRelationDtoSchema): Promise<EntityRelationReadModelSchema | null>;
75
+ createEntitiesRelations(entities: EntityRelationDtoSchema[]): Promise<BulkSyncResult<EntityRelationReadModelSchema>>;
76
+ updateEntityRelation(incomingRelationData: Partial<EntityRelationDtoSchema>, relationToBeUpdated: EntityRelationReadModelSchema): Promise<EntityRelationReadModelSchema | null>;
77
+ deleteEntityRelation(id: string): Promise<string | null>;
78
+ softDeleteEntitiesWithRelations({ filter, revision, fileHash, }: {
107
79
  filter: Filter;
108
80
  revision: string;
109
81
  fileHash: string;
110
82
  }): Promise<void>;
111
- listEntityRevisions(entityKey: string, version?: string | null): Promise<import("../schemas/read-model-schemas.js").EntityRevisionSummary[]>;
112
83
  updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
113
84
  updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
114
- getOutdatedEntities(filter?: Filter): Promise<EntityReadModelSchema[]>;
115
85
  setEntitiesAsOutdated(filter: Filter): Promise<void>;
116
- getEntitiesCount(source: 'file' | 'remote', addedEntities?: EntityReadModelSchema[], entitiesRemovedCount?: number): Promise<{
117
- total: number;
118
- }>;
119
- getDuplicatedEntitiesCount(addedEntities?: EntityReadModelSchema[], removedEntities?: EntityReadModelSchema[]): Promise<{
120
- total: number;
121
- }>;
122
86
  }
123
- export {};
124
87
  //# sourceMappingURL=catalog-entities-service.d.ts.map
@@ -1 +1 @@
1
- import{promiseMapLimit as u}from"../../../utils/async/promise-map-limit.js";import{logger as y}from"../../../tools/notifiers/logger.js";import{envConfig as r}from"../../../config/env-config.js";import{CatalogEntitiesLocalRepository as w}from"./repositories/local/catalog-entities-local-repository.js";import{CatalogEntitiesRemoteRepository as p}from"./repositories/remote/catalog-entities-remote-repository.js";import{prepareListResponse as l}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as h}from"./mappers/field-transformations.js";import{hasOptionsChanged as m}from"../utils/has-options-changed.js";const d=15;class n{static#a;static#i;#t;#e;constructor(t,e){this.#t=t,this.#e=e}static async#n(t){const[e,a]=await Promise.all([w.getInstance(t),t.runOnlyLocalDatabase?null:p.getInstance(t)]),i=new n(e,a);a&&(r.isDevelopMode&&y.info("Attaching remote database to local database"),await i.#t.attachDatabase(a.path)),n.#a=i,n.#i=t}static async getInstance(t){return t.runOnlyLocalDatabase===void 0&&(t.runOnlyLocalDatabase=r.isDevelopMode),t.removeExisting===void 0&&(t.removeExisting=!1),(!n.#a||m(n.#i,t))&&await n.#n(t),n.#a}async transaction(...t){return this.#t.transactionsManager.transaction(...t)}async remoteTransaction(t){const e=this.#e;if(!e)throw new Error("Remote repository is not available");return e.transactionsManager.transaction(t)}async getEntities({paginationParams:t,rbacTeams:e,excludedTypes:a,excludedEntities:i}){await this.#e?.sync();const{items:s,total:o,hasMore:c}=await this.#t.getEntities({paginationParams:t,rbacTeams:e,excludedTypes:a,excludedEntities:i});return l({data:s,params:t,totalCount:o,hasMore:c})}async getEntityById(t,e){return await this.#e?.sync(),await this.#t.getEntityById(t,e)}async getEntityKeysAndVersionsBySourceFile(t){return await this.#e?.sync(),this.#t.getEntityKeysAndVersionsBySourceFile(t)}async getEntitiesCountByTypes(){return await this.#e?.sync(),this.#t.getEntitiesCountByTypes()}async getCatalogFilters(t){return await this.#e?.sync(),this.#t.getCatalogFilters(t)}async createEntity(t){if(r.isDevelopMode)throw new Error("Entity creation is not supported in the develop mode");return this.#e?this.#e.createEntity(t):(y.warn("No remote database found"),null)}async createEntities(t){if(r.isDevelopMode)throw new Error("Entity creation is not supported in the develop mode");const e=this.#e;return e?await u(t,d,async a=>e.createEntity(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.key,status:"error",error:i}))):(y.warn("No remote database found"),[])}getEntitySources(){return this.#t.getEntitySources()}async createEntityInLocalDatabase(t){return this.#t.createEntity(t)}async createEntitiesInLocalDatabase(t){await this.#t.createEntities(t)}async createEntityRelationInLocalDatabase(t){await this.#t.createEntityRelation(t)}async createEntityRelationsInLocalDatabase(t){await this.#t.createEntityRelations(t)}async updateEntity(t,e){if(r.isDevelopMode)throw new Error("Entity update is not supported in the develop mode");return await this.#e?.updateEntity(t,e)}async deleteEntity(t){if(r.isDevelopMode)throw new Error("Entity deletion is not supported in the develop mode");return await this.#e?.deleteEntity(t)}async deleteEntitiesInLocalDatabase(t){await this.#t.deleteEntities(t)}async getEntityRelationById(t){return await this.#e?.sync(),await this.#t.getEntityRelationById(t)}async getEntitiesRelations(t={}){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntitiesRelations(t);return l({data:e,params:t,totalCount:a,nameTransformationsFromDatabase:h,hasMore:i})}async createEntityRelation(t){return this.#e?.createEntityRelation(t)}async createEntitiesRelations(t){const e=this.#e;return e?await u(t,d,async a=>e.createEntityRelation(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.sourceKey,status:"error",error:i}))):(y.warn("No remote database found"),[])}async updateEntityRelation(t,e){const a={...e,...t,type:t.type??e.type};return this.#e?.createEntityRelation(a)}async deleteEntityRelation(t){let e=await this.#e?.deleteEntityRelation(t);return e||(e=await this.#t.deleteEntityRelation(t)),e}async deleteEntityRelationsInLocalDatabase(t){await this.#t.deleteEntityRelations(t)}async getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:a,excludedEntities:i}){await this.#e?.sync();const{items:s,total:o,hasMore:c}=await this.#t.getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:a,excludedEntities:i});return l({data:s,params:t,totalCount:o,hasMore:c})}async getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:a,excludedTypes:i,excludedEntities:s}){return this.#t.getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:a,excludedTypes:i,excludedEntities:s})}async getRelatedEntities({entityKey:t,paginationParams:e,rbacTeams:a,excludedTypes:i,excludedEntities:s}){await this.#e?.sync();const{items:o,total:c,hasMore:E}=await this.#t.getRelatedEntities({key:t,paginationParams:e,rbacTeams:a,excludedTypes:i,excludedEntities:s});return l({data:o,params:e,totalCount:c,nameTransformationsFromDatabase:h,hasMore:E})}async softDeleteEntitiesInLocalDatabase({filter:t,revision:e,fileHash:a}){await this.#t.softDeleteEntities({filter:t,revision:e,fileHash:a})}async listEntityRevisions(t,e){return await this.#e?.sync(),this.#t.listEntityRevisions(t,e)}async updateEntityScorecardsStatus(t,e){return await this.#e?.sync(),this.#t.updateEntityScorecardsStatus(t,e)}async updateEntityScorecardsStatusIfCalculating(t,e){return await this.#e?.sync(),this.#t.updateEntityScorecardsStatusIfCalculating(t,e)}async getOutdatedEntities(t){return await this.#e?.sync(),this.#t.getOutdatedEntities(t)}async setEntitiesAsOutdated(t){await this.#e?.sync(),await this.#t.setEntitiesAsOutdated(t)}async getEntitiesCount(t,e,a){return await this.#e?.sync(),this.#t.getEntitiesCount(t,e,a)}async getDuplicatedEntitiesCount(t,e){return await this.#e?.sync(),this.#t.getDuplicatedEntitiesCount(t,e)}}export{n as CatalogEntitiesService};
1
+ import{promiseMapLimit as h}from"../../../utils/async/promise-map-limit.js";import{logger as g}from"../../../tools/notifiers/logger.js";import{envConfig as y}from"../../../config/env-config.js";import{HTTP_TRANSIENT_RETRY as l,describeTransientError as m,isTransientSqldError as w,withTransientErrorRetry as d}from"../../../providers/database/transient-sqld-error.js";import{CatalogEntitiesRepository as E}from"./repositories/catalog-entities-repository.js";import{prepareListResponse as u}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as R}from"./mappers/field-transformations.js";import{hasOptionsChanged as W}from"../utils/has-options-changed.js";const p=15;class s{static#s;static#n;#i;#r;#a={};constructor(t,e){this.#i=t,this.#r=e?.databaseType==="local"}static async#c(t){const e=await E.getInstance(t),i=new s(e,t);return s.#s=i,s.#n=t,i}static async getInstance(t){const e={...t,removeExisting:t.removeExisting??!1};return s.#s&&!W(s.#n,e)?s.#s:s.#c(e)}async sync(){await this.#o()}async transaction(...t){return this.#i.transactionsManager.transaction(...t)}async getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n}){return this.#e(async r=>{const{items:a,total:o,hasMore:c}=await r.entitiesRead.getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n});return u({data:a,params:t,totalCount:o,hasMore:c})})}async getEntityById(t,e){return this.#e(async i=>await i.entitiesRead.getEntityById(t,e)??null)}async getEntityKeysAndVersionsBySourceFile(t){return this.#e(e=>e.entitiesRead.getEntityKeysAndVersionsBySourceFile(t))}async getEntitiesCountByTypes(){return this.#e(t=>t.entitiesRead.getEntitiesCountByTypes())}async getCatalogFilters(t){return this.#e(e=>e.filters.getCatalogFilters(t))}async getEntityRelationById(t){return this.#e(async e=>await e.relationsRead.getEntityRelationById(t)??null)}async getEntitiesRelations(t={}){return this.#e(async e=>{const{items:i,total:n,hasMore:r}=await e.relationsRead.getEntitiesRelations(t);return u({data:i,params:t,totalCount:n,nameTransformationsFromDatabase:R,hasMore:r})})}async getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n}){return this.#e(async r=>{const{items:a,total:o,hasMore:c}=await r.bffEntitiesRead.getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n});return u({data:a,params:t,totalCount:o,hasMore:c})})}async getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:n,excludedEntities:r}){return this.#e(a=>a.bffEntitiesRead.getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:n,excludedEntities:r}))}async getRelatedEntities({entityKey:t,paginationParams:e,rbacTeams:i,excludedTypes:n,excludedEntities:r}){return this.#e(async a=>{const{items:o,total:c,hasMore:f}=await a.relationsRead.getRelatedEntities({key:t,paginationParams:e,rbacTeams:i,excludedTypes:n,excludedEntities:r});return u({data:o,params:e,totalCount:c,nameTransformationsFromDatabase:R,hasMore:f})})}async listEntityRevisions(t,e){return this.#e(i=>i.revisions.listEntityRevisions(t,e))}async getOutdatedEntities(t){return this.#e(e=>e.entitiesRead.getOutdatedEntities(t))}async getEntitiesCount(t,e,i){return this.#e(n=>n.entitiesRead.getEntitiesCount(t,e,i))}async createEntity(t){if(y.isDevelopMode&&t.source==="remote")throw new Error("API based entity creation is not supported in the develop mode");return t.isRootEntity&&t.sourceFile&&(this.#a[t.sourceFile]={key:t.entity.key,version:t.entity.version??void 0}),this.#t(e=>e.entitiesWrite.createEntity(t))}async createEntities(t,e){if(y.isDevelopMode&&e==="remote")throw new Error("API based entity creation is not supported in the develop mode");return await h(t,p,async i=>this.#t(n=>n.entitiesWrite.createEntity({entity:i,source:e})).then(n=>({status:"ok",resource:n})).catch(n=>({key:i.key,status:"error",error:n})))}getEntitySources(){return this.#a}async createEntityRelations(t){await this.#t(e=>e.relationsWrite.createEntityRelations(t))}async updateEntity(t,e){if(y.isDevelopMode&&e.source==="remote")throw new Error("Entity update is not supported in the develop mode");return this.#t(i=>i.transactionsManager.transaction(()=>i.entitiesWrite.updateEntity(t,e)))}async deleteEntity(t){if(y.isDevelopMode&&t.source==="remote")throw new Error("Entity deletion is not supported in the develop mode");return this.#t(e=>e.entitiesWrite.deleteEntity(t))}async deleteEntities(t){await this.#t(async e=>{await e.entitiesWrite.deleteEntities(t)})}async createEntityRelation(t){return this.#t(e=>e.relationsWrite.createEntityRelation(t))}async createEntitiesRelations(t){return await h(t,p,async e=>this.#t(i=>i.relationsWrite.createEntityRelation(e)).then(i=>({status:"ok",resource:i})).catch(i=>({key:e.sourceKey,status:"error",error:i})))}async updateEntityRelation(t,e){const i={...e,...t,type:t.type??e.type};return this.#t(n=>n.relationsWrite.createEntityRelation(i))}async deleteEntityRelation(t){return this.#t(e=>e.relationsWrite.deleteEntityRelation(t))}async softDeleteEntitiesWithRelations({filter:t,revision:e,fileHash:i}){return this.#t(n=>n.entitiesWrite.softDeleteEntitiesWithRelations({filter:t,revision:e,fileHash:i}))}async updateEntityScorecardsStatus(t,e){return this.#t(i=>i.entitiesWrite.updateEntityScorecardsStatus(t,e))}async updateEntityScorecardsStatusIfCalculating(t,e){return this.#t(i=>i.entitiesWrite.updateEntityScorecardsStatusIfCalculating(t,e))}async setEntitiesAsOutdated(t){await this.#t(async e=>{await e.entitiesWrite.setEntitiesAsOutdated(t)})}async#o(){if(this.#r)return;const t=this.#i;await d(()=>t.sync(),l)}async#e(t){return await this.#o(),d(()=>t(this.#i),l)}async#t(t){return this.#r?t(this.#i):d(async()=>{try{return await t(this.#i)}catch(e){throw await this.#y(e),e}},l)}async#y(t){if(!(!w(t)||!s.#n))try{this.#i=await E.recreateInstance(s.#n)}catch(e){g.warn(`Reconnect attempt failed, letting original error propagate: ${m(e)}`)}}}export{s as CatalogEntitiesService};
@@ -0,0 +1,45 @@
1
+ export declare const DEFAULT_CHUNK_SIZE = 20;
2
+ export declare const MAX_LOGGED_DB_ERROR_LENGTH = 1000;
3
+ export declare const MIN_RETRYABLE_BATCH_SIZE = 2;
4
+ export declare const MAX_BATCH_PAYLOAD_BYTES = 500000;
5
+ export declare const ENTITIES_UPSERT_SET: {
6
+ organizationId: import("drizzle-orm").SQL<unknown>;
7
+ projectId: import("drizzle-orm").SQL<unknown>;
8
+ type: import("drizzle-orm").SQL<unknown>;
9
+ title: import("drizzle-orm").SQL<unknown>;
10
+ summary: import("drizzle-orm").SQL<unknown>;
11
+ tags: import("drizzle-orm").SQL<unknown>;
12
+ metadata: import("drizzle-orm").SQL<unknown>;
13
+ git: import("drizzle-orm").SQL<unknown>;
14
+ contact: import("drizzle-orm").SQL<unknown>;
15
+ links: import("drizzle-orm").SQL<unknown>;
16
+ createdAt: import("drizzle-orm").SQL<unknown>;
17
+ updatedAt: import("drizzle-orm").SQL<unknown>;
18
+ sourceFile: import("drizzle-orm").SQL<unknown>;
19
+ fileHash: import("drizzle-orm").SQL<unknown>;
20
+ hash: import("drizzle-orm").SQL<unknown>;
21
+ isCurrent: import("drizzle-orm").SQL<unknown>;
22
+ isDefaultVersion: import("drizzle-orm").SQL<unknown>;
23
+ isDeleted: import("drizzle-orm").SQL<unknown>;
24
+ scorecardsStatus: import("drizzle-orm").SQL<unknown>;
25
+ lastSeenRunId: import("drizzle-orm").SQL<unknown>;
26
+ };
27
+ export declare const RELATIONS_UPSERT_SET: {
28
+ organizationId: import("drizzle-orm").SQL<unknown>;
29
+ projectId: import("drizzle-orm").SQL<unknown>;
30
+ targetToSourceRelation: import("drizzle-orm").SQL<unknown>;
31
+ sourceFile: import("drizzle-orm").SQL<unknown>;
32
+ fileHash: import("drizzle-orm").SQL<unknown>;
33
+ isDeleted: import("drizzle-orm").SQL<unknown>;
34
+ createdAt: import("drizzle-orm").SQL<unknown>;
35
+ updatedAt: import("drizzle-orm").SQL<unknown>;
36
+ lastSeenRunId: import("drizzle-orm").SQL<unknown>;
37
+ };
38
+ export declare const ATTRIBUTES_UPSERT_SET: {
39
+ organizationId: import("drizzle-orm").SQL<unknown>;
40
+ projectId: import("drizzle-orm").SQL<unknown>;
41
+ rbacTeams: import("drizzle-orm").SQL<unknown>;
42
+ createdAt: import("drizzle-orm").SQL<unknown>;
43
+ updatedAt: import("drizzle-orm").SQL<unknown>;
44
+ };
45
+ //# sourceMappingURL=consts.d.ts.map
@@ -0,0 +1 @@
1
+ import{sql as e}from"drizzle-orm";const t=20,c=1e3,a=2,l=5e5,u={organizationId:e`excluded.organization_id`,projectId:e`excluded.project_id`,type:e`excluded.type`,title:e`excluded.title`,summary:e`excluded.summary`,tags:e`excluded.tags`,metadata:e`excluded.metadata`,git:e`excluded.git`,contact:e`excluded.contact`,links:e`excluded.links`,createdAt:e`excluded.created_at`,updatedAt:e`excluded.updated_at`,sourceFile:e`excluded.source_file`,fileHash:e`excluded.file_hash`,hash:e`excluded.hash`,isCurrent:e`excluded.is_current`,isDefaultVersion:e`excluded.is_default_version`,isDeleted:e`excluded.is_deleted`,scorecardsStatus:e`excluded.scorecards_status`,lastSeenRunId:e`excluded.last_seen_run_id`},r={organizationId:e`excluded.organization_id`,projectId:e`excluded.project_id`,targetToSourceRelation:e`excluded.target_to_source_relation`,sourceFile:e`excluded.source_file`,fileHash:e`excluded.file_hash`,isDeleted:e`excluded.is_deleted`,createdAt:e`excluded.created_at`,updatedAt:e`excluded.updated_at`,lastSeenRunId:e`excluded.last_seen_run_id`},_={organizationId:e`excluded.organization_id`,projectId:e`excluded.project_id`,rbacTeams:e`excluded.rbac_teams`,createdAt:e`excluded.created_at`,updatedAt:e`excluded.updated_at`};export{_ as ATTRIBUTES_UPSERT_SET,t as DEFAULT_CHUNK_SIZE,u as ENTITIES_UPSERT_SET,l as MAX_BATCH_PAYLOAD_BYTES,c as MAX_LOGGED_DB_ERROR_LENGTH,a as MIN_RETRYABLE_BATCH_SIZE,r as RELATIONS_UPSERT_SET};
@@ -1,4 +1,3 @@
1
1
  import type { BffCatalogEntity } from '@redocly/theme/core/types';
2
- import type { Row } from '@libsql/client';
3
- export declare function createBffEntity(entity: Row): BffCatalogEntity | null;
2
+ export declare function createBffEntity(entity: Record<string, unknown>): BffCatalogEntity | null;
4
3
  //# sourceMappingURL=create-bff-entity.d.ts.map
@@ -1 +1 @@
1
- import{logger as o}from"../../../../tools/notifiers/logger.js";import{entityDatabaseSchema as s}from"../../schemas/database-schemas.js";import{validateWithResult as l}from"../../utils/ajv-validator.js";import{createBffRelatedEntities as n}from"./create-bff-related-entities.js";function m(t){const{domains:r,owners:i}=t,a=l(s,t);if(!a.success)return o.warn(`Invalid database catalog entity for entity ${t.key}, error: ${a.error}`),null;const e=a.data||{};return{id:e.id,organizationId:e.organization_id,projectId:e.project_id,type:e.type,key:e.key,title:e.title,summary:e.summary??void 0,tags:e.tags?JSON.parse(e.tags):null,metadata:e.metadata?JSON.parse(e.metadata):null,git:e.git?JSON.parse(e.git):null,contact:e.contact?JSON.parse(e.contact):null,links:e.links?JSON.parse(e.links):null,source:e.source,sourceFile:e.source_file??void 0,createdAt:e.created_at,updatedAt:e.updated_at,version:e.version??void 0,revision:e.revision,isCurrent:e.is_current!==null?!!e.is_current:null,isDefaultVersion:e.is_default_version!==null?!!e.is_default_version:null,isDeleted:e.is_deleted!==null?!!e.is_deleted:null,object:"catalogEntityView",domains:n(r),owners:n(i)}}export{m as createBffEntity};
1
+ import{logger as o}from"../../../../tools/notifiers/logger.js";import{entityDatabaseSchema as s}from"../../schemas/database-schemas.js";import{validateWithResult as l}from"../../utils/ajv-validator.js";import{createBffRelatedEntities as n}from"./create-bff-related-entities.js";function f(t){const r=t.domains,i=t.owners,a=l(s,{...t});if(!a.success)return o.warn(`Invalid database catalog entity for entity ${String(t.key)}, error: ${a.error}`),null;const e=a.data||{};return{id:e.id,organizationId:e.organizationId,projectId:e.projectId,type:e.type,key:e.key,title:e.title,summary:e.summary??void 0,tags:e.tags?JSON.parse(e.tags):null,metadata:e.metadata?JSON.parse(e.metadata):null,git:e.git?JSON.parse(e.git):null,contact:e.contact?JSON.parse(e.contact):null,links:e.links?JSON.parse(e.links):null,source:e.source,sourceFile:e.sourceFile??void 0,createdAt:e.createdAt,updatedAt:e.updatedAt,version:e.version??void 0,revision:e.revision,isCurrent:e.isCurrent!==null?!!e.isCurrent:null,isDefaultVersion:e.isDefaultVersion!==null?!!e.isDefaultVersion:null,isDeleted:e.isDeleted!==null?!!e.isDeleted:null,object:"catalogEntityView",domains:n(r),owners:n(i)}}export{f as createBffEntity};
@@ -1,4 +1,4 @@
1
- import type { DatabaseEntityAttributesDto } from '../../../../providers/database/databases/catalog-sqlite/schemas/entities-attributes-table';
1
+ import type { DatabaseEntityAttributesDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js';
2
2
  export declare function createEntityAttributesDbRecord({ rbacTeams, entityKey, organizationId, projectId, }: {
3
3
  rbacTeams: string[];
4
4
  entityKey: string;
@@ -1,5 +1,5 @@
1
1
  import type { EntityBaseFileSchema } from '@redocly/config';
2
- import type { DatabaseEntityDto } from '../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js';
2
+ import type { DatabaseEntityDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-table.js';
3
3
  export declare function createEntityDbRecord({ entity, organizationId, projectId, source, sourceFile, fileHash, }: {
4
4
  entity: EntityBaseFileSchema & {
5
5
  id?: string;
@@ -1,5 +1,3 @@
1
- import type { Row } from '@libsql/client';
2
1
  import type { EntityReadModelSchema } from '../../schemas/read-model-schemas.js';
3
- import type { DatabaseEntity } from '../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js';
4
- export declare function createEntityReadModel(entity: DatabaseEntity | Row): EntityReadModelSchema | null;
2
+ export declare function createEntityReadModel(entity: Record<string, unknown>): EntityReadModelSchema | null;
5
3
  //# sourceMappingURL=create-entity-read-model.d.ts.map
@@ -1 +1 @@
1
- import{logger as r}from"../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as t}from"@redocly/theme/core/constants";import{entityDatabaseSchema as l}from"../../schemas/database-schemas.js";import{validateWithResult as o}from"../../utils/ajv-validator.js";const i=e=>"project_id"in e&&"organization_id"in e&&"created_at"in e;function m(e){if(i(e)){const s=o(l,e);if(!s.success)return r.warn(`Invalid database catalog entity for entity ${e.key}, error: ${s.error}`),null;const a=s.data||{};return{id:a.id,organizationId:a.organization_id,projectId:a.project_id,type:a.type,key:a.key||"",title:a.title||"",summary:a.summary||null,tags:a.tags?JSON.parse(a.tags):null,metadata:a.metadata?JSON.parse(a.metadata):null,git:a.git?JSON.parse(a.git):null,contact:a.contact?JSON.parse(a.contact):null,links:a.links?JSON.parse(a.links):null,source:a.source||"file",sourceFile:a.source_file||null,version:a.version||t,revision:a.revision??"",hash:a.hash||null,isCurrent:a.is_current??!1,isDefaultVersion:a.is_default_version??!1,createdAt:a.created_at,updatedAt:a.updated_at,isDeleted:a.is_deleted??!1,object:"catalogEntity",rbacTeams:a.rbac_teams?JSON.parse(a.rbac_teams):[]}}return{...e,tags:e.tags?JSON.parse(e.tags):null,metadata:e.metadata?JSON.parse(e.metadata):null,git:e.git?JSON.parse(e.git):null,contact:e.contact?JSON.parse(e.contact):null,links:e.links?JSON.parse(e.links):null,source:e.source||"file",version:e.version,revision:e.revision??"",hash:e.hash||null,isCurrent:e.isCurrent??!1,isDefaultVersion:e.isDefaultVersion??!1,isDeleted:e.isDeleted??!1,object:"catalogEntity"}}export{m as createEntityReadModel};
1
+ import{logger as r}from"../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as s}from"@redocly/theme/core/constants";import{entityDatabaseSchema as i}from"../../schemas/database-schemas.js";import{validateWithResult as o}from"../../utils/ajv-validator.js";function d(a){const t=o(i,{...a});if(!t.success)return r.warn(`Invalid database catalog entity for entity ${a.key}, error: ${t.error}`),null;const e=t.data||{};return{id:e.id,organizationId:e.organizationId,projectId:e.projectId,type:e.type,key:e.key||"",title:e.title||"",summary:e.summary||null,tags:e.tags?JSON.parse(e.tags):null,metadata:e.metadata?JSON.parse(e.metadata):null,git:e.git?JSON.parse(e.git):null,contact:e.contact?JSON.parse(e.contact):null,links:e.links?JSON.parse(e.links):null,source:e.source,sourceFile:e.sourceFile||null,version:e.version||s,revision:e.revision??"",hash:e.hash||null,isCurrent:e.isCurrent??!1,isDefaultVersion:e.isDefaultVersion??!1,createdAt:e.createdAt,updatedAt:e.updatedAt,isDeleted:e.isDeleted??!1,object:"catalogEntity",rbacTeams:e.rbacTeams?JSON.parse(e.rbacTeams):[]}}export{d as createEntityReadModel};
@@ -1,5 +1,5 @@
1
1
  import type { EntityRelationDtoSchema } from '../../schemas/dto-schemas.js';
2
- import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
2
+ import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js';
3
3
  export declare function createEntityRelationDbRecordFromDto(relation: EntityRelationDtoSchema & {
4
4
  id?: string;
5
5
  createdAt?: string;
@@ -1,5 +1,5 @@
1
1
  import type { EntityRelationFileSchema } from '@redocly/config';
2
- import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
2
+ import type { DatabaseEntityRelationDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js';
3
3
  type CreateEntityRelationDbRecordFromFileSchemaParams = {
4
4
  relation: EntityRelationFileSchema;
5
5
  sourceFile: string;
@@ -1,7 +1,7 @@
1
- import type { Row } from '@libsql/client';
2
- import type { DatabaseEntityRelation } from '../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
1
+ import type { DatabaseEntityRelation } from '../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js';
3
2
  import type { EntityRelationReadModelSchema } from '../../schemas/read-model-schemas.js';
4
- export declare function createEntityRelationReadModel(relation: DatabaseEntityRelation | Row | null): (EntityRelationReadModelSchema & {
3
+ export type CreateEntityRelationReadModelInput = DatabaseEntityRelation | Record<string, unknown>;
4
+ export declare function createEntityRelationReadModel(relation: CreateEntityRelationReadModelInput | null): (EntityRelationReadModelSchema & {
5
5
  object: 'catalogEntityRelation';
6
6
  }) | null;
7
7
  //# sourceMappingURL=create-entity-relation-read-model.d.ts.map
@@ -1 +1 @@
1
- import{logger as r}from"../../../../tools/notifiers/logger.js";import{entityRelationDatabaseSchema as i}from"../../schemas/database-schemas.js";import{validateWithResult as a}from"../../utils/ajv-validator.js";const n=e=>"project_id"in e&&"organization_id"in e&&"source_key"in e;function g(e){if(!e)return null;if(n(e)){const o=a(i,e);if(!o.success)return r.warn(`Invalid database catalog entity relation, error: ${o.error}`),null;const t=o.data||{};return{id:t.id,organizationId:t.organization_id,projectId:t.project_id,sourceKey:t.source_key,targetKey:t.target_key,sourceVersion:t.source_version??null,sourceRevision:t.source_revision??null,targetVersion:t.target_version??null,targetRevision:t.target_revision??null,type:t.source_to_target_relation,createdAt:t.created_at,updatedAt:t.updated_at,object:"catalogEntityRelation"}}return{id:e.id,organizationId:e.organizationId,projectId:e.projectId,sourceKey:e.sourceKey,targetKey:e.targetKey,sourceVersion:e.sourceVersion??null,sourceRevision:e.sourceRevision??null,targetVersion:e.targetVersion??null,targetRevision:e.targetRevision??null,type:e.sourceToTargetRelation,createdAt:e.createdAt,updatedAt:e.updatedAt,object:"catalogEntityRelation"}}export{g as createEntityRelationReadModel};
1
+ import{logger as o}from"../../../../tools/notifiers/logger.js";import{entityRelationDatabaseSchema as a}from"../../schemas/database-schemas.js";import{validateWithResult as n}from"../../utils/ajv-validator.js";function u(r){if(!r)return null;const t=n(a,{...r});if(!t.success)return o.warn(`Invalid database catalog entity relation, error: ${t.error}`),null;const e=t.data||{};return{id:e.id,organizationId:e.organizationId,projectId:e.projectId,sourceKey:e.sourceKey,targetKey:e.targetKey,sourceVersion:e.sourceVersion??null,sourceRevision:e.sourceRevision??null,targetVersion:e.targetVersion??null,targetRevision:e.targetRevision??null,type:e.sourceToTargetRelation,lastSeenRunId:e.lastSeenRunId??null,createdAt:e.createdAt,updatedAt:e.updatedAt,object:"catalogEntityRelation"}}export{u as createEntityRelationReadModel};
@@ -1,10 +1,10 @@
1
1
  import type { BffCatalogEntity } from '@redocly/theme/core/types';
2
2
  import type { PaginationParams } from '../../../../../providers/database/pagination/schemas.js';
3
3
  import type { DatabaseClient } from '../../../../../providers/database/client.js';
4
- import type { ListResult } from './catalog-entities-local-read-repository.js';
5
- export declare class CatalogEntitiesBffRepository {
4
+ import type { ListResult } from '../types.js';
5
+ export declare class BffEntitiesReadRepository {
6
6
  #private;
7
- constructor(db: DatabaseClient, attachedDatabasePath: string);
7
+ constructor(db: DatabaseClient);
8
8
  getEntitiesWithRelations({ paginationParams, rbacTeams, excludedEntities, excludedTypes, }: {
9
9
  paginationParams: PaginationParams;
10
10
  rbacTeams?: string[];
@@ -22,4 +22,4 @@ export declare class CatalogEntitiesBffRepository {
22
22
  excludedEntities?: string[];
23
23
  }): Promise<BffCatalogEntity | null>;
24
24
  }
25
- //# sourceMappingURL=catalog-entities-bff-repository.d.ts.map
25
+ //# sourceMappingURL=bff-entities-read-repository.d.ts.map
@@ -0,0 +1,131 @@
1
+ import{and as S,desc as q,eq as l,sql as e}from"drizzle-orm";import{logger as V}from"../../../../../tools/notifiers/logger.js";import{applyPagination as k}from"../../../../../providers/database/pagination/index.js";import{getEffectivePaginationLimit as J}from"../../../../../providers/database/pagination/limit.js";import{applyFilter as P,excludeFieldsFromFilter as z,getAllFilterFieldValues as W}from"../../../../../providers/database/pagination/filter.js";import{entitiesAttributesTable as N}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js";import{entitiesRelationsTable as K}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js";import{entitiesTable as a}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{createBffEntity as L}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as p,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as G,createEntityFieldsForSelect as D}from"../utils.js";import{buildEntitiesExclusionFilter as B}from"../utils/build-entities-exclusion-filter.js";import{buildRbacFilter as X,buildSubqueryRbacJoinAndFilter as Y}from"../utils/build-rbac-filter.js";import{buildSemanticVersionSortExpr as I}from"../utils/semantic-version-sort.js";const i={entityForKey:"e",baseEntities:"base_entities",pagedEntities:"paged_entities",combinedRelations:"combined_relations",combinedTargetEntities:"combined_target_entities",combinedTargetAttributes:"combined_target_attributes"};class ut{#t;constructor(t){this.#t=t}async getEntitiesWithRelations({paginationParams:t,rbacTeams:r,excludedEntities:n,excludedTypes:o}){const c=W(t.filter,"owners");if(c.length>0)return this.#c(t,c,r,o,n);const E=W(t.filter,"domains");return E.length>0?this.#l(t,E,r,o,n):this.#d(t,r,o,n)}async getEntityWithRelationsByKey({entityKey:t,filter:r,rbacTeams:n,excludedTypes:o,excludedEntities:c}){if(!t||t.trim()==="")return null;const E=r?.revision,u=r?.version,y=E?null:await this.#u(t,u||null),C=u??y?.version,R=E||y?.revision||null,F=B(o,c,"entities"),d=this.#t.client.select(D("entities")).from(a).leftJoin(N,l(a.key,N.entityKey)).where(S(l(a.key,t),X(n,"entities_attributes"),F)).as(i.entityForKey),g=this.#e().as(i.combinedRelations),b=this.#i(o,c).as(i.combinedTargetEntities),$=this.#s().as(i.combinedTargetAttributes),h=this.#t.client.with(d,g,b,$).select({...D(i.entityForKey),domains:this.#n(i.entityForKey,n).as("domains"),owners:this.#r(i.entityForKey,n).as("owners")}).from(d).$dynamic();R?h.where(S(l(e.raw("revision"),R),C?l(e.raw("version"),C):void 0)):(h.where(l(e.raw("is_current"),1)),h.orderBy(e`${I("version")} DESC`,e.raw("revision DESC"))),h.limit(1);const s=await h.get();return s?L(s):null}async#c(t,r,n,o,c){const E=this.#o(n,o,c),u=this.#e(),y=this.#i(o,c),C=u.as(i.combinedRelations),R=y.as(i.combinedTargetEntities),_=this.#s().as(i.combinedTargetAttributes),d=r.map(s=>e`
2
+ EXISTS (
3
+ SELECT 1 FROM (${u}) cr
4
+ WHERE cr.source_key = ${s}
5
+ AND cr.source_to_target_relation = 'owns'
6
+ AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
7
+ )
8
+ `),g=d.length===1?d[0]:e`(${e.join(d,e` OR `)})`,T=W(t.filter,"domains");let b=g;if(T.length>0){const s=T.map(m=>e`
9
+ EXISTS (
10
+ SELECT 1 FROM (${u}) cr
11
+ JOIN (${y}) d ON d.key = ${m}
12
+ WHERE d.type = 'domain'
13
+ AND d.is_current = 1
14
+ AND cr.source_key = ${m}
15
+ AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
16
+ AND cr.source_to_target_relation = 'hasParts'
17
+ )
18
+ `),f=s.length===1?s[0]:e`(${e.join(s,e` OR `)})`;b=e`(${g} AND ${f})`}const v=z(t.filter,["owners","domains"]),$={...t,filter:v,baseWhereCondition:b},h=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();try{const s=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();k(s,{...$,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#t.client.$count(s),m=J(t);k(h,{...$,limit:m+1});const w=h.as(i.pagedEntities),Q=this.#t.client.with(C,R,_,w).select({...D(i.pagedEntities),domains:this.#n(i.pagedEntities,n).as("domains"),owners:this.#r(i.pagedEntities,n).as("owners")}).from(w),[M,H]=await Promise.all([Q.all(),f]),O=M,j=O.length>m;return{items:O.slice(0,m).map(A=>L(A)).filter(A=>A!==null),hasMore:j,total:H}}catch(s){return V.error("Error getting entities with relations (owner optimized path): "+s.message),{items:[],hasMore:!1,total:0}}}async#l(t,r,n,o,c){const E=this.#o(n,o,c),u=this.#e(),y=this.#i(o,c),C=u.as(i.combinedRelations),R=y.as(i.combinedTargetEntities),_=this.#s().as(i.combinedTargetAttributes),d=r.map(s=>e`
19
+ EXISTS (
20
+ SELECT 1 FROM (${u}) cr
21
+ JOIN (${y}) d ON d.key = ${s}
22
+ WHERE d.type = 'domain'
23
+ AND d.is_current = 1
24
+ AND cr.source_key = ${s}
25
+ AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
26
+ AND cr.source_to_target_relation = 'hasParts'
27
+ )
28
+ `),g=d.length===1?d[0]:e`(${e.join(d,e` OR `)})`,T=W(t.filter,"owners");let b=g;if(T.length>0){const s=T.map(m=>e`
29
+ EXISTS (
30
+ SELECT 1 FROM (${u}) cr
31
+ WHERE cr.source_key = ${m}
32
+ AND cr.source_to_target_relation = 'owns'
33
+ AND cr.target_key = ${e.raw(`${i.baseEntities}.key`)}
34
+ )
35
+ `),f=s.length===1?s[0]:e`(${e.join(s,e` OR `)})`;b=e`(${g} AND ${f})`}const v=z(t.filter,["domains","owners"]),$={...t,filter:v,baseWhereCondition:b},h=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();try{const s=this.#t.client.select(p).from(E.as(i.baseEntities)).$dynamic();k(s,{...$,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#t.client.$count(s),m=J(t);k(h,{...$,limit:m+1});const w=h.as(i.pagedEntities),Q=this.#t.client.with(C,R,_,w).select({...D(i.pagedEntities),domains:this.#n(i.pagedEntities,n).as("domains"),owners:this.#r(i.pagedEntities,n).as("owners")}).from(w),[M,H]=await Promise.all([Q.all(),f]),O=M,j=O.length>m;return{items:O.slice(0,m).map(A=>L(A)).filter(A=>A!==null),hasMore:j,total:H}}catch(s){return V.error("Error getting entities with relations (domain optimized path): "+s.message),{items:[],hasMore:!1,total:0}}}async#d(t,r,n,o){const c=this.#o(r,n,o),E=this.#e(),u=this.#i(n,o),y=E.as(i.combinedRelations),C=u.as(i.combinedTargetEntities),F=this.#s().as(i.combinedTargetAttributes),_=this.#t.client.select(p).from(c.as(i.baseEntities)).$dynamic(),{whereCondition:d}=P(_,t.filter);d&&_.where(d);try{const g=this.#t.client.select(p).from(c.as(i.baseEntities)).$dynamic();d&&g.where(d);const T=this.#t.client.$count(g),b=J(t);k(_,{...t,limit:b+1});const v=_.as(i.pagedEntities),$=this.#t.client.with(y,C,F,v).select({...D(i.pagedEntities),domains:this.#n(i.pagedEntities,r).as("domains"),owners:this.#r(i.pagedEntities,r).as("owners")}).from(v),[h,s]=await Promise.all([$.all(),T]),f=h,m=f.length>b;return{items:f.slice(0,b).map(w=>L(w)).filter(w=>w!==null),hasMore:m,total:s}}catch(g){return V.error("Error getting entities with relations (optimized path): "+g.message),{items:[],hasMore:!1,total:0}}}#o(t,r,n){const o=B(r,n,"entities");return this.#t.client.select(D("entities")).from(a).leftJoin(N,l(a.key,N.entityKey)).where(S(l(a.isCurrent,!0),l(a.isDeleted,!1),X(t,"entities_attributes"),o,this.#a("entities")))}#e(){return this.#t.client.select(G).from(K).where(l(K.isDeleted,!1))}#i(t,r){const n=B(t,r,"entities");return this.#t.client.select(p).from(a).where(S(l(a.isCurrent,!0),l(a.isDeleted,!1),n,this.#a("entities")))}async#u(t,r){if(r){const c=await this.#t.client.select({version:a.version,revision:a.revision}).from(a).where(S(l(a.key,t),l(a.version,r))).orderBy(q(a.revision)).limit(1).get();return c?{version:c.version||null,revision:c.revision||null}:null}const n=await this.#t.client.select({version:a.version,revision:a.revision}).from(a).where(S(l(a.key,t),l(a.isCurrent,!0),l(a.isDeleted,!1))).orderBy(e`${I("entities.version")} DESC`,q(a.revision)).limit(1).get();return n?{version:n.version||null,revision:n.revision||null}:null}#a(t){const r=e.raw(`${t}.key`),n=I(`${t}.version`),o=e.raw(`${t}.revision`),c=I("higher.version");return e`
36
+ NOT EXISTS (
37
+ SELECT 1
38
+ FROM entities higher
39
+ WHERE higher.key = ${r}
40
+ AND higher.is_current = 1
41
+ AND COALESCE(higher.is_deleted, 0) = 0
42
+ AND (
43
+ (${c}) > (${n})
44
+ OR (
45
+ (${c}) = (${n})
46
+ AND higher.revision > ${o}
47
+ )
48
+ )
49
+ )
50
+ `}#n(t,r){const{join:n,filter:o}=Y(r,"d.key");return e`
51
+ COALESCE(
52
+ (
53
+ SELECT json_group_array(
54
+ json_object(
55
+ 'id', d.id,
56
+ 'key', d.key,
57
+ 'type', d.type,
58
+ 'title', d.title,
59
+ 'summary', d.summary,
60
+ 'created_at', d.created_at,
61
+ 'updated_at', d.updated_at,
62
+ 'source', d.source,
63
+ 'source_file', d.source_file
64
+ )
65
+ )
66
+ FROM (
67
+ SELECT DISTINCT d.*
68
+ FROM combined_relations er
69
+ JOIN combined_target_entities d ON d.key = er.source_key
70
+ ${n}
71
+ WHERE er.source_to_target_relation = 'hasParts'
72
+ AND er.target_key = ${e.raw(`${t}.key`)}
73
+ AND d.type = 'domain'
74
+ AND d.is_current = 1
75
+ ${o}
76
+ AND CASE
77
+ WHEN ${e.raw(`${t}.version`)} = ''
78
+ THEN er.target_version = ''
79
+ ELSE (er.target_version = ${e.raw(`${t}.version`)} OR er.target_version = '')
80
+ END
81
+ AND CASE
82
+ WHEN ${e.raw(`${t}.revision`)} = ''
83
+ THEN 1 = 1
84
+ ELSE (er.target_revision <= ${e.raw(`${t}.revision`)} OR er.target_revision = '')
85
+ END
86
+ LIMIT 10
87
+ ) d
88
+ ),
89
+ json_array()
90
+ )
91
+ `}#r(t,r){const{join:n,filter:o}=Y(r,"o.key");return e`
92
+ COALESCE(
93
+ (
94
+ SELECT json_group_array(
95
+ json_object(
96
+ 'id', o.id,
97
+ 'key', o.key,
98
+ 'type', o.type,
99
+ 'title', o.title,
100
+ 'summary', o.summary,
101
+ 'created_at', o.created_at,
102
+ 'updated_at', o.updated_at,
103
+ 'source', o.source,
104
+ 'source_file', o.source_file
105
+ )
106
+ )
107
+ FROM (
108
+ SELECT DISTINCT o.*
109
+ FROM combined_relations er
110
+ JOIN combined_target_entities o ON o.key = er.source_key
111
+ ${n}
112
+ WHERE er.source_to_target_relation = 'owns'
113
+ AND er.target_key = ${e.raw(`${t}.key`)}
114
+ AND o.is_current = 1
115
+ ${o}
116
+ AND CASE
117
+ WHEN ${e.raw(`${t}.version`)} = ''
118
+ THEN er.target_version = ''
119
+ ELSE (er.target_version = ${e.raw(`${t}.version`)} OR er.target_version = '')
120
+ END
121
+ AND CASE
122
+ WHEN ${e.raw(`${t}.revision`)} = ''
123
+ THEN 1 = 1
124
+ ELSE (er.target_revision <= ${e.raw(`${t}.revision`)} OR er.target_revision = '')
125
+ END
126
+ LIMIT 10
127
+ ) o
128
+ ),
129
+ json_array()
130
+ )
131
+ `}#s(){return this.#t.client.select({entityKey:N.entityKey,rbacTeams:N.rbacTeams}).from(N)}}export{ut as BffEntitiesReadRepository};
@@ -0,0 +1,26 @@
1
+ import type { DatabaseConnection, RepositoryInstanceOptions } from '../../../../providers/database/types.js';
2
+ import { BaseRepository } from '../../../../providers/database/base-repository.js';
3
+ import { RelationsReadRepository } from './relations/relations-read-repository.js';
4
+ import { RevisionRepository } from './common/revision-repository.js';
5
+ import { BffEntitiesReadRepository } from './bffEntities/bff-entities-read-repository.js';
6
+ import { EntitiesReadRepository } from './entities/entities-read-repository.js';
7
+ import { EntitiesWriteRepository } from './entities/entities-write-repository.js';
8
+ import { RelationsWriteRepository } from './relations/relations-write-repository.js';
9
+ import { FiltersRepository } from './common/filters-repository.js';
10
+ export declare class CatalogEntitiesRepository extends BaseRepository {
11
+ #private;
12
+ readonly entitiesRead: EntitiesReadRepository;
13
+ readonly entitiesWrite: EntitiesWriteRepository;
14
+ readonly relationsRead: RelationsReadRepository;
15
+ readonly relationsWrite: RelationsWriteRepository;
16
+ readonly bffEntitiesRead: BffEntitiesReadRepository;
17
+ readonly filters: FiltersRepository;
18
+ readonly revisions: RevisionRepository;
19
+ get transactionsManager(): import("../../../../providers/database/transactions-manager.js").TransactionsManager;
20
+ constructor(dbConnection: DatabaseConnection);
21
+ sync(): Promise<void>;
22
+ static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRepository>;
23
+ static recreateInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRepository>;
24
+ static resetInstance(): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=catalog-entities-repository.d.ts.map
@@ -0,0 +1 @@
1
+ import{logger as n}from"../../../../tools/notifiers/logger.js";import{telemetryTraceStep as s}from"../../../../telemetry/helpers/trace-step.js";import{BaseRepository as a}from"../../../../providers/database/base-repository.js";import{DatabaseConnectionFactory as c}from"../../../../providers/database/database-connection-factory.js";import{RelationsReadRepository as o}from"./relations/relations-read-repository.js";import{RevisionRepository as f}from"./common/revision-repository.js";import{BffEntitiesReadRepository as m}from"./bffEntities/bff-entities-read-repository.js";import{EntitiesReadRepository as l}from"./entities/entities-read-repository.js";import{EntitiesWriteRepository as p}from"./entities/entities-write-repository.js";import{RelationsWriteRepository as w}from"./relations/relations-write-repository.js";import{FiltersRepository as h}from"./common/filters-repository.js";class e extends a{static#t;entitiesRead;entitiesWrite;relationsRead;relationsWrite;bffEntitiesRead;filters;revisions;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t),this.revisions=new f(t.client),this.bffEntitiesRead=new m(t.client),this.relationsRead=new o(t.client),this.entitiesRead=new l(t.client),this.entitiesWrite=new p(t.client,this.organizationId,this.projectId),this.relationsWrite=new w(t.client,this.organizationId,this.projectId),this.filters=new h(t.client)}async sync(){return s("catalog_entities.remote_repository.sync",async()=>{await this.databaseClient.sync()})}static async#e(t){const r=await c.create(t);if(!r)throw new Error("Failed to create db connection for catalog entities repository");return new e(r)}static async getInstance(t){return await s("catalog_entities.remote_repository.get_instance",async r=>{if(e.#t)return e.#t;try{return e.#t=await e.#e(t),e.#t}catch(i){throw n.error("Error creating db connection for catalog entities repository",i),r?.error(i),e.#t=null,i}})}static async recreateInstance(t){const r=e.#t,i=await e.#e(t);return e.#t=i,r&&await r.close(),i}static async resetInstance(){const t=e.#t;e.#t=null,t&&await t.close()}}export{e as CatalogEntitiesRepository};
@@ -0,0 +1,8 @@
1
+ import type { DatabaseClient } from '../../../../../providers/database/client.js';
2
+ import type { CatalogFiltersParams, FilterOption } from '../types.js';
3
+ export declare class FiltersRepository {
4
+ #private;
5
+ constructor(db: DatabaseClient);
6
+ getCatalogFilters({ entitiesTypes, emptyFilters, rbacTeams, excludedTypes, excludedEntities, }: CatalogFiltersParams): Promise<Record<string, FilterOption[]>>;
7
+ }
8
+ //# sourceMappingURL=filters-repository.d.ts.map