@redocly/realm 0.129.0 → 0.129.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @redocly/realm
2
2
 
3
+ ## 0.129.1
4
+
5
+ ### Patch Changes
6
+
7
+ - a5fdb8c206: Fixed missing `initActiveColorMode` method.
8
+ - 52c4bc4f8a: Fixed C# syntax highlighting for code samples.
9
+ - 244fb306ba: Fixed an issue that caused incorrect display of versioned group items in the sidebar.
10
+ - 3ab773089f: Improved styles of the `Admonition` component.
11
+ - 9dde601e04: Fixed an issue where the `Version history` button appeared in the sidebar.
12
+ - Updated dependencies [a5fdb8c206]
13
+ - Updated dependencies [3ab773089f]
14
+ - Updated dependencies [9dde601e04]
15
+ - @redocly/theme@0.61.1
16
+ - @redocly/asyncapi-docs@1.6.1
17
+ - @redocly/graphql-docs@1.6.0
18
+ - @redocly/openapi-docs@3.17.1
19
+ - @redocly/portal-plugin-mock-server@0.14.1
20
+
3
21
  ## 0.129.0
4
22
 
5
23
  ### Minor Changes
@@ -1,4 +1,4 @@
1
- import e,{useEffect as y,useState as p}from"react";import b from"styled-components";import{Menu as I}from"@redocly/theme/components/Menu/Menu";import{SidebarActions as L}from"@redocly/theme/components/SidebarActions/SidebarActions";import{Sidebar as w}from"@redocly/theme/components/Sidebar/Sidebar";import{VersionPicker as A}from"@redocly/theme/components/VersionPicker/VersionPicker";import{Button as B}from"@redocly/theme/components/Button/Button";import{CatalogEntityHistoryButton as P}from"@redocly/theme/components/Catalog/CatalogEntity/CatalogEntityHistory/CatalogEntityHistoryButton";import{ArrowLeftIcon as x}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{withPathPrefix as D}from"@redocly/theme/core/utils";import{telemetry as h}from"../telemetry/index.js";import{usePreloadHistory as T}from"../usePreloadHistory";import{useTranslate as C}from"../hooks";import{usePageSharedData as M,usePageVersions as V}from"../../providers/page-data/hooks";import{useSidebarItems as H}from"./useSidebarItems";import{renderAdmonition as R,RequestAccessButton as q}from"./RequestAccessButton";function ie({layoutControls:s}){const{versions:l=[]}=V()||{},g=l.find(t=>t?.active),{translate:a}=C(),{currentItems:m,backLink:n,versionLabel:o,pushDrilldownState:k,popDrilldownState:v}=H(g),[c,S]=p(),{collapsedSidebar:i}=s,d=M("openAPIDocsStore")?.definition.info?.["x-metadata"]?.apiId,E=T(),[u,r]=p(void 0);return y(()=>{const t=setTimeout(()=>r(void 0),350);return()=>clearTimeout(t)},[u]),m.length?e.createElement(e.Fragment,null,e.createElement(w,{collapsed:i,menuItemsAnimation:u,versions:e.createElement(A,{versions:l,onChange:t=>{h.sendVersionPickerSelectionChangeMessage({action:"change"});const f=location.hash?t?.link+location.hash:t?.link;f&&E.push(D(f))}}),menu:e.createElement(I,{items:m,onDrilldownOpen:t=>{r("slideInRight"),k(t)}}),footer:e.createElement("div",{style:{width:"100%"}},!i&&R(c),e.createElement(L,{...s,requestAccessButton:d?e.createElement(q,{apiId:d,status:c,setStatus:S}):null})),header:(n||o!==void 0)&&e.createElement(J,null,n&&e.createElement(j,{icon:e.createElement(x,null),iconPosition:"left",variant:"ghost",size:"medium","data-component-name":"Sidebar/BackButton",to:n.slug,onClick:()=>{r("slideInLeft"),v(),h.sendSidebarDrilldownBackButtonClickedMessage({action:"click"})}},i?"":n.label?e.createElement("div",{"data-translation-key":"sidebar.menu.backToLabel"},a("sidebar.menu.backToLabel",{value:a(n.labelTranslationKey,n.label)})):e.createElement("div",{"data-translation-key":"sidebar.menu.backLabel"},a("sidebar.menu.backLabel"))),o!==void 0&&!i&&e.createElement(P,{version:o}))})):null}const J=b.div`
1
+ import e,{useEffect as y,useState as p}from"react";import b from"styled-components";import{Menu as I}from"@redocly/theme/components/Menu/Menu";import{SidebarActions as L}from"@redocly/theme/components/SidebarActions/SidebarActions";import{Sidebar as w}from"@redocly/theme/components/Sidebar/Sidebar";import{VersionPicker as A}from"@redocly/theme/components/VersionPicker/VersionPicker";import{Button as B}from"@redocly/theme/components/Button/Button";import{CatalogEntityHistoryButton as P}from"@redocly/theme/components/Catalog/CatalogEntity/CatalogEntityHistory/CatalogEntityHistoryButton";import{ArrowLeftIcon as x}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{withPathPrefix as D}from"@redocly/theme/core/utils";import{telemetry as h}from"../telemetry/index.js";import{usePreloadHistory as T}from"../usePreloadHistory";import{useTranslate as C}from"../hooks";import{usePageSharedData as M,usePageVersions as V}from"../../providers/page-data/hooks";import{useSidebarItems as H}from"./useSidebarItems";import{renderAdmonition as R,RequestAccessButton as q}from"./RequestAccessButton";function ie({layoutControls:s}){const{versions:l=[]}=V()||{},g=l.find(t=>t?.active),{translate:a}=C(),{currentItems:m,backLink:n,versionLabel:o,pushDrilldownState:k,popDrilldownState:v}=H(g),[c,S]=p(),{collapsedSidebar:i}=s,d=M("openAPIDocsStore")?.definition.info?.["x-metadata"]?.apiId,E=T(),[u,r]=p(void 0);return y(()=>{const t=setTimeout(()=>r(void 0),350);return()=>clearTimeout(t)},[u]),m.length?e.createElement(e.Fragment,null,e.createElement(w,{collapsed:i,menuItemsAnimation:u,versions:e.createElement(A,{versions:l,onChange:t=>{h.sendVersionPickerSelectionChangeMessage({action:"change"});const f=location.hash?t?.link+location.hash:t?.link;f&&E.push(D(f))}}),menu:e.createElement(I,{items:m,onDrilldownOpen:t=>{r("slideInRight"),k(t)}}),footer:e.createElement("div",{style:{width:"100%"}},!i&&R(c),e.createElement(L,{...s,requestAccessButton:d?e.createElement(q,{apiId:d,status:c,setStatus:S}):null})),header:(n||o!==void 0)&&e.createElement(J,null,n&&e.createElement(j,{icon:e.createElement(x,null),iconPosition:"left",variant:"ghost",size:"medium","data-component-name":"Sidebar/BackButton",to:n.slug,onClick:()=>{r("slideInLeft"),v(),h.sendSidebarDrilldownBackButtonClickedMessage({action:"click"})}},i?"":n.label?e.createElement("div",{"data-translation-key":"sidebar.menu.backToLabel"},a("sidebar.menu.backToLabel",{value:a(n.labelTranslationKey,n.label)})):e.createElement("div",{"data-translation-key":"sidebar.menu.backLabel"},a("sidebar.menu.backLabel"))),o&&!i&&e.createElement(P,{version:o}))})):null}const J=b.div`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--menu-header-container-gap);
@@ -0,0 +1,23 @@
1
+ import type { ResolvedNavItem, Version } from '@redocly/config';
2
+ /**
3
+ * Filters the sidebar items based on the active version.
4
+ *
5
+ * The input is a list of all items with versioned items mixed in.
6
+ *
7
+ * We can't just filter out all items that don't match the active version because there might be items from folders that have different versions.
8
+ *
9
+ * For example:
10
+ *
11
+ * /foo
12
+ * /@v1
13
+ * /@v2
14
+ * /bar
15
+ * /@v1
16
+ * /@latest
17
+ *
18
+ * So we foolow these rules:
19
+ * - we prefer the items with the same version name as the active version
20
+ * - if there are no items with the same version name, we pick the default version for folder
21
+ */
22
+ export declare function filterOutVersionedItems(items: ResolvedNavItem[], activeVersion?: Version | null, versionNamesByFolderId?: Record<string, Set<string>>): ResolvedNavItem[];
23
+ //# sourceMappingURL=filter-out-versioned-items.d.ts.map
@@ -0,0 +1 @@
1
+ function o(s,e,n={}){for(const r of s)r.versionFolderId&&r.version&&(n[r.versionFolderId]=n[r.versionFolderId]??new Set).add(r.version);return s.filter(r=>r.version==null?r:e?r.version===e.version?!0:r.versionFolderId&&n[r.versionFolderId]?.has(e.version)?!1:r.isDefault:r.isDefault).map(r=>Array.isArray(r.items)&&r.items.length?{...r,items:o(r.items,e,n)}:r)}export{o as filterOutVersionedItems};
@@ -1,6 +1,6 @@
1
- import type { ResolvedNavItem, Version } from '@redocly/config';
1
+ import type { Version } from '@redocly/config';
2
2
  import type { ItemState, DrilldownMenuItemDetails } from '@redocly/theme/core/types';
