@redocly/revel-reef 0.128.0-next.5 → 0.128.0-next.7

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 (90) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +54 -0
  3. package/dist/client/providers/theme/ThemeDataProvider.js +1 -1
  4. package/dist/constants/common.d.ts +2 -0
  5. package/dist/constants/common.js +1 -1
  6. package/dist/server/constants/plugins/catalog-entities.d.ts +1 -0
  7. package/dist/server/constants/plugins/catalog-entities.js +1 -1
  8. package/dist/server/esbuild/esbuild.js +2 -2
  9. package/dist/server/node-bundle-entry.js +1 -1
  10. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +8 -0
  11. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  12. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.js +1 -1
  13. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +5 -0
  14. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +6 -6
  15. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +8 -0
  16. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
  17. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +3 -0
  18. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +1 -1
  19. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +1 -0
  20. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
  21. package/dist/server/plugins/catalog-entities/database/repositories/utils.d.ts +2 -0
  22. package/dist/server/plugins/catalog-entities/database/repositories/utils.js +1 -1
  23. package/dist/server/plugins/catalog-entities/entities/types.d.ts +1 -0
  24. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.d.ts +2 -1
  25. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  26. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.d.ts +2 -1
  27. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +1 -11
  28. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  29. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.d.ts +2 -1
  30. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +1 -1
  31. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +2 -1
  32. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
  33. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  34. package/dist/server/plugins/catalog-entities/types/extractors.d.ts +16 -0
  35. package/dist/server/plugins/catalog-entities/types/extractors.js +0 -0
  36. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.d.ts +20 -0
  37. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -0
  38. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.d.ts +2 -0
  39. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.js +1 -0
  40. package/dist/server/plugins/scorecards/workers/scorecards.d.ts +14 -0
  41. package/dist/server/plugins/scorecards/workers/scorecards.js +1 -0
  42. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0002_add-scorecards-status.sql +1 -0
  43. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0002_snapshot.json +385 -0
  44. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +7 -0
  45. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-table.d.ts +19 -0
  46. package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-table.js +1 -1
  47. package/dist/server/providers/database/databases/main-sqlite/migrations/0003_file-path-added.sql +1 -0
  48. package/dist/server/providers/database/databases/main-sqlite/migrations/0004_add-scorecards-tables.sql +10 -0
  49. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0004_snapshot.json +221 -0
  50. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +7 -0
  51. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.d.ts +162 -0
  52. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.js +1 -0
  53. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
  54. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0003_add-scorecards-tables.sql +61 -0
  55. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0004_add-scorecards-status.sql +1 -0
  56. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0003_snapshot.json +796 -0
  57. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0004_snapshot.json +803 -0
  58. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/_journal.json +14 -0
  59. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-evaluations-table.d.ts +124 -0
  60. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-evaluations-table.js +1 -0
  61. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-level-states-table.d.ts +48 -0
  62. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-level-states-table.js +1 -0
  63. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-levels-table.d.ts +186 -0
  64. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-levels-table.js +1 -0
  65. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-states-table.d.ts +177 -0
  66. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-states-table.js +1 -0
  67. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-results-table.d.ts +179 -0
  68. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-results-table.js +1 -0
  69. package/dist/server/providers/database/pagination/types.d.ts +9 -0
  70. package/dist/server/utils/is-catalog-entities-enabled.d.ts +2 -0
  71. package/dist/server/utils/is-catalog-entities-enabled.js +1 -0
  72. package/dist/server/utils/is-scorecards-enabled.d.ts +3 -0
  73. package/dist/server/utils/is-scorecards-enabled.js +1 -0
  74. package/dist/server/web-server/dev-server.js +1 -1
  75. package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
  76. package/dist/server/web-server/routes/catalog/bff-catalog-revisions.d.ts +4 -0
  77. package/dist/server/web-server/routes/catalog/bff-catalog-revisions.js +1 -0
  78. package/dist/server/web-server/routes/catalog/bff-catalog.d.ts +0 -1
  79. package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
  80. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  81. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  82. package/dist/server/web-server/routes/index.js +1 -1
  83. package/dist/server/workers/scorecards-worker-pool.d.ts +4 -0
  84. package/dist/server/workers/scorecards-worker-pool.js +1 -0
  85. package/dist/server/workers/scorecards-worker.d.ts +2 -0
  86. package/dist/server/workers/scorecards-worker.js +1 -0
  87. package/dist/server/workers/types.d.ts +6 -0
  88. package/dist/utils/object/allowlist-object.d.ts +16 -0
  89. package/dist/utils/object/allowlist-object.js +1 -0
  90. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @redocly/revel-reef
2
2
 
3
+ ## 0.128.0-next.7
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [ca48d4ee2d]
8
+ - @redocly/openapi-docs@3.16.0-next.7
9
+ - @redocly/asyncapi-docs@1.5.0-next.7
10
+ - @redocly/portal-plugin-mock-server@0.13.0-next.7
11
+
12
+ ## 0.128.0-next.6
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [301d33c8b3]
17
+ - @redocly/realm-asyncapi-sdk@0.6.0-next.1
18
+ - @redocly/theme@0.60.0-next.5
19
+ - @redocly/asyncapi-docs@1.5.0-next.6
20
+ - @redocly/graphql-docs@1.5.0-next.1
21
+ - @redocly/openapi-docs@3.16.0-next.6
22
+ - @redocly/portal-plugin-mock-server@0.13.0-next.6
23
+
3
24
  ## 0.128.0-next.5
4
25
 
5
26
  ### Minor Changes
