@redocly/realm 0.129.0-next.0 → 0.129.0-next.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.
Files changed (34) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/client/app/Sidebar/useBreadcrumbs.js +1 -1
  3. package/dist/client/app/hooks/codeHighlight/json-seq.d.ts +43 -0
  4. package/dist/client/app/hooks/codeHighlight/json-seq.js +1 -0
  5. package/dist/client/app/hooks/codeHighlight/map-lang.js +1 -1
  6. package/dist/client/app/hooks/codeHighlight/multipart-mixed.d.ts +40 -0
  7. package/dist/client/app/hooks/codeHighlight/multipart-mixed.js +1 -0
  8. package/dist/client/app/hooks/codeHighlight/useCodeHighlight.js +1 -1
  9. package/dist/server/plugins/search/documents/search-documents.js +1 -1
  10. package/dist/server/providers/database/copy-migrations.js +1 -1
  11. package/dist/server/providers/database/databases/main-sqlite/migrations/0005_recreate-scorecards-config.sql +25 -0
  12. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +7 -0
  13. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.d.ts +65 -14
  14. package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.js +1 -1
  15. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0005_recreate-scorecards-tables.sql +87 -0
  16. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/_journal.json +7 -0
  17. package/dist/server/providers/database/databases/sqld-sqlite/schemas/{scorecard-result-states-table.d.ts → scorecards-evaluation-runs-table.d.ts} +61 -65
  18. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecards-evaluation-runs-table.js +1 -0
  19. package/dist/server/providers/database/databases/sqld-sqlite/schemas/{scorecard-result-levels-table.d.ts → scorecards-level-results-table.d.ts} +28 -60
  20. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecards-level-results-table.js +1 -0
  21. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecards-levels-rules-results-table.d.ts +67 -0
  22. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecards-levels-rules-results-table.js +1 -0
  23. package/dist/server/providers/database/databases/sqld-sqlite/schemas/{scorecard-results-table.d.ts → scorecards-results-table.d.ts} +80 -46
  24. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecards-results-table.js +1 -0
  25. package/dist/server/providers/database/databases/sqld-sqlite/schemas/{scorecard-evaluations-table.d.ts → scorecards-rule-results-table.d.ts} +29 -31
  26. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecards-rule-results-table.js +1 -0
  27. package/dist/server/utils/envs/get-api-route-allowed-env-variables.js +1 -1
  28. package/package.json +7 -7
  29. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-evaluations-table.js +0 -1
  30. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-level-states-table.d.ts +0 -48
  31. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-level-states-table.js +0 -1
  32. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-levels-table.js +0 -1
  33. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-states-table.js +0 -1
  34. package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-results-table.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @redocly/realm
2
2
 
3
+ ## 0.129.0-next.1
4
+
5
+ ### Minor Changes
6
+
7
+ - eb3abbb06e: Added support for OpenAPI 3.2 Sequential and Streaming Data.
8
+
9
+ ### Patch Changes
10
+
11
+ - edb34c5f33: Fixed an issue where breadcrumbs appeared on non-nested pages in projects with a path prefix.
12
+ - 743e6e5736: Fixed an issue where the product picker was not properly aligned in the navbar.
13
+ - Updated dependencies [edb34c5f33]
14
+ - Updated dependencies [eb3abbb06e]
15
+ - Updated dependencies [de9da5f2778]
16
+ - Updated dependencies [743e6e5736]
17
+ - @redocly/theme@0.61.0-next.1
18
+ - @redocly/portal-plugin-mock-server@0.14.0-next.1
19
+ - @redocly/openapi-docs@3.17.0-next.1
20
+ - @redocly/realm-asyncapi-sdk@0.7.0-next.1
21
+ - @redocly/asyncapi-docs@1.6.0-next.1
22
+ - @redocly/graphql-docs@1.6.0-next.0
23
+
3
24
  ## 0.129.0-next.0
4
25
 
5
26
  ### Patch Changes