3
- export declare function useRawSidebarItems(activeVersion?: Version | null): ResolvedNavItem[];
3
+ export declare function useRawSidebarItems(activeVersion?: Version | null): import("@redocly/config").ResolvedNavItem[];
4
4
  export declare function useSidebarItems(activeVersion?: Version | null): {
5
5
  currentItems: ItemState[];
6
6
  allSidebarItems: ItemState[];
@@ -1 +1 @@
1
- import{useLocation as D}from"react-router-dom";import{useEffect as _,useMemo as f,useState as I}from"react";import{useActiveSectionId as k}from"@redocly/theme/core/hooks";import{getMenuItemType as C}from"@redocly/theme/core/utils";import{MenuItemType as y}from"@redocly/theme/core/constants";import{usePageSharedData as T,useSidebarItemsData as h,useSidebarConnectedCatalogConfig as G,useSidebarConnectedCatalogEntity as E}from"../../providers/page-data/hooks";import{mapItemsPropsToState as g}from"./utils";import{injectCatalogItems as F}from"../../utils/catalog/inject-catalog-items";import{CATALOG_BASE_SLUG as O,CATALOG_SLUGS as B}from"../../../server/constants/plugins/catalog-entities";const K="catalog.backToAllLabel",M=`${O}/${B.ALL}`;function N(o){const t=h();return f(()=>p(t,o),[t,o])}function H(o){const t=D(),n=k(t,!0),e=E(),b=G(),a=N(o),c=e?F(a,e.key,b?.slug,t.search):a,[u,v]=I(null),s=f(()=>g(c,t,n),[n,t,c]),l=T("current-catalog-info"),A=f(()=>S(s),[c]),[r,d]=I(A),i=r.length>0?r[r.length-1]:void 0,L=i&&g([...i.item.link?[{...i.item,items:[],menuStyle:void 0,separatorLine:!1}]:[],...i.item.items],t,n);_(()=>{if(!u||u!==n){const m=S(s);d(m),v(n)}},[a,t,n,u]);const w=i?{slug:i.previousLink,event:"sidebar_drilldown_back_button.clicked"}:e?{label:"Back to Catalog",labelTranslationKey:K,slug:M,event:"back_to_catalog_button.clicked"}:l?{label:l.catalog.label,labelTranslationKey:l.catalog.labelTranslationKey,slug:l.catalog.link,event:"back_to_catalog_button.clicked"}:void 0;return{currentItems:L||s,allSidebarItems:s,popDrilldownState:()=>{r.length>0&&d(r.slice(0,r.length-1))},pushDrilldownState:m=>{d([...r,m])},backLink:w,versionLabel:e?.version??null}}function p(o,t){const n={};for(const e of o)e.versionFolderId&&e.version&&(n[e.versionFolderId]=n[e.versionFolderId]??[]).push(e.version);return o.filter(e=>e.version==null?e:t?e.version===t.version?!0:e.versionFolderId&&n[e.versionFolderId]?.includes(t.version)?!1:e.isDefault:e.isDefault).map(e=>Array.isArray(e.items)&&o.length?{...e,items:p(e.items,t)}:e)}function S(o,t=[]){for(const n of o){if(!n.active&&!n.hasActiveSubItem)continue;if(C(n)===y.DrillDown&&t.push({item:n}),n.active)return t;if(n.hasActiveSubItem)return S(n.items,t)}return t}export{N as useRawSidebarItems,H as useSidebarItems};
1
+ import{useLocation as _}from"react-router-dom";import{useEffect as k,useMemo as S,useState as b}from"react";import{useActiveSectionId as D}from"@redocly/theme/core/hooks";import{getMenuItemType as v}from"@redocly/theme/core/utils";import{MenuItemType as C}from"@redocly/theme/core/constants";import{usePageSharedData as T,useSidebarItemsData as h,useSidebarConnectedCatalogConfig as y,useSidebarConnectedCatalogEntity as G}from"../../providers/page-data/hooks";import{mapItemsPropsToState as g}from"./utils";import{injectCatalogItems as E}from"../../utils/catalog/inject-catalog-items";import{CATALOG_BASE_SLUG as O,CATALOG_SLUGS as K}from"../../../server/constants/plugins/catalog-entities";import{filterOutVersionedItems as B}from"./helpers/filter-out-versioned-items";const M="catalog.backToAllLabel",P=`${O}/${K.ALL}`;function U(n){const e=h();return S(()=>B(e,n),[e,n])}function J(n){const e=_(),t=D(e,!0),a=G(),p=y(),s=U(n),c=a?E(s,a.key,p?.slug,e.search):s,[u,I]=b(null),r=S(()=>g(c,e,t),[t,e,c]),l=T("current-catalog-info"),L=S(()=>f(r),[c]),[o,m]=b(L),i=o.length>0?o[o.length-1]:void 0,A=i&&g([...i.item.link?[{...i.item,items:[],menuStyle:void 0,separatorLine:!1}]:[],...i.item.items],e,t);k(()=>{if(!u||u!==t){const d=f(r);m(d),I(t)}},[s,e,t,u]);const w=i?{slug:i.previousLink,event:"sidebar_drilldown_back_button.clicked"}:a?{label:"Back to Catalog",labelTranslationKey:M,slug:P,event:"back_to_catalog_button.clicked"}:l?{label:l.catalog.label,labelTranslationKey:l.catalog.labelTranslationKey,slug:l.catalog.link,event:"back_to_catalog_button.clicked"}:void 0;return{currentItems:A||r,allSidebarItems:r,popDrilldownState:()=>{o.length>0&&m(o.slice(0,o.length-1))},pushDrilldownState:d=>{m([...o,d])},backLink:w,versionLabel:a?.version??null}}function f(n,e=[]){for(const t of n){if(!t.active&&!t.hasActiveSubItem)continue;if(v(t)===C.DrillDown&&e.push({item:t}),t.active)return e;if(t.hasActiveSubItem)return f(t.items,e)}return e}export{U as useRawSidebarItems,J as useSidebarItems};
@@ -1 +1 @@
1
- import u from"shiki/langs/bash.mjs";import w from"shiki/langs/c.mjs";import N from"shiki/langs/coffee.mjs";import b from"shiki/langs/csharp.mjs";import y from"shiki/langs/css.mjs";import H from"shiki/langs/go.mjs";import v from"shiki/langs/graphql.mjs";import x from"shiki/langs/html.mjs";import L from"shiki/langs/http.mjs";import _ from"shiki/langs/java.mjs";import j from"shiki/langs/javascript.mjs";import T from"shiki/langs/kotlin.mjs";import E from"shiki/langs/lua.mjs";import r from"shiki/langs/markdown.mjs";import M from"shiki/langs/objective-c.mjs";import q from"shiki/langs/perl.mjs";import S from"shiki/langs/php.mjs";import A from"shiki/langs/python.mjs";import D from"shiki/langs/scala.mjs";import F from"shiki/langs/sql.mjs";import a from"shiki/langs/swift.mjs";import R from"shiki/langs/tsx.mjs";import W from"shiki/langs/typescript.mjs";import C from"shiki/langs/vim.mjs";import G from"shiki/langs/xml.mjs";import J from"shiki/langs/yaml.mjs";import U from"shiki/langs/jsx.mjs";import V from"shiki/langs/jsonl.mjs";import{transformerNotationDiff as $,transformerNotationHighlight as z,transformerNotationWordHighlight as B,transformerNotationFocus as I,transformerNotationErrorLevel as K,transformerMetaHighlight as O,transformerMetaWordHighlight as P,transformerRemoveNotationEscape as Q}from"@shikijs/transformers";import{createHighlighterCoreSync as s}from"shiki/core";import{createJavaScriptRegexEngine as n}from"shiki/engine/javascript";import X from"./ruby";import Y from"./multipart-mixed";import Z from"./json-seq";import f from"./theme";import rr from"./treeview-transformer";import or from"./node-transformer";import tr from"./line-numbers-transformer";import{mapLang as mr}from"./map-lang";const er=[{...r[0],displayName:"Markdoc",name:"markdoc",scopeName:"source.markdoc",aliases:[],repository:{...r[0].repository,fenced_code_block:{patterns:[...r[0].repository.fenced_code_block.patterns||[],{name:"markdoc",begin:".*{%",end:"%}",patterns:[{match:"(?<={%)\\s*(/\\w+(-\\w+)?|\\w+(-\\w+)?)",name:"markdoc.tag"},{match:"\\$\\w+",name:"markdoc.variable"},{match:'".*?"',name:"markdoc.string"},{match:"\\b\\w+(?=\\()",name:"markdoc.function"},{match:"\\s+\\w+(?==|\\s)",name:"markdoc.keyword"},{match:"(?<==)false|true(?=\\s)",name:"markdoc.boolean"}]}]}}}],p="text",c=s({themes:[f],langs:[u,w,N,b,y,H,v,x,L,_,j,T,E,r,M,q,S,A,X,D,F,a,R,W,G,C,J,er,U,V,Y,Z],engine:n()}),ir=[$(),z(),B(),I(),K(),O(),P(),Q(),or()],ar=(o,m,h)=>{const{withLineNumbers:l,startLineNumber:g,highlight:d,customTransformer:e}=h||{},i=mr(m?.toLowerCase()||p),t={lang:i,theme:"theme",meta:{__raw:d},transformers:[...i==="treeview"?[rr()]:[],...ir,...l?[tr(g)]:[],...e?[e]:[]]};try{return m==="swift"?s({themes:[f],langs:[a],engine:n({forgiving:!0})}).codeToHtml(o,t):c.codeToHtml(o,t)}catch{return c.codeToHtml(o,{...t,lang:p})}};function Ir(){return{highlight:ar}}export{ar as highlight,Ir as useCodeHighlight};
1
+ import h from"shiki/langs/bash.mjs";import l from"shiki/langs/c.mjs";import g from"shiki/langs/coffee.mjs";import d from"shiki/langs/csharp.mjs";import k from"shiki/langs/css.mjs";import u from"shiki/langs/go.mjs";import w from"shiki/langs/graphql.mjs";import N from"shiki/langs/html.mjs";import b from"shiki/langs/http.mjs";import y from"shiki/langs/java.mjs";import v from"shiki/langs/javascript.mjs";import x from"shiki/langs/kotlin.mjs";import H from"shiki/langs/lua.mjs";import r from"shiki/langs/markdown.mjs";import L from"shiki/langs/objective-c.mjs";import _ from"shiki/langs/perl.mjs";import j from"shiki/langs/php.mjs";import T from"shiki/langs/python.mjs";import E from"shiki/langs/scala.mjs";import M from"shiki/langs/sql.mjs";import q from"shiki/langs/swift.mjs";import S from"shiki/langs/tsx.mjs";import A from"shiki/langs/typescript.mjs";import C from"shiki/langs/vim.mjs";import D from"shiki/langs/xml.mjs";import F from"shiki/langs/yaml.mjs";import R from"shiki/langs/jsx.mjs";import W from"shiki/langs/jsonl.mjs";import{transformerNotationDiff as G,transformerNotationHighlight as J,transformerNotationWordHighlight as U,transformerNotationFocus as V,transformerNotationErrorLevel as $,transformerMetaHighlight as z,transformerMetaWordHighlight as B,transformerRemoveNotationEscape as I}from"@shikijs/transformers";import{createHighlighterCoreSync as K}from"shiki/core";import{createJavaScriptRegexEngine as O}from"shiki/engine/javascript";import P from"./ruby";import Q from"./multipart-mixed";import X from"./json-seq";import Y from"./theme";import Z from"./treeview-transformer";import rr from"./node-transformer";import or from"./line-numbers-transformer";import{mapLang as tr}from"./map-lang";const mr=[{...r[0],displayName:"Markdoc",name:"markdoc",scopeName:"source.markdoc",aliases:[],repository:{...r[0].repository,fenced_code_block:{patterns:[...r[0].repository.fenced_code_block.patterns||[],{name:"markdoc",begin:".*{%",end:"%}",patterns:[{match:"(?<={%)\\s*(/\\w+(-\\w+)?|\\w+(-\\w+)?)",name:"markdoc.tag"},{match:"\\$\\w+",name:"markdoc.variable"},{match:'".*?"',name:"markdoc.string"},{match:"\\b\\w+(?=\\()",name:"markdoc.function"},{match:"\\s+\\w+(?==|\\s)",name:"markdoc.keyword"},{match:"(?<==)false|true(?=\\s)",name:"markdoc.boolean"}]}]}}}],i="text",a=K({themes:[Y],langs:[h,l,g,d,k,u,w,N,b,y,v,x,H,r,L,_,j,T,P,E,M,q,S,A,D,C,F,mr,R,W,Q,X],engine:O()}),er=[G(),J(),U(),V(),$(),z(),B(),I(),rr()],ir=(o,n,s)=>{const{withLineNumbers:p,startLineNumber:f,highlight:c,customTransformer:t}=s||{},m=tr(n?.toLowerCase()||i),e={lang:m,theme:"theme",meta:{__raw:c},transformers:[...m==="treeview"?[Z()]:[],...er,...p?[or(f)]:[],...t?[t]:[]]};try{return a.codeToHtml(o,e)}catch{return a.codeToHtml(o,{...e,lang:i})}};function Ir(){return{highlight:ir}}export{ir as highlight,Ir as useCodeHighlight};
@@ -1,38 +1,38 @@
1
- import{and as c,desc as H,eq as s,notExists as v,sql as e}from"drizzle-orm";import{unionAll as C}from"drizzle-orm/sqlite-core";import{logger as M}from"../../../../../tools/notifiers/logger.js";import{entitiesTable as i}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as k}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{applyPagination as S}from"../../../../../providers/database/pagination/index.js";import{applyFilter as q,excludeFieldsFromFilter as j,getAllFilterFieldValues as O}from"../../../../../providers/database/pagination/filter.js";import{createBffEntity as A}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as n,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as $,createEntityFieldsForSelect as W}from"../utils.js";class Z{#e;#t;constructor(t,o){this.#e=t,this.#t=o}async getEntitiesWithRelations(t={}){const o=O(t.filter,"owners");if(o.length>0)return this.#c(t,o);const m=O(t.filter,"domains");return m.length>0?this.#l(t,m):this.#a(t)}async#c(t,o){const m=this.#s(),l=this.#n(),d=this.#o(),y=l.as("combined_relations"),u=d.as("combined_target_entities"),h=o.map(r=>e`
1
+ import{and as c,desc as M,eq as s,notExists as $,sql as e}from"drizzle-orm";import{unionAll as C}from"drizzle-orm/sqlite-core";import{logger as Q}from"../../../../../tools/notifiers/logger.js";import{entitiesTable as i}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as T}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{applyPagination as D}from"../../../../../providers/database/pagination/index.js";import{applyFilter as j,excludeFieldsFromFilter as H,getAllFilterFieldValues as S}from"../../../../../providers/database/pagination/filter.js";import{createBffEntity as O}from"../../mappers/create-bff-entity.js";import{FIELDS_TO_SELECT_FOR_ENTITY as n,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as R,createEntityFieldsForSelect as A}from"../utils.js";class U{#e;#t;constructor(t,o){this.#e=t,this.#t=o}async getEntitiesWithRelations(t={}){const o=S(t.filter,"owners");if(o.length>0)return this.#c(t,o);const d=S(t.filter,"domains");return d.length>0?this.#l(t,d):this.#a(t)}async#c(t,o){const d=this.#s(),l=this.#n(),m=this.#o(),y=l.as("combined_relations"),u=m.as("combined_target_entities"),h=o.map(r=>e`
2
2
  EXISTS (
3
3
  SELECT 1 FROM (${l}) cr
4
4
  WHERE cr.source_key = ${r}
5
5
  AND cr.source_to_target_relation = 'owns'
6
6
  AND cr.target_key = base_entities.key
7
7
  )
8
- `),_=h.length===1?h[0]:e`(${e.join(h,e` OR `)})`,b=O(t.filter,"domains");let w=_;if(b.length>0){const r=b.map(a=>e`
8
+ `),_=h.length===1?h[0]:e`(${e.join(h,e` OR `)})`,b=S(t.filter,"domains");let w=_;if(b.length>0){const r=b.map(a=>e`
9
9
  EXISTS (
10
10
  SELECT 1 FROM (${l}) cr
11
- JOIN (${d}) d ON d.key = ${a}
11
+ JOIN (${m}) d ON d.key = ${a}
12
12
  WHERE d.type = 'domain'
13
13
  AND d.is_current = 1
14
14
  AND cr.source_key = ${a}
15
15
  AND cr.target_key = base_entities.key
16
16
  AND cr.source_to_target_relation = 'hasParts'
17
17
  )
18
- `),f=r.length===1?r[0]:e`(${e.join(r,e` OR `)})`;w=e`(${_} AND ${f})`}const R=j(t.filter,["owners","domains"]),g={...t,filter:R,baseWhereCondition:w},E=this.#e.client.select(n).from(m.as("base_entities")).$dynamic();try{const r=this.#e.client.select(n).from(m.as("base_entities")).$dynamic();S(r,{...g,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#e.client.select({count:e`count(*)`}).from(r.as("count_subquery")),a=t.limit||10;S(E,{...g,limit:a+1});const p=E.as("paged_entities"),N=this.#e.client.with(y,u,p).select({...W("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(p),[F,I]=await Promise.all([N.run(),f.run()]),D=F.rows,L=Number(I.rows[0]?.count||0),Q=D.length>a;return{items:D.slice(0,a).map(T=>A(T)).filter(T=>T!==null),hasMore:Q,total:L}}catch(r){return M.error("Error getting entities with relations (owner optimized path):",r),{items:[],hasMore:!1,total:0}}}async#l(t,o){const m=this.#s(),l=this.#n(),d=this.#o(),y=l.as("combined_relations"),u=d.as("combined_target_entities"),h=o.map(r=>e`
18
+ `),f=r.length===1?r[0]:e`(${e.join(r,e` OR `)})`;w=e`(${_} AND ${f})`}const p=H(t.filter,["owners","domains"]),g={...t,filter:p,baseWhereCondition:w},E=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();try{const r=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();D(r,{...g,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#e.client.$count(r),a=t.limit||10;D(E,{...g,limit:a+1});const v=E.as("paged_entities"),W=this.#e.client.with(y,u,v).select({...A("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(v),[F,I]=await Promise.all([W.run(),f]),k=F.rows,L=k.length>a;return{items:k.slice(0,a).map(N=>O(N)).filter(N=>N!==null),hasMore:L,total:I}}catch(r){return Q.error("Error getting entities with relations (owner optimized path):",r),{items:[],hasMore:!1,total:0}}}async#l(t,o){const d=this.#s(),l=this.#n(),m=this.#o(),y=l.as("combined_relations"),u=m.as("combined_target_entities"),h=o.map(r=>e`
19
19
  EXISTS (
20
20
  SELECT 1 FROM (${l}) cr
21
- JOIN (${d}) d ON d.key = ${r}
21
+ JOIN (${m}) d ON d.key = ${r}
22
22
  WHERE d.type = 'domain'
23
23
  AND d.is_current = 1
24
24
  AND cr.source_key = ${r}
25
25
  AND cr.target_key = base_entities.key
26
26
  AND cr.source_to_target_relation = 'hasParts'
27
27
  )
28
- `),_=h.length===1?h[0]:e`(${e.join(h,e` OR `)})`,b=O(t.filter,"owners");let w=_;if(b.length>0){const r=b.map(a=>e`
28
+ `),_=h.length===1?h[0]:e`(${e.join(h,e` OR `)})`,b=S(t.filter,"owners");let w=_;if(b.length>0){const r=b.map(a=>e`
29
29
  EXISTS (
30
30
  SELECT 1 FROM (${l}) cr
31
31
  WHERE cr.source_key = ${a}
32
32
  AND cr.source_to_target_relation = 'owns'
33
33
  AND cr.target_key = base_entities.key
34
34
  )
35
- `),f=r.length===1?r[0]:e`(${e.join(r,e` OR `)})`;w=e`(${_} AND ${f})`}const R=j(t.filter,["domains","owners"]),g={...t,filter:R,baseWhereCondition:w},E=this.#e.client.select(n).from(m.as("base_entities")).$dynamic();try{const r=this.#e.client.select(n).from(m.as("base_entities")).$dynamic();S(r,{...g,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#e.client.select({count:e`count(*)`}).from(r.as("count_subquery")),a=t.limit||10;S(E,{...g,limit:a+1});const p=E.as("paged_entities"),N=this.#e.client.with(y,u,p).select({...W("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(p),[F,I]=await Promise.all([N.run(),f.run()]),D=F.rows,L=Number(I.rows[0]?.count||0),Q=D.length>a;return{items:D.slice(0,a).map(T=>A(T)).filter(T=>T!==null),hasMore:Q,total:L}}catch(r){return M.error("Error getting entities with relations (domain optimized path):",r),{items:[],hasMore:!1,total:0}}}async#a(t){const o=this.#s(),m=this.#n(),l=this.#o(),d=m.as("combined_relations"),y=l.as("combined_target_entities"),u=this.#e.client.select(n).from(o.as("base_entities")).$dynamic(),{whereCondition:h}=q(u,t.filter);h&&u.where(h);try{const _=this.#e.client.select(n).from(o.as("base_entities_count")).$dynamic();h&&_.where(h);const b=this.#e.client.select({count:e`count(*)`}).from(_.as("count_subquery")),w=t.limit||10;S(u,{...t,limit:w+1});const R=u.as("paged_entities"),g=this.#e.client.with(d,y,R).select({...W("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(R),[E,r]=await Promise.all([g.run(),b.run()]),f=E.rows,a=Number(r.rows[0]?.count||0),p=f.length>w;return{items:f.slice(0,w).map(N=>A(N)).filter(N=>N!==null),hasMore:p,total:a}}catch(_){return M.error("Error getting entities with relations (optimized path):",_),{items:[],hasMore:!1,total:0}}}#s(){return this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(c(s(e.raw("is_current"),1),s(e.raw("is_deleted"),!1))),this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1),v(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1)))}#n(){return this.#t?C(this.#e.client.select($).from(e`remote.entities_relations`),this.#e.client.select($).from(k).where(v(this.#e.client.select({id:$.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${k.sourceKey}`)))):this.#e.client.select($).from(k)}#o(){return this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(c(s(e.raw("is_current"),1),s(e.raw("is_deleted"),!1))),this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1),v(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1)))}async getEntityWithRelationsByKey(t,o){if(!t||t.trim()==="")return null;const m=o?.revision,l=o?.version,d=m?null:await this.#m(t,l||null),y=l??d?.version,u=m||d?.revision||null,_=(this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(s(i.key,t)),this.#e.client.select(n).from(i).where(c(s(i.key,t),v(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(e`remote.key = ${i.key}`))))):this.#e.client.select(n).from(i).where(s(i.key,t))).as("e"),w=(this.#t?C(this.#e.client.select($).from(e`remote.entities_relations`),this.#e.client.select($).from(k).where(v(this.#e.client.select({id:$.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${k.sourceKey}`)))):this.#e.client.select($).from(k)).as("combined_relations"),g=(this.#t?C(this.#e.client.select(n).from(e`remote.entities`),this.#e.client.select(n).from(i).where(v(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(e`remote.key = ${i.key}`)))):this.#e.client.select(n).from(i)).as("combined_target_entities"),E=this.#e.client.with(_,w,g).select({...W("e"),domains:this.#i("e").as("domains"),owners:this.#r("e").as("owners")}).from(_).$dynamic();u?E.where(c(s(e.raw("revision"),u),y?s(e.raw("version"),y):void 0)):E.where(s(e.raw("is_current"),1)),E.limit(1);const r=await E.run();if(r.rows.length===0)return null;const f=r.rows[0];return A(f)}async#m(t,o){if(o){const y=await(this.#t?C(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`remote.entities`).where(c(e`key = ${t}`,e`version = ${o}`)).orderBy(e.raw("revision DESC")),this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.version,o),v(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.version = ${o}`))))).orderBy(H(i.revision))):this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.version,o))).orderBy(H(i.revision))).limit(1).run();if(y.rows.length>0){const u=y.rows[0];return{version:u.version||null,revision:u.revision||null}}return null}const l=await(this.#t?C(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`remote.entities`).where(c(e`key = ${t}`,e`is_current = 1`)),this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.isCurrent,!0),v(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.isCurrent,!0)))).limit(1).run();if(l.rows.length>0){const d=l.rows[0];return{version:d.version||null,revision:d.revision||null}}return null}#i(t){return e`
35
+ `),f=r.length===1?r[0]:e`(${e.join(r,e` OR `)})`;w=e`(${_} AND ${f})`}const p=H(t.filter,["domains","owners"]),g={...t,filter:p,baseWhereCondition:w},E=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();try{const r=this.#e.client.select(n).from(d.as("base_entities")).$dynamic();D(r,{...g,limit:void 0,skip:void 0,after:void 0,before:void 0});const f=this.#e.client.$count(r),a=t.limit||10;D(E,{...g,limit:a+1});const v=E.as("paged_entities"),W=this.#e.client.with(y,u,v).select({...A("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(v),[F,I]=await Promise.all([W.run(),f]),k=F.rows,L=k.length>a;return{items:k.slice(0,a).map(N=>O(N)).filter(N=>N!==null),hasMore:L,total:I}}catch(r){return Q.error("Error getting entities with relations (domain optimized path):",r),{items:[],hasMore:!1,total:0}}}async#a(t){const o=this.#s(),d=this.#n(),l=this.#o(),m=d.as("combined_relations"),y=l.as("combined_target_entities"),u=this.#e.client.select(n).from(o.as("base_entities")).$dynamic(),{whereCondition:h}=j(u,t.filter);h&&u.where(h);try{const _=this.#e.client.select(n).from(o.as("base_entities")).$dynamic();h&&_.where(h);const b=this.#e.client.$count(_),w=t.limit||10;D(u,{...t,limit:w+1});const p=u.as("paged_entities"),g=this.#e.client.with(m,y,p).select({...A("paged_entities"),domains:this.#i("paged_entities").as("domains"),owners:this.#r("paged_entities").as("owners")}).from(p),[E,r]=await Promise.all([g.run(),b]),f=E.rows,a=f.length>w;return{items:f.slice(0,w).map(v=>O(v)).filter(v=>v!==null),hasMore:a,total:r}}catch(_){return Q.error("Error getting entities with relations (optimized path):",_),{items:[],hasMore:!1,total:0}}}#s(){return this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(c(s(e.raw("is_current"),1),s(e.raw("is_deleted"),!1))),this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1),$(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1)))}#n(){return this.#t?C(this.#e.client.select(R).from(e`remote.entities_relations`),this.#e.client.select(R).from(T).where($(this.#e.client.select({id:R.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${T.sourceKey}`)))):this.#e.client.select(R).from(T)}#o(){return this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(c(s(e.raw("is_current"),1),s(e.raw("is_deleted"),!1))),this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1),$(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(n).from(i).where(c(s(i.isCurrent,!0),s(i.isDeleted,!1)))}async getEntityWithRelationsByKey(t,o){if(!t||t.trim()==="")return null;const d=o?.revision,l=o?.version,m=d?null:await this.#d(t,l||null),y=l??m?.version,u=d||m?.revision||null,_=(this.#t?C(this.#e.client.select(n).from(e`remote.entities`).where(s(i.key,t)),this.#e.client.select(n).from(i).where(c(s(i.key,t),$(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(e`remote.key = ${i.key}`))))):this.#e.client.select(n).from(i).where(s(i.key,t))).as("e"),w=(this.#t?C(this.#e.client.select(R).from(e`remote.entities_relations`),this.#e.client.select(R).from(T).where($(this.#e.client.select({id:R.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${T.sourceKey}`)))):this.#e.client.select(R).from(T)).as("combined_relations"),g=(this.#t?C(this.#e.client.select(n).from(e`remote.entities`),this.#e.client.select(n).from(i).where($(this.#e.client.select({id:n.id}).from(e`remote.entities as remote`).where(e`remote.key = ${i.key}`)))):this.#e.client.select(n).from(i)).as("combined_target_entities"),E=this.#e.client.with(_,w,g).select({...A("e"),domains:this.#i("e").as("domains"),owners:this.#r("e").as("owners")}).from(_).$dynamic();u?E.where(c(s(e.raw("revision"),u),y?s(e.raw("version"),y):void 0)):E.where(s(e.raw("is_current"),1)),E.limit(1);const r=await E.run();if(r.rows.length===0)return null;const f=r.rows[0];return O(f)}async#d(t,o){if(o){const y=await(this.#t?C(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`remote.entities`).where(c(e`key = ${t}`,e`version = ${o}`)).orderBy(e.raw("revision DESC")),this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.version,o),$(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.version = ${o}`))))).orderBy(M(i.revision))):this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.version,o))).orderBy(M(i.revision))).limit(1).run();if(y.rows.length>0){const u=y.rows[0];return{version:u.version||null,revision:u.revision||null}}return null}const l=await(this.#t?C(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision")}).from(e`remote.entities`).where(c(e`key = ${t}`,e`is_current = 1`)),this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.isCurrent,!0),$(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(c(e`remote.key = ${i.key}`,e`remote.is_current = 1`)))))):this.#e.client.select({version:i.version,revision:i.revision}).from(i).where(c(s(i.key,t),s(i.isCurrent,!0)))).limit(1).run();if(l.rows.length>0){const m=l.rows[0];return{version:m.version||null,revision:m.revision||null}}return null}#i(t){return e`
36
36
  COALESCE(
37
37
  (
38
38
  SELECT json_group_array(
@@ -109,4 +109,4 @@ import{and as c,desc as H,eq as s,notExists as v,sql as e}from"drizzle-orm";impo
109
109
  ),
110
110
  json_array()
111
111
  )
112
- `}}export{Z as CatalogEntitiesBffRepository};
112
+ `}}export{U as CatalogEntitiesBffRepository};
@@ -1,4 +1,4 @@
1
- import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as e}from"drizzle-orm";import{unionAll as f}from"drizzle-orm/sqlite-core";import{logger as b}from"../../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as R}from"@redocly/theme/core/constants";import{applyPagination as S}from"../../../../../providers/database/pagination/index.js";import{FIELDS_TO_SELECT_FOR_ENTITY as c,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as m}from"../utils.js";import{createEntityReadModel as O}from"../../mappers/create-entity-read-model.js";import{createEntityRelation as C}from"../../mappers/create-entity-relation.js";import{entitiesTable as t}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as y}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{CatalogEntitiesRelationsRepository as I}from"./catalog-entities-relations-repository.js";import{CatalogEntitiesBffRepository as g}from"./catalog-entities-bff-repository.js";class j{#e;#t=void 0;#i;#s;constructor(i){this.#e=i,this.#i=new I(this.#e,this.#t||""),this.#s=new g(this.#e,this.#t||"")}async attachDatabase(i){this.#t!==i&&(this.#t=i,await this.#e.client.run(e`ATTACH DATABASE ${i} AS remote`),this.#i=new I(this.#e,i),this.#s=new g(this.#e,i))}async getEntities(i={}){const s=this.#t?f(this.#e.client.select(c).from(e`remote.entities`),this.#e.client.select(c).from(t).where(E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`)))):this.#e.client.select(c).from(t),r=this.#e.client.select(c).from(s.as("combined_entities")),o=this.#e.client.select(c).from(s.as("combined_entities")).$dynamic(),_=S(o,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),a=this.#e.client.$count(_),u=r.$dynamic(),d=i.limit||10,h=S(u,{...i,limit:d+1}),[T,N]=await Promise.all([h.run(),a]),p=T.rows,w=p.length>d;return{items:p.slice(0,d).map(k=>O(k)).filter(k=>k!==null),hasMore:w,total:N}}async getEntityKeysAndVersionsBySourceFile(i){const s=this.#t?f(this.#e.client.select({keyVersion:e`key || ':' || COALESCE(version, ${R})`.as("keyVersion")}).from(e`remote.entities`).where(l(e`source_file = ${i}`,e`source = 'file'`,e`key IS NOT NULL`)),this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${R})`.as("keyVersion")}).from(t).where(l(n(t.sourceFile,i),n(t.source,"file"),e`${t.key} IS NOT NULL`,E(this.#e.client.select({key:e.raw("key")}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`))))):this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${R})`.as("keyVersion")}).from(t).where(l(n(t.sourceFile,i),n(t.source,"file"),v(t.key))),r=await this.#e.client.selectDistinct({keyVersion:e`combined_keys_versions.keyVersion`}).from(s.as("combined_keys_versions")).run();return new Set(r.rows.map(o=>o.keyVersion))}async listEntityRevisions(i,s){const r=[n(t.key,i),n(t.isDeleted,!1),...s?[n(t.version,s)]:[]],o=this.#t?f(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(e`remote.entities`).where(l(e`key = ${i}`,s?e`version = ${s}`:void 0)),this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(l(...r,E(this.#e.client.select({version:e.raw("version")}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.version = ${t.version}`,e`remote.revision = ${t.revision}`)))))):this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(l(...r));return(await this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(o.as("combined_revisions")).orderBy(e.raw("is_current DESC"),e.raw("updated_at DESC"),e.raw("created_at DESC")).run()).rows.map(a=>({version:a.version||null,revision:a.revision??"",isCurrent:a.is_current!==null?!!a.is_current:!1,createdAt:a.created_at||null,updatedAt:a.updated_at||null,isDefaultVersion:a.is_default_version!==null?!!a.is_default_version:!1}))}async getEntitiesCountByTypes(){const i=this.#t?f(this.#e.client.select({type:e`type`}).from(e`remote.entities`).where(l(n(e.raw("is_current"),1),n(e.raw("is_deleted"),!1))),this.#e.client.select({type:t.type}).from(t).where(l(n(t.isCurrent,!0),n(t.isDeleted,!1),E(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.is_current = 1`)))))):this.#e.client.select({type:t.type}).from(t).where(l(n(t.isCurrent,!0),n(t.isDeleted,!1)));return this.#e.client.select({type:t.type,count:L()}).from(i.as("combined_entities")).groupBy(t.type).where(n(t.isDeleted,!1))}async getEntityByKey(i){const o=(await(this.#t?f(this.#e.client.select(c).from(e`remote.entities`).where(l(n(t.key,i),n(e.raw("is_current"),1),n(e.raw("is_deleted"),!1))),this.#e.client.select(c).from(t).where(l(n(t.key,i),n(t.isCurrent,!0),n(t.isDeleted,!1),E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(c).from(t).where(l(n(t.key,i),n(t.isCurrent,!0),n(t.isDeleted,!1)))).run()).rows[0];return o?O(o):null}async getOneOutdatedEntity(){const i=this.#t?f(this.#e.client.select(c).from(e`remote.entities`),this.#e.client.select(c).from(t).where(E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`)))):this.#e.client.select(c).from(t),r=(await this.#e.client.select(c).from(i.as("combined_entities")).where(D(e`combined_entities.scorecards_status = 'OUTDATED'`,e`combined_entities.scorecards_status IS NULL`)).orderBy(e`combined_entities.updated_at ASC`).limit(1).run()).rows[0];return r?O(r):null}async getEntitiesRelations(i={}){const s=this.#t?f(this.#e.client.select(m).from(e`remote.entities_relations`),this.#e.client.select(m).from(y).where(E(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${y.sourceKey}`)))):this.#e.client.select(m).from(y),r=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),o=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),_=S(o,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),a=this.#e.client.$count(_),u=i.limit||10,d=S(r,{...i,limit:u+1}),[h,T]=await Promise.all([d.run(),a]),N=h.rows,p=N.length>u;return{items:N.slice(0,u).map(w=>C(w)).filter(w=>w!==null),hasMore:p,total:T}}async getEntityRelationById(i){const o=(await(this.#t?f(this.#e.client.select(m).from(e`remote.entities_relations`).where(n(y.id,i)),this.#e.client.select(m).from(y).where(l(n(y.id,i),E(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.id = ${y.id}`))))):this.#e.client.select(m).from(y).where(n(y.id,i))).run()).rows[0];return o?C(o):null}async getEntitiesWithRelations(i={}){return this.#s.getEntitiesWithRelations(i)}async getEntityWithRelationsByKey(i,s){return this.#s.getEntityWithRelationsByKey(i,s)}async getRelationsForEntity(i,s,r){return this.#i.getRelationsForEntity(i,s,r)}async getRelatedEntities(i,s={}){return this.#i.getRelatedEntities(i,s)}async getCatalogFilters({entitiesTypes:i=[],emptyFilters:s=[]}){if(!s.length)return{};try{return await this.#r(i),(s.includes("domains")||s.includes("owners"))&&await this.#n(),await this.#o(s)}catch(r){return console.error("Error fetching catalog filters:",r),{}}finally{await this.#l()}}async#r(i){if(this.#t?await this.#e.client.run(e`
1
+ import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as e}from"drizzle-orm";import{unionAll as f}from"drizzle-orm/sqlite-core";import{logger as b}from"../../../../../tools/notifiers/logger.js";import{VERSION_NOT_SPECIFIED as k}from"@redocly/theme/core/constants";import{applyPagination as S}from"../../../../../providers/database/pagination/index.js";import{FIELDS_TO_SELECT_FOR_ENTITY as c,FIELDS_TO_SELECT_FOR_ENTITY_RELATION as m}from"../utils.js";import{createEntityReadModel as O}from"../../mappers/create-entity-read-model.js";import{createEntityRelation as C}from"../../mappers/create-entity-relation.js";import{entitiesTable as t}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-table.js";import{entitiesRelationsTable as y}from"../../../../../providers/database/databases/catalog-sqlite/schemas/entities-relations-table.js";import{CatalogEntitiesRelationsRepository as I}from"./catalog-entities-relations-repository.js";import{CatalogEntitiesBffRepository as g}from"./catalog-entities-bff-repository.js";class j{#e;#t=void 0;#i;#s;constructor(i){this.#e=i,this.#i=new I(this.#e,this.#t||""),this.#s=new g(this.#e,this.#t||"")}async attachDatabase(i){this.#t!==i&&(this.#t=i,await this.#e.client.run(e`ATTACH DATABASE ${i} AS remote`),this.#i=new I(this.#e,i),this.#s=new g(this.#e,i))}async getEntities(i={}){const s=this.#t?f(this.#e.client.select(c).from(e`remote.entities`),this.#e.client.select(c).from(t).where(E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`)))):this.#e.client.select(c).from(t),r=this.#e.client.select(c).from(s.as("combined_entities")),o=this.#e.client.select(c).from(s.as("combined_entities")).$dynamic(),_=S(o,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),a=this.#e.client.$count(_),u=r.$dynamic(),d=i.limit||10,h=S(u,{...i,limit:d+1}),[T,N]=await Promise.all([h.run(),a]),p=T.rows,w=p.length>d;return{items:p.slice(0,d).map(R=>O(R)).filter(R=>R!==null),hasMore:w,total:N}}async getEntityKeysAndVersionsBySourceFile(i){const s=this.#t?f(this.#e.client.select({keyVersion:e`key || ':' || COALESCE(version, ${k})`.as("keyVersion")}).from(e`remote.entities`).where(l(e`source_file = ${i}`,e`source = 'file'`,e`key IS NOT NULL`)),this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${k})`.as("keyVersion")}).from(t).where(l(n(t.sourceFile,i),n(t.source,"file"),e`${t.key} IS NOT NULL`,E(this.#e.client.select({key:e.raw("key")}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`))))):this.#e.client.select({keyVersion:e`${t.key} || ':' || COALESCE(${t.version}, ${k})`.as("keyVersion")}).from(t).where(l(n(t.sourceFile,i),n(t.source,"file"),v(t.key))),r=await this.#e.client.selectDistinct({keyVersion:e`combined_keys_versions.keyVersion`}).from(s.as("combined_keys_versions")).run();return new Set(r.rows.map(o=>o.keyVersion))}async listEntityRevisions(i,s){const r=[n(t.key,i),n(t.isDeleted,!1),...s?[n(t.version,s)]:[]],o=this.#t?f(this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(e`remote.entities`).where(l(e`key = ${i}`,s?e`version = ${s}`:void 0)),this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(l(...r,E(this.#e.client.select({version:e.raw("version")}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.version = ${t.version}`,e`remote.revision = ${t.revision}`)))))):this.#e.client.select({version:t.version,revision:t.revision,isCurrent:t.isCurrent,createdAt:t.createdAt,updatedAt:t.updatedAt,isDefaultVersion:t.isDefaultVersion}).from(t).where(l(...r));return(await this.#e.client.select({version:e.raw("version"),revision:e.raw("revision"),isCurrent:e.raw("is_current"),createdAt:e.raw("created_at"),updatedAt:e.raw("updated_at"),isDefaultVersion:e.raw("is_default_version")}).from(o.as("combined_revisions")).orderBy(e.raw("is_current DESC"),e.raw("updated_at DESC"),e.raw("created_at DESC")).run()).rows.map(a=>({version:a.version||null,revision:a.revision??"",isCurrent:a.is_current!==null?!!a.is_current:!1,createdAt:a.created_at||null,updatedAt:a.updated_at||null,isDefaultVersion:a.is_default_version!==null?!!a.is_default_version:!1}))}async getEntitiesCountByTypes(){const i=this.#t?f(this.#e.client.select({type:e`type`}).from(e`remote.entities`).where(l(n(e.raw("is_current"),1),n(e.raw("is_deleted"),!1))),this.#e.client.select({type:t.type}).from(t).where(l(n(t.isCurrent,!0),n(t.isDeleted,!1),E(this.#e.client.select({id:e.raw("id")}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.is_current = 1`)))))):this.#e.client.select({type:t.type}).from(t).where(l(n(t.isCurrent,!0),n(t.isDeleted,!1)));return this.#e.client.select({type:t.type,count:L()}).from(i.as("combined_entities")).groupBy(t.type).where(n(t.isDeleted,!1))}async getEntityByKey(i){const o=(await(this.#t?f(this.#e.client.select(c).from(e`remote.entities`).where(l(n(t.key,i),n(e.raw("is_current"),1),n(e.raw("is_deleted"),!1))),this.#e.client.select(c).from(t).where(l(n(t.key,i),n(t.isCurrent,!0),n(t.isDeleted,!1),E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(l(e`remote.key = ${t.key}`,e`remote.is_current = 1`)))))):this.#e.client.select(c).from(t).where(l(n(t.key,i),n(t.isCurrent,!0),n(t.isDeleted,!1)))).run()).rows[0];return o?O(o):null}async getOneOutdatedEntity(){const i=this.#t?f(this.#e.client.select(c).from(e`remote.entities`),this.#e.client.select(c).from(t).where(E(this.#e.client.select({id:c.id}).from(e`remote.entities as remote`).where(e`remote.key = ${t.key}`)))):this.#e.client.select(c).from(t),r=(await this.#e.client.select(c).from(i.as("combined_entities")).where(D(e`combined_entities.scorecards_status = 'OUTDATED'`,e`combined_entities.scorecards_status IS NULL`)).orderBy(e`combined_entities.updated_at ASC`).limit(1).run()).rows[0];return r?O(r):null}async getEntitiesRelations(i={}){const s=this.#t?f(this.#e.client.select(m).from(e`remote.entities_relations`),this.#e.client.select(m).from(y).where(E(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.source_key = ${y.sourceKey}`)))):this.#e.client.select(m).from(y),r=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),o=this.#e.client.select(m).from(s.as("combined_entities_relations")).$dynamic(),_=S(o,{...i,limit:void 0,skip:void 0,after:void 0,before:void 0}),a=this.#e.client.$count(_),u=i.limit||10,d=S(r,{...i,limit:u+1}),[h,T]=await Promise.all([d.run(),a]),N=h.rows,p=N.length>u;return{items:N.slice(0,u).map(w=>C(w)).filter(w=>w!==null),hasMore:p,total:T}}async getEntityRelationById(i){const o=(await(this.#t?f(this.#e.client.select(m).from(e`remote.entities_relations`).where(n(y.id,i)),this.#e.client.select(m).from(y).where(l(n(y.id,i),E(this.#e.client.select({id:m.id}).from(e`remote.entities_relations as remote`).where(e`remote.id = ${y.id}`))))):this.#e.client.select(m).from(y).where(n(y.id,i))).run()).rows[0];return o?C(o):null}async getEntitiesWithRelations(i={}){return this.#s.getEntitiesWithRelations(i)}async getEntityWithRelationsByKey(i,s){return this.#s.getEntityWithRelationsByKey(i,s)}async getRelationsForEntity(i,s,r){return this.#i.getRelationsForEntity(i,s,r)}async getRelatedEntities(i,s={}){return this.#i.getRelatedEntities(i,s)}async getCatalogFilters({entitiesTypes:i=[],emptyFilters:s=[]}){if(!s.length)return{};try{return await this.#r(i),(s.includes("domains")||s.includes("owners"))&&await this.#n(),await this.#o(s)}catch(r){return console.error("Error fetching catalog filters:",r),{}}finally{await this.#l()}}async#r(i){if(this.#t?await this.#e.client.run(e`
2
2
  CREATE TEMP TABLE IF NOT EXISTS temp_combined_entities AS