package/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # About Revel-Reef
2
+
3
+ The Revel-Reef package combines Redocly's external developer showcase platform with Redocly's API management platform.
4
+
5
+ ## Features
6
+
7
+ - **Markdown Docs** - write content in Markdown and enhance it using built-in or custom Markdoc tags
8
+ - **React Pages** - build custom pages with React to create modern experience
9
+ - **Component ejection** - eject and customize any component to bring your theming and branding
10
+ - **Multi-product support** - manage and showcase multiple API products with separate configuration for each product
11
+ - **Localization** - present your API in multiple languages for a global audience
12
+ - **Catalog** - use rich metadata to organize, search, and filter APIs
13
+ - **Scorecard** - run multiple sets of rules against each API
14
+ - **API functions** - build custom backend logic within your documentation pages
15
+ - **Markdown Docs** - write content in Markdown and enhance it using built-in or custom Markdoc tags
16
+ - **API Scout** - monitor your APIs to find ones that are hidden, underused, or duplicate
17
+ - **Dynamic client registration** - allow customers to register a client or application, get credentials and gain access to API products
18
+
19
+ ## Live demo
20
+
21
+ You can explore a live deployment of Revel at [https://redocly.com](https://redocly.com) - this website runs entirely on Realm (which includes Revel).
22
+
23
+ ## Installation
24
+
25
+ Install Redoc-Revel using npm:
26
+
27
+ ```bash
28
+ npm install @redocly/revel-reef
29
+ ```
30
+
31
+ Or using pnpm:
32
+
33
+ ```bash
34
+ pnpm add @redocly/revel-reef
35
+ ```
36
+
37
+ Or using yarn:
38
+
39
+ ```bash
40
+ yarn add @redocly/revel-reef
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ Revel-Reef integrates with Reunite for docs-as-code workflows and collaboration.
46
+
47
+ ## Support
48
+
49
+ - [Documentation](https://redocly.com/docs)
50
+ - [Contact the Redocly team](https://redocly.com/contact-us)
51
+
52
+ ---
53
+
54
+ Built with 💙 by Redocly
@@ -1 +1 @@
1
- import a from"react";import{ThemeDataContext as l}from"@redocly/theme/core/contexts";import{useBreadcrumbs as d,useCatalogClassic as g,useCurrentProduct as f,useGlobalData as o,useI18n as p,useI18nConfig as b,useL10n as C,useL10nConfig as h,usePageData as r,usePageSharedData as S,usePageVersions as P,usePreloadHistory as T,useProducts as D,useUserMenu as k,useSubmitFeedback as F,useTranslate as L,useSidebarSiblingsData as M,usePageProps as O,useUserTeams as v,useMarkdownText as E,useCodeHighlight as R,useLoadAndNavigate as w,useCatalog as x,useCatalogSort as y,useCatalogSearch as A,useFetchCatalogEntities as j,useFetchCatalogEntitiesRelations as I,useTelemetry as s,useMcpData as H}from"../../app/hooks";import{Link as N}from"../../app/Link";import{useFacetQuery as U,useSearch as _,useAiSearch as B}from"../../app/search";import{useSidebarItems as G}from"../../app/Sidebar/useSidebarItems";import{deepMerge as Q}from"../../../utils/object/deep-merge";const V=new Set(["title","description","seo","sidebar","excludeFromSearch","template","redirects","rbac","metadata","slug","codeSnippet","breadcrumbs","markdown","seo","navbar","footer","colorMode","feedback","navigation"]),W={useBreadcrumbs:d,useCatalog:x,useCatalogSort:y,useCatalogSearch:A,useFetchCatalogEntities:j,useFetchCatalogEntitiesRelations:I,useCatalogClassic:g,useCurrentProduct:f,useGlobalData:o,useSearch:_,useAiSearch:B,useFacetQuery:U,useI18n:p,useI18nConfig:b,useL10n:C,useL10nConfig:h,usePageData:r,usePageSharedData:S,usePageVersions:P,usePreloadHistory:T,useProducts:D,useUserMenu:k,useSidebarItems:G,useSidebarSiblingsData:M,useSubmitFeedback:F,useTranslate:L,useUserTeams:v,usePageProps:O,useMarkdownText:E,useCodeHighlight:R,useLoadAndNavigate:w,useTelemetry:s,useOtelTelemetry:s,useMcpData:H},q={LinkComponent:N};function ee({children:n}){const{props:e}=r()||{},t=o()||{},u=a.useMemo(()=>{const c=Object.fromEntries(Object.entries(e?.frontmatter||{}).filter(([m])=>V.has(m)));return Q(t,c)},[t,e?.frontmatter]),i={hooks:W,components:q,config:u};return a.createElement(l.Provider,{value:i},n)}export{ee as ThemeDataProvider};
1
+ import a from"react";import{ThemeDataContext as m}from"@redocly/theme/core/contexts";import{useBreadcrumbs as l,useCatalogClassic as d,useCurrentProduct as g,useGlobalData as o,useI18n as p,useI18nConfig as f,useL10n as b,useL10nConfig as C,usePageData as r,usePageSharedData as h,usePageVersions as P,usePreloadHistory as S,useProducts as T,useUserMenu as D,useSubmitFeedback as k,useTranslate as F,useSidebarSiblingsData as L,usePageProps as M,useUserTeams as v,useMarkdownText as O,useCodeHighlight as E,useLoadAndNavigate as R,useCatalog as w,useCatalogSort as x,useCatalogSearch as y,useFetchCatalogEntities as A,useFetchCatalogEntitiesRelations as I,useTelemetry as s,useMcpData as j}from"../../app/hooks";import{Link as H}from"../../app/Link";import{useFacetQuery as N,useSearch as U,useAiSearch as _}from"../../app/search";import{useSidebarItems as B}from"../../app/Sidebar/useSidebarItems";import{deepMerge as G}from"../../../utils/object/deep-merge";import{allowlistObject as Q}from"../../../utils/object/allowlist-object";const V=["title","description","seo","sidebar","excludeFromSearch","template","redirects","rbac","metadata","slug","codeSnippet","breadcrumbs","markdown","seo","navbar","footer","colorMode","feedback","navigation"],W={useBreadcrumbs:l,useCatalog:w,useCatalogSort:x,useCatalogSearch:y,useFetchCatalogEntities:A,useFetchCatalogEntitiesRelations:I,useCatalogClassic:d,useCurrentProduct:g,useGlobalData:o,useSearch:U,useAiSearch:_,useFacetQuery:N,useI18n:p,useI18nConfig:f,useL10n:b,useL10nConfig:C,usePageData:r,usePageSharedData:h,usePageVersions:P,usePreloadHistory:S,useProducts:T,useUserMenu:D,useSidebarItems:B,useSidebarSiblingsData:L,useSubmitFeedback:k,useTranslate:F,useUserTeams:v,usePageProps:M,useMarkdownText:O,useCodeHighlight:E,useLoadAndNavigate:R,useTelemetry:s,useOtelTelemetry:s,useMcpData:j},q={LinkComponent:H};function te({children:u}){const{props:e}=r()||{},t=o()||{},n=a.useMemo(()=>{const c=Q(e?.frontmatter||{},V);return G(t,c)},[t,e?.frontmatter]),i={hooks:W,components:q,config:n};return a.createElement(m.Provider,{value:i},u)}export{te as ThemeDataProvider};
@@ -36,6 +36,8 @@ export declare enum FEEDBACK_TYPES {
36
36
  PROBLEM = "problem",
37
37
  SCALE = "scale"
38
38
  }
39
+ export declare const CATALOG_ENTITY_KEY = "entityKey";
40
+ export declare const CATALOG_ENTITY_RELATION_ID = "entityRelationId";
39
41
  export declare const ServerRoutes: {
40
42
  readonly INFO: "/_info";
41
43
  readonly EJECT_COMPONENT: "/eject-component/:componentName";
@@ -1 +1 @@
1
- import{AuthProviderType as e}from"@redocly/config";import{withPathPrefix as o}from"@redocly/theme/core/utils";const O="openapi_docs",p="asyncapi_docs",T="graphql_docs",R="/_spec-gql",L="markdoc",I="tags",E="*",C={[E]:"read"},S=["openid","email"],l=1440*60,d="anonymous",P="authenticated",N="**",u="Reunite",D="translations.yaml",h="redocly.yaml",m="@redocly/theme",x="@theme",U="/app-data.json",g="/eject-component",r=process.env.SERVER_EDITOR_APP_URL||"http://127.0.0.1:3000",M=process.env.REDOCLY_CORS_ORIGINS?process.env.REDOCLY_CORS_ORIGINS.split(",").map(t=>t.trim()).filter(Boolean).concat(r):[r];var a;(function(t){t.BUILD="build",t.DEVELOP="develop",t.PREPARE="prepare"})(a||(a={}));var _;(function(t){t.RATING="rating",t.SENTIMENT="sentiment",t.COMMENT="comment",t.MOOD="mood",t.PROBLEM="problem",t.SCALE="scale"})(_||(_={}));const c={INFO:"/_info",EJECT_COMPONENT:"/eject-component/:componentName",SHARED_PAGE_DATA:"/page-data/shared/*",PAGE_DATA:"/page-data/*",APP_DATA:"/app-data.json",AUTHORIZATION:"/authorize",OIDC_CALLBACK:"/_auth/oidc",SAML_CALLBACK:"/_auth/saml2",REDOCLY_CALLBACK:"/_auth/redocly",REPLAY_OAUTH2_CALLBACK:"/_auth/replay-oauth2",REDOCLY_LOGIN_CALLBACK:"/_auth/redocly/redocly-login",REDOCLY_TOKEN_LOGIN:"/_auth/redocly-token-login",SEARCH:"/_search",SEARCH_FACETS:"/_search-facets",LOGOUT:"/logout",LOGIN:"/login",IDP_LOGIN:"/_auth/idp-login",INVITE:"/invite/:code",RESOLVE_ROUTE_BY_PATH:"/resolve-route-by-path",RESOLVE_ROUTES_BY_PATHS:"/resolve-routes-by-paths",RESOLVE_ROUTE_BY_SLUG:"/resolve-route-by-slug",GET_ROUTES_BY_LINE:"/get-routes-by-line",FEEDBACK:"/feedback",TELEMETRY:"/_events",OTEL_TRACES:"/_otel/v1/traces",HEALTH:"/_health",ASK_AI:"/_ask-ai",CATALOG_ENTITIES:"/catalog-entities/:entityKey?",CATALOG_ENTITIES_RELATIONS:"/catalog-entities-relations/:entityRelationId?",BFF_CATALOG_ENTITIES:"/bff/catalog-entities/:entityKey?",BFF_CATALOG_RELATED_ENTITIES:"/bff/catalog-related-entities/:entityKey",BFF_CATALOG_REVISIONS:"/bff/catalog-revisions/:entityKey",MCP_OAUTH_AUTHORIZATION_SERVER:"/.well-known/oauth-authorization-server",MCP_OAUTH_PROTECTED_RESOURCE:"/.well-known/oauth-protected-resource/mcp",MCP_DYNAMIC_CLIENT_REGISTRATION:"/_mcp/register",MCP_AUTHORIZATION:"/_mcp/oauth2/auth",MCP_TOKEN_PORTAL:"/_mcp/oauth2/token-portal",MCP_CALLBACK:"/_mcp/oauth/callback",SCORECARDS:"/scorecards"},y={[e.SAML2]:o(c.IDP_LOGIN),[e.OIDC]:o(c.IDP_LOGIN)};var s;(function(t){t.AI_SEARCH="aiSearch"})(s||(s={}));const G="/login",v="/invite",F={AUTH0_PASS:"/auth/auth0-pass"},H={NotExist:"ENOENT"},b="default_locale",B="sidebar-",f="PUBLIC_",k=["BROKEN_LINK","MARKDOC","RESOLVE"],K=["logo","navbar","products","footer","sidebar","scripts","links","feedback","search","aiAssistant","colorMode","navigation","codeSnippet","markdown","openapi","graphql","analytics","userMenu","versionPicker","breadcrumbs","catalog","entitiesCatalog","scorecard","scorecards","scorecardClassic","mcp"],n="redocly_category",V="redocly_product",Y="redocly_version",w="redocly_teams",j=n,q={asyncapi:"asyncapi",apiFunctions:"apiFunctions",reactPages:"reactPages",catalog:"catalog",catalogClassic:"catalogClassic",lint:"lint",scorecard:"scorecard",scorecards:"scorecards",l10n:"l10n",openapi:"openapi",graphql:"graphql",markdown:"markdown",devOnboarding:"devOnboarding",seo:"seo",redirects:"redirects",customPlugins:"customPlugins",themeEjecting:"themeEjecting",products:"products",breadcrumbs:"breadcrumbs",mockServer:"mockServer",sso:"sso",rbac:"rbac",analytics:"analytics",removeAttribution:"removeAttribution",advancedSearch:"advancedSearch",soap:"soap",ssoDirect:"ssoDirect",codeWalkthrough:"codeWalkthrough",aiSearchLimit:"aiSearchLimit",mcp:"mcp"};export{M as ALLOWED_CORS_ORIGINS,p as ASYNC_API_DOCS_TEMPLATE_ID,h as CONFIG_FILE_NAME,L as CUSTOM_MARKDOC_OPTIONS_PATH,I as CUSTOM_MARKDOC_TAGS_PATH,d as DEFAULT_ANONYMOUS_VISITOR_TEAM,P as DEFAULT_AUTHENTICATED_TEAM,l as DEFAULT_COOKIE_EXPIRATION,b as DEFAULT_LOCALE_PLACEHOLDER,y as DEFAULT_PROVIDERS_LOGIN_URLS,N as DEFAULT_RBAC_SCOPE,u as DEFAULT_SSO_IDP_TITLE,m as DEFAULT_THEME_NAME,G as DEV_LOGIN_SLUG,g as EJECT_COMPONENT_URL,F as ExternalRoutes,q as FEATURE,_ as FEEDBACK_TYPES,H as FsErrors,U as GLOBAL_DATA_URL,R as GRAPHQL_SPEC_SLUG,T as GRAPHQL_TEMPLATE_ID,v as INVITE_SLUG,k as MARKDOC_ERROR_TYPES,O as OPENAPI_DOCS_TEMPLATE_ID,f as PUBLIC_ENV_PREFIX,C as PUBLIC_RBAC_SCOPE_ITEM,E as RBAC_ALL_OTHER_TEAMS,S as REQUIRED_OIDC_SCOPES,s as RbacFeatures,n as SEARCH_CATEGORY_FIELD,j as SEARCH_GROUP_FACET_FIELD,V as SEARCH_PRODUCT_FIELD,w as SEARCH_RBAC_FIELD,Y as SEARCH_VERSION_FIELD,r as SERVER_EDITOR_APP_URL,B as SIDEBAR_PREFIX,c as ServerRoutes,D as TRANSLATIONS_FILE_NAME,K as UI_ACCESSIBLE_CONFIG_PROPS,x as USER_THEME_ALIAS,a as cliCommandNames};
1
+ import{AuthProviderType as e}from"@redocly/config";import{withPathPrefix as r}from"@redocly/theme/core/utils";const i="openapi_docs",L="asyncapi_docs",R="graphql_docs",I="/_spec-gql",C="markdoc",S="tags",n="*",l={[n]:"read"},d=["openid","email"],P=1440*60,N="anonymous",u="authenticated",D="**",h="Reunite",x="translations.yaml",m="redocly.yaml",U="@redocly/theme",g="@theme",M="/app-data.json",G="/eject-component",_=process.env.SERVER_EDITOR_APP_URL||"http://127.0.0.1:3000",v=process.env.REDOCLY_CORS_ORIGINS?process.env.REDOCLY_CORS_ORIGINS.split(",").map(o=>o.trim()).filter(Boolean).concat(_):[_];var a;(function(o){o.BUILD="build",o.DEVELOP="develop",o.PREPARE="prepare"})(a||(a={}));var c;(function(o){o.RATING="rating",o.SENTIMENT="sentiment",o.COMMENT="comment",o.MOOD="mood",o.PROBLEM="problem",o.SCALE="scale"})(c||(c={}));const t="entityKey",A="entityRelationId",s={INFO:"/_info",EJECT_COMPONENT:"/eject-component/:componentName",SHARED_PAGE_DATA:"/page-data/shared/*",PAGE_DATA:"/page-data/*",APP_DATA:"/app-data.json",AUTHORIZATION:"/authorize",OIDC_CALLBACK:"/_auth/oidc",SAML_CALLBACK:"/_auth/saml2",REDOCLY_CALLBACK:"/_auth/redocly",REPLAY_OAUTH2_CALLBACK:"/_auth/replay-oauth2",REDOCLY_LOGIN_CALLBACK:"/_auth/redocly/redocly-login",REDOCLY_TOKEN_LOGIN:"/_auth/redocly-token-login",SEARCH:"/_search",SEARCH_FACETS:"/_search-facets",LOGOUT:"/logout",LOGIN:"/login",IDP_LOGIN:"/_auth/idp-login",INVITE:"/invite/:code",RESOLVE_ROUTE_BY_PATH:"/resolve-route-by-path",RESOLVE_ROUTES_BY_PATHS:"/resolve-routes-by-paths",RESOLVE_ROUTE_BY_SLUG:"/resolve-route-by-slug",GET_ROUTES_BY_LINE:"/get-routes-by-line",FEEDBACK:"/feedback",TELEMETRY:"/_events",OTEL_TRACES:"/_otel/v1/traces",HEALTH:"/_health",ASK_AI:"/_ask-ai",CATALOG_ENTITIES:`/catalog-entities/:${t}?`,CATALOG_ENTITIES_RELATIONS:`/catalog-entities-relations/:${A}?`,BFF_CATALOG_ENTITIES:`/bff/catalog-entities/:${t}?`,BFF_CATALOG_RELATED_ENTITIES:`/bff/catalog-related-entities/:${t}`,BFF_CATALOG_REVISIONS:`/bff/catalog-revisions/:${t}`,MCP_OAUTH_AUTHORIZATION_SERVER:"/.well-known/oauth-authorization-server",MCP_OAUTH_PROTECTED_RESOURCE:"/.well-known/oauth-protected-resource/mcp",MCP_DYNAMIC_CLIENT_REGISTRATION:"/_mcp/register",MCP_AUTHORIZATION:"/_mcp/oauth2/auth",MCP_TOKEN_PORTAL:"/_mcp/oauth2/token-portal",MCP_CALLBACK:"/_mcp/oauth/callback",SCORECARDS:"/scorecards"},F={[e.SAML2]:r(s.IDP_LOGIN),[e.OIDC]:r(s.IDP_LOGIN)};var E;(function(o){o.AI_SEARCH="aiSearch"})(E||(E={}));const y="/login",H="/invite",b={AUTH0_PASS:"/auth/auth0-pass"},B={NotExist:"ENOENT"},f="default_locale",k="sidebar-",V="PUBLIC_",K=["BROKEN_LINK","MARKDOC","RESOLVE"],Y=["logo","navbar","products","footer","sidebar","scripts","links","feedback","search","aiAssistant","colorMode","navigation","codeSnippet","markdown","openapi","graphql","analytics","userMenu","versionPicker","breadcrumbs","catalog","entitiesCatalog","scorecard","scorecards","scorecardClassic","mcp"],O="redocly_category",w="redocly_product",j="redocly_version",q="redocly_teams",$=O,Q={asyncapi:"asyncapi",apiFunctions:"apiFunctions",reactPages:"reactPages",catalog:"catalog",catalogClassic:"catalogClassic",lint:"lint",scorecard:"scorecard",scorecards:"scorecards",l10n:"l10n",openapi:"openapi",graphql:"graphql",markdown:"markdown",devOnboarding:"devOnboarding",seo:"seo",redirects:"redirects",customPlugins:"customPlugins",themeEjecting:"themeEjecting",products:"products",breadcrumbs:"breadcrumbs",mockServer:"mockServer",sso:"sso",rbac:"rbac",analytics:"analytics",removeAttribution:"removeAttribution",advancedSearch:"advancedSearch",soap:"soap",ssoDirect:"ssoDirect",codeWalkthrough:"codeWalkthrough",aiSearchLimit:"aiSearchLimit",mcp:"mcp"};export{v as ALLOWED_CORS_ORIGINS,L as ASYNC_API_DOCS_TEMPLATE_ID,t as CATALOG_ENTITY_KEY,A as CATALOG_ENTITY_RELATION_ID,m as CONFIG_FILE_NAME,C as CUSTOM_MARKDOC_OPTIONS_PATH,S as CUSTOM_MARKDOC_TAGS_PATH,N as DEFAULT_ANONYMOUS_VISITOR_TEAM,u as DEFAULT_AUTHENTICATED_TEAM,P as DEFAULT_COOKIE_EXPIRATION,f as DEFAULT_LOCALE_PLACEHOLDER,F as DEFAULT_PROVIDERS_LOGIN_URLS,D as DEFAULT_RBAC_SCOPE,h as DEFAULT_SSO_IDP_TITLE,U as DEFAULT_THEME_NAME,y as DEV_LOGIN_SLUG,G as EJECT_COMPONENT_URL,b as ExternalRoutes,Q as FEATURE,c as FEEDBACK_TYPES,B as FsErrors,M as GLOBAL_DATA_URL,I as GRAPHQL_SPEC_SLUG,R as GRAPHQL_TEMPLATE_ID,H as INVITE_SLUG,K as MARKDOC_ERROR_TYPES,i as OPENAPI_DOCS_TEMPLATE_ID,V as PUBLIC_ENV_PREFIX,l as PUBLIC_RBAC_SCOPE_ITEM,n as RBAC_ALL_OTHER_TEAMS,d as REQUIRED_OIDC_SCOPES,E as RbacFeatures,O as SEARCH_CATEGORY_FIELD,$ as SEARCH_GROUP_FACET_FIELD,w as SEARCH_PRODUCT_FIELD,q as SEARCH_RBAC_FIELD,j as SEARCH_VERSION_FIELD,_ as SERVER_EDITOR_APP_URL,k as SIDEBAR_PREFIX,s as ServerRoutes,x as TRANSLATIONS_FILE_NAME,Y as UI_ACCESSIBLE_CONFIG_PROPS,g as USER_THEME_ALIAS,a as cliCommandNames};
@@ -16,4 +16,5 @@ export declare const CATALOG_FILTERS_CACHE_NAMESPACE = "catalog-filters";
16
16
  export declare const CATALOG_FILTERS_CACHE_TTL_IN_SECONDS: number;
17
17
  export declare const CATALOG_ENTITIES_DEFAULT_CONFIG: EntitiesCatalogConfig;
18
18
  export declare const CATALOG_ENTITIES_FILES_REGEX: RegExp;
19
+ export declare const ALLOWED_CATALOG_QUERY_PARAMS: readonly ["after", "before", "sort", "filter", "search", "limit", "skip"];
19
20
  //# sourceMappingURL=catalog-entities.d.ts.map
@@ -1 +1 @@
1
- const e=["node_modules","dist","build",".git","@l10n"],l="/catalogs",a={ALL:"all",SERVICES:"services",DOMAINS:"domains",TEAMS:"teams",USERS:"users",API_DESCRIPTIONS:"api-descriptions",DATA_SCHEMAS:"data-schemas",API_OPERATIONS:"api-operations"},s="catalog:entitySources",i="catalog-filters",o=300,t=[{title:"Domains",property:"domains"},{title:"Owner",property:"owners"},{title:"Tags",property:"tags"}],c={show:!1,catalogs:{all:{slug:a.ALL,hide:!1,includes:[],excludes:[],filters:[{title:"Type",property:"type"},...t],titleTranslationKey:"catalog.catalogs.all.title",descriptionTranslationKey:"catalog.catalogs.all.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.all.switcherLabel"},services:{slug:a.SERVICES,hide:!1,includes:[{type:"service"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.service.title",descriptionTranslationKey:"catalog.catalogs.service.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.service.switcherLabel"},domains:{slug:a.DOMAINS,hide:!1,includes:[{type:"domain"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.domain.title",descriptionTranslationKey:"catalog.catalogs.domain.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.domain.switcherLabel"},teams:{slug:a.TEAMS,hide:!1,includes:[{type:"team"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.team.title",descriptionTranslationKey:"catalog.catalogs.team.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.team.switcherLabel"},users:{slug:a.USERS,hide:!1,includes:[{type:"user"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.user.title",descriptionTranslationKey:"catalog.catalogs.user.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.user.switcherLabel"},apiDescriptions:{slug:a.API_DESCRIPTIONS,hide:!1,includes:[{type:"api-description"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.apiDescription.title",descriptionTranslationKey:"catalog.catalogs.apiDescription.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.apiDescription.switcherLabel"},dataSchemas:{slug:a.DATA_SCHEMAS,hide:!1,includes:[{type:"data-schema"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.dataSchema.title",descriptionTranslationKey:"catalog.catalogs.dataSchema.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.dataSchema.switcherLabel"},apiOperations:{slug:a.API_OPERATIONS,hide:!1,includes:[{type:"api-operation"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.apiOperation.title",descriptionTranslationKey:"catalog.catalogs.apiOperation.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.apiOperation.switcherLabel"}}},n=/\.(entity|entities)\.(yaml|yml)$/;export{l as CATALOG_BASE_SLUG,c as CATALOG_ENTITIES_DEFAULT_CONFIG,n as CATALOG_ENTITIES_FILES_REGEX,i as CATALOG_FILTERS_CACHE_NAMESPACE,o as CATALOG_FILTERS_CACHE_TTL_IN_SECONDS,a as CATALOG_SLUGS,s as ENTITIES_MAP_GLOBAL_DATA_KEY,e as ENTITY_SCHEMA_EXCLUDED_FOLDERS};
1
+ const e=["node_modules","dist","build",".git","@l10n"],l="/catalogs",a={ALL:"all",SERVICES:"services",DOMAINS:"domains",TEAMS:"teams",USERS:"users",API_DESCRIPTIONS:"api-descriptions",DATA_SCHEMAS:"data-schemas",API_OPERATIONS:"api-operations"},s="catalog:entitySources",i="catalog-filters",o=300,t=[{title:"Domains",property:"domains"},{title:"Owner",property:"owners"},{title:"Tags",property:"tags"}],c={show:!1,catalogs:{all:{slug:a.ALL,hide:!1,includes:[],excludes:[],filters:[{title:"Type",property:"type"},...t],titleTranslationKey:"catalog.catalogs.all.title",descriptionTranslationKey:"catalog.catalogs.all.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.all.switcherLabel"},services:{slug:a.SERVICES,hide:!1,includes:[{type:"service"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.service.title",descriptionTranslationKey:"catalog.catalogs.service.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.service.switcherLabel"},domains:{slug:a.DOMAINS,hide:!1,includes:[{type:"domain"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.domain.title",descriptionTranslationKey:"catalog.catalogs.domain.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.domain.switcherLabel"},teams:{slug:a.TEAMS,hide:!1,includes:[{type:"team"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.team.title",descriptionTranslationKey:"catalog.catalogs.team.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.team.switcherLabel"},users:{slug:a.USERS,hide:!1,includes:[{type:"user"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.user.title",descriptionTranslationKey:"catalog.catalogs.user.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.user.switcherLabel"},apiDescriptions:{slug:a.API_DESCRIPTIONS,hide:!1,includes:[{type:"api-description"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.apiDescription.title",descriptionTranslationKey:"catalog.catalogs.apiDescription.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.apiDescription.switcherLabel"},dataSchemas:{slug:a.DATA_SCHEMAS,hide:!1,includes:[{type:"data-schema"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.dataSchema.title",descriptionTranslationKey:"catalog.catalogs.dataSchema.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.dataSchema.switcherLabel"},apiOperations:{slug:a.API_OPERATIONS,hide:!1,includes:[{type:"api-operation"}],excludes:[],filters:t,titleTranslationKey:"catalog.catalogs.apiOperation.title",descriptionTranslationKey:"catalog.catalogs.apiOperation.description",catalogSwitcherLabelTranslationKey:"catalog.catalogs.apiOperation.switcherLabel"}}},r=/\.(entity|entities)\.(yaml|yml)$/,n=["after","before","sort","filter","search","limit","skip"];export{n as ALLOWED_CATALOG_QUERY_PARAMS,l as CATALOG_BASE_SLUG,c as CATALOG_ENTITIES_DEFAULT_CONFIG,r as CATALOG_ENTITIES_FILES_REGEX,i as CATALOG_FILTERS_CACHE_NAMESPACE,o as CATALOG_FILTERS_CACHE_TTL_IN_SECONDS,a as CATALOG_SLUGS,s as ENTITIES_MAP_GLOBAL_DATA_KEY,e as ENTITY_SCHEMA_EXCLUDED_FOLDERS};
@@ -1,3 +1,3 @@
1
- import{context as a}from"esbuild";import{mkdirSync as j,writeFileSync as b,existsSync as M}from"node:fs";import*as m from"node:path";import{RUNTIME_RESOURCES_DIR as Y,TELEMETRY_ENABLED as V}from"../constants/common.js";import{fromCurrentDir as t}from"../utils/paths.js";import{NodeBrowserPlugin as S}from"./plugins/node-browser.js";import{PortalImport as l}from"./plugins/portal-import.js";import{ThemesResolver as u}from"./plugins/themes-resolver.js";import{AssetsResolver as E}from"./plugins/assets-resolver.js";import{EsbuildErrorCollector as _}from"./plugins/esbuild-compile-resolver.js";import{OpenapiDocsModuleReplacer as f}from"./plugins/openapi-docs-module-replacer/index.js";import{ServerPropsResolver as R}from"./plugins/server-props-resolver.js";import{StyledComponentsSSR as v}from"./plugins/styled-components-ssr.js";import{DependencyResolver as d}from"./plugins/dependency-resolver.js";import{YamlLoader as L}from"./plugins/yaml-loader.js";import{ApiRequestHandlersResolver as A}from"./plugins/api-request-handlers-resolver.js";import{MiddlewareResolver as N}from"./plugins/middleware-resolver.js";import{OnRebuild as D}from"./plugins/on-rebuild.js";import{getPublicEnvVariables as $}from"../utils/envs/get-public-env-variables.js";import{PORTAL_VERSION as T}from"../version.js";import{AsyncApiPatch as O}from"./plugins/async-api-patch.js";import{telemetryTraceStep as g}from"../../cli/telemetry/helpers/trace-step.js";const C={bundle:!0,format:"esm",chunkNames:"chunks/[name]-[hash]"};function y(e){const o=m.join(e,"tsconfig.json");return M(o)?o:void 0}const p=new Set;async function ie(){await Promise.all([...p].map(e=>e.dispose())),p.clear()}async function ce(e,o,r="production",n){return await g("build.create_client_compiler",async()=>{const c=$(),i={};Object.entries(c).map(([h,w])=>i[`process.env.${h}`]=JSON.stringify(w));const s=[...n?[D(n)]:[],S({path:"path-browserify",fs:"{}",tty:"tty-browserify",os:"os-browserify",http:"stream-http",https:"stream-http",readline:"{}",crypto:"{}",stream:"{}",zlib:"{}","https-proxy-agent":"{}"}),u(e,e.contentDir),E(e,e.contentDir),_(e,e.contentDir),R(e),d(),l(),L(),O(),v(),f()],I=[t(import.meta.url,"../../client/browser-entry.js"),t(import.meta.url,"../../client/user-tags-entry.js")],P=await a({...C,entryPoints:I,outdir:m.join(o,Y),sourcemap:r!=="production"&&process.env.ENABLE_SOURCE_MAPS==="true",plugins:s,tsconfig:y(e.contentDir),mainFields:["browser","module","main"],metafile:r!=="production",minify:r==="production",splitting:!0,external:["constants","zlib","stream","https","vm","module","worker_threads","child_process","@swc/core"],inject:[process.env.INSPECT_MODE==="true"?t(import.meta.url,"../../client/inspect-mode-hooks.js"):"",t(import.meta.url,"./web-shim.js")].filter(Boolean),define:{...i,"process.env.NODE_ENV":`"${r}"`,"process.env.REDOCLY_LOCAL_DEV":`"${process.env.REDOCLY_LOCAL_DEV}"`,"process.env.SERVER_EDITOR_APP_URL":`"${process.env.SERVER_EDITOR_APP_URL}"`,"process.env.ENABLE_COMMENTS":`"${process.env.ENABLE_COMMENTS}"`,"process.env.REDOCLY_TELEMETRY":V?'""':'"off"',"process.env.REDOCLY_PORTAL_VERSION":`"${T}"`,"process.env":`{"NODE_ENV": "${r}"}`,"process.platform":'"browser"',"process.browser":"true","module.hot":"false",global:"{}",...process.env.REDOCLY_PREFIX_PATHS&&{"process.env.REDOCLY_PREFIX_PATHS":`"${process.env.REDOCLY_PREFIX_PATHS}"`},...process.env.INSPECT_MODE==="true"&&{"process.env.INSPECT_MODE":`${process.env.INSPECT_MODE}`},...process.env.MAIN_API_URL&&{"process.env.MAIN_API_URL":`"${process.env.MAIN_API_URL}"`}},logLevel:"silent"});return p.add(P),P})}async function pe(e,o,r="development",n){j(o,{recursive:!0}),b(m.join(o,"package.json"),JSON.stringify({name:"@redocly/portal/server-cache",type:"module"}));const c=[...n?[D(n)]:[],u(e,e.contentDir),E(e,e.contentDir),_(e,e.contentDir),R(e),A(e),N(e),d(),l(),L(),O(),v(),f()],i=[t(import.meta.url,"../../client/server-entry.js"),t(import.meta.url,"../../client/user-tags-entry.js"),t(import.meta.url,"../../client/server-props-entry.js"),t(import.meta.url,"../../client/api-request-handlers-entry.js"),t(import.meta.url,"../../client/middleware-entry.js")],s=await a({...C,entryPoints:i,outdir:o,plugins:c,sourcemap:r!=="production"&&process.env.ENABLE_SOURCE_MAPS==="true",minify:r==="production",tsconfig:y(e.contentDir),mainFields:["module","main"],splitting:!0,external:["react","react-router-dom","@dr.pogodin/react-helmet","@swc/core","pnpapi","canvas"],banner:{js:`import { createRequire as topLevelCreateRequire } from 'module';
2
- const require = topLevelCreateRequire(import.meta.url);`},platform:"node",define:{"process.env.NODE_ENV":`"${r}"`,"process.env.REDOCLY_LOCAL_DEV":`"${process.env.REDOCLY_LOCAL_DEV}"`,"module.hot":"false"},logLevel:"silent"});return p.add(s),s}async function ae(e,o,r="production",n){return await g("build.create_server_compiler",async()=>{const c=[...n?[D(n)]:[],S({"node-fetch":"{}",webpack:"{}",swagger2openapi:"{}"}),u(e,e.contentDir),E(e,e.contentDir),_(e,e.contentDir),R(e),A(e),N(e),d(),l(),L(),O(),v(),f()],i=[{in:t(import.meta.url,"../node-bundle-entry.js"),out:"index"},{in:t(import.meta.url,"../../client/user-tags-entry.js"),out:"user-tags-entry"},{in:t(import.meta.url,"../workers/api-routes-worker.js"),out:"api-routes-worker"}],s=await a({...C,entryPoints:i,outExtension:{".js":".mjs"},outdir:o,platform:"node",plugins:c,tsconfig:y(e.contentDir),mainFields:["module","main"],metafile:r!=="production",minify:r==="production",splitting:!1,define:{"process.env.NODE_ENV":`"${r}"`,"process.env.REDOCLY_LOCAL_DEV":`"${process.env.REDOCLY_LOCAL_DEV}"`,"process.env.REDOCLY_STATIC_BUNDLE":"true","process.env.REDOCLY_PORTAL_VERSION":`"${T}"`,"module.hot":"false",...process.env.REDOCLY_PREFIX_PATHS&&{"process.env.REDOCLY_PREFIX_PATHS":`"${process.env.REDOCLY_PREFIX_PATHS}"`}},banner:{js:`import { createRequire as topLevelCreateRequire } from 'module';
1
+ import{context as a}from"esbuild";import{mkdirSync as j,writeFileSync as b,existsSync as M}from"node:fs";import*as m from"node:path";import{RUNTIME_RESOURCES_DIR as Y,TELEMETRY_ENABLED as V}from"../constants/common.js";import{fromCurrentDir as t}from"../utils/paths.js";import{NodeBrowserPlugin as S}from"./plugins/node-browser.js";import{PortalImport as l}from"./plugins/portal-import.js";import{ThemesResolver as u}from"./plugins/themes-resolver.js";import{AssetsResolver as E}from"./plugins/assets-resolver.js";import{EsbuildErrorCollector as _}from"./plugins/esbuild-compile-resolver.js";import{OpenapiDocsModuleReplacer as f}from"./plugins/openapi-docs-module-replacer/index.js";import{ServerPropsResolver as R}from"./plugins/server-props-resolver.js";import{StyledComponentsSSR as v}from"./plugins/styled-components-ssr.js";import{DependencyResolver as d}from"./plugins/dependency-resolver.js";import{YamlLoader as L}from"./plugins/yaml-loader.js";import{ApiRequestHandlersResolver as A}from"./plugins/api-request-handlers-resolver.js";import{MiddlewareResolver as N}from"./plugins/middleware-resolver.js";import{OnRebuild as D}from"./plugins/on-rebuild.js";import{getPublicEnvVariables as $}from"../utils/envs/get-public-env-variables.js";import{PORTAL_VERSION as w}from"../version.js";import{AsyncApiPatch as O}from"./plugins/async-api-patch.js";import{telemetryTraceStep as T}from"../../cli/telemetry/helpers/trace-step.js";const C={bundle:!0,format:"esm",chunkNames:"chunks/[name]-[hash]"};function y(e){const o=m.join(e,"tsconfig.json");return M(o)?o:void 0}const p=new Set;async function ie(){await Promise.all([...p].map(e=>e.dispose())),p.clear()}async function ce(e,o,r="production",n){return await T("build.create_client_compiler",async()=>{const c=$(),i={};Object.entries(c).map(([I,h])=>i[`process.env.${I}`]=JSON.stringify(h));const s=[...n?[D(n)]:[],S({path:"path-browserify",fs:"{}",tty:"tty-browserify",os:"os-browserify",http:"stream-http",https:"stream-http",readline:"{}",crypto:"{}",stream:"{}",zlib:"{}","https-proxy-agent":"{}"}),u(e,e.contentDir),E(e,e.contentDir),_(e,e.contentDir),R(e),d(),l(),L(),O(),v(),f()],g=[t(import.meta.url,"../../client/browser-entry.js"),t(import.meta.url,"../../client/user-tags-entry.js")],P=await a({...C,entryPoints:g,outdir:m.join(o,Y),sourcemap:r!=="production"&&process.env.ENABLE_SOURCE_MAPS==="true",plugins:s,tsconfig:y(e.contentDir),mainFields:["browser","module","main"],metafile:r!=="production",minify:r==="production",splitting:!0,external:["constants","zlib","stream","https","vm","module","worker_threads","child_process","@swc/core"],inject:[process.env.INSPECT_MODE==="true"?t(import.meta.url,"../../client/inspect-mode-hooks.js"):"",t(import.meta.url,"./web-shim.js")].filter(Boolean),define:{...i,"process.env.NODE_ENV":`"${r}"`,"process.env.REDOCLY_LOCAL_DEV":`"${process.env.REDOCLY_LOCAL_DEV}"`,"process.env.SERVER_EDITOR_APP_URL":`"${process.env.SERVER_EDITOR_APP_URL}"`,"process.env.ENABLE_COMMENTS":`"${process.env.ENABLE_COMMENTS}"`,"process.env.REDOCLY_TELEMETRY":V?'""':'"off"',"process.env.REDOCLY_PORTAL_VERSION":`"${w}"`,"process.env":`{"NODE_ENV": "${r}"}`,"process.platform":'"browser"',"process.browser":"true","module.hot":"false",global:"{}",...process.env.REDOCLY_PREFIX_PATHS&&{"process.env.REDOCLY_PREFIX_PATHS":`"${process.env.REDOCLY_PREFIX_PATHS}"`},...process.env.INSPECT_MODE==="true"&&{"process.env.INSPECT_MODE":`${process.env.INSPECT_MODE}`},...process.env.MAIN_API_URL&&{"process.env.MAIN_API_URL":`"${process.env.MAIN_API_URL}"`}},logLevel:"silent"});return p.add(P),P})}async function pe(e,o,r="development",n){j(o,{recursive:!0}),b(m.join(o,"package.json"),JSON.stringify({name:"@redocly/portal/server-cache",type:"module"}));const c=[...n?[D(n)]:[],u(e,e.contentDir),E(e,e.contentDir),_(e,e.contentDir),R(e),A(e),N(e),d(),l(),L(),O(),v(),f()],i=[t(import.meta.url,"../../client/server-entry.js"),t(import.meta.url,"../../client/user-tags-entry.js"),t(import.meta.url,"../../client/server-props-entry.js"),t(import.meta.url,"../../client/api-request-handlers-entry.js"),t(import.meta.url,"../../client/middleware-entry.js")],s=await a({...C,entryPoints:i,outdir:o,plugins:c,sourcemap:r!=="production"&&process.env.ENABLE_SOURCE_MAPS==="true",minify:r==="production",tsconfig:y(e.contentDir),mainFields:["module","main"],splitting:!0,external:["react","react-router-dom","@dr.pogodin/react-helmet","@swc/core","pnpapi","canvas"],banner:{js:`import { createRequire as topLevelCreateRequire } from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);`},platform:"node",define:{"process.env.NODE_ENV":`"${r}"`,"process.env.REDOCLY_LOCAL_DEV":`"${process.env.REDOCLY_LOCAL_DEV}"`,"module.hot":"false"},logLevel:"silent"});return p.add(s),s}async function ae(e,o,r="production",n){return await T("build.create_server_compiler",async()=>{const c=[...n?[D(n)]:[],S({"node-fetch":"{}",webpack:"{}",swagger2openapi:"{}"}),u(e,e.contentDir),E(e,e.contentDir),_(e,e.contentDir),R(e),A(e),N(e),d(),l(),L(),O(),v(),f()],i=[{in:t(import.meta.url,"../node-bundle-entry.js"),out:"index"},{in:t(import.meta.url,"../../client/user-tags-entry.js"),out:"user-tags-entry"},{in:t(import.meta.url,"../workers/api-routes-worker.js"),out:"api-routes-worker"},{in:t(import.meta.url,"../workers/scorecards-worker.js"),out:"scorecards-worker"}],s=await a({...C,entryPoints:i,outExtension:{".js":".mjs"},outdir:o,platform:"node",plugins:c,tsconfig:y(e.contentDir),mainFields:["module","main"],metafile:r!=="production",minify:r==="production",splitting:!1,define:{"process.env.NODE_ENV":`"${r}"`,"process.env.REDOCLY_LOCAL_DEV":`"${process.env.REDOCLY_LOCAL_DEV}"`,"process.env.REDOCLY_STATIC_BUNDLE":"true","process.env.REDOCLY_PORTAL_VERSION":`"${w}"`,"module.hot":"false",...process.env.REDOCLY_PREFIX_PATHS&&{"process.env.REDOCLY_PREFIX_PATHS":`"${process.env.REDOCLY_PREFIX_PATHS}"`}},banner:{js:`import { createRequire as topLevelCreateRequire } from 'module';
3
3
  const require = topLevelCreateRequire(import.meta.url);`},logLevel:"silent"});return p.add(s),s})}export{ce as createClientCompiler,ae as createNodeBundleCompiler,pe as createServerCompiler,ie as stopAllCompilers};
@@ -1 +1 @@
1
- import{resolve as a,dirname as c}from"node:path";import{fileURLToPath as f}from"node:url";import{readFile as l}from"fs/promises";import{createReadStream as u}from"fs";import{telemetry as d}from"./telemetry/index.js";import{createRouter as v}from"./web-server/router.js";import{installProdRoutes as S}from"./web-server/routes/index.js";import{Store as D}from"./store.js";import{loadEnvVariables as E}from"./utils/envs/load-env-variables.js";import{startHttpServer as g}from"./web-server/http.js";import{readStaticData as P}from"./utils/static-data.js";import{startIdleTimeout as w}from"./web-server/middleware/idleTimeoutMiddleware.js";import{reporter as A}from"./tools/notifiers/reporter.js";import{EntitlementsProvider as N}from"./entitlements/entitlements-provider.js";import{DatabasePreconnectService as R}from"./providers/database/database-preconnect-service.js";import{isBuildMode as x}from"./utils/envs/is-build-mode.js";import{KvService as I}from"./persistence/kv/services/kv-service.js";import{renderPage as U}from"./ssr/index.js";if(!x()){let p=function(){const r=process.argv.findIndex(o=>o==="--port"||o==="-p");if(r===-1)return null;const e=process.argv[r+1];if(e.startsWith("-"))return null;const i=parseInt(e,10);return isNaN(i)?null:i};const t=c(f(import.meta.url));E(t);const n=JSON.parse(await l(a(t,"./store.json"),"utf-8")),s=D.fromJson(n,{outdir:a(t,"../client"),serverOutDir:t,serverMode:!0,contentDir:""});if(await N.instance().init({ignoreTokenExpiration:!0}),process.env.NEW_CATALOG_ENABLED==="true"){await R.init(t);const r=await I.getInstance({baseDbDir:t});setInterval(()=>r.clearExpired(),300*1e3)}m(s).catch(r=>{console.error(r)});async function m(r){d.initialize();const e=await v();S(e,r,{readStaticAsset:async o=>u(o),resolveRouteData:async o=>P(o.slug,r.outdir)}),A.printErrors();const i=p();return await g(e,i??process.env.PORT??4e3),w(),e}}export{U as renderPage};
1
+ import{resolve as a,dirname as p}from"node:path";import{fileURLToPath as f}from"node:url";import{readFile as l}from"fs/promises";import{createReadStream as u}from"fs";import{telemetry as d}from"./telemetry/index.js";import{createRouter as v}from"./web-server/router.js";import{installProdRoutes as S}from"./web-server/routes/index.js";import{Store as g}from"./store.js";import{loadEnvVariables as D}from"./utils/envs/load-env-variables.js";import{startHttpServer as E}from"./web-server/http.js";import{readStaticData as P}from"./utils/static-data.js";import{startIdleTimeout as b}from"./web-server/middleware/idleTimeoutMiddleware.js";import{reporter as w}from"./tools/notifiers/reporter.js";import{EntitlementsProvider as R}from"./entitlements/entitlements-provider.js";import{DatabasePreconnectService as x}from"./providers/database/database-preconnect-service.js";import{isBuildMode as I}from"./utils/envs/is-build-mode.js";import{KvService as y}from"./persistence/kv/services/kv-service.js";import{runScorecardsWorker as N}from"./plugins/scorecards/workers/run-scorecards-worker.js";import{isCatalogEntitiesEnabled as O}from"./utils/is-catalog-entities-enabled.js";import{isScorecardsEnabled as T}from"./utils/is-scorecards-enabled.js";import{renderPage as _}from"./ssr/index.js";if(!I()){let c=function(){const r=process.argv.findIndex(o=>o==="--port"||o==="-p");if(r===-1)return null;const e=process.argv[r+1];if(e.startsWith("-"))return null;const i=parseInt(e,10);return isNaN(i)?null:i};const t=p(f(import.meta.url));D(t);const n=JSON.parse(await l(a(t,"./store.json"),"utf-8")),s=g.fromJson(n,{outdir:a(t,"../client"),serverOutDir:t,serverMode:!0,contentDir:""});if(await R.instance().init({ignoreTokenExpiration:!0}),O()){await x.init(t);const r=await y.getInstance({baseDbDir:t});setInterval(()=>r.clearExpired(),300*1e3)}m(s).catch(r=>{console.error(r)});async function m(r){d.initialize();const e=await v();S(e,r,{readStaticAsset:async o=>u(o),resolveRouteData:async o=>P(o.slug,r.outdir)}),w.printErrors();const i=c();return await E(e,i??process.env.PORT??4e3),b(),T(r.config)&&N(r.serverOutDir),e}}export{_ as renderPage};
@@ -7,6 +7,7 @@ import type { ServiceInstanceOptions } from '../../../providers/database/types.j
7
7
  import type { TransactionsManager } from '../../../providers/database/transactions-manager.js';
8
8
  import type { CreateEntityParams } from './repositories/local/catalog-entities-local-write-repository.js';
9
9
  import type { Filter } from '../../../providers/database/pagination/types.js';
10
+ import type { ScorecardsStatus } from '../entities/types.js';
10
11
  import { type EntityDtoSchema, type EntityRelationDtoSchema } from '../schemas/dto-schemas.js';
11
12
  import { CatalogEntitiesLocalRepository } from './repositories/local/catalog-entities-local-repository.js';
12
13
  import { CatalogEntitiesRemoteRepository } from './repositories/remote/catalog-entities-remote-repository.js';
@@ -26,6 +27,10 @@ export declare class CatalogEntitiesService {
26
27
  transaction<T>(...args: Parameters<TransactionsManager['transaction']>): Promise<T>;
27
28
  getEntities(paginationParams: PaginationParams): Promise<ListResponseResult<EntityReadModelSchema>>;
28
29
  getEntityByKey(key: string): Promise<EntityReadModelSchema | null>;
30
+ getEntitiesCountByTypes(): Promise<{
31
+ type: string;
32
+ count: number;
33
+ }[]>;
29
34
  getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./repositories/local/catalog-entities-local-read-repository.js").FilterOption[]>>;
30
35
  createEntity(entity: EntityDtoSchema): Promise<EntityReadModelSchema | null>;
31
36
  createEntities(entities: EntityDtoSchema[]): Promise<BulkSyncResult<EntityReadModelSchema>>;
@@ -125,6 +130,9 @@ export declare class CatalogEntitiesService {
125
130
  getEntityWithRelationsByKey(entityKey: string, paginationParams?: PaginationParams): Promise<BffCatalogEntity | null>;
126
131
  getRelatedEntities(entityKey: string, paginationParams?: PaginationParams): Promise<BffCatalogRelatedEntityList>;
127
132
  listEntityRevisions(entityKey: string, version?: string | null): Promise<Pick<EntityReadModelSchema, "version" | "isDefaultVersion" | "createdAt" | "updatedAt" | "revision" | "isCurrent">[]>;
133
+ updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
134
+ updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
135
+ getOutdatedEntity(): Promise<EntityReadModelSchema | null>;
128
136
  }
129
137
  export {};
130
138
  //# sourceMappingURL=catalog-entities-service.d.ts.map
@@ -1 +1 @@
1
- import{entityFileSchema as u}from"@redocly/config";import{deepMerge as y}from"../../../../utils/object/deep-merge.js";import{promiseMapLimit as c}from"../../../utils/async/promise-map-limit.js";import{logger as r}from"../../../tools/notifiers/logger.js";import{entityRelationDtoSchema as d}from"../schemas/dto-schemas.js";import{CatalogEntitiesLocalRepository as m}from"./repositories/local/catalog-entities-local-repository.js";import{CatalogEntitiesRemoteRepository as R}from"./repositories/remote/catalog-entities-remote-repository.js";import{prepareListResponse as o}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as l}from"./mappers/field-transformations.js";import{createValidator as E}from"../utils/ajv-validator.js";import{hasOptionsChanged as w}from"../utils/has-options-changed.js";const h=15,f=E(d,{errorPrefix:"Entity relation validation failed:",dataVar:"entity relation"}),p=E(u,{errorPrefix:"Entity file validation failed:",dataVar:"entity"});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([m.getInstance(t),t.runOnlyLocalDatabase?void 0:R.getInstance(t)]),i=new n(e,a);a&&(process.env.NODE_ENV==="development"&&r.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=process.env.REDOCLY_LOCAL_DEV==="true"||process.env.CI==="true"),t.removeExisting===void 0&&(t.removeExisting=!1),(!n.#a||w(n.#i,t))&&await n.#n(t),n.#a}async transaction(...t){return this.#t.transactionsManager.transaction(...t)}async getEntities(t){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntities(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityByKey(t){return await this.#e?.sync(),await this.#t.getEntityByKey(t)}async getCatalogFilters(t){return await this.#e?.sync(),this.#t.getCatalogFilters(t)}async createEntity(t){return this.#e?this.#e.createEntity(t):(r.warn("No remote database found"),null)}async createEntities(t){const e=this.#e;return e?await c(t,h,async a=>e.createEntity(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.key,status:"error",error:i}))):(r.warn("No remote database found"),[])}getEntitySources(){return this.#t.getEntitySources()}async createEntityInLocalDatabase(t){await 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 updateEntityByKey(t,e){const a=await this.#t.getEntityByKey(t);if(!a)throw new Error(`Entity with key ${t} not found`);const i=y(a,e),s=p(i);return await this.#e?.updateEntity({...s,id:a.id,createdAt:a.createdAt||""})}async deleteEntityByKey(t){const e=await this.#e?.deleteEntity(t);return await this.#s(t),e}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 o({data:e,params:t,totalCount:a,nameTransformationsFromDatabase:l,hasMore:i})}async createEntityRelation(t){return this.#e?.createEntityRelation(t)}async createEntitiesRelations(t){const e=this.#e;return e?await c(t,h,async a=>e.createEntityRelation(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.sourceKey,status:"error",error:i}))):(r.warn("No remote database found"),[])}async updateEntityRelation(t,e){const a=await this.#t.getEntityRelationById(t);if(!a)throw new Error(`Entity relation with id ${t} not found`);const i=y(a,e),s=f(i);return this.#e?.createEntityRelation(s)}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(t={}){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntitiesWithRelations(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}async getRelatedEntities(t,e={}){await this.#e?.sync();const{items:a,total:i,hasMore:s}=await this.#t.getRelatedEntities(t,e);return o({data:a,params:e,totalCount:i,nameTransformationsFromDatabase:l,hasMore:s})}async#s(t){await this.#e?.deleteEntitiesRelations({op:"OR",conditions:[{field:"source_key",operator:"equal",value:t},{field:"target_key",operator:"equal",value:t}]})}async listEntityRevisions(t,e){return await this.#e?.sync(),this.#t.listEntityRevisions(t,e)}}export{n as CatalogEntitiesService};
1
+ import{entityFileSchema as d}from"@redocly/config";import{deepMerge as y}from"../../../../utils/object/deep-merge.js";import{promiseMapLimit as c}from"../../../utils/async/promise-map-limit.js";import{logger as r}from"../../../tools/notifiers/logger.js";import{entityRelationDtoSchema as h}from"../schemas/dto-schemas.js";import{CatalogEntitiesLocalRepository as m}from"./repositories/local/catalog-entities-local-repository.js";import{CatalogEntitiesRemoteRepository as R}from"./repositories/remote/catalog-entities-remote-repository.js";import{prepareListResponse as o}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as l}from"./mappers/field-transformations.js";import{createValidator as u}from"../utils/ajv-validator.js";import{hasOptionsChanged as w}from"../utils/has-options-changed.js";const E=15,f=u(h,{errorPrefix:"Entity relation validation failed:",dataVar:"entity relation"}),p=u(d,{errorPrefix:"Entity file validation failed:",dataVar:"entity"});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([m.getInstance(t),t.runOnlyLocalDatabase?void 0:R.getInstance(t)]),i=new n(e,a);a&&(process.env.NODE_ENV==="development"&&r.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=process.env.REDOCLY_LOCAL_DEV==="true"||process.env.CI==="true"),t.removeExisting===void 0&&(t.removeExisting=!1),(!n.#a||w(n.#i,t))&&await n.#n(t),n.#a}async transaction(...t){return this.#t.transactionsManager.transaction(...t)}async getEntities(t){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntities(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityByKey(t){return await this.#e?.sync(),await this.#t.getEntityByKey(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){return this.#e?this.#e.createEntity(t):(r.warn("No remote database found"),null)}async createEntities(t){const e=this.#e;return e?await c(t,E,async a=>e.createEntity(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.key,status:"error",error:i}))):(r.warn("No remote database found"),[])}getEntitySources(){return this.#t.getEntitySources()}async createEntityInLocalDatabase(t){await 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 updateEntityByKey(t,e){const a=await this.#t.getEntityByKey(t);if(!a)throw new Error(`Entity with key ${t} not found`);const i=y(a,e),s=p(i);return await this.#e?.updateEntity({...s,id:a.id,createdAt:a.createdAt||""})}async deleteEntityByKey(t){const e=await this.#e?.deleteEntity(t);return await this.#s(t),e}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 o({data:e,params:t,totalCount:a,nameTransformationsFromDatabase:l,hasMore:i})}async createEntityRelation(t){return this.#e?.createEntityRelation(t)}async createEntitiesRelations(t){const e=this.#e;return e?await c(t,E,async a=>e.createEntityRelation(a).then(i=>({status:"ok",resource:i})).catch(i=>({key:a.sourceKey,status:"error",error:i}))):(r.warn("No remote database found"),[])}async updateEntityRelation(t,e){const a=await this.#t.getEntityRelationById(t);if(!a)throw new Error(`Entity relation with id ${t} not found`);const i=y(a,e),s=f(i);return this.#e?.createEntityRelation(s)}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(t={}){await this.#e?.sync();const{items:e,total:a,hasMore:i}=await this.#t.getEntitiesWithRelations(t);return o({data:e,params:t,totalCount:a,hasMore:i})}async getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}async getRelatedEntities(t,e={}){await this.#e?.sync();const{items:a,total:i,hasMore:s}=await this.#t.getRelatedEntities(t,e);return o({data:a,params:e,totalCount:i,nameTransformationsFromDatabase:l,hasMore:s})}async#s(t){await this.#e?.deleteEntitiesRelations({op:"OR",conditions:[{field:"source_key",operator:"equal",value:t},{field:"target_key",operator:"equal",value:t}]})}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 getOutdatedEntity(){return await this.#e?.sync(),this.#t.getOneOutdatedEntity()}}export{n as CatalogEntitiesService};
@@ -1 +1 @@
1
- import{ulid as e}from"ulid";function c({entity:l,organizationId:r,projectId:a,source:u,sourceFile:i,fileHash:o}){const s=new Date().toISOString();return{id:l.id||`ce_${e()}`,organizationId:r,projectId:a,key:l.key,type:l.type,title:l.title,summary:l.summary||null,tags:l.tags?JSON.stringify(l.tags):null,metadata:l.metadata?JSON.stringify(l.metadata):null,git:l.git?JSON.stringify(l.git):null,contact:l.contact?JSON.stringify(l.contact):null,links:l.links?JSON.stringify(l.links):null,createdAt:l.createdAt||s,updatedAt:s,source:u||"file",sourceFile:i||null,fileHash:o||null,version:l.version||null,revision:l.revision,hash:l.hash,isCurrent:l.isCurrent,isDefaultVersion:l.isDefaultVersion??!1}}export{c as createEntityDbRecord};
1
+ import{ulid as e}from"ulid";function n({entity:s,organizationId:a,projectId:l,source:u,sourceFile:i,fileHash:o}){const r=new Date().toISOString();return{id:s.id||`ce_${e()}`,organizationId:a,projectId:l,key:s.key,type:s.type,title:s.title,summary:s.summary||null,tags:s.tags?JSON.stringify(s.tags):null,metadata:s.metadata?JSON.stringify(s.metadata):null,git:s.git?JSON.stringify(s.git):null,contact:s.contact?JSON.stringify(s.contact):null,links:s.links?JSON.stringify(s.links):null,createdAt:s.createdAt||r,updatedAt:r,source:u||"file",sourceFile:i||null,fileHash:o||null,version:s.version||null,revision:s.revision,hash:s.hash,isCurrent:s.isCurrent,isDefaultVersion:s.isDefaultVersion??!1,scorecardsStatus:"OUTDATED"}}export{n as createEntityDbRecord};
@@ -22,7 +22,12 @@ export declare class CatalogEntitiesLocalReadRepository {
22
22
  attachDatabase(databasePath: string): Promise<void>;
23
23
  getEntities(paginationParams?: PaginationParams): Promise<ListResult<EntityReadModelSchema>>;
24
24
  listEntityRevisions(entityKey: string, version?: string | null): Promise<Pick<EntityReadModelSchema, 'version' | 'revision' | 'isCurrent' | 'createdAt' | 'updatedAt' | 'isDefaultVersion'>[]>;
25
+ getEntitiesCountByTypes(): Promise<{
26
+ type: string;
27
+ count: number;
28
+ }[]>;
25
29
  getEntityByKey(key: string): Promise<EntityReadModelSchema | null>;
30
+ getOneOutdatedEntity(): Promise<EntityReadModelSchema | null>;
26
31
  getEntitiesRelations(paginationParams?: PaginationParams): Promise<ListResult<EntityRelationReadModelSchema>>;
27
32
  getEntityRelationById(id: string): Promise<EntityRelationReadModelSchema | null>;
28
33
  getEntitiesWithRelations(paginationParams?: PaginationParams): Promise<ListResult<BffCatalogEntity>>;
@@ -1,4 +1,4 @@
1
- import{and as o,eq as r,ne as M,notExists as N,or as B,sql as e}from"drizzle-orm";import{unionAll as k}from"drizzle-orm/sqlite-core";import{asc as Y}from"drizzle-orm";import{logger as X}from"../../../../../tools/notifiers/logger.js";import{isObject as G}from"../../../../../../utils/guards/is-object.js";import{applyPagination as S}from"../../../../../providers/database/pagination/index.js";import{applyFilter as Q,getFirstFilterFieldValue as x}from"../../../../../providers/database/pagination/filter.js";import{createBffRelatedEntity as z}from"../../mappers/create-bff-related-entity.js";import{createBffEntity as V}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as c,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as _,createEntityFieldsForSelect as j,createEntityRelationFieldsForSelect as Z,createQualifiedEntityFieldsForSelect as K,createQualifiedEntityFieldsForSelectWithAliases as ee}from"../utils.js";import{createEntityReadModel as P}from"../../mappers/create-entity-read-model.js";import{createEntityRelation as J}from"../../mappers/create-entity-relation.js";import{entitiesTable as i}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as a}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";class fe{#e;#t=void 0;constructor(t){this.#e=t}async attachDatabase(t){this.#t!==t&&(this.#t=t,await this.#e.client.run(e`ATTACH DATABASE ${t} AS remote`))}async getEntities(t={}){const s=this.#t?k(this.#e.client.select(c).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(c).from(i).where(o(r(i.isCurrent,!0),N(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(c).from(i).where(r(i.isCurrent,!0)),n=this.#e.client.select(c).from(s.as("combined_entities")),l=this.#e.client.select(c).from(s.as("combined_entities")).$dynamic(),E=S(l,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),u=this.#e.client.$count(E),d=n.$dynamic(),m=t.limit||10,y=S(d,{...t,limit:m+1}),[f,h]=await Promise.all([y.run(),u]),T=f.rows,g=T.length>m;return{items:T.slice(0,m).map(w=>P(w)).filter(w=>w!==null),hasMore:g,total:h}}async listEntityRevisions(t,s){const n=[r(i.key,t),...s?[r(i.version,s)]:[]],l=this.#t?k(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(e`remote.entities`).where(o(e`key = ${t}`,s?e`version = ${s}`:void 0)),this.#e.client.select({version:i.version,revision:i.revision,isCurrent:i.isCurrent,createdAt:i.createdAt,updatedAt:i.updatedAt,isDefaultVersion:i.isDefaultVersion}).from(i).where(o(...n,N(this.#e.client.select({version:e.raw("version")}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,e`remote.version = ${i.version}`,e`remote.revision = ${i.revision}`)))))):this.#e.client.select({version:i.version,revision:i.revision,isCurrent:i.isCurrent,createdAt:i.createdAt,updatedAt:i.updatedAt,isDefaultVersion:i.isDefaultVersion}).from(i).where(o(...n));return(await this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(l.as("combined_revisions")).orderBy(e.raw("is_current DESC"),e.raw("updated_at DESC"),e.raw("created_at DESC")).run()).rows.map(u=>({version:u.version||null,revision:u.revision||null,isCurrent:u.is_current!==null?!!u.is_current:!1,createdAt:u.created_at||null,updatedAt:u.updated_at||null,isDefaultVersion:u.is_default_version!==null?!!u.is_default_version:!1}))}async getEntityByKey(t){const l=(await(this.#t?k(this.#e.client.select(c).from(e`remote.entities`).where(o(r(i.key,t),r(e.raw("is_current"),1))),this.#e.client.select(c).from(i).where(o(r(i.key,t),r(i.isCurrent,!0),N(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(c).from(i).where(o(r(i.key,t),r(i.isCurrent,!0)))).run()).rows[0];return l?P(l):null}async getEntitiesRelations(t={}){const s=this.#t?k(this.#e.client.select(_).from(e`remote.entities_relations`),this.#e.client.select(_).from(a).where(N(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${a.sourceKey}`)))):this.#e.client.select(_).from(a),n=this.#e.client.select(_).from(s.as("combined_entities_relations")).$dynamic(),l=this.#e.client.select(_).from(s.as("combined_entities_relations")).$dynamic(),E=S(l,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),u=this.#e.client.$count(E),d=t.limit||10,m=S(n,{...t,limit:d+1}),[y,f]=await Promise.all([m.run(),u]),h=y.rows,T=h.length>d;return{items:h.slice(0,d).map(g=>J(g)).filter(g=>g!==null),hasMore:T,total:f}}async getEntityRelationById(t){const l=(await(this.#t?k(this.#e.client.select(_).from(e`remote.entities_relations`).where(r(a.id,t)),this.#e.client.select(_).from(a).where(o(r(a.id,t),N(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.id = ${a.id}`))))):this.#e.client.select(_).from(a).where(r(a.id,t))).run()).rows[0];return l?J(l):null}async getEntitiesWithRelations(t={}){const n=(this.#t?k(this.#e.client.select(c).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(c).from(i).where(o(r(i.isCurrent,!0),N(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(c).from(i).where(r(i.isCurrent,!0))).as("e"),E=(this.#t?k(this.#e.client.select(_).from(e`remote.entities_relations`),this.#e.client.select(_).from(a).where(N(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${a.sourceKey}`)))):this.#e.client.select(_).from(a)).as("combined_relations"),d=(this.#t?k(this.#e.client.select(c).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(c).from(i).where(o(r(i.isCurrent,!0),N(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(c).from(i).where(r(i.isCurrent,!0))).as("combined_target_entities"),m=this.#e.client.with(n,E,d).select({...j("e"),domains:this.#r("e").as("domains"),owners:this.#s("e").as("owners")}).from(n).as("entities_with_relations"),y={...c,domains:m.domains,owners:m.owners},f=this.#e.client.with(m).select(y).from(m).$dynamic(),h=this.#e.client.with(m).select(y).from(m).$dynamic(),{whereCondition:T}=Q(f,t.filter);T&&f.where(T);const{whereCondition:g}=Q(h,t.filter);g&&h.where(g);try{const w=S(h,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),I=this.#e.client.$count(w),R=t.limit||10,L=S(f,{...t,limit:R+1}),[$,p]=await Promise.all([L.run(),I]),v=$.rows,D=v.length>R;return{items:v.slice(0,R).map(C=>V(C)).filter(C=>C!==null),hasMore:D,total:p}}catch(w){return X.error("Error getting entities with relations:",w),{items:[],hasMore:!1,total:0}}}#i(t){return G(t)?t.field==="version"||t.field==="revision":Array.isArray(t)?t.some(s=>this.#i(s)):!1}async getEntityWithRelationsByKey(t,s={}){const n=this.#i(s.filter),l=n?[]:[r(i.isCurrent,!0)],E=n?[e`remote.version = ${i.version}`,e`remote.revision = ${i.revision}`]:[e`remote.is_current = 1`],u=this.#e.client.select(c).from(e`remote.entities`),d=n?u.where(r(e.raw("key"),t)):u.where(o(r(e.raw("key"),t),r(e.raw("is_current"),1))),m=this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,...E)),y=this.#e.client.select(c).from(i).where(o(r(i.key,t),...l,N(m))),f=this.#e.client.select(c).from(i),h=n?f.where(r(i.key,t)):f.where(o(r(i.key,t),r(i.isCurrent,!0))),g=(this.#t?k(d,y):h).as("e"),I=(this.#t?k(this.#e.client.select(_).from(e`remote.entities_relations`),this.#e.client.select(_).from(a).where(N(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${a.sourceKey}`)))):this.#e.client.select(_).from(a)).as("combined_relations"),R=this.#e.client.select(c).from(e`remote.entities`),L=n?R:R.where(r(e.raw("is_current"),1)),$=this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,...E)),p=this.#e.client.select(c).from(i),v=p.where(o(...l,N($))),D=n?p:p.where(r(i.isCurrent,!0)),H=(this.#t?k(L,v):D).as("combined_target_entities"),b=this.#e.client.with(g,I,H).select({...j("e"),domains:this.#r("e").as("domains"),owners:this.#s("e").as("owners")}).from(g).as("entities_with_relations_by_key"),U={...c,domains:b.domains,owners:b.owners},A=this.#e.client.with(b).select(U).from(b).$dynamic();A.where(r(e.raw("key"),t));const{whereCondition:F}=Q(A,s.filter);F&&A.where(F),A.limit(1);const W=await A.run();if(W.rows.length===0)return null;const O=W.rows[0];return V(O)}async getRelatedEntities(t,s={}){const n=Z("","relation_id"),l=x(s.filter,"version"),E=x(s.filter,"revision"),u=[B(r(a.sourceKey,t),r(a.targetKey,t))],d=typeof l=="string"?B(o(r(a.sourceKey,t),r(a.sourceVersion,l)),o(r(a.targetKey,t),r(a.targetVersion,l))):void 0,m=typeof E=="string"?B(o(r(a.sourceKey,t),r(a.sourceRevision,E)),o(r(a.targetKey,t),r(a.targetRevision,E))):void 0,y=[...u,d,m].filter(O=>O!==void 0),h=(this.#t?k(this.#e.client.select(n).from(e`remote.entities_relations`).where(o(...y)),this.#e.client.select(n).from(a).where(o(...y,N(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(o(e`remote.source_key = ${a.sourceKey}`,e`remote.target_key = ${a.targetKey}`,e`remote.source_to_target_relation = ${a.sourceToTargetRelation}`)))))):this.#e.client.select(n).from(a).where(o(...y))).as("combined_relations"),T=j("","entity_id"),w=(this.#t?k(this.#e.client.select(T).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(T).from(i).where(o(r(i.isCurrent,!0),N(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(o(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(T).from(i).where(r(i.isCurrent,!0))).as("combined_target_entities"),I=ee("combined_target_entities"),R=Object.values(K("combined_target_entities")),L={...I,relation_type:e`
1
+ import{and as c,count as Y,eq as r,ne as M,notExists as f,or as L,sql as e}from"drizzle-orm";import{unionAll as w}from"drizzle-orm/sqlite-core";import{asc as G}from"drizzle-orm";import{logger as x}from"../../../../../tools/notifiers/logger.js";import{isObject as z}from"../../../../../../utils/guards/is-object.js";import{applyPagination as R}from"../../../../../providers/database/pagination/index.js";import{applyFilter as Q,getFirstFilterFieldValue as V}from"../../../../../providers/database/pagination/filter.js";import{createBffRelatedEntity as Z}from"../../mappers/create-bff-related-entity.js";import{createBffEntity as P}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as o,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as _,createEntityFieldsForSelect as q,createEntityRelationFieldsForSelect as K,createQualifiedEntityFieldsForSelect as ee,createQualifiedEntityFieldsForSelectWithAliases as te}from"../utils.js";import{createEntityReadModel as j}from"../../mappers/create-entity-read-model.js";import{createEntityRelation as J}from"../../mappers/create-entity-relation.js";import{entitiesTable as i}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as a}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";class we{#e;#t=void 0;constructor(t){this.#e=t}async attachDatabase(t){this.#t!==t&&(this.#t=t,await this.#e.client.run(e`ATTACH DATABASE ${t} AS remote`))}async getEntities(t={}){const s=this.#t?w(this.#e.client.select(o).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(o).from(i).where(c(r(i.isCurrent,!0),f(this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(o).from(i).where(r(i.isCurrent,!0)),n=this.#e.client.select(o).from(s.as("combined_entities")),l=this.#e.client.select(o).from(s.as("combined_entities")).$dynamic(),y=R(l,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),u=this.#e.client.$count(y),d=n.$dynamic(),m=t.limit||10,E=R(d,{...t,limit:m+1}),[N,h]=await Promise.all([E.run(),u]),T=N.rows,g=T.length>m;return{items:T.slice(0,m).map(k=>j(k)).filter(k=>k!==null),hasMore:g,total:h}}async listEntityRevisions(t,s){const n=[r(i.key,t),...s?[r(i.version,s)]:[]],l=this.#t?w(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(e`remote.entities`).where(c(e`key = ${t}`,s?e`version = ${s}`:void 0)),this.#e.client.select({version:i.version,revision:i.revision,isCurrent:i.isCurrent,createdAt:i.createdAt,updatedAt:i.updatedAt,isDefaultVersion:i.isDefaultVersion}).from(i).where(c(...n,f(this.#e.client.select({version:e.raw("version")}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.version = ${i.version}`,e`remote.revision = ${i.revision}`)))))):this.#e.client.select({version:i.version,revision:i.revision,isCurrent:i.isCurrent,createdAt:i.createdAt,updatedAt:i.updatedAt,isDefaultVersion:i.isDefaultVersion}).from(i).where(c(...n));return(await this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(l.as("combined_revisions")).orderBy(e.raw("is_current DESC"),e.raw("updated_at DESC"),e.raw("created_at DESC")).run()).rows.map(u=>({version:u.version||null,revision:u.revision||null,isCurrent:u.is_current!==null?!!u.is_current:!1,createdAt:u.created_at||null,updatedAt:u.updated_at||null,isDefaultVersion:u.is_default_version!==null?!!u.is_default_version:!1}))}async getEntitiesCountByTypes(){return this.#e.client.select({type:i.type,count:Y()}).from(i).groupBy(i.type)}async getEntityByKey(t){const l=(await(this.#t?w(this.#e.client.select(o).from(e`remote.entities`).where(c(r(i.key,t),r(e.raw("is_current"),1))),this.#e.client.select(o).from(i).where(c(r(i.key,t),r(i.isCurrent,!0),f(this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(o).from(i).where(c(r(i.key,t),r(i.isCurrent,!0)))).run()).rows[0];return l?j(l):null}async getOneOutdatedEntity(){const t=this.#t?w(this.#e.client.select(o).from(e`remote.entities`),this.#e.client.select(o).from(i).where(f(this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(e`remote.key = ${i.key}`)))):this.#e.client.select(o).from(i),n=(await this.#e.client.select(o).from(t.as("combined_entities")).where(L(e`combined_entities.scorecards_status = 'OUTDATED'`,e`combined_entities.scorecards_status IS NULL`)).orderBy(e`combined_entities.updated_at ASC`).limit(1).run()).rows[0];return n?j(n):null}async getEntitiesRelations(t={}){const s=this.#t?w(this.#e.client.select(_).from(e`remote.entities_relations`),this.#e.client.select(_).from(a).where(f(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${a.sourceKey}`)))):this.#e.client.select(_).from(a),n=this.#e.client.select(_).from(s.as("combined_entities_relations")).$dynamic(),l=this.#e.client.select(_).from(s.as("combined_entities_relations")).$dynamic(),y=R(l,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),u=this.#e.client.$count(y),d=t.limit||10,m=R(n,{...t,limit:d+1}),[E,N]=await Promise.all([m.run(),u]),h=E.rows,T=h.length>d;return{items:h.slice(0,d).map(g=>J(g)).filter(g=>g!==null),hasMore:T,total:N}}async getEntityRelationById(t){const l=(await(this.#t?w(this.#e.client.select(_).from(e`remote.entities_relations`).where(r(a.id,t)),this.#e.client.select(_).from(a).where(c(r(a.id,t),f(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.id = ${a.id}`))))):this.#e.client.select(_).from(a).where(r(a.id,t))).run()).rows[0];return l?J(l):null}async getEntitiesWithRelations(t={}){const n=(this.#t?w(this.#e.client.select(o).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(o).from(i).where(c(r(i.isCurrent,!0),f(this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(o).from(i).where(r(i.isCurrent,!0))).as("e"),y=(this.#t?w(this.#e.client.select(_).from(e`remote.entities_relations`),this.#e.client.select(_).from(a).where(f(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${a.sourceKey}`)))):this.#e.client.select(_).from(a)).as("combined_relations"),d=(this.#t?w(this.#e.client.select(o).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(o).from(i).where(c(r(i.isCurrent,!0),f(this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(o).from(i).where(r(i.isCurrent,!0))).as("combined_target_entities"),m=this.#e.client.with(n,y,d).select({...q("e"),domains:this.#r("e").as("domains"),owners:this.#s("e").as("owners")}).from(n).as("entities_with_relations"),E={...o,domains:m.domains,owners:m.owners},N=this.#e.client.with(m).select(E).from(m).$dynamic(),h=this.#e.client.with(m).select(E).from(m).$dynamic(),{whereCondition:T}=Q(N,t.filter);T&&N.where(T);const{whereCondition:g}=Q(h,t.filter);g&&h.where(g);try{const k=R(h,{...t,limit:void 0,skip:void 0,after:void 0,before:void 0}),I=this.#e.client.$count(k),S=t.limit||10,$=R(N,{...t,limit:S+1}),[D,p]=await Promise.all([$.run(),I]),b=D.rows,F=b.length>S;return{items:b.slice(0,S).map(C=>P(C)).filter(C=>C!==null),hasMore:F,total:p}}catch(k){return x.error("Error getting entities with relations:",k),{items:[],hasMore:!1,total:0}}}#i(t){return z(t)?t.field==="version"||t.field==="revision":Array.isArray(t)?t.some(s=>this.#i(s)):!1}async getEntityWithRelationsByKey(t,s={}){const n=this.#i(s.filter),l=n?[]:[r(i.isCurrent,!0)],y=n?[e`remote.version = ${i.version}`,e`remote.revision = ${i.revision}`]:[e`remote.is_current = 1`],u=this.#e.client.select(o).from(e`remote.entities`),d=n?u.where(r(e.raw("key"),t)):u.where(c(r(e.raw("key"),t),r(e.raw("is_current"),1))),m=this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,...y)),E=this.#e.client.select(o).from(i).where(c(r(i.key,t),...l,f(m))),N=this.#e.client.select(o).from(i),h=n?N.where(r(i.key,t)):N.where(c(r(i.key,t),r(i.isCurrent,!0))),g=(this.#t?w(d,E):h).as("e"),I=(this.#t?w(this.#e.client.select(_).from(e`remote.entities_relations`),this.#e.client.select(_).from(a).where(f(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${a.sourceKey}`)))):this.#e.client.select(_).from(a)).as("combined_relations"),S=this.#e.client.select(o).from(e`remote.entities`),$=n?S:S.where(r(e.raw("is_current"),1)),D=this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,...y)),p=this.#e.client.select(o).from(i),b=p.where(c(...l,f(D))),F=n?p:p.where(r(i.isCurrent,!0)),H=(this.#t?w($,b):F).as("combined_target_entities"),v=this.#e.client.with(g,I,H).select({...q("e"),domains:this.#r("e").as("domains"),owners:this.#s("e").as("owners")}).from(g).as("entities_with_relations_by_key"),U={...o,domains:v.domains,owners:v.owners},A=this.#e.client.with(v).select(U).from(v).$dynamic();A.where(r(e.raw("key"),t));const{whereCondition:B}=Q(A,s.filter);B&&A.where(B),A.limit(1);const W=await A.run();if(W.rows.length===0)return null;const O=W.rows[0];return P(O)}async getRelatedEntities(t,s={}){const n=K("","relation_id"),l=V(s.filter,"version"),y=V(s.filter,"revision"),u=[L(r(a.sourceKey,t),r(a.targetKey,t))],d=typeof l=="string"?L(c(r(a.sourceKey,t),r(a.sourceVersion,l)),c(r(a.targetKey,t),r(a.targetVersion,l))):void 0,m=typeof y=="string"?L(c(r(a.sourceKey,t),r(a.sourceRevision,y)),c(r(a.targetKey,t),r(a.targetRevision,y))):void 0,E=[...u,d,m].filter(O=>O!==void 0),h=(this.#t?w(this.#e.client.select(n).from(e`remote.entities_relations`).where(c(...E)),this.#e.client.select(n).from(a).where(c(...E,f(this.#e.client.select({id:_.id}).from(e`remote.entities_relations as remote`).where(c(e`remote.source_key = ${a.sourceKey}`,e`remote.target_key = ${a.targetKey}`,e`remote.source_to_target_relation = ${a.sourceToTargetRelation}`)))))):this.#e.client.select(n).from(a).where(c(...E))).as("combined_relations"),T=q("","entity_id"),k=(this.#t?w(this.#e.client.select(T).from(e`remote.entities`).where(r(e.raw("is_current"),1)),this.#e.client.select(T).from(i).where(c(r(i.isCurrent,!0),f(this.#e.client.select({id:o.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(T).from(i).where(r(i.isCurrent,!0))).as("combined_target_entities"),I=te("combined_target_entities"),S=Object.values(ee("combined_target_entities")),$={...I,relation_type:e`
2
2
  CASE