@@ -1 +1 @@
1
- import{useMemo as k}from"react";import{useLocation as T}from"react-router-dom";import{useThemeConfig as y}from"@redocly/theme/core/hooks";import{usePageVersions as K,useTranslate as g,usePageSharedData as d}from"../hooks";import{useSidebarItems as v}from"./useSidebarItems";function A(){const a=d("sidebar")?.relatedNavbarItem,n=d("current-catalog-info"),l=y(),{translate:r}=g(),{versions:e=[]}=K()||{},c=e.find(b=>b?.active),{allSidebarItems:i}=v(c),t=T().pathname,o=n?.item,s=n?.catalog,m=l.breadcrumbs?.prefixItems,f=l.breadcrumbs?.hide;return k(()=>{const b=B({allSidebarItems:i,pathname:t,catalogItemInfo:o,relatedNavbarItem:a,catalogInfo:s,prefixItems:m,hide:f,translate:r}),h=x(i,b);return{breadcrumbs:b,currentItemSiblings:h}},[t,a,i,o,s,m,f,r])}const B=({allSidebarItems:a=[],pathname:n,catalogItemInfo:l,relatedNavbarItem:r,catalogInfo:e,prefixItems:c,hide:i,translate:u})=>{if(i===!0)return[];const t=p(a);if(t.length===0)return[];if(l){const o=t[t.length-1];o&&o.label!==l.label&&t.unshift({label:l.label,link:l.link})}if(r&&r.label!==t[0].label&&t.unshift(r),e&&t.unshift({label:u(e.labelTranslationKey,e.label),labelTranslationKey:e.labelTranslationKey,link:e.link,icon:e.icon}),c?.length){const o=c.map(s=>({label:u(s.labelTranslationKey,s.label),labelTranslationKey:s.labelTranslationKey,link:s.link,icon:s.icon}));t.unshift(...o)}return t.length===1&&(!t[0]?.link||t[0]?.link===n)?[]:t},x=(a,n)=>{if(n.length===0)return[];const l=(e,c)=>{for(const i of e){if(i.active)return{item:i,parent:c};if(i.items?.length){const u=l(i.items,i);if(u)return u}}},r=l(a);return r?.parent?r.parent.items?.filter(e=>!!(e.link&&e.link!==r.item.link&&e.label)).map(e=>({label:e.label,labelTranslationKey:e.labelTranslationKey,link:e.link,icon:e.icon}))||[]:[]},p=a=>{const n=a.find(({active:r,hasActiveSubItem:e})=>r||e);if(!n?.label)return[];const l={label:n.label,labelTranslationKey:n.labelTranslationKey,link:n.link,icon:n.icon};return n.type==="group"&&n.selectFirstItemOnExpand&&n.items?.[0]?.link&&(l.link=n.items[0].link),n.items?.length||(l.link=void 0),[l,...p(n.items||[])]};export{B as generateBreadcrumbs,x as generateSiblings,A as useBreadcrumbs};
1
+ import{useMemo as k}from"react";import{useLocation as T}from"react-router-dom";import{useThemeConfig as y}from"@redocly/theme/core/hooks";import{withoutPathPrefix as K}from"@redocly/theme/core/utils";import{usePageVersions as g,useTranslate as v,usePageSharedData as d}from"../hooks";import{useSidebarItems as x}from"./useSidebarItems";function D(){const a=d("sidebar")?.relatedNavbarItem,n=d("current-catalog-info"),r=y(),{translate:l}=v(),{versions:e=[]}=g()||{},c=e.find(m=>m?.active),{allSidebarItems:i}=x(c),t=T().pathname,o=n?.item,s=n?.catalog,b=r.breadcrumbs?.prefixItems,f=r.breadcrumbs?.hide;return k(()=>{const m=B({allSidebarItems:i,pathname:K(t),catalogItemInfo:o,relatedNavbarItem:a,catalogInfo:s,prefixItems:b,hide:f,translate:l}),p=S(i,m);return{breadcrumbs:m,currentItemSiblings:p}},[t,a,i,o,s,b,f,l])}const B=({allSidebarItems:a=[],pathname:n,catalogItemInfo:r,relatedNavbarItem:l,catalogInfo:e,prefixItems:c,hide:i,translate:u})=>{if(i===!0)return[];const t=h(a);if(t.length===0)return[];if(r){const o=t[t.length-1];o&&o.label!==r.label&&t.unshift({label:r.label,link:r.link})}if(l&&l.label!==t[0].label&&t.unshift(l),e&&t.unshift({label:u(e.labelTranslationKey,e.label),labelTranslationKey:e.labelTranslationKey,link:e.link,icon:e.icon}),c?.length){const o=c.map(s=>({label:u(s.labelTranslationKey,s.label),labelTranslationKey:s.labelTranslationKey,link:s.link,icon:s.icon}));t.unshift(...o)}return t.length===1&&(!t[0]?.link||t[0]?.link===n)?[]:t},S=(a,n)=>{if(n.length===0)return[];const r=(e,c)=>{for(const i of e){if(i.active)return{item:i,parent:c};if(i.items?.length){const u=r(i.items,i);if(u)return u}}},l=r(a);return l?.parent?l.parent.items?.filter(e=>!!(e.link&&e.link!==l.item.link&&e.label)).map(e=>({label:e.label,labelTranslationKey:e.labelTranslationKey,link:e.link,icon:e.icon}))||[]:[]},h=a=>{const n=a.find(({active:l,hasActiveSubItem:e})=>l||e);if(!n?.label)return[];const r={label:n.label,labelTranslationKey:n.labelTranslationKey,link:n.link,icon:n.icon};return n.type==="group"&&n.selectFirstItemOnExpand&&n.items?.[0]?.link&&(r.link=n.items[0].link),n.items?.length||(r.link=void 0),[r,...h(n.items||[])]};export{B as generateBreadcrumbs,S as generateSiblings,D as useBreadcrumbs};
@@ -0,0 +1,43 @@
1
+ declare const _default: (import("shiki").LanguageRegistration | {
2
+ displayName: string;
3
+ name: string;
4
+ scopeName: string;
5
+ patterns: {
6
+ include: string;
7
+ }[];
8
+ repository: {
9
+ 'json-seq-record': {
10
+ comment: string;
11
+ begin: string;
12
+ end: string;
13
+ beginCaptures: {
14
+ '1': {
15
+ name: string;
16
+ };
17
+ };
18
+ endCaptures: {
19
+ '1': {
20
+ name: string;
21
+ };
22
+ };
23
+ patterns: {
24
+ comment: string;
25
+ begin: string;
26
+ end: string;
27
+ patterns: {
28
+ include: string;
29
+ }[];
30
+ }[];
31
+ };
32
+ 'record-separator': {
33
+ match: string;
34
+ name: string;
35
+ };
36
+ 'line-feed': {
37
+ match: string;
38
+ name: string;
39
+ };
40
+ };
41
+ })[];
42
+ export default _default;
43
+ //# sourceMappingURL=json-seq.d.ts.map
@@ -0,0 +1 @@
1
+ import e from"shiki/langs/json.mjs";const o={displayName:"JSON Sequence",name:"json-seq",scopeName:"source.json-seq",patterns:[{include:"#json-seq-record"}],repository:{"json-seq-record":{comment:"Match a complete json-seq record: 0x1E{...}0x0A",begin:"(0x1E)",end:"(0x0A)",beginCaptures:{1:{name:"keyword.control.record-separator.json-seq"}},endCaptures:{1:{name:"keyword.control.line-feed.json-seq"}},patterns:[{comment:"Highlight JSON content between separators",begin:"(?<=0x1E)(?=[\\[\\{])",end:"(?=0x0A)",patterns:[{include:"source.json"}]}]},"record-separator":{match:"0x1E",name:"keyword.control.record-separator.json-seq"},"line-feed":{match:"0x0A",name:"keyword.control.line-feed.json-seq"}}};var r=[...e,o];export{r as default};
@@ -1 +1 @@
1
- function a(c){return{"c++":"c",cpp:"c",jsx:"tsx","c#":"csharp","c#+newtonsoft":"csharp","java8+apache":"java",objectivec:"objective-c",shell:"bash",viml:"vim",curl:"bash","node.js":"js"}[c]||c}export{a as mapLang};
1
+ function c(s){return{"c++":"c",cpp:"c",jsx:"tsx","c#":"csharp","c#+newtonsoft":"csharp","java8+apache":"java",objectivec:"objective-c",shell:"bash",viml:"vim",curl:"bash","node.js":"js","multipart/mixed":"multipart-mixed","application/json-seq":"json-seq","json-seq":"json-seq"}[s]||s}export{c as mapLang};
@@ -0,0 +1,40 @@
1
+ declare const _default: (import("shiki").LanguageRegistration | {
2
+ displayName: string;
3
+ name: string;
4
+ scopeName: string;
5
+ patterns: {
6
+ include: string;
7
+ }[];
8
+ repository: {
9
+ boundary: {
10
+ match: string;
11
+ name: string;
12
+ };
13
+ headers: {
14
+ match: string;
15
+ captures: {
16
+ '1': {
17
+ name: string;
18
+ };
19
+ '2': {
20
+ name: string;
21
+ };
22
+ };
23
+ };
24
+ 'json-body': {
25
+ comment: string;
26
+ begin: string;
27
+ end: string;
28
+ patterns: {
29
+ include: string;
30
+ }[];
31
+ };
32
+ 'binary-body': {
33
+ comment: string;
34
+ match: string;
35
+ name: string;
36
+ };
37
+ };
38
+ })[];
39
+ export default _default;
40
+ //# sourceMappingURL=multipart-mixed.d.ts.map
@@ -0,0 +1 @@
1
+ import t from"shiki/langs/css.mjs";import r from"shiki/langs/graphql.mjs";import a from"shiki/langs/html.mjs";import e from"shiki/langs/javascript.mjs";import o from"shiki/langs/json.mjs";import m from"shiki/langs/sql.mjs";import i from"shiki/langs/xml.mjs";import n from"shiki/langs/yaml.mjs";const s={displayName:"Multipart Mixed",name:"multipart-mixed",scopeName:"source.multipart",patterns:[{include:"#boundary"},{include:"#headers"},{include:"#json-body"},{include:"#binary-body"}],repository:{boundary:{match:"^--[a-zA-Z0-9_\\-\\.]+(?:--)?$",name:"keyword.control.boundary.multipart"},headers:{match:"^([a-zA-Z0-9\\-]+):\\s*(.*)$",captures:{1:{name:"variable.other.header.name.multipart"},2:{name:"string.unquoted.header.value.multipart"}}},"json-body":{comment:"Detects if a block starts with { or [ and highlights it as JSON until the next boundary",begin:"^\\s*(?=[{\\[])",end:"(?=^--)",patterns:[{include:"source.json"}]},"binary-body":{comment:"Catch-all for content that isn't headers or JSON",match:".+",name:"text.plain"}}};var f=[...o,...a,...i,...e,...t,...n,...r,...m,s];export{f as default};
@@ -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 L from"shiki/langs/html.mjs";import _ from"shiki/langs/http.mjs";import x from"shiki/langs/java.mjs";import T from"shiki/langs/javascript.mjs";import j 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 A from"shiki/langs/php.mjs";import D from"shiki/langs/python.mjs";import F from"shiki/langs/scala.mjs";import R from"shiki/langs/sql.mjs";import a from"shiki/langs/swift.mjs";import S 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{transformerNotationDiff as V,transformerNotationHighlight as $,transformerNotationWordHighlight as z,transformerNotationFocus as B,transformerNotationErrorLevel as I,transformerMetaHighlight as K,transformerMetaWordHighlight as O,transformerRemoveNotationEscape as P}from"@shikijs/transformers";import{createHighlighterCoreSync as s}from"shiki/core";import{createJavaScriptRegexEngine as n}from"shiki/engine/javascript";import Q from"./ruby";import f from"./theme";import X from"./treeview-transformer";import Y from"./node-transformer";import Z from"./line-numbers-transformer";import{mapLang as rr}from"./map-lang";const or=[{...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,L,_,x,T,j,E,r,M,q,A,D,Q,F,R,a,S,W,G,C,J,or,U],engine:n()}),tr=[V(),$(),z(),B(),I(),K(),O(),P(),Y()],mr=(o,m,h)=>{const{withLineNumbers:g,startLineNumber:l,highlight:d,customTransformer:e}=h||{},i=rr(m?.toLowerCase()||p),t={lang:i,theme:"theme",meta:{__raw:d},transformers:[...i==="treeview"?[X()]:[],...tr,...g?[Z(l)]:[],...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 Jr(){return{highlight:mr}}export{mr as highlight,Jr as useCodeHighlight};
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 +1 @@
1
- import{REDOCLY_ROUTE_RBAC as D,REDOCLY_TEAMS_RBAC as p}from"@redocly/config";import{existsSync as E}from"fs";import{rm as _}from"node:fs/promises";import{DEFAULT_LOCALE_PLACEHOLDER as w}from"../../../../constants/common.js";import{SEARCH_DATA_EXPORT_FOLDER as T}from"../../../constants/plugins/search.js";import{isBuildMode as h}from"../../../utils/envs/is-build-mode.js";import{logger as c}from"../../../tools/notifiers/logger.js";import{telemetry as b}from"../../../telemetry/index.js";import{extractTeamsForSearch as O,getRbacTeamsForSearch as $}from"../../../utils/index.js";import{getSearchDocumentGroup as M}from"../utils.js";async function G(S,t,f){c.info("Preparing search documents and create indexes..."),h()&&E(`${t.outdir}/${T}`)&&await _(`${t.outdir}/${T}`,{recursive:!0});const F=c.startTiming(),R=t.getConfig().rbac,v=[w,...S.localeFolders.map(s=>s.toLowerCase())];for(const s of v){const i=t.getAllRoutesForLocale(s);for(const r of i){if(r.excludeFromSearch)continue;const d=new Map,{product:n}=r,A=await r.getStaticData?.(r,{...t,contentDir:t.contentDir,parseMarkdoc:(a,e,u)=>t.parseMarkdoc(a,e,u)})||{},m=await r.getSearchDocuments?.(r,{...A,[p]:r[p],[D]:r[D]},t),o=r.versions?.find(a=>a.active),C=$(r,R??{});if(m&&m.length)for(const a in m){let e=m[a];const u=O(e?.[p]),g=u?.length?u:C,L=e.tags||[];e={...e,...o&&{version:o.version,isDefaultVersion:o.default,versionFolderId:o.folderId},...n&&{product:n},rbacTeams:g,tags:[...L,...g,...o?o.default?["v:default"]:[`v:${o.folderId}:${o.version}`]:["v:default"],...n?[`p:${n.name}`]:[]],url:e.url&&(e.path&&e.path.length>1?e.url:e.url.split("#")[0])};const l=M(e.facets);if(l){const x=d.get(l)??[];d.set(l,[...x,e])}}for(const[a,e]of d)await f.addDocuments(e,{locale:s,group:a,outDir:t.outdir})}}if(f.cleanupFacetValues(t),c.infoTime(F,"Search indexes created"),h()){c.info("Writing out search data...");const s=c.startTiming();await f.export(t.outdir);const i=c.infoTime(s,"Search data written");i&&b.sendTimingPerformedMessage(i)}}export{G as prepareSearchDocuments};
1
+ import{REDOCLY_ROUTE_RBAC as T,REDOCLY_TEAMS_RBAC as p}from"@redocly/config";import{existsSync as O}from"fs";import{rm as $}from"node:fs/promises";import{DEFAULT_LOCALE_PLACEHOLDER as y}from"../../../../constants/common.js";import{SEARCH_DATA_EXPORT_FOLDER as S}from"../../../constants/plugins/search.js";import{isBuildMode as A}from"../../../utils/envs/is-build-mode.js";import{logger as n}from"../../../tools/notifiers/logger.js";import{extractTeamsForSearch as M,getRbacTeamsForSearch as P}from"../../../utils/index.js";import{getSearchDocumentGroup as B}from"../utils.js";import{telemetry as I}from"../../../../cli/telemetry/index.js";import{telemetryTraceStep as _}from"../../../../cli/telemetry/helpers/trace-step.js";async function J(b,t,l){await _("build.plugin.search.prepare_search_documents",async()=>{n.info("Preparing search documents and create indexes..."),A()&&O(`${t.outdir}/${S}`)&&await $(`${t.outdir}/${S}`,{recursive:!0});const F=n.startTiming(),R=t.getConfig().rbac,v=[y,...b.localeFolders.map(a=>a.toLowerCase())];for(const a of v)await _("build.plugin.search.prepare_search_documents.locale",async s=>{const w=t.getAllRoutesForLocale(a);let g=0,h=0;for(const r of w){if(g++,r.excludeFromSearch)continue;const f=new Map,{product:m}=r,C=await r.getStaticData?.(r,{...t,contentDir:t.contentDir,parseMarkdoc:(c,e,u)=>t.parseMarkdoc(c,e,u)})||{},i=await r.getSearchDocuments?.(r,{...C,[p]:r[p],[T]:r[T]},t),o=r.versions?.find(c=>c.active),L=P(r,R??{});if(i){if(i&&i.length){h+=i.length;for(const c in i){let e=i[c];const u=M(e?.[p]),D=u?.length?u:L,x=e.tags||[];e={...e,...o&&{version:o.version,isDefaultVersion:o.default,versionFolderId:o.folderId},...m&&{product:m},rbacTeams:D,tags:[...x,...D,...o?o.default?["v:default"]:[`v:${o.folderId}:${o.version}`]:["v:default"],...m?[`p:${m.name}`]:[]],url:e.url&&(e.path&&e.path.length>1?e.url:e.url.split("#")[0])};const d=B(e.facets);if(d){const E=f.get(d)??[];f.set(d,[...E,e])}}}for(const[c,e]of f)await l.addDocuments(e,{locale:a,group:c,outDir:t.outdir})}}s?.setAttribute("locale",a),s?.setAttribute("totalDocuments",g),s?.setAttribute("totalSearchDocuments",h)});if(l.cleanupFacetValues(t),n.infoTime(F,"Search indexes created"),A()){n.info("Writing out search data...");const a=n.startTiming();await l.export(t.outdir);const s=n.infoTime(a,"Search data written");s&&I.sendTimingPerformedMessage(s)}})}export{J as prepareSearchDocuments};
@@ -1 +1 @@
1
- import c from"node:path";import{cpSync as m,existsSync as e,mkdirSync as l}from"node:fs";import{logger as t}from"../../tools/notifiers/logger.js";import{fromCurrentDir as f}from"../../utils/index.js";const y=r=>{const s=["catalog-sqlite","main-sqlite","sqld-sqlite"];for(const i of s){const o=f(import.meta.url,`./databases/${i}/migrations`),a=c.join(r.serverOutDir,"migrations",i);if(!e(o)){t.warn(`Migrations folder not found at ${o}`);continue}e(r.serverOutDir)||l(r.serverOutDir,{recursive:!0});try{m(o,a,{recursive:!0}),t.info("Successfully copied migrations")}catch(n){t.error("Failed to copy migrations folder: %s",n)}}};export{y as copyMigrationsFolder};
1
+ import c from"node:path";import{cpSync as m,existsSync as t,mkdirSync as l}from"node:fs";import{logger as i}from"../../tools/notifiers/logger.js";import{fromCurrentDir as d}from"../../utils/index.js";import{PACKAGE_NAME as f}from"../../../config/product-gates.js";const u=["@redocly/realm","@redocly/reef","@redocly/redoc-reef","@redocly/revel-reef"],D=r=>{if(!u.includes(f))return;const s=["catalog-sqlite","main-sqlite","sqld-sqlite"];for(const o of s){const e=d(import.meta.url,`./databases/${o}/migrations`),a=c.join(r.serverOutDir,"migrations",o);if(!t(e)){i.warn(`Migrations folder not found at ${e}`);continue}t(r.serverOutDir)||l(r.serverOutDir,{recursive:!0});try{m(e,a,{recursive:!0})}catch(n){i.error("Failed to copy migrations folder: %s",n)}}};export{D as copyMigrationsFolder};
@@ -0,0 +1,25 @@
1
+ -- Drop old scorecards_config table
2
+ DROP TABLE IF EXISTS `scorecards_config`;--> statement-breakpoint
3
+
4
+ -- Create new scorecards_config table with updated schema
5
+ CREATE TABLE `scorecards_config` (
6
+ `id` text PRIMARY KEY NOT NULL,
7
+ `key` text NOT NULL,
8
+ `slug` text NOT NULL,
9
+ `name` text NOT NULL,
10
+ `description` text,
11
+ `entities_filter` text NOT NULL,
12
+ `levels` text NOT NULL,
13
+ `config_hash` text NOT NULL,
14
+ `archived_at` integer,
15
+ `created_at` integer NOT NULL,
16
+ `updated_at` integer NOT NULL
17
+ );--> statement-breakpoint
18
+
19
+ -- Create indexes for scorecards_config
20
+ -- Note: key and slug are NOT unique - allows recreating archived configs with same key/slug
21
+ CREATE INDEX `idx_config_key` ON `scorecards_config` (`key`);--> statement-breakpoint
22
+ CREATE INDEX `idx_config_slug` ON `scorecards_config` (`slug`);--> statement-breakpoint
23
+ CREATE INDEX `idx_config_hash` ON `scorecards_config` (`config_hash`);--> statement-breakpoint
24
+ CREATE INDEX `idx_config_archived` ON `scorecards_config` (`archived_at`);
25
+
@@ -36,6 +36,13 @@
36
36
  "when": 1764258557093,
37
37
  "tag": "0004_add-scorecards-tables",
38
38
  "breakpoints": true
39
+ },
40
+ {
41
+ "idx": 5,
42
+ "version": "6",
43
+ "when": 1765477755000,
44
+ "tag": "0005_recreate-scorecards-config",
45
+ "breakpoints": true
39
46
  }
40
47
  ]
41
48
  }