3
3
  SELECT
4
4
  e.key,
@@ -77,18 +77,13 @@ import{and as l,count as L,eq as n,isNotNull as v,notExists as E,or as D,sql as
77
77
  AND tag.value != ''
78
78
  GROUP BY tag.value
79
79
  `),i.includes("domains")&&r.push(`
80
- SELECT 'domains' as filter_name, tce.key as value, COUNT(DISTINCT tfe.key) as count
80
+ SELECT 'domains' as filter_name, tcr.source_key as value, COUNT(DISTINCT tfe.key) as count
81
81
  FROM temp_combined_relations tcr
82
- INNER JOIN temp_filtered_entities tfe ON (
83
- tfe.key = tcr.source_key OR tfe.key = tcr.target_key
84
- )
85
- INNER JOIN temp_combined_entities tce ON (
86
- (tfe.key = tcr.source_key AND tce.key = tcr.target_key)
87
- OR
88
- (tfe.key = tcr.target_key AND tce.key = tcr.source_key)
89
- )
82
+ INNER JOIN temp_filtered_entities tfe ON tfe.key = tcr.target_key
83
+ INNER JOIN temp_combined_entities tce ON tce.key = tcr.source_key
90
84
  WHERE tce.type = 'domain'
91
- GROUP BY tce.key
85
+ AND tcr.source_to_target_relation = 'hasParts'
86
+ GROUP BY tcr.source_key
92
87
  `),i.includes("owners")&&r.push(`
93
88
  SELECT 'owners' as filter_name, owner_key as value, COUNT(DISTINCT entity_key) as count
94
89
  FROM (
@@ -1 +1 @@
1
- import{logger as r}from"../../tools/notifiers/logger.js";import{DatabaseClient as g}from"./client.js";import{DatabasePathGenerator as p}from"./database-path-generator.js";import{retryAsyncOperation as h}from"./utils/retry-async-operation.js";class u{async initialize({removeExisting:a,baseDbDir:t,runWithPragmaWalWriteOptimization:s,databaseName:o,additionalFolder:l,migrationsFolder:c}){r.info("Initializing local database client...");const m=r.startTiming(),{databasePath:e}=await p.prepareDatabasePath({baseDir:t,databaseName:o,additionalFolder:l,removeExisting:a}),n={url:`file:${e}`},i=await g.init(n,{runWithPragmaWalWriteOptimization:s});return await i.migrate(t,c),r.infoTime(m,"Local database client initialized"),{client:i,path:e}}}class w{#t;#a;constructor(a){this.#t=a?.skipLogs??!1,this.#a=this.#t?void 0:r}async initialize({removeExisting:a,baseDbDir:t,syncUrl:s,authToken:o,databaseName:l,additionalFolder:c,migrationsFolder:m}){this.#a?.info("Initializing remote database client...");const e=this.#a?.startTiming();return await h(async()=>{const{databasePath:n}=await p.prepareDatabasePath({baseDir:t,databaseName:l,additionalFolder:c,removeExisting:a}),i=await g.init({url:`file:${n}`,syncUrl:s,authToken:o});return await i.migrate(t,m),this.#a?.infoTime(e??"","Remote database client initialized"),{client:i,path:n}},{maxRetries:3,retryStrategy:"exponential",delay:1e3,logger:this.#a,messages:{retry:"Retrying remote database client initialization",maxRetriesReached:"Max retries reached, remote database client initialization failed"}})}}export{u as LocalDatabaseInitializationStrategy,w as RemoteDatabaseInitializationStrategy};
1
+ import{logger as n}from"../../tools/notifiers/logger.js";import{DatabaseClient as g}from"./client.js";import{DatabasePathGenerator as p}from"./database-path-generator.js";import{retryAsyncOperation as f}from"./utils/retry-async-operation.js";import{SqldNotRunningError as d}from"./sqld-not-running-error.js";class R{async initialize({removeExisting:i,baseDbDir:a,runWithPragmaWalWriteOptimization:o,databaseName:s,additionalFolder:l,migrationsFolder:c}){n.info("Initializing local database client...");const m=n.startTiming(),{databasePath:r}=await p.prepareDatabasePath({baseDir:a,databaseName:s,additionalFolder:l,removeExisting:i}),t={url:`file:${r}`},e=await g.init(t,{runWithPragmaWalWriteOptimization:o});return await e.migrate(a,c),n.infoTime(m,"Local database client initialized"),{client:e,path:r}}}class x{#i;#t;constructor(i){this.#i=i?.skipLogs??!1,this.#t=this.#i?void 0:n}async initialize({removeExisting:i,baseDbDir:a,syncUrl:o,authToken:s,databaseName:l,additionalFolder:c,migrationsFolder:m}){this.#t?.info("Initializing remote database client...");const r=this.#t?.startTiming();return await f(async()=>{try{const{databasePath:t}=await p.prepareDatabasePath({baseDir:a,databaseName:l,additionalFolder:c,removeExisting:i}),e=await g.init({url:`file:${t}`,syncUrl:o,authToken:s});return await e.migrate(a,m),this.#t?.infoTime(r??"","Remote database client initialized"),{client:e,path:t}}catch(t){throw d.isSqldNotRunningError(t)?new d("SQLD server is not running yet, wait for production deployment",{cause:t}):t}},{maxRetries:3,retryStrategy:"exponential",delay:1e3,logger:this.#t,messages:{retry:"Retrying remote database client initialization",maxRetriesReached:"Max retries reached, remote database client initialization failed"}})}}export{R as LocalDatabaseInitializationStrategy,x as RemoteDatabaseInitializationStrategy};
@@ -0,0 +1,5 @@
1
+ export declare class SqldNotRunningError extends Error {
2
+ constructor(message: string, options?: ErrorOptions);
3
+ static isSqldNotRunningError(error: unknown): boolean;
4
+ }
5
+ //# sourceMappingURL=sqld-not-running-error.d.ts.map
@@ -0,0 +1 @@
1
+ class e extends Error{constructor(r,n){super(r,n),this.name="SqldNotRunningError"}static isSqldNotRunningError(r){return r instanceof Error?r.message.includes('CREATE TABLE IF NOT EXISTS "__drizzle_migrations"')||r.message.includes("sync error: connection error:"):!1}}export{e as SqldNotRunningError};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/realm",
3
- "version": "0.129.0",
3
+ "version": "0.129.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -33,7 +33,7 @@
33
33
  "@opentelemetry/semantic-conventions": "1.34.0",
34
34
  "@redocly/ajv": "8.17.1",
35
35
  "@redocly/openapi-core": "2.14.3",
36
- "@shikijs/transformers": "^1.22.2",
36
+ "@shikijs/transformers": "3.21.0",
37
37
  "@tanstack/react-query": "5.62.3",
38
38
  "@tanstack/react-table": "8.21.3",
39
39
  "@tanstack/react-virtual": "3.13.0",
@@ -79,7 +79,7 @@
79
79
  "react-select": "5.10.1",
80
80
  "reactjs-popup": "2.0.6",
81
81
  "semver": "7.7.3",
82
- "shiki": "1.24.4",
82
+ "shiki": "3.21.0",
83
83
  "simple-git": "3.20.0",
84
84
  "sitemap": "7.1.1",
85
85
  "stream-http": "3.2.0",
@@ -93,14 +93,14 @@
93
93
  "xml-crypto": "6.0.1",
94
94
  "xpath": "0.0.34",
95
95
  "yaml-ast-parser": "0.0.43",
96
+ "@redocly/asyncapi-docs": "1.6.1",
96
97
  "@redocly/config": "0.41.2",
97
- "@redocly/asyncapi-docs": "1.6.0",
98
- "@redocly/openapi-docs": "3.17.0",
99
- "@redocly/realm-asyncapi-sdk": "0.7.0",
100
- "@redocly/theme": "0.61.0",
101
98
  "@redocly/graphql-docs": "1.6.0",
102
- "@redocly/portal-plugin-mock-server": "0.14.0",
103
- "@redocly/portal-legacy-ui": "0.12.0"
99
+ "@redocly/openapi-docs": "3.17.1",
100
+ "@redocly/portal-legacy-ui": "0.12.0",
101
+ "@redocly/portal-plugin-mock-server": "0.14.1",
102
+ "@redocly/realm-asyncapi-sdk": "0.7.0",
103
+ "@redocly/theme": "0.61.1"
104
104
  },
105
105
  "peerDependencies": {
106
106
  "react": "19.2.3",