3
3
  WHEN COUNT(CASE WHEN combined_target_entities.key = combined_relations.source_key THEN 1 END) > 0
4
4
  THEN MIN(CASE WHEN combined_target_entities.key = combined_relations.source_key THEN combined_relations.source_to_target_relation END)
@@ -10,7 +10,7 @@ import{and as o,eq as r,ne as M,notExists as N,or as B,sql as e}from"drizzle-orm
10
10
  THEN 'source'
11
11
  ELSE 'target'
12
12
  END
13
- `.as("relation_role")},$=this.#e.client.with(h,w).select(L).from(h).innerJoin(w,B(r(e.raw("combined_relations.source_key"),e.raw("combined_target_entities.key")),r(e.raw("combined_relations.target_key"),e.raw("combined_target_entities.key")))).where(M(e.raw("combined_target_entities.key"),t)).groupBy(...R).having(M(e.raw("MIN(combined_target_entities.key)"),t)).orderBy(Y(e.raw("relation_role"))).$dynamic(),p=this.#e.client.with(h,w).select(I).from(h).innerJoin(w,B(r(e.raw("combined_relations.source_key"),e.raw("combined_target_entities.key")),r(e.raw("combined_relations.target_key"),e.raw("combined_target_entities.key")))).where(M(e.raw("combined_target_entities.key"),t)).groupBy(...R).having(M(e.raw("MIN(combined_target_entities.key)"),t)).$dynamic(),v=S(p,{...s,limit:void 0,skip:void 0,after:void 0,before:void 0}),D=this.#e.client.$count(v),C=s.limit||10,H={...s,limit:C+1},b=S($,H),[U,A]=await Promise.all([b.run(),D]),F=U.rows,W=F.length>C;return{items:F.slice(0,C).map(O=>z(O)).filter(O=>O!==null),hasMore:W,total:A}}async getCatalogFilters({entitiesTypes:t=[],emptyFilters:s=[]}){if(!s.length)return{};try{return await this.#n(t),(s.includes("domains")||s.includes("owners"))&&await this.#o(),await this.#a(s)}catch(n){return console.error("Error fetching catalog filters:",n),{}}finally{await this.#l()}}async#n(t){if(this.#t?await this.#e.client.run(e`
13
+ `.as("relation_role")},D=this.#e.client.with(h,k).select($).from(h).innerJoin(k,L(r(e.raw("combined_relations.source_key"),e.raw("combined_target_entities.key")),r(e.raw("combined_relations.target_key"),e.raw("combined_target_entities.key")))).where(M(e.raw("combined_target_entities.key"),t)).groupBy(...S).having(M(e.raw("MIN(combined_target_entities.key)"),t)).orderBy(G(e.raw("relation_role"))).$dynamic(),p=this.#e.client.with(h,k).select(I).from(h).innerJoin(k,L(r(e.raw("combined_relations.source_key"),e.raw("combined_target_entities.key")),r(e.raw("combined_relations.target_key"),e.raw("combined_target_entities.key")))).where(M(e.raw("combined_target_entities.key"),t)).groupBy(...S).having(M(e.raw("MIN(combined_target_entities.key)"),t)).$dynamic(),b=R(p,{...s,limit:void 0,skip:void 0,after:void 0,before:void 0}),F=this.#e.client.$count(b),C=s.limit||10,H={...s,limit:C+1},v=R(D,H),[U,A]=await Promise.all([v.run(),F]),B=U.rows,W=B.length>C;return{items:B.slice(0,C).map(O=>Z(O)).filter(O=>O!==null),hasMore:W,total:A}}async getCatalogFilters({entitiesTypes:t=[],emptyFilters:s=[]}){if(!s.length)return{};try{return await this.#n(t),(s.includes("domains")||s.includes("owners"))&&await this.#o(),await this.#c(s)}catch(n){return console.error("Error fetching catalog filters:",n),{}}finally{await this.#l()}}async#n(t){if(this.#t?await this.#e.client.run(e`
14
14
  CREATE TEMP TABLE IF NOT EXISTS temp_combined_entities AS
