@redocly/revel-reef 0.128.0-next.6 → 0.128.0-next.8
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 +24 -0
- package/README.md +54 -0
- package/dist/server/esbuild/esbuild.js +2 -2
- package/dist/server/node-bundle-entry.js +1 -1
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +4 -0
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +6 -6
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +4 -0
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +3 -0
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/utils.d.ts +2 -0
- package/dist/server/plugins/catalog-entities/database/repositories/utils.js +1 -1
- package/dist/server/plugins/catalog-entities/entities/types.d.ts +1 -0
- package/dist/server/plugins/default-theme/index.js +1 -1
- package/dist/server/plugins/markdown/index.js +1 -1
- package/dist/server/plugins/openapi-docs/format-bundle-error.d.ts +6 -0
- package/dist/server/plugins/openapi-docs/format-bundle-error.js +5 -0
- package/dist/server/plugins/openapi-docs/index.js +1 -1
- package/dist/server/plugins/openapi-docs/load-definition.js +3 -3
- package/dist/server/plugins/pages/index.js +1 -1
- package/dist/server/plugins/scorecard-classic/index.js +1 -1
- package/dist/server/plugins/scorecards/workers/run-scorecards-worker.d.ts +2 -0
- package/dist/server/plugins/scorecards/workers/run-scorecards-worker.js +1 -0
- package/dist/server/plugins/scorecards/workers/scorecards.d.ts +14 -0
- package/dist/server/plugins/scorecards/workers/scorecards.js +1 -0
- package/dist/server/plugins/search/ai-indexer/prepare-ai-search-documents.js +1 -1
- package/dist/server/plugins/search/documents/search-documents.js +1 -1
- package/dist/server/plugins/sitemap/index.js +1 -1
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/0002_add-scorecards-status.sql +1 -0
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0002_snapshot.json +385 -0
- package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +7 -0
- package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-table.d.ts +19 -0
- package/dist/server/providers/database/databases/catalog-sqlite/schemas/entities-table.js +1 -1
- package/dist/server/providers/database/databases/main-sqlite/migrations/0004_add-scorecards-tables.sql +10 -0
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0004_snapshot.json +221 -0
- package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +7 -0
- package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.d.ts +162 -0
- package/dist/server/providers/database/databases/main-sqlite/schemas/scorecards-config-table.js +1 -0
- package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/0003_add-scorecards-tables.sql +61 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/0004_add-scorecards-status.sql +1 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0003_snapshot.json +796 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0004_snapshot.json +803 -0
- package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/_journal.json +14 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-evaluations-table.d.ts +124 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-evaluations-table.js +1 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-level-states-table.d.ts +48 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-level-states-table.js +1 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-levels-table.d.ts +186 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-levels-table.js +1 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-states-table.d.ts +177 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-result-states-table.js +1 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-results-table.d.ts +179 -0
- package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-results-table.js +1 -0
- package/dist/server/store.d.ts +1 -1
- package/dist/server/types/plugins/common.d.ts +1 -0
- package/dist/server/utils/catalog-classic/get-route-slug-to-catalog-slug-map.d.ts +19 -0
- package/dist/server/utils/catalog-classic/get-route-slug-to-catalog-slug-map.js +1 -0
- package/dist/server/utils/catalog-classic/get-route-slug-to-catalog-slug-map.test.d.ts +2 -0
- package/dist/server/utils/catalog-classic/get-route-slug-to-catalog-slug-map.test.js +1 -0
- package/dist/server/utils/is-catalog-entities-enabled.d.ts +2 -0
- package/dist/server/utils/is-catalog-entities-enabled.js +1 -0
- package/dist/server/utils/is-scorecards-enabled.d.ts +3 -0
- package/dist/server/utils/is-scorecards-enabled.js +1 -0
- package/dist/server/web-server/dev-server.js +1 -1
- package/dist/server/web-server/routes/replay-oauth2-redirect.js +78 -33
- package/dist/server/workers/scorecards-worker-pool.d.ts +4 -0
- package/dist/server/workers/scorecards-worker-pool.js +1 -0
- package/dist/server/workers/scorecards-worker.d.ts +2 -0
- package/dist/server/workers/scorecards-worker.js +1 -0
- package/dist/server/workers/types.d.ts +6 -0
- package/package.json +8 -8
package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-results-table.d.ts
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
export declare const scorecardResultsTable: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
2
|
+
name: "scorecard_results";
|
|
3
|
+
schema: undefined;
|
|
4
|
+
columns: {
|
|
5
|
+
id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
6
|
+
name: "id";
|
|
7
|
+
tableName: "scorecard_results";
|
|
8
|
+
dataType: "string";
|
|
9
|
+
columnType: "SQLiteText";
|
|
10
|
+
data: string;
|
|
11
|
+
driverParam: string;
|
|
12
|
+
notNull: true;
|
|
13
|
+
hasDefault: false;
|
|
14
|
+
isPrimaryKey: true;
|
|
15
|
+
isAutoincrement: false;
|
|
16
|
+
hasRuntimeDefault: false;
|
|
17
|
+
enumValues: [string, ...string[]];
|
|
18
|
+
baseColumn: never;
|
|
19
|
+
identity: undefined;
|
|
20
|
+
generated: undefined;
|
|
21
|
+
}, {}, {
|
|
22
|
+
length: number | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
evaluationId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
25
|
+
name: "evaluation_id";
|
|
26
|
+
tableName: "scorecard_results";
|
|
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
|
+
}>;
|
|
43
|
+
entityId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
44
|
+
name: "entity_id";
|
|
45
|
+
tableName: "scorecard_results";
|
|
46
|
+
dataType: "string";
|
|
47
|
+
columnType: "SQLiteText";
|
|
48
|
+
data: string;
|
|
49
|
+
driverParam: string;
|
|
50
|
+
notNull: true;
|
|
51
|
+
hasDefault: false;
|
|
52
|
+
isPrimaryKey: false;
|
|
53
|
+
isAutoincrement: false;
|
|
54
|
+
hasRuntimeDefault: false;
|
|
55
|
+
enumValues: [string, ...string[]];
|
|
56
|
+
baseColumn: never;
|
|
57
|
+
identity: undefined;
|
|
58
|
+
generated: undefined;
|
|
59
|
+
}, {}, {
|
|
60
|
+
length: number | undefined;
|
|
61
|
+
}>;
|
|
62
|
+
entityKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
63
|
+
name: "entity_key";
|
|
64
|
+
tableName: "scorecard_results";
|
|
65
|
+
dataType: "string";
|
|
66
|
+
columnType: "SQLiteText";
|
|
67
|
+
data: string;
|
|
68
|
+
driverParam: string;
|
|
69
|
+
notNull: true;
|
|
70
|
+
hasDefault: false;
|
|
71
|
+
isPrimaryKey: false;
|
|
72
|
+
isAutoincrement: false;
|
|
73
|
+
hasRuntimeDefault: false;
|
|
74
|
+
enumValues: [string, ...string[]];
|
|
75
|
+
baseColumn: never;
|
|
76
|
+
identity: undefined;
|
|
77
|
+
generated: undefined;
|
|
78
|
+
}, {}, {
|
|
79
|
+
length: number | undefined;
|
|
80
|
+
}>;
|
|
81
|
+
entityType: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
82
|
+
name: "entity_type";
|
|
83
|
+
tableName: "scorecard_results";
|
|
84
|
+
dataType: "string";
|
|
85
|
+
columnType: "SQLiteText";
|
|
86
|
+
data: string;
|
|
87
|
+
driverParam: string;
|
|
88
|
+
notNull: true;
|
|
89
|
+
hasDefault: false;
|
|
90
|
+
isPrimaryKey: false;
|
|
91
|
+
isAutoincrement: false;
|
|
92
|
+
hasRuntimeDefault: false;
|
|
93
|
+
enumValues: [string, ...string[]];
|
|
94
|
+
baseColumn: never;
|
|
95
|
+
identity: undefined;
|
|
96
|
+
generated: undefined;
|
|
97
|
+
}, {}, {
|
|
98
|
+
length: number | undefined;
|
|
99
|
+
}>;
|
|
100
|
+
entityVersion: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
101
|
+
name: "entity_version";
|
|
102
|
+
tableName: "scorecard_results";
|
|
103
|
+
dataType: "string";
|
|
104
|
+
columnType: "SQLiteText";
|
|
105
|
+
data: string;
|
|
106
|
+
driverParam: string;
|
|
107
|
+
notNull: true;
|
|
108
|
+
hasDefault: false;
|
|
109
|
+
isPrimaryKey: false;
|
|
110
|
+
isAutoincrement: false;
|
|
111
|
+
hasRuntimeDefault: false;
|
|
112
|
+
enumValues: [string, ...string[]];
|
|
113
|
+
baseColumn: never;
|
|
114
|
+
identity: undefined;
|
|
115
|
+
generated: undefined;
|
|
116
|
+
}, {}, {
|
|
117
|
+
length: number | undefined;
|
|
118
|
+
}>;
|
|
119
|
+
entityRevision: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
120
|
+
name: "entity_revision";
|
|
121
|
+
tableName: "scorecard_results";
|
|
122
|
+
dataType: "string";
|
|
123
|
+
columnType: "SQLiteText";
|
|
124
|
+
data: string;
|
|
125
|
+
driverParam: string;
|
|
126
|
+
notNull: false;
|
|
127
|
+
hasDefault: false;
|
|
128
|
+
isPrimaryKey: false;
|
|
129
|
+
isAutoincrement: false;
|
|
130
|
+
hasRuntimeDefault: false;
|
|
131
|
+
enumValues: [string, ...string[]];
|
|
132
|
+
baseColumn: never;
|
|
133
|
+
identity: undefined;
|
|
134
|
+
generated: undefined;
|
|
135
|
+
}, {}, {
|
|
136
|
+
length: number | undefined;
|
|
137
|
+
}>;
|
|
138
|
+
finalLevel: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
139
|
+
name: "final_level";
|
|
140
|
+
tableName: "scorecard_results";
|
|
141
|
+
dataType: "string";
|
|
142
|
+
columnType: "SQLiteText";
|
|
143
|
+
data: string;
|
|
144
|
+
driverParam: string;
|
|
145
|
+
notNull: false;
|
|
146
|
+
hasDefault: false;
|
|
147
|
+
isPrimaryKey: false;
|
|
148
|
+
isAutoincrement: false;
|
|
149
|
+
hasRuntimeDefault: false;
|
|
150
|
+
enumValues: [string, ...string[]];
|
|
151
|
+
baseColumn: never;
|
|
152
|
+
identity: undefined;
|
|
153
|
+
generated: undefined;
|
|
154
|
+
}, {}, {
|
|
155
|
+
length: number | undefined;
|
|
156
|
+
}>;
|
|
157
|
+
finalScore: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
158
|
+
name: "final_score";
|
|
159
|
+
tableName: "scorecard_results";
|
|
160
|
+
dataType: "number";
|
|
161
|
+
columnType: "SQLiteInteger";
|
|
162
|
+
data: number;
|
|
163
|
+
driverParam: number;
|
|
164
|
+
notNull: true;
|
|
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
|
+
};
|
|
175
|
+
dialect: "sqlite";
|
|
176
|
+
}>;
|
|
177
|
+
export type DatabaseScorecardResult = typeof scorecardResultsTable.$inferSelect;
|
|
178
|
+
export type DatabaseScorecardResultInsert = typeof scorecardResultsTable.$inferInsert;
|
|
179
|
+
//# sourceMappingURL=scorecard-results-table.d.ts.map
|
package/dist/server/providers/database/databases/sqld-sqlite/schemas/scorecard-results-table.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{sqliteTable as n,text as e,integer as o,index as i,uniqueIndex as l}from"drizzle-orm/sqlite-core";const s=n("scorecard_results",{id:e("id").primaryKey().notNull(),evaluationId:e("evaluation_id").notNull(),entityId:e("entity_id").notNull(),entityKey:e("entity_key").notNull(),entityType:e("entity_type").notNull(),entityVersion:e("entity_version").notNull(),entityRevision:e("entity_revision"),finalLevel:e("final_level"),finalScore:o("final_score").notNull()},t=>[l("idx_scorecard_results_evaluation_entity_unique").on(t.evaluationId,t.entityKey,t.entityId,t.entityVersion),i("idx_scorecard_results_evaluation_id").on(t.evaluationId),i("idx_scorecard_results_entity_id").on(t.entityId)]);export{s as scorecardResultsTable};
|
package/dist/server/store.d.ts
CHANGED
|
@@ -89,7 +89,7 @@ export declare class Store {
|
|
|
89
89
|
frontMatterKeysToResolve?: string[] | undefined;
|
|
90
90
|
partialsFolders?: string[] | undefined;
|
|
91
91
|
lastUpdatedBlock?: {
|
|
92
|
-
format?: "
|
|
92
|
+
format?: "short" | "long" | "timeago" | "iso" | undefined;
|
|
93
93
|
hide?: boolean | undefined;
|
|
94
94
|
locale?: string | undefined;
|
|
95
95
|
} | undefined;
|
|
@@ -80,6 +80,7 @@ type PageRouteDetailsForward<TData extends PageStaticData = PageStaticData, TPro
|
|
|
80
80
|
path?: string;
|
|
81
81
|
params?: string[];
|
|
82
82
|
queries?: Record<string, string>;
|
|
83
|
+
excludeFromSearch?: boolean;
|
|
83
84
|
getStaticData?: GetStaticDataFn<PageRouteDetailsForward<TData, TProps>, TData>;
|
|
84
85
|
metadata?: Record<string, unknown>;
|
|
85
86
|
getNavText?: () => Promise<string> | string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CatalogConfig } from '@redocly/config';
|
|
2
|
+
import type { AfterRoutesCreatedActions, LifecycleContext } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a mapping from route slugs to their corresponding catalog slugs.
|
|
5
|
+
*
|
|
6
|
+
* Iterates through all provided catalog configs, resolves their navigation items,
|
|
7
|
+
* and collects route slugs from the resolved items to create a map that
|
|
8
|
+
* associates each route slug with its parent catalog slug.
|
|
9
|
+
*
|
|
10
|
+
* @param actions - Actions available after routes have been created, providing
|
|
11
|
+
* access to content directory and route resolution utilities
|
|
12
|
+
* @param context - Lifecycle context containing filesystem, cache, and logger
|
|
13
|
+
* utilities needed for resolving navigation items
|
|
14
|
+
* @param catalogConfigs - Record of catalog configuration objects
|
|
15
|
+
* @returns Promise that resolves to a Map where keys are route slugs and values
|
|
16
|
+
* are the corresponding catalog slugs
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRouteSlugToCatalogSlugMap(actions: AfterRoutesCreatedActions, context: LifecycleContext, catalogConfigs: Record<string, CatalogConfig>): Promise<Map<string, string>>;
|
|
19
|
+
//# sourceMappingURL=get-route-slug-to-catalog-slug-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{resolveItems as g}from"../../plugins/nav-utils.js";import{collectPropValueDeep as n}from"../../../utils/tree/collect-prop-value-deep.js";async function i(o,r,u){const t=new Map;for(const e of Object.values(u)){const l=await g(e.items,o.contentDir,o,r,{navFile:""});if(l){const s=n(l,"routeSlug");for(const a of s)t.set(a,e.slug)}}return t}export{i as getRouteSlugToCatalogSlugMap};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as d,it as u,expect as t,vi as e,beforeEach as m}from"vitest";import{getRouteSlugToCatalogSlugMap as r}from"./get-route-slug-to-catalog-slug-map.js";import{resolveItems as s}from"../../plugins/nav-utils.js";import{collectPropValueDeep as n}from"../../../utils/tree/collect-prop-value-deep.js";e.mock("~/server/plugins/nav-utils.js"),e.mock("~/shared/utils/tree/collect-prop-value-deep.js"),d("getRouteSlugToCatalogSlugMap",()=>{let g,c;m(()=>{e.clearAllMocks(),g={contentDir:"/content",outdir:"/out",serverOutDir:"/server-out",hasSitemap:!1,createSharedData:e.fn(),addRouteSharedData:e.fn(),getRouteByFsPath:e.fn(),getRouteBySlug:e.fn(),getConfig:e.fn(),getGlobalConfig:e.fn(),getAllRoutes:e.fn(),getAllRoutesForLocale:e.fn(),getAllApiRoutes:e.fn(),setGlobalData:e.fn(),getGlobalData:e.fn(),setGlobalConfig:e.fn(),parseMarkdoc:e.fn(),setSearchFacets:e.fn(),getSearchFacets:e.fn(),setSearchEngine:e.fn(),addRedirect:e.fn(),addBrowserPlugin:e.fn(),addSsrComponents:e.fn(),addApiRoute:e.fn(),loadOpenApiDefinitions:e.fn(),getRouteSharedDataByFsPath:e.fn()},c={fs:{},cache:{},getConfig:e.fn(),isPathIgnored:e.fn(),withPathPrefix:e.fn(),logger:{}}}),u("should return empty map when catalogs object is empty",async()=>{const a=await r(g,c,{});t(a).toBeInstanceOf(Map),t(a.size).toBe(0),t(s).not.toHaveBeenCalled()}),u("should return empty map when catalog has no resolved items",async()=>{const o={catalog1:{slug:"catalog1",items:[]}};e.mocked(s).mockResolvedValue(void 0);const a=await r(g,c,o);t(a).toBeInstanceOf(Map),t(a.size).toBe(0),t(s).toHaveBeenCalledTimes(1),t(n).not.toHaveBeenCalled()}),u("should map route slugs to catalog slug for single catalog with items",async()=>{const o={catalog1:{slug:"catalog1",items:[]}},a=[{routeSlug:"/page1",label:"Page 1"},{routeSlug:"/page2",label:"Page 2"}];e.mocked(s).mockResolvedValue(a),e.mocked(n).mockReturnValue(["/page1","/page2"]);const l=await r(g,c,o);t(l.size).toBe(2),t(l.get("/page1")).toBe("catalog1"),t(l.get("/page2")).toBe("catalog1"),t(s).toHaveBeenCalledWith(o.catalog1.items,g.contentDir,g,c,{navFile:""}),t(n).toHaveBeenCalledWith(a,"routeSlug")}),u("should map route slugs to catalog slug for multiple catalogs",async()=>{const o={catalog1:{slug:"catalog1",items:[]},catalog2:{slug:"catalog2",items:[]}},a=[{routeSlug:"/page1",label:"Page 1"}],l=[{routeSlug:"/page2",label:"Page 2"},{routeSlug:"/page3",label:"Page 3"}];e.mocked(s).mockResolvedValueOnce(a).mockResolvedValueOnce(l),e.mocked(n).mockReturnValueOnce(["/page1"]).mockReturnValueOnce(["/page2","/page3"]);const i=await r(g,c,o);t(i.size).toBe(3),t(i.get("/page1")).toBe("catalog1"),t(i.get("/page2")).toBe("catalog2"),t(i.get("/page3")).toBe("catalog2"),t(s).toHaveBeenCalledTimes(2),t(n).toHaveBeenCalledTimes(2)}),u("should handle catalog with empty resolved items array",async()=>{const o={catalog1:{slug:"catalog1",items:[]}};e.mocked(s).mockResolvedValue([]),e.mocked(n).mockReturnValue([]);const a=await r(g,c,o);t(a.size).toBe(0),t(s).toHaveBeenCalledTimes(1),t(n).toHaveBeenCalledWith([],"routeSlug")}),u("should handle nested items with route slugs",async()=>{const o={catalog1:{slug:"catalog1",items:[]}},a=[{routeSlug:"/parent",label:"Parent",items:[{routeSlug:"/parent/child1",label:"Child 1"},{routeSlug:"/parent/child2",label:"Child 2"}]}];e.mocked(s).mockResolvedValue(a),e.mocked(n).mockReturnValue(["/parent","/parent/child1","/parent/child2"]);const l=await r(g,c,o);t(l.size).toBe(3),t(l.get("/parent")).toBe("catalog1"),t(l.get("/parent/child1")).toBe("catalog1"),t(l.get("/parent/child2")).toBe("catalog1")}),u("should handle items without routeSlug property",async()=>{const o={catalog1:{slug:"catalog1",items:[]}},a=[{label:"Page without route slug"},{routeSlug:"/page-with-slug",label:"Page with slug"}];e.mocked(s).mockResolvedValue(a),e.mocked(n).mockReturnValue(["/page-with-slug"]);const l=await r(g,c,o);t(l.size).toBe(1),t(l.get("/page-with-slug")).toBe("catalog1")}),u("should overwrite route slug mapping when same route slug appears in multiple catalogs",async()=>{const o={catalog1:{slug:"catalog1",items:[]},catalog2:{slug:"catalog2",items:[]}},a=[{routeSlug:"/shared-page",label:"Shared Page"}],l=[{routeSlug:"/shared-page",label:"Shared Page"}];e.mocked(s).mockResolvedValueOnce(a).mockResolvedValueOnce(l),e.mocked(n).mockReturnValueOnce(["/shared-page"]).mockReturnValueOnce(["/shared-page"]);const i=await r(g,c,o);t(i.size).toBe(1),t(i.get("/shared-page")).toBe("catalog2")})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){return process.env.NEW_CATALOG_ENABLED==="true"}export{e as isCatalogEntitiesEnabled};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isCatalogEntitiesEnabled as e}from"./is-catalog-entities-enabled.js";function a(r){return e()&&process.env.NEW_SCORECARDS_ENABLED==="true"&&Array.isArray(r.scorecards)&&r.scorecards.length>0}export{a as isScorecardsEnabled};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ServerRoutes as c}from"../../constants/common.js";import{reporter as n}from"../tools/notifiers/reporter.js";import{telemetry as s}from"../telemetry/index.js";import{installDevRoutes as p,installProdRoutes as
|
|
1
|
+
import{ServerRoutes as c}from"../../constants/common.js";import{reporter as n}from"../tools/notifiers/reporter.js";import{telemetry as s}from"../telemetry/index.js";import{installDevRoutes as p,installProdRoutes as f}from"./routes/index.js";import{createRouter as v}from"./router.js";import{readStaticAsset as l}from"./node-asset-reader.js";import{startHttpServer as u}from"./http.js";import{listenStore as S}from"./store-ws.js";import{ejectComponentDataHandler as D}from"./routes/eject.js";import{attachWsServer as d}from"./ws.js";import{DatabasePreconnectService as w}from"../providers/database/database-preconnect-service.js";import{KvService as E}from"../persistence/kv/services/kv-service.js";import{runScorecardsWorker as R}from"../plugins/scorecards/workers/run-scorecards-worker.js";import{isCatalogEntitiesEnabled as b}from"../utils/is-catalog-entities-enabled.js";import{isScorecardsEnabled as C}from"../utils/is-scorecards-enabled.js";async function J(r,o,i){s.initialize(!0);const{port:a=4e3}=i,e=v();if(e.get(c.EJECT_COMPONENT,D(r)),p(e,r),f(e,r,{readStaticAsset:l,resolveRouteData:t=>r.resolveRouteStaticData(t,o)}),b()){await w.init(r.serverOutDir);const t=await E.getInstance({baseDbDir:r.serverOutDir});setInterval(()=>t.clearExpired(),300*1e3)}try{await r.userCodeReady;const t=await u(e,a),m=d(t);S(r,m),C(r.config)&&await R(r.serverOutDir)}catch(t){await n.panic(t)}}export{J as startDevServer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
async function
|
|
1
|
+
async function r(e){return e.html(`
|
|
2
2
|
<!DOCTYPE html>
|
|
3
3
|
<html lang="en">
|
|
4
4
|
<head>
|
|
@@ -19,67 +19,112 @@ async function t(e){return e.html(`
|
|
|
19
19
|
|
|
20
20
|
<body>
|
|
21
21
|
<script>
|
|
22
|
-
const
|
|
23
|
-
function
|
|
24
|
-
return
|
|
22
|
+
const d = "Something went wrong, please, try again.";
|
|
23
|
+
function h(r) {
|
|
24
|
+
return r && r.replace(/=+$/, "");
|
|
25
25
|
}
|
|
26
|
-
function
|
|
27
|
-
return !!
|
|
26
|
+
function w(r, e) {
|
|
27
|
+
return !!r && !!e && h(r) === h(e);
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
const m = {
|
|
30
|
+
invalid_request: "The request is missing a required parameter, includes an unsupported parameter value (other than grant type), repeats a parameter, includes multiple credentials, utilizes more than one mechanism for authenticating the client, or is otherwise malformed.",
|
|
31
|
+
invalid_client: "Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method).",
|
|
32
|
+
invalid_grant: "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.",
|
|
33
|
+
unauthorized_client: "The authenticated client is not authorized to use this authorization grant type.",
|
|
34
|
+
unsupported_grant_type: "The authorization grant type is not supported by the authorization server.",
|
|
35
|
+
invalid_scope: "The requested scope is invalid, unknown, malformed, or exceeds the scope granted by the resource owner.",
|
|
36
|
+
// Authorization endpoint errors (from RFC 6749 Section 4.1.2.1)
|
|
37
|
+
unsupported_response_type: "The requested response type is not supported by the authorization server.",
|
|
38
|
+
access_denied: "The resource owner or authorization server denied the request.",
|
|
39
|
+
// Token endpoint errors (from RFC 6749 Section 5.2)
|
|
40
|
+
server_error: "The authorization server encountered an unexpected condition.",
|
|
41
|
+
temporarily_unavailable: "The authorization server is currently unable to handle the request due to a temporary overloading or maintenance."
|
|
42
|
+
};
|
|
43
|
+
class i extends Error {
|
|
44
|
+
error;
|
|
45
|
+
error_description;
|
|
46
|
+
constructor({
|
|
47
|
+
message: e,
|
|
48
|
+
error: t,
|
|
49
|
+
error_description: n
|
|
50
|
+
}) {
|
|
51
|
+
const o = n || t && m[t] || t || e || d;
|
|
52
|
+
super(o), this.name = "OAuth2Error", this.error = t, this.error_description = n;
|
|
53
|
+
}
|
|
54
|
+
static fromJsonData(e) {
|
|
55
|
+
return new i({
|
|
56
|
+
error: e.error,
|
|
57
|
+
error_description: e.error_description
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
static fromTextData(e) {
|
|
61
|
+
return new i({
|
|
62
|
+
message: e
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
static fromError(e) {
|
|
66
|
+
return new i({
|
|
67
|
+
error: e.message
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function y(r, e) {
|
|
72
|
+
let t;
|
|
73
|
+
const n = e ? new URL(e) : window.location;
|
|
74
|
+
if (/code|token|error/.test(n.hash) ? t = n.hash.substring(1) : t = n.search.substring(1), !t)
|
|
75
|
+
throw console.error("No query string in OAuth 2 redirect URL"), new i({ message: d });
|
|
76
|
+
const o = new URLSearchParams(t), s = o.get("access_token"), a = o.get("code"), c = o.get("token_type"), l = o.get("expires_in"), p = o.get("state"), u = o.get("error"), g = o.get("error_description");
|
|
77
|
+
if (u)
|
|
78
|
+
throw new i({
|
|
79
|
+
error: u,
|
|
80
|
+
error_description: g ?? void 0
|
|
81
|
+
});
|
|
82
|
+
if (!w(p, r?.state))
|
|
37
83
|
throw new Error("Outdated OAuth2 state");
|
|
38
|
-
if (
|
|
39
|
-
if (!
|
|
84
|
+
if (r?.flow === "implicit") {
|
|
85
|
+
if (!s)
|
|
40
86
|
throw new Error(
|
|
41
87
|
\`Your OAuth2 authentication service provider redirected you without an "access_token".
|
|
42
88
|
Please, try again or make sure your OAuth2 settings are correct.\`
|
|
43
89
|
);
|
|
44
|
-
if (!
|
|
90
|
+
if (!c)
|
|
45
91
|
throw new Error(
|
|
46
92
|
\`Your OAuth2 authentication service provider redirected you without a "token_type".
|
|
47
93
|
Please, try again or make sure your OAuth2 settings are correct.\`
|
|
48
94
|
);
|
|
49
|
-
|
|
50
|
-
access_token:
|
|
51
|
-
token_type:
|
|
52
|
-
expires_in:
|
|
95
|
+
r?.successCallback({
|
|
96
|
+
access_token: s,
|
|
97
|
+
token_type: c,
|
|
98
|
+
expires_in: l,
|
|
53
99
|
auth_code: ""
|
|
54
100
|
});
|
|
55
101
|
}
|
|
56
|
-
if (
|
|
57
|
-
if (!
|
|
102
|
+
if (r?.flow === "authorizationCode") {
|
|
103
|
+
if (!a)
|
|
58
104
|
throw new Error(
|
|
59
105
|
\`Your OAuth2 authentication service provider redirected you without authorization "code".
|
|
60
106
|
Please, try again or make sure your OAuth2 settings are correct.\`
|
|
61
107
|
);
|
|
62
|
-
|
|
63
|
-
auth_code:
|
|
108
|
+
r?.successCallback({
|
|
109
|
+
auth_code: a,
|
|
64
110
|
access_token: "",
|
|
65
111
|
token_type: "bearer"
|
|
66
112
|
});
|
|
67
113
|
}
|
|
68
114
|
}
|
|
69
|
-
function
|
|
70
|
-
|
|
71
|
-
const o = (e = window.opener) == null ? void 0 : e.redirectOAuth2;
|
|
115
|
+
function n() {
|
|
116
|
+
const r = window.opener?.redirectOAuth2;
|
|
72
117
|
try {
|
|
73
|
-
y(
|
|
74
|
-
} catch (
|
|
75
|
-
|
|
118
|
+
y(r);
|
|
119
|
+
} catch (o) {
|
|
120
|
+
r?.errorCallback(o);
|
|
76
121
|
}
|
|
77
122
|
window.close();
|
|
78
123
|
}
|
|
79
|
-
window.onload =
|
|
124
|
+
window.onload = n;
|
|
80
125
|
</script>
|
|
81
126
|
|
|
82
127
|
<noscript> You need to enable JavaScript to run this app. </noscript>
|
|
83
128
|
</body>
|
|
84
129
|
</html>
|
|
85
|
-
`)}export{
|
|
130
|
+
`)}export{r as replayOauth2RedirectCallbackHandler};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WorkerPool as r}from"./worker-pool.js";import{getAllowedEnvs as o}from"../utils/envs/get-api-route-allowed-env-variables.js";const c="startScorecardsEvaluationWorker",e=1,k=new r({workerScript:"./scorecards-worker",minWorkers:1,maxWorkers:e,workerType:"process",forkOpts:{env:o(),stdio:"inherit"},lazy:!0});export{c as SCORECARDS_WORKER_KEY,k as scorecardsWorker};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import r from"workerpool";import{startScorecardsWorker as o}from"../plugins/scorecards/workers/scorecards.js";import{SCORECARDS_WORKER_KEY as m}from"./scorecards-worker-pool.js";r.worker({[m]:o});
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ApiRoutesWorkerParams, ApiRoutesWorkerResponse } from '../types/plugins/api-routes.js';
|
|
2
2
|
import type { RenderPayload } from '../../types/ssr.js';
|
|
3
|
+
import type { ScorecardsWorkerParams, ScorecardsWorkerResponse } from '../plugins/scorecards/workers/scorecards.js';
|
|
4
|
+
import type { SCORECARDS_WORKER_KEY } from './scorecards-worker-pool.js';
|
|
3
5
|
import type { API_ROUTES_WORKER_KEY } from './api-routes-worker-pool.js';
|
|
4
6
|
import type { SSR_WORKER_KEY } from './ssr-worker-pool.js';
|
|
5
7
|
export type SsrWorkerResponse = {
|
|
@@ -16,6 +18,10 @@ export type WorkerTypeMapping = {
|
|
|
16
18
|
params: [RenderPayload];
|
|
17
19
|
response: SsrWorkerResponse;
|
|
18
20
|
};
|
|
21
|
+
[SCORECARDS_WORKER_KEY]: {
|
|
22
|
+
params: [ScorecardsWorkerParams];
|
|
23
|
+
response: ScorecardsWorkerResponse;
|
|
24
|
+
};
|
|
19
25
|
};
|
|
20
26
|
export type WorkerParams<T extends keyof WorkerTypeMapping> = WorkerTypeMapping[T]['params'];
|
|
21
27
|
export type WorkerResponse<T extends keyof WorkerTypeMapping> = WorkerTypeMapping[T]['response'];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/revel-reef",
|
|
3
|
-
"version": "0.128.0-next.
|
|
3
|
+
"version": "0.128.0-next.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"@opentelemetry/sdk-trace-node": "2.0.1",
|
|
32
32
|
"@opentelemetry/sdk-trace-web": "2.0.1",
|
|
33
33
|
"@opentelemetry/semantic-conventions": "1.34.0",
|
|
34
|
-
"@redocly/ajv": "8.
|
|
35
|
-
"@redocly/openapi-core": "2.
|
|
34
|
+
"@redocly/ajv": "8.17.1",
|
|
35
|
+
"@redocly/openapi-core": "2.12.1",
|
|
36
36
|
"@shikijs/transformers": "^1.22.2",
|
|
37
37
|
"@tanstack/react-query": "5.62.3",
|
|
38
38
|
"@tanstack/react-table": "8.21.3",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@redocly/mcp-typescript-sdk": "1.18.1",
|
|
41
41
|
"@wojtekmaj/react-datetimerange-picker": "6.0.0",
|
|
42
42
|
"@xmldom/xmldom": "0.8.10",
|
|
43
|
-
"ajv-formats": "^
|
|
43
|
+
"ajv-formats": "^3.0.1",
|
|
44
44
|
"anser": "^2.3.2",
|
|
45
45
|
"babel-plugin-styled-components": "2.1.4",
|
|
46
46
|
"chokidar": "3.6.0",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"react-router-dom": "^6.21.1",
|
|
78
78
|
"react-select": "5.10.1",
|
|
79
79
|
"reactjs-popup": "2.0.6",
|
|
80
|
-
"semver": "7.
|
|
80
|
+
"semver": "7.7.3",
|
|
81
81
|
"shiki": "1.24.4",
|
|
82
82
|
"simple-git": "3.20.0",
|
|
83
83
|
"sitemap": "7.1.1",
|
|
@@ -92,12 +92,12 @@
|
|
|
92
92
|
"xml-crypto": "6.0.1",
|
|
93
93
|
"xpath": "0.0.34",
|
|
94
94
|
"yaml-ast-parser": "0.0.43",
|
|
95
|
-
"@redocly/asyncapi-docs": "1.5.0-next.
|
|
95
|
+
"@redocly/asyncapi-docs": "1.5.0-next.8",
|
|
96
96
|
"@redocly/config": "0.40.0",
|
|
97
97
|
"@redocly/graphql-docs": "1.5.0-next.1",
|
|
98
|
-
"@redocly/openapi-docs": "3.16.0-next.
|
|
98
|
+
"@redocly/openapi-docs": "3.16.0-next.8",
|
|
99
99
|
"@redocly/portal-legacy-ui": "0.11.0-next.0",
|
|
100
|
-
"@redocly/portal-plugin-mock-server": "0.13.0-next.
|
|
100
|
+
"@redocly/portal-plugin-mock-server": "0.13.0-next.8",
|
|
101
101
|
"@redocly/realm-asyncapi-sdk": "0.6.0-next.1",
|
|
102
102
|
"@redocly/theme": "0.60.0-next.5"
|
|
103
103
|
},
|