@@ -21,6 +21,25 @@ export declare const scorecardsConfigTable: import("drizzle-orm/sqlite-core").SQ
21
21
  }, {}, {
22
22
  length: number | undefined;
23
23
  }>;
24
+ key: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
+ name: "key";
26
+ tableName: "scorecards_config";
27
+ dataType: "string";
28
+ columnType: "SQLiteText";
29
+ data: string;
30
+ driverParam: string;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: [string, ...string[]];
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {
41
+ length: number | undefined;
42
+ }>;
24
43
  slug: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
44
  name: "slug";
26
45
  tableName: "scorecards_config";
@@ -78,15 +97,15 @@ export declare const scorecardsConfigTable: import("drizzle-orm/sqlite-core").SQ
78
97
  }, {}, {
79
98
  length: number | undefined;
80
99
  }>;
81
- entities: import("drizzle-orm/sqlite-core").SQLiteColumn<{
82
- name: "entities";
100
+ entitiesFilter: import("drizzle-orm/sqlite-core").SQLiteColumn<{
101
+ name: "entities_filter";
83
102
  tableName: "scorecards_config";
84
103
  dataType: "string";
85
104
  columnType: "SQLiteText";
86
105
  data: string;
87
106
  driverParam: string;
88
107
  notNull: true;
89
- hasDefault: true;
108
+ hasDefault: false;
90
109
  isPrimaryKey: false;
91
110
  isAutoincrement: false;
92
111
  hasRuntimeDefault: false;
@@ -105,7 +124,7 @@ export declare const scorecardsConfigTable: import("drizzle-orm/sqlite-core").SQ
105
124
  data: string;
106
125
  driverParam: string;
107
126
  notNull: true;
108
- hasDefault: true;
127
+ hasDefault: false;
109
128
  isPrimaryKey: false;
110
129
  isAutoincrement: false;
111
130
  hasRuntimeDefault: false;
@@ -116,8 +135,8 @@ export declare const scorecardsConfigTable: import("drizzle-orm/sqlite-core").SQ
116
135
  }, {}, {
117
136
  length: number | undefined;
118
137
  }>;
119
- createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
120
- name: "created_at";
138
+ configHash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
139
+ name: "config_hash";
121
140
  tableName: "scorecards_config";
122
141
  dataType: "string";
123
142
  columnType: "SQLiteText";
@@ -135,25 +154,57 @@ export declare const scorecardsConfigTable: import("drizzle-orm/sqlite-core").SQ
135
154
  }, {}, {
136
155
  length: number | undefined;
137
156
  }>;