15
15
  SELECT
16
16
  e.key,
@@ -74,7 +74,7 @@ import{and as o,eq as r,ne as M,notExists as N,or as B,sql as e}from"drizzle-orm
74
74
  CREATE INDEX IF NOT EXISTS idx_temp_rel_target ON temp_combined_relations(target_key)
75
75
  `),await this.#e.client.run(e`
76
76
  CREATE INDEX IF NOT EXISTS idx_temp_rel_relation ON temp_combined_relations(source_to_target_relation)
77
- `)}async#a(t){const s={},n=[],l=t.filter(d=>d.startsWith("metadata."));t.includes("type")&&n.push(`
77
+ `)}async#c(t){const s={},n=[],l=t.filter(d=>d.startsWith("metadata."));t.includes("type")&&n.push(`
78
78
  SELECT 'type' as filter_name, type as value, COUNT(*) as count
79
79
  FROM temp_filtered_entities
80
80
  WHERE type IS NOT NULL
@@ -121,7 +121,7 @@ import{and as o,eq as r,ne as M,notExists as N,or as B,sql as e}from"drizzle-orm
121
121
  INNER JOIN temp_combined_entities tce ON tce.key = owner_key
122
122
  WHERE owner_key IS NOT NULL
123
123
  GROUP BY owner_key
124
- `);for(const d of l)await this.#c(d,s);if(n.length===0)return s;const E=n.join(" UNION ALL "),u=await this.#e.client.run(e.raw(E));if(u?.rows)for(const d of u.rows){const m=d.filter_name,y=d.value,f=Number(d.count)||0;s[m]||(s[m]=[]),y&&s[m].push({value:y,count:f})}return s}async#c(t,s){const n=t.substring(9),l=`$.${te(n)}`,E=await this.#e.client.run(e.raw(`
124
+ `);for(const d of l)await this.#a(d,s);if(n.length===0)return s;const y=n.join(" UNION ALL "),u=await this.#e.client.run(e.raw(y));if(u?.rows)for(const d of u.rows){const m=d.filter_name,E=d.value,N=Number(d.count)||0;s[m]||(s[m]=[]),E&&s[m].push({value:E,count:N})}return s}async#a(t,s){const n=t.substring(9),l=`$.${ie(n)}`,y=await this.#e.client.run(e.raw(`
125
125
  SELECT json_extract(metadata, '${l}') as value, COUNT(*) as count
126
126
  FROM temp_filtered_entities
127
127
  WHERE metadata IS NOT NULL
@@ -129,7 +129,7 @@ import{and as o,eq as r,ne as M,notExists as N,or as B,sql as e}from"drizzle-orm
129
129
  AND json_extract(metadata, '${l}') IS NOT NULL