157
+ archivedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
158
+ name: "archived_at";
159
+ tableName: "scorecards_config";
160
+ dataType: "number";
161
+ columnType: "SQLiteInteger";
162
+ data: number;
163
+ driverParam: number;
164
+ notNull: false;
165
+ hasDefault: false;
166
+ isPrimaryKey: false;
167
+ isAutoincrement: false;
168
+ hasRuntimeDefault: false;
169
+ enumValues: undefined;
170
+ baseColumn: never;
171
+ identity: undefined;
172
+ generated: undefined;
173
+ }, {}, {}>;
174
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
175
+ name: "created_at";
176
+ tableName: "scorecards_config";
177
+ dataType: "number";
178
+ columnType: "SQLiteInteger";
179
+ data: number;
180
+ driverParam: number;
181
+ notNull: true;
182
+ hasDefault: false;
183
+ isPrimaryKey: false;
184
+ isAutoincrement: false;
185
+ hasRuntimeDefault: false;
186
+ enumValues: undefined;
187
+ baseColumn: never;
188
+ identity: undefined;
189
+ generated: undefined;
190
+ }, {}, {}>;
138
191
  updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
139
192
  name: "updated_at";
140
193
  tableName: "scorecards_config";
141
- dataType: "string";
142
- columnType: "SQLiteText";
143
- data: string;
144
- driverParam: string;
194
+ dataType: "number";
195
+ columnType: "SQLiteInteger";
196
+ data: number;
197
+ driverParam: number;
145
198
  notNull: true;