130
130
  AND json_extract(metadata, '${l}') != ''
131
131
  GROUP BY value
132
- `));E?.rows&&(s[t]=E.rows.map(u=>({value:u.value,count:Number(u.count)||0})).filter(u=>u.value))}async#l(){try{await this.#e.client.run(e`DROP TABLE IF EXISTS temp_combined_entities`),await this.#e.client.run(e`DROP TABLE IF EXISTS temp_filtered_entities`),await this.#e.client.run(e`DROP TABLE IF EXISTS temp_combined_relations`)}catch(t){X.error("Error cleaning up temp tables:",t)}}#r(t){return e`
132
+ `));y?.rows&&(s[t]=y.rows.map(u=>({value:u.value,count:Number(u.count)||0})).filter(u=>u.value))}async#l(){try{await this.#e.client.run(e`DROP TABLE IF EXISTS temp_combined_entities`),await this.#e.client.run(e`DROP TABLE IF EXISTS temp_filtered_entities`),await this.#e.client.run(e`DROP TABLE IF EXISTS temp_combined_relations`)}catch(t){x.error("Error cleaning up temp tables:",t)}}#r(t){return e`
133
133
  COALESCE(
134
134
  (
135
135
  SELECT json_group_array(
@@ -223,4 +223,4 @@ import{and as o,eq as r,ne as M,notExists as N,or as B,sql as e}from"drizzle-orm
223
223
  ),
224
224
  json_array()
225
225
  )
226
- `}}function te(q){return q.replace(/[^a-zA-Z0-9._-]/g,"")}export{fe as CatalogEntitiesLocalReadRepository};
226
+ `}}function ie(X){return X.replace(/[^a-zA-Z0-9._-]/g,"")}export{we as CatalogEntitiesLocalReadRepository};
@@ -1,6 +1,7 @@
1
1
  import type { Filter } from '../../../../../providers/database/pagination/types.js';
2
2
  import type { PaginationParams } from '../../../../../providers/database/pagination/schemas.js';
3
3
  import type { EntityRelationDtoSchema } from '../../../../../plugins/catalog-entities/schemas/dto-schemas.js';
4
+ import type { ScorecardsStatus } from '../../../../../plugins/catalog-entities/entities/types.js';
4
5
  import type { DatabaseInitializationResult, RepositoryInstanceOptions } from '../../../../../providers/database/types.js';
5
6
  import type { CatalogFiltersParams } from './catalog-entities-local-read-repository.js';
6
7
  import { type CreateEntityParams } from './catalog-entities-local-write-repository.js';