146
199
  hasDefault: false;
147
200
  isPrimaryKey: false;
148
201
  isAutoincrement: false;
149
202
  hasRuntimeDefault: false;
150
- enumValues: [string, ...string[]];
203
+ enumValues: undefined;
151
204
  baseColumn: never;
152
205
  identity: undefined;
153
206
  generated: undefined;
154
- }, {}, {
155
- length: number | undefined;
156
- }>;
207
+ }, {}, {}>;
157
208
  };
158
209
  dialect: "sqlite";
159
210
  }>;
@@ -1 +1 @@
1
- import{sqliteTable as t,text as e}from"drizzle-orm/sqlite-core";const o=t("scorecards_config",{id:e("id").primaryKey(),slug:e("slug").notNull(),name:e("name").notNull(),description:e("description"),entities:e("entities").notNull().default("{}"),levels:e("levels").notNull().default("{}"),createdAt:e("created_at").notNull(),updatedAt:e("updated_at").notNull()});export{o as scorecardsConfigTable};
1
+ import{sqliteTable as o,text as e,integer as n,index as t}from"drizzle-orm/sqlite-core";const c=o("scorecards_config",{id:e("id").primaryKey().notNull(),key:e("key").notNull(),slug:e("slug").notNull(),name:e("name").notNull(),description:e("description"),entitiesFilter:e("entities_filter").notNull(),levels:e("levels").notNull(),configHash:e("config_hash").notNull(),archivedAt:n("archived_at"),createdAt:n("created_at").notNull(),updatedAt:n("updated_at").notNull()},i=>[t("idx_config_key").on(i.key),t("idx_config_slug").on(i.slug),t("idx_config_hash").on(i.configHash),t("idx_config_archived").on(i.archivedAt)]);export{c as scorecardsConfigTable};
@@ -0,0 +1,87 @@
1
+ -- Drop all old scorecard tables
2
+ DROP TABLE IF EXISTS `scorecard_result_level_states`;--> statement-breakpoint
3
+ DROP TABLE IF EXISTS `scorecard_result_levels`;--> statement-breakpoint
4
+ DROP TABLE IF EXISTS `scorecard_result_states`;--> statement-breakpoint
5
+ DROP TABLE IF EXISTS `scorecard_results`;--> statement-breakpoint
6
+ DROP TABLE IF EXISTS `scorecard_evaluations`;--> statement-breakpoint
7
+
8
+ -- Create scorecards_results table (renamed from scorecard_results)
9
+ CREATE TABLE `scorecards_results` (
10
+ `id` text PRIMARY KEY NOT NULL,
11
+ `entity_id` text NOT NULL,
12
+ `config_id` text NOT NULL,
13
+ `created_at` integer NOT NULL,
14
+ `evaluated_at` integer NOT NULL,
15
+ `final_score` integer NOT NULL,
16
+ `final_level` text,
17
+ `evaluated_rules` text NOT NULL,
18
+ `rules_config_hash` text NOT NULL,
19
+ `entity_version` text NOT NULL,
20
+ `entity_revision` text
21
+ );--> statement-breakpoint
22
+
23
+ -- Create indexes for scorecards_results
24
+ CREATE UNIQUE INDEX `idx_results_lookup` ON `scorecards_results` (`entity_id`, `config_id`, `created_at` DESC);--> statement-breakpoint
25
+ CREATE INDEX `idx_results_config_time` ON `scorecards_results` (`config_id`, `created_at` DESC);--> statement-breakpoint
26
+ CREATE INDEX `idx_results_entity` ON `scorecards_results` (`entity_id`, `created_at` DESC);--> statement-breakpoint
27
+ CREATE INDEX `idx_results_config_entity_time` ON `scorecards_results` (`config_id`, `entity_id`, `created_at` DESC);--> statement-breakpoint
28
+
29
+ -- Create scorecards_level_results table (renamed from scorecard_result_levels)
30
+ CREATE TABLE `scorecards_level_results` (
31
+ `id` text PRIMARY KEY NOT NULL,
32
+ `result_id` text NOT NULL,
33
+ `level_name` text NOT NULL,
34
+ `score` integer NOT NULL,
35
+ `passed_rules` integer NOT NULL,
36
+ `failed_rules` integer NOT NULL,
37
+ `total_rules` integer NOT NULL,
38
+ `rule_summary` text
39
+ );--> statement-breakpoint
40
+
41
+ -- Create indexes for scorecards_level_results
42
+ CREATE INDEX `idx_level_results_result` ON `scorecards_level_results` (`result_id`);--> statement-breakpoint
43
+ CREATE INDEX `idx_level_results_level` ON `scorecards_level_results` (`level_name`);--> statement-breakpoint
44
+ CREATE INDEX `idx_level_results_result_level` ON `scorecards_level_results` (`result_id`, `level_name`);--> statement-breakpoint
45
+
46
+ -- Create scorecards_rule_results table (renamed from scorecard_result_states)
47
+ CREATE TABLE `scorecards_rule_results` (
48
+ `id` text PRIMARY KEY NOT NULL,
49
+ `rule_name` text NOT NULL,
50
+ `problems_hash` text NOT NULL,
51
+ `state` text NOT NULL,
52
+ `problems` text,
53
+ `first_seen_at` integer NOT NULL
54
+ );--> statement-breakpoint
55
+
56
+ -- Create indexes for scorecards_rule_results
57
+ CREATE UNIQUE INDEX `idx_rules_name_hash` ON `scorecards_rule_results` (`rule_name`, `problems_hash`);--> statement-breakpoint
58
+ CREATE INDEX `idx_rules_state` ON `scorecards_rule_results` (`state`);--> statement-breakpoint
59
+
60
+ -- Create scorecards_levels_rules_results table (renamed from scorecard_result_level_states)
61
+ CREATE TABLE `scorecards_levels_rules_results` (
62
+ `id` text PRIMARY KEY NOT NULL,
63
+ `level_score_id` text NOT NULL,
64
+ `rule_id` text NOT NULL
65
+ );--> statement-breakpoint
66
+
67
+ -- Create indexes for scorecards_levels_rules_results
68
+ CREATE UNIQUE INDEX `idx_rule_problems_level_score_rule` ON `scorecards_levels_rules_results` (`level_score_id`, `rule_id`);--> statement-breakpoint
69
+ CREATE INDEX `idx_rule_problems_level_score` ON `scorecards_levels_rules_results` (`level_score_id`);--> statement-breakpoint
70
+ CREATE INDEX `idx_rule_problems_rule` ON `scorecards_levels_rules_results` (`rule_id`);--> statement-breakpoint
71
+
72
+ -- Create scorecards_evaluation_runs table (renamed from scorecard_evaluations)
73
+ CREATE TABLE `scorecards_evaluation_runs` (
74
+ `id` text PRIMARY KEY NOT NULL,
75
+ `config_id` text NOT NULL,
76
+ `evaluated_at` integer NOT NULL,
77
+ `entities_checked` integer NOT NULL,
78
+ `entities_changed` integer NOT NULL,
79
+ `duration_ms` integer,
80
+ `status` text NOT NULL,
81
+ `error_message` text,
82
+ `entity_id` text
83
+ );--> statement-breakpoint
84
+
85
+ -- Create indexes for scorecards_evaluation_runs
86
+ CREATE INDEX `idx_runs_config_time` ON `scorecards_evaluation_runs` (`config_id`, `evaluated_at` DESC);
87
+
@@ -36,6 +36,13 @@
36
36
  "when": 1764320011908,
37
37
  "tag": "0004_add-scorecards-status",
38
38
  "breakpoints": true
39
+ },
40
+ {
41
+ "idx": 5,
42
+ "version": "6",
43
+ "when": 1765477755000,
44
+ "tag": "0005_recreate-scorecards-tables",
45
+ "breakpoints": true
39
46
  }
40
47
  ]
41
48
  }