@@ -14,6 +15,10 @@ export declare class CatalogEntitiesLocalRepository extends BaseRepository {
14
15
  attachDatabase(databasePath: string): Promise<void>;
15
16
  getEntities(paginationParams?: PaginationParams): Promise<import("./catalog-entities-local-read-repository.js").ListResult<import("../../../schemas/read-model-schemas.js").EntityReadModelSchema>>;
16
17
  getEntityByKey(key: string): Promise<import("../../../schemas/read-model-schemas.js").EntityReadModelSchema | null>;
18
+ getEntitiesCountByTypes(): Promise<{
19
+ type: string;
20
+ count: number;
21
+ }[]>;
17
22
  getEntitiesRelations(paginationParams?: PaginationParams): Promise<import("./catalog-entities-local-read-repository.js").ListResult<{
18
23
  createdAt?: string | null | undefined;
19
24
  updatedAt?: string | null | undefined;
@@ -77,5 +82,8 @@ export declare class CatalogEntitiesLocalRepository extends BaseRepository {
77
82
  deleteEntityRelations(filter: Filter): Promise<boolean>;
78
83
  getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./catalog-entities-local-read-repository.js").FilterOption[]>>;
79
84
  listEntityRevisions(entityKey: string, version?: string | null): Promise<Pick<import("../../../schemas/read-model-schemas.js").EntityReadModelSchema, "version" | "isDefaultVersion" | "createdAt" | "updatedAt" | "revision" | "isCurrent">[]>;
85
+ updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
86
+ updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
87
+ getOneOutdatedEntity(): Promise<import("../../../schemas/read-model-schemas.js").EntityReadModelSchema | null>;
80
88
  }
81
89
  //# sourceMappingURL=catalog-entities-local-repository.d.ts.map
@@ -1 +1 @@
1
- import{promiseMapLimit as n}from"../../../../../utils/async/promise-map-limit.js";import{CatalogEntitiesLocalReadRepository as r}from"./catalog-entities-local-read-repository.js";import{CatalogEntitiesLocalWriteRepository as o}from"./catalog-entities-local-write-repository.js";import{createEntityRelationDbRecordFromDto as y}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{BaseRepository as l}from"../../../../../providers/database/base-repository.js";import{LocalDatabaseInitializationStrategy as h}from"../../../../../providers/database/database-initialization-strategy.js";import{CATALOG_DATABASE_MIGRATIONS_FOLDER as E,CATALOG_LOCAL_DATABASE_FOLDER as c,CATALOG_LOCAL_DATABASE_NAME as d}from"../../consts.js";import{hasOptionsChanged as R}from"../../../utils/has-options-changed.js";const a=50;class i extends l{static#i;static#n;#t;#e;#a={};constructor(t){super(t),this.#t=new r(this.databaseClient),this.#e=new o(this.databaseClient,this.organizationId,this.projectId)}get transactionsManager(){return this.databaseClient.transactionsManager}getEntitySources(){return this.#a}static async getInstance(t){const e=R(i.#n,t);if(!i.#i||e){const s=await new h().initialize({databaseName:d,additionalFolder:c,migrationsFolder:E,...t});i.#i=new i(s),i.#n=t}return i.#i}async attachDatabase(t){await this.#t.attachDatabase(t)}getEntities(t={}){return this.#t.getEntities(t)}getEntityByKey(t){return this.#t.getEntityByKey(t)}getEntitiesRelations(t={}){return this.#t.getEntitiesRelations(t)}getEntityRelationById(t){return this.#t.getEntityRelationById(t)}getEntitiesWithRelations(t={}){return this.#t.getEntitiesWithRelations(t)}getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}getRelatedEntities(t,e={}){return this.#t.getRelatedEntities(t,e)}createEntity(t){return t.isRootEntity&&(this.#a[t.sourceFile]=t.entity.key),this.#e.createEntity(t)}async createEntities(t){await n(t,a,async e=>this.createEntity(e))}createEntityRelation(t){const e=y(t,this.organizationId,this.projectId);return this.#e.createEntityRelation(e)}async createEntityRelations(t){await n(t,a,async e=>this.createEntityRelation(e))}deleteEntity(t){return this.#e.deleteEntity(t)}deleteEntities(t){return this.#e.deleteEntities(t)}deleteEntityRelation(t){return this.#e.deleteEntityRelation(t)}deleteEntityRelations(t){return this.#e.deleteEntityRelations(t)}getCatalogFilters(t){return this.#t.getCatalogFilters(t)}listEntityRevisions(t,e){return this.#t.listEntityRevisions(t,e)}}export{i as CatalogEntitiesLocalRepository};
1
+ import{promiseMapLimit as n}from"../../../../../utils/async/promise-map-limit.js";import{CatalogEntitiesLocalReadRepository as r}from"./catalog-entities-local-read-repository.js";import{CatalogEntitiesLocalWriteRepository as o}from"./catalog-entities-local-write-repository.js";import{createEntityRelationDbRecordFromDto as y}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{BaseRepository as l}from"../../../../../providers/database/base-repository.js";import{LocalDatabaseInitializationStrategy as E}from"../../../../../providers/database/database-initialization-strategy.js";import{CATALOG_DATABASE_MIGRATIONS_FOLDER as c,CATALOG_LOCAL_DATABASE_FOLDER as d,CATALOG_LOCAL_DATABASE_NAME as h}from"../../consts.js";import{hasOptionsChanged as u}from"../../../utils/has-options-changed.js";const a=50;class i extends l{static#i;static#n;#t;#e;#a={};constructor(t){super(t),this.#t=new r(this.databaseClient),this.#e=new o(this.databaseClient,this.organizationId,this.projectId)}get transactionsManager(){return this.databaseClient.transactionsManager}getEntitySources(){return this.#a}static async getInstance(t){const e=u(i.#n,t);if(!i.#i||e){const s=await new E().initialize({databaseName:h,additionalFolder:d,migrationsFolder:c,...t});i.#i=new i(s),i.#n=t}return i.#i}async attachDatabase(t){await this.#t.attachDatabase(t)}getEntities(t={}){return this.#t.getEntities(t)}getEntityByKey(t){return this.#t.getEntityByKey(t)}getEntitiesCountByTypes(){return this.#t.getEntitiesCountByTypes()}getEntitiesRelations(t={}){return this.#t.getEntitiesRelations(t)}getEntityRelationById(t){return this.#t.getEntityRelationById(t)}getEntitiesWithRelations(t={}){return this.#t.getEntitiesWithRelations(t)}getEntityWithRelationsByKey(t,e={}){return this.#t.getEntityWithRelationsByKey(t,e)}getRelatedEntities(t,e={}){return this.#t.getRelatedEntities(t,e)}createEntity(t){return t.isRootEntity&&(this.#a[t.sourceFile]=t.entity.key),this.#e.createEntity(t)}async createEntities(t){await n(t,a,async e=>this.createEntity(e))}createEntityRelation(t){const e=y(t,this.organizationId,this.projectId);return this.#e.createEntityRelation(e)}async createEntityRelations(t){await n(t,a,async e=>this.createEntityRelation(e))}deleteEntity(t){return this.#e.deleteEntity(t)}deleteEntities(t){return this.#e.deleteEntities(t)}deleteEntityRelation(t){return this.#e.deleteEntityRelation(t)}deleteEntityRelations(t){return this.#e.deleteEntityRelations(t)}getCatalogFilters(t){return this.#t.getCatalogFilters(t)}listEntityRevisions(t,e){return this.#t.listEntityRevisions(t,e)}updateEntityScorecardsStatus(t,e){return this.#e.updateEntityScorecardsStatus(t,e)}updateEntityScorecardsStatusIfCalculating(t,e){return this.#e.updateEntityScorecardsStatusIfCalculating(t,e)}getOneOutdatedEntity(){return this.#t.getOneOutdatedEntity()}}export{i as CatalogEntitiesLocalRepository};
@@ -1,6 +1,7 @@
1
1
  import type { EntityBaseFileSchema } from '@redocly/config';
2
2
  import type { DatabaseClient } from '../../../../../providers/database/client.js';
3
3
  import type { Filter } from '../../../../../providers/database/pagination/types.js';
4
+ import type { ScorecardsStatus } from '../../../../../plugins/catalog-entities/entities/types.js';
4
5
  import { type DatabaseEntityRelation, type DatabaseEntityRelationDto } from '../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js';
5
6
  export type CreateEntityParams = {
6
7
  entity: EntityBaseFileSchema;
@@ -21,5 +22,7 @@ export declare class CatalogEntitiesLocalWriteRepository {
21
22
  deleteEntityRelation(id: string): Promise<string | null>;
22
23
  deleteEntityRelations(filter: Filter): Promise<boolean>;
23
24
  createEntityRelation(entityRelation: DatabaseEntityRelationDto): Promise<DatabaseEntityRelation | null>;
25
+ updateEntityScorecardsStatus(entityId: string, status: ScorecardsStatus): Promise<boolean>;
26
+ updateEntityScorecardsStatusIfCalculating(entityId: string, status: Extract<ScorecardsStatus, 'UP_TO_DATE' | 'OUTDATED'>): Promise<boolean>;
24
27
  }
25
28
  //# sourceMappingURL=catalog-entities-local-write-repository.d.ts.map
@@ -1 +1 @@
1
- import{and as d,desc as K,eq as a,isNull as g,or as V,sql as D}from"drizzle-orm";import{logger as h}from"../../../../../tools/notifiers/logger.js";import{promiseMapLimit as p}from"../../../../../utils/async/promise-map-limit.js";import{sha1 as B}from"../../../../../utils/crypto/sha1.js";import{createEntityDbRecord as N}from"../../mappers/create-entity-db-record.js";import{createEntityRelationDbRecordFromFileSchema as T}from"../../mappers/create-entity-relation-db-record-from-file-schema.js";import{entitiesTable as e}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as s}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{convertFilterToWhereCondition as C}from"../../../../../providers/database/pagination/filter.js";import{compareVersionsDescending as F}from"../../../utils/version-compare.js";const E=15;class q{#e;#t;#r;constructor(t,r,n){this.#e=t,this.#t=r,this.#r=n}async createEntity({entity:t,fileHash:r,sourceFile:n}){try{const{relations:o=[],...i}=t,u=B(JSON.stringify(i));if(await this.#i(u))return;const l=t.version??null,{shouldBeCurrent:f,shouldBeDefaultVersion:v}=await this.#o(t.key,l),m=new Date().toISOString(),w=N({entity:{...t,revision:m,hash:u,isCurrent:f,isDefaultVersion:v},sourceFile:n,organizationId:this.#t,projectId:this.#r,source:"file",fileHash:r}),{key:R,source:S,...k}=w;await this.#a({key:R,isCurrent:f,isDefaultVersion:v});const A=this.#e.client.insert(e).values(w).onConflictDoUpdate({target:[e.key,e.source,e.revision,e.version],set:k}),I=o?.length&&o.length>0?this.#e.client.insert(s).values(o.map(y=>T({relation:y,sourceFile:n,fileHash:r,sourceKey:t.key,sourceVersion:l,sourceRevision:m,organizationId:this.#t,projectId:this.#r}))).onConflictDoNothing({target:[s.sourceKey,s.targetKey,s.sourceVersion,s.targetVersion,s.sourceRevision,s.targetRevision]}).run():Promise.resolve();await p([A,I],E,async y=>y)}catch(o){console.error(o),h.error("Error adding entity",o)}}async deleteEntity(t){try{return await this.#e.client.delete(e).where(a(e.key,t)),t}catch(r){return h.error("Error deleting entity",r),null}}async deleteEntities(t){try{const r=C(t);if(!r)return!1;const n=await this.#e.client.delete(e).where(r).returning({key:e.key,source:e.source,isCurrent:e.isCurrent,isDefaultVersion:e.isDefaultVersion,version:e.version});if(n.length===0)return!0;const o=n.reduce((i,u)=>((u.isCurrent||u.isDefaultVersion)&&i.add(u.key),i),new Set);if(o.size===0)return!0;await p(Array.from(o),E,async i=>this.#u(i));for(const i of n)await this.#e.client.delete(s).where(V(d(a(s.sourceKey,i.key),...i.version?[a(s.sourceVersion,i.version)]:[g(s.sourceVersion)]),d(a(s.targetKey,i.key),...i.version?[a(s.targetVersion,i.version)]:[g(s.targetVersion)])));return!0}catch(r){return h.error("Error deleting entities",r),!1}}async deleteEntityRelation(t){try{return await this.#e.client.delete(s).where(a(s.id,t)),t}catch{return null}}async deleteEntityRelations(t){try{const r=C(t);return r?(await this.#e.client.delete(s).where(r),!0):!1}catch(r){return h.error("Error deleting entity relations",r),!1}}async createEntityRelation(t){if(!t)return null;try{const{sourceKey:r,targetKey:n,sourceVersion:o,targetVersion:i,sourceRevision:u,targetRevision:c,...l}=t,f=await this.#e.client.insert(s).values(t).onConflictDoUpdate({target:[s.sourceKey,s.targetKey,s.sourceVersion,s.targetVersion,s.sourceRevision,s.targetRevision],set:l}).returning();return f?.length?f[0]:null}catch(r){return h.error("Error creating entity relation",r),null}}async#i(t){const r=await this.#e.client.select({id:e.id,revision:e.revision}).from(e).where(d(a(e.hash,t),a(e.isCurrent,!0))).limit(1).run();return r.rows.length===0?null:{id:r.rows[0].id,revision:r.rows[0].revision}}async#n(t){return(await this.#e.client.select({version:e.version,isDefaultVersion:e.isDefaultVersion,revision:e.revision,createdAt:e.createdAt}).from(e).where(d(a(e.key,t),a(e.source,"file"))).orderBy(K(e.createdAt)).run()).rows.map(n=>({version:n.version,isDefaultVersion:!!n.isDefaultVersion,revision:n.revision,createdAt:new Date(n.createdAt)}))}#s(t){const r=t.find(i=>i.isDefaultVersion);if(r)return r;const n=t.filter(i=>i.version!==null),o=t.filter(i=>i.version===null);if(n.length>0){n.sort((c,l)=>F(c.version,l.version));const i=n[0].version,u=n.filter(c=>c.version===i);return u.sort((c,l)=>l.createdAt.getTime()-c.createdAt.getTime()),u[0]}return o.length>0?(o.sort((i,u)=>u.createdAt.getTime()-i.createdAt.getTime()),o[0]):null}async#o(t,r){const n=await this.#e.client.select({currentDefaultVersion:D`max(case when ${e.isDefaultVersion} = 1 then ${e.version} else null end)`,versionMatchCount:D`count(case when ${e.version} = ${r} then 1 else null end)`}).from(e).where(d(a(e.key,t),a(e.source,"file"))).get(),o=n?.currentDefaultVersion,i=(n?.versionMatchCount??0)>0;return r&&r===o?{shouldBeCurrent:!0,shouldBeDefaultVersion:!1}:{shouldBeCurrent:!i,shouldBeDefaultVersion:!i}}async#a({key:t,isCurrent:r,isDefaultVersion:n}){if(!r&&!n)return;const o={},i=[];r&&(o.isCurrent=!1,i.push(a(e.isCurrent,!0))),n&&(o.isDefaultVersion=!1,i.push(a(e.isDefaultVersion,!0))),await this.#e.client.update(e).set(o).where(d(a(e.key,t),a(e.source,"file"),V(...i))).run()}#u=async t=>{const r=await this.#n(t),n=this.#s(r);if(!n){h.warn("No latest version found for key",t);return}await this.#e.client.update(e).set({isDefaultVersion:!0,isCurrent:!0}).where(d(a(e.key,t),a(e.revision,n.revision),n.version?a(e.version,n.version):g(e.version))).run()}}export{q as CatalogEntitiesLocalWriteRepository};
1
+ import{and as h,desc as I,eq as a,isNull as g,or as V,sql as v}from"drizzle-orm";import{logger as l}from"../../../../../tools/notifiers/logger.js";import{promiseMapLimit as D}from"../../../../../utils/async/promise-map-limit.js";import{sha1 as K}from"../../../../../utils/crypto/sha1.js";import{createEntityDbRecord as N}from"../../mappers/create-entity-db-record.js";import{createEntityRelationDbRecordFromFileSchema as B}from"../../mappers/create-entity-relation-db-record-from-file-schema.js";import{entitiesTable as e}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as s}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{convertFilterToWhereCondition as C}from"../../../../../providers/database/pagination/filter.js";import{compareVersionsDescending as T}from"../../../utils/version-compare.js";const E=15;class q{#e;#t;#r;constructor(t,r,i){this.#e=t,this.#t=r,this.#r=i}async createEntity({entity:t,fileHash:r,sourceFile:i}){try{const{relations:o=[],...n}=t,u=K(JSON.stringify(n));if(await this.#i(u))return;const c=t.version??null,{shouldBeCurrent:f,shouldBeDefaultVersion:m}=await this.#o(t.key,c),w=new Date().toISOString(),p=N({entity:{...t,revision:w,hash:u,isCurrent:f,isDefaultVersion:m},sourceFile:i,organizationId:this.#t,projectId:this.#r,source:"file",fileHash:r}),{key:A,source:O,...R}=p;await this.#a({key:A,isCurrent:f,isDefaultVersion:m});const S=this.#e.client.insert(e).values(p).onConflictDoUpdate({target:[e.key,e.source,e.revision,e.version],set:R}),k=o?.length&&o.length>0?this.#e.client.insert(s).values(o.map(y=>B({relation:y,sourceFile:i,fileHash:r,sourceKey:t.key,sourceVersion:c,sourceRevision:w,organizationId:this.#t,projectId:this.#r}))).onConflictDoNothing({target:[s.sourceKey,s.targetKey,s.sourceVersion,s.targetVersion,s.sourceRevision,s.targetRevision]}).run():Promise.resolve();await D([S,k],E,async y=>y)}catch(o){console.error(o),l.error("Error adding entity",o)}}async deleteEntity(t){try{return await this.#e.client.delete(e).where(a(e.key,t)),t}catch(r){return l.error("Error deleting entity",r),null}}async deleteEntities(t){try{const r=C(t);if(!r)return!1;const i=await this.#e.client.delete(e).where(r).returning({key:e.key,source:e.source,isCurrent:e.isCurrent,isDefaultVersion:e.isDefaultVersion,version:e.version});if(i.length===0)return!0;const o=i.reduce((n,u)=>((u.isCurrent||u.isDefaultVersion)&&n.add(u.key),n),new Set);if(o.size===0)return!0;await D(Array.from(o),E,async n=>this.#u(n));for(const n of i)await this.#e.client.delete(s).where(V(h(a(s.sourceKey,n.key),...n.version?[a(s.sourceVersion,n.version)]:[g(s.sourceVersion)]),h(a(s.targetKey,n.key),...n.version?[a(s.targetVersion,n.version)]:[g(s.targetVersion)])));return!0}catch(r){return l.error("Error deleting entities",r),!1}}async deleteEntityRelation(t){try{return await this.#e.client.delete(s).where(a(s.id,t)),t}catch{return null}}async deleteEntityRelations(t){try{const r=C(t);return r?(await this.#e.client.delete(s).where(r),!0):!1}catch(r){return l.error("Error deleting entity relations",r),!1}}async createEntityRelation(t){if(!t)return null;try{const{sourceKey:r,targetKey:i,sourceVersion:o,targetVersion:n,sourceRevision:u,targetRevision:d,...c}=t,f=await this.#e.client.insert(s).values(t).onConflictDoUpdate({target:[s.sourceKey,s.targetKey,s.sourceVersion,s.targetVersion,s.sourceRevision,s.targetRevision],set:c}).returning();return f?.length?f[0]:null}catch(r){return l.error("Error creating entity relation",r),null}}async#i(t){const r=await this.#e.client.select({id:e.id,revision:e.revision}).from(e).where(h(a(e.hash,t),a(e.isCurrent,!0))).limit(1).run();return r.rows.length===0?null:{id:r.rows[0].id,revision:r.rows[0].revision}}async#n(t){return(await this.#e.client.select({version:e.version,isDefaultVersion:e.isDefaultVersion,revision:e.revision,createdAt:e.createdAt}).from(e).where(h(a(e.key,t),a(e.source,"file"))).orderBy(I(e.createdAt)).run()).rows.map(i=>({version:i.version,isDefaultVersion:!!i.isDefaultVersion,revision:i.revision,createdAt:new Date(i.createdAt)}))}#s(t){const r=t.find(n=>n.isDefaultVersion);if(r)return r;const i=t.filter(n=>n.version!==null),o=t.filter(n=>n.version===null);if(i.length>0){i.sort((d,c)=>T(d.version,c.version));const n=i[0].version,u=i.filter(d=>d.version===n);return u.sort((d,c)=>c.createdAt.getTime()-d.createdAt.getTime()),u[0]}return o.length>0?(o.sort((n,u)=>u.createdAt.getTime()-n.createdAt.getTime()),o[0]):null}async#o(t,r){const i=await this.#e.client.select({currentDefaultVersion:v`max(case when ${e.isDefaultVersion} = 1 then ${e.version} else null end)`,versionMatchCount:v`count(case when ${e.version} = ${r} then 1 else null end)`}).from(e).where(h(a(e.key,t),a(e.source,"file"))).get(),o=i?.currentDefaultVersion,n=(i?.versionMatchCount??0)>0;return r&&r===o?{shouldBeCurrent:!0,shouldBeDefaultVersion:!1}:{shouldBeCurrent:!n,shouldBeDefaultVersion:!n}}async#a({key:t,isCurrent:r,isDefaultVersion:i}){if(!r&&!i)return;const o={},n=[];r&&(o.isCurrent=!1,n.push(a(e.isCurrent,!0))),i&&(o.isDefaultVersion=!1,n.push(a(e.isDefaultVersion,!0))),await this.#e.client.update(e).set(o).where(h(a(e.key,t),a(e.source,"file"),V(...n))).run()}#u=async t=>{const r=await this.#n(t),i=this.#s(r);if(!i){l.warn("No latest version found for key",t);return}await this.#e.client.update(e).set({isDefaultVersion:!0,isCurrent:!0}).where(h(a(e.key,t),a(e.revision,i.revision),i.version?a(e.version,i.version):g(e.version))).run()};async updateEntityScorecardsStatus(t,r){try{return(await this.#e.client.update(e).set({scorecardsStatus:r}).where(a(e.id,t)).returning()).length>0}catch(i){return l.error("Error updating entity scorecards status",i),!1}}async updateEntityScorecardsStatusIfCalculating(t,r){try{return(await this.#e.client.update(e).set({scorecardsStatus:r}).where(v`${e.id} = ${t} AND ${e.scorecardsStatus} = 'CALCULATING'`).returning()).length>0}catch(i){return l.error("Error updating entity scorecards status if calculating",i),!1}}}export{q as CatalogEntitiesLocalWriteRepository};
@@ -8,6 +8,7 @@ export declare class CatalogEntitiesRemoteRepository extends BaseRepository {
8
8
  #private;
9
9
  get transactionsManager(): import("../../../../../providers/database/transactions-manager.js").TransactionsManager;
10
10
  constructor(initializationResult: DatabaseInitializationResult);
11
+ sync(): Promise<void>;
11
12
  static getInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRemoteRepository | undefined>;
12
13
  createEntity(entity: EntityDtoSchema): Promise<EntityReadModelSchema | null>;
13
14
  updateEntity(entity: EntityDtoSchema & {
@@ -1 +1 @@
1
- import{eq as E}from"drizzle-orm";import{convertFilterToWhereCondition as m}from"../../../../../providers/database/pagination/filter.js";import{promiseMapLimit as g}from"../../../../../utils/async/promise-map-limit.js";import{logger as r}from"../../../../../tools/notifiers/logger.js";import{SQLD_REMOTE_DATABASE_FOLDER as h,SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER as A,SQLD_REMOTE_DATABASE_NAME as T}from"../../../../../constants/sqld-remote-database.js";import{createEntityDbRecord as y}from"../../mappers/create-entity-db-record.js";import{createEntityReadModel as f}from"../../mappers/create-entity-read-model.js";import{createEntityRelationDbRecordFromDto as D}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{entitiesTable as i}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as n}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{BaseRepository as R}from"../../../../../providers/database/base-repository.js";import{DatabaseConnectionsManager as _}from"../../../../../providers/database/database-connections-manager.js";import{RemoteDatabaseInitializationStrategy as b}from"../../../../../providers/database/database-initialization-strategy.js";const w=15;class a extends R{static#e;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t)}static async getInstance(t){if(!a.#e){if(!process.env.SQLD_REMOTE_DATABASE_URL||!process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN){r.warn("SQLD_REMOTE_DATABASE_URL and SQLD_REMOTE_DATABASE_AUTH_TOKEN env variables not set - remote database will not be initialized");return}try{const e=await _.getConnection({config:{...t,databaseName:T,additionalFolder:h,migrationsFolder:A,syncUrl:process.env.SQLD_REMOTE_DATABASE_URL,authToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN},strategy:new b});if(!e){r.warn("Remote database connection failed"),a.#e=void 0;return}a.#e=new a(e)}catch{a.#e=void 0;return}}return a.#e}async createEntity(t){try{r.info(`Adding entity ${t.key} to remote database`);const e=y({entity:t,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:l,source:d,...s}=e,o=await this.databaseClient.client.insert(i).values(e).onConflictDoUpdate({target:[i.key,i.source],set:s}).returning();return o.length?(t.relations&&await this.createEntityRelations(t.relations.map(c=>({...c,sourceKey:t.key,targetKey:c.key}))),f(o[0])):null}catch(e){throw r.error("Error adding entity",e),e}}async updateEntity(t){try{r.info(`Updating entity ${t.key} in remote database`);const e=y({entity:t,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:l,source:d,...s}=e,o=await this.databaseClient.client.insert(i).values(e).onConflictDoUpdate({target:[i.key,i.source],set:s}).returning();return o.length?f(o[0]):null}catch(e){return r.error("Error updating entity",e),null}}async deleteEntity(t){try{return await this.databaseClient.client.delete(i).where(E(i.key,t)),t}catch(e){return r.error("Error deleting entity",e),null}}async createEntityRelations(t){return await g(t,w,async e=>this.createEntityRelation(e))}async createEntityRelation(t){if(!t)return null;try{const e=D(t,this.organizationId,this.projectId),{sourceKey:l,targetKey:d,sourceVersion:s,targetVersion:o,sourceRevision:c,targetRevision:S,...p}=e,u=await this.databaseClient.client.insert(n).values(e).onConflictDoUpdate({target:[n.sourceKey,n.targetKey,n.sourceVersion,n.targetVersion,n.sourceRevision,n.targetRevision],set:p}).returning();return u.length?u[0]:null}catch(e){throw r.error("Error creating entity relation",e),e}}async deleteEntityRelation(t){try{return await this.databaseClient.client.delete(n).where(E(n.id,t)),t}catch(e){return r.error("Error deleting entity relation",e),null}}async deleteEntitiesRelations(t){try{const e=m(t);return e?(await this.databaseClient.client.delete(n).where(e),!0):!1}catch(e){return r.error("Error deleting entities relations",e),!1}}}export{a as CatalogEntitiesRemoteRepository};
1
+ import{eq as E,sql as p}from"drizzle-orm";import{convertFilterToWhereCondition as g}from"../../../../../providers/database/pagination/filter.js";import{promiseMapLimit as A}from"../../../../../utils/async/promise-map-limit.js";import{logger as n}from"../../../../../tools/notifiers/logger.js";import{SQLD_REMOTE_DATABASE_FOLDER as T,SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER as f,SQLD_REMOTE_DATABASE_NAME as D}from"../../../../../constants/sqld-remote-database.js";import{telemetryTraceStep as i}from"../../../../../telemetry/helpers/trace-step.js";import{createEntityDbRecord as _}from"../../mappers/create-entity-db-record.js";import{createEntityReadModel as m}from"../../mappers/create-entity-read-model.js";import{createEntityRelationDbRecordFromDto as w}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{entitiesTable as r}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as a}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{BaseRepository as b}from"../../../../../providers/database/base-repository.js";import{DatabaseConnectionsManager as R}from"../../../../../providers/database/database-connections-manager.js";import{RemoteDatabaseInitializationStrategy as S}from"../../../../../providers/database/database-initialization-strategy.js";const L=15;class s extends b{static#t;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t)}async sync(){return i("catalog_entities.remote_repository.sync",async()=>{await this.#e(),await this.databaseClient.sync()})}static async getInstance(t){return await i("catalog_entities.remote_repository.get_instance",async e=>{if(!s.#t){if(!process.env.SQLD_REMOTE_DATABASE_URL||!process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN){n.warn("SQLD_REMOTE_DATABASE_URL and SQLD_REMOTE_DATABASE_AUTH_TOKEN env variables not set - remote database will not be initialized"),e?.error(new Error("SQLD_REMOTE_DATABASE_URL and SQLD_REMOTE_DATABASE_AUTH_TOKEN env variables not set - remote database will not be initialized"));return}try{const o=await R.getConnection({config:{...t,databaseName:D,additionalFolder:T,migrationsFolder:f,syncUrl:process.env.SQLD_REMOTE_DATABASE_URL,authToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN},strategy:new S});if(!o){n.warn("Remote database connection failed!"),e?.error(new Error("Remote database connection failed!")),s.#t=void 0;return}s.#t=new s(o)}catch(o){s.#t=void 0,e?.error(o);return}}return s.#t})}async createEntity(t){return i("catalog_entities.remote_repository.create_entity",async()=>{await this.#e();try{n.info(`Adding entity ${t.key} to remote database`);const e=_({entity:t,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:o,source:u,...d}=e,l=await this.databaseClient.client.insert(r).values(e).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:d}).returning();return l.length?(t.relations&&await this.createEntityRelations(t.relations.map(c=>({...c,sourceKey:t.key,targetKey:c.key}))),m(l[0])):null}catch(e){throw n.error("Error adding entity",e),e}})}async updateEntity(t){return i("catalog_entities.remote_repository.update_entity",async()=>{await this.#e();try{n.info(`Updating entity ${t.key} in remote database`);const e=_({entity:t,organizationId:this.organizationId,projectId:this.projectId,source:"remote",sourceFile:null,fileHash:null}),{key:o,source:u,scorecardsStatus:d,...l}=e,c=await this.databaseClient.client.insert(r).values(e).onConflictDoUpdate({target:[r.key,r.source,r.revision,r.version],set:{...l,scorecardsStatus:p`CASE WHEN ${r.scorecardsStatus} = 'CALCULATING' THEN 'CANCELLED' ELSE 'OUTDATED' END`}}).returning();return c.length?m(c[0]):null}catch(e){return n.error("Error updating entity",e),null}})}async deleteEntity(t){return i("catalog_entities.remote_repository.delete_entity",async()=>{await this.#e();try{return await this.databaseClient.client.delete(r).where(E(r.key,t)),t}catch(e){return n.error("Error deleting entity",e),null}})}async createEntityRelations(t){return i("catalog_entities.remote_repository.create_entity_relations",async()=>(await this.#e(),await A(t,L,async e=>this.createEntityRelation(e))))}async createEntityRelation(t){return i("catalog_entities.remote_repository.create_entity_relation",async()=>{if(await this.#e(),!t)return null;try{const e=w(t,this.organizationId,this.projectId),{sourceKey:o,targetKey:u,sourceVersion:d,targetVersion:l,sourceRevision:c,targetRevision:v,...h}=e,y=await this.databaseClient.client.insert(a).values(e).onConflictDoUpdate({target:[a.sourceKey,a.targetKey,a.sourceVersion,a.targetVersion,a.sourceRevision,a.targetRevision],set:h}).returning();return y.length?y[0]:null}catch(e){throw n.error("Error creating entity relation",e),e}})}async deleteEntityRelation(t){return i("catalog_entities.remote_repository.delete_entity_relation",async()=>{await this.#e();try{return await this.databaseClient.client.delete(a).where(E(a.id,t)),t}catch(e){return n.error("Error deleting entity relation",e),null}})}async deleteEntitiesRelations(t){return i("catalog_entities.remote_repository.delete_entities_relations",async()=>{await this.#e();try{const e=g(t);return e?(await this.databaseClient.client.delete(a).where(e),!0):!1}catch(e){return n.error("Error deleting entities relations",e),!1}})}#e(){return i("catalog_entities.remote_repository.db_health",async t=>{if(this.databaseClient.dbClient.$client.closed){const e=new Error("The remote database connection is closed!");throw t?.error(e),e}})}}export{s as CatalogEntitiesRemoteRepository};
@@ -20,6 +20,7 @@ export declare const createEntityFieldsForSelect: (tableAlias?: string, idAlias?
20
20
  revision: import("drizzle-orm").SQL<unknown>;
21
21
  hash: import("drizzle-orm").SQL<unknown>;
22
22
  isCurrent: import("drizzle-orm").SQL<unknown>;
23
+ scorecardsStatus: import("drizzle-orm").SQL<unknown>;
23
24
  };
24
25
  export declare const createEntityRelationFieldsForSelect: (tableAlias?: string, idAlias?: string) => {
25
26
  id: import("drizzle-orm").SQL<unknown> | import("drizzle-orm").SQL.Aliased<unknown>;
@@ -107,6 +108,7 @@ export declare const FIELDS_TO_SELECT_FOR_ENTITY: {
107
108
  revision: import("drizzle-orm").SQL<unknown>;
108
109
  hash: import("drizzle-orm").SQL<unknown>;
109
110
  isCurrent: import("drizzle-orm").SQL<unknown>;
111
+ scorecardsStatus: import("drizzle-orm").SQL<unknown>;
110
112
  };
111
113
  export declare const FIELDS_TO_SELECT_FOR_ENTITY_RELATION: {
112
114
  id: import("drizzle-orm").SQL<unknown> | import("drizzle-orm").SQL.Aliased<unknown>;