@scalar/workspace-store 0.17.0 → 0.18.0
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 +64 -0
- package/dist/client.d.ts +38 -26
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +286 -84
- package/dist/client.js.map +3 -3
- package/dist/events/bus.d.ts +86 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +58 -0
- package/dist/events/bus.js.map +7 -0
- package/dist/events/definitions/analytics.d.ts +27 -0
- package/dist/events/definitions/analytics.d.ts.map +1 -0
- package/dist/events/definitions/analytics.js +1 -0
- package/dist/events/definitions/analytics.js.map +7 -0
- package/dist/events/definitions/auth.d.ts +30 -0
- package/dist/events/definitions/auth.d.ts.map +1 -0
- package/dist/events/definitions/auth.js +1 -0
- package/dist/events/definitions/auth.js.map +7 -0
- package/dist/events/definitions/document.d.ts +14 -0
- package/dist/events/definitions/document.d.ts.map +1 -0
- package/dist/events/definitions/document.js +1 -0
- package/dist/events/definitions/document.js.map +7 -0
- package/dist/events/definitions/index.d.ts +10 -0
- package/dist/events/definitions/index.d.ts.map +1 -0
- package/dist/events/definitions/index.js +1 -0
- package/dist/events/definitions/index.js.map +7 -0
- package/dist/events/definitions/meta.d.ts +11 -0
- package/dist/events/definitions/meta.d.ts.map +1 -0
- package/dist/events/definitions/meta.js +1 -0
- package/dist/events/definitions/meta.js.map +7 -0
- package/dist/events/definitions/operation.d.ts +11 -0
- package/dist/events/definitions/operation.d.ts.map +1 -0
- package/dist/events/definitions/operation.js +1 -0
- package/dist/events/definitions/operation.js.map +7 -0
- package/dist/events/definitions/server.d.ts +50 -0
- package/dist/events/definitions/server.d.ts.map +1 -0
- package/dist/events/definitions/server.js +1 -0
- package/dist/events/definitions/server.js.map +7 -0
- package/dist/events/definitions/ui.d.ts +52 -0
- package/dist/events/definitions/ui.d.ts.map +1 -0
- package/dist/events/definitions/ui.js +1 -0
- package/dist/events/definitions/ui.js.map +7 -0
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +3 -1
- package/dist/events/index.js.map +2 -2
- package/dist/events/listeners.d.ts +2 -1
- package/dist/events/listeners.d.ts.map +1 -1
- package/dist/events/listeners.js.map +2 -2
- package/dist/events/{definitions.d.ts → old-definitions.d.ts} +35 -11
- package/dist/events/old-definitions.d.ts.map +1 -0
- package/dist/events/{definitions.js → old-definitions.js} +1 -1
- package/dist/events/old-definitions.js.map +7 -0
- package/dist/helpers/debounce.d.ts +28 -0
- package/dist/helpers/debounce.d.ts.map +1 -0
- package/dist/helpers/debounce.js +31 -0
- package/dist/helpers/debounce.js.map +7 -0
- package/dist/helpers/detect-changes-proxy.d.ts +47 -0
- package/dist/helpers/detect-changes-proxy.d.ts.map +1 -0
- package/dist/helpers/detect-changes-proxy.js +59 -0
- package/dist/helpers/detect-changes-proxy.js.map +7 -0
- package/dist/helpers/overrides-proxy.d.ts +17 -6
- package/dist/helpers/overrides-proxy.d.ts.map +1 -1
- package/dist/helpers/overrides-proxy.js +33 -18
- package/dist/helpers/overrides-proxy.js.map +3 -3
- package/dist/helpers/unpack-proxy.d.ts +6 -0
- package/dist/helpers/unpack-proxy.d.ts.map +1 -0
- package/dist/helpers/unpack-proxy.js +9 -0
- package/dist/helpers/unpack-proxy.js.map +7 -0
- package/dist/mutators/request.d.ts +1 -1
- package/dist/mutators/request.d.ts.map +1 -1
- package/dist/mutators/request.js.map +1 -1
- package/dist/navigation/get-navigation-options.d.ts +1 -1
- package/dist/navigation/get-navigation-options.d.ts.map +1 -1
- package/dist/navigation/get-navigation-options.js +66 -54
- package/dist/navigation/get-navigation-options.js.map +2 -2
- package/dist/navigation/helpers/get-tag.d.ts +7 -2
- package/dist/navigation/helpers/get-tag.d.ts.map +1 -1
- package/dist/navigation/helpers/get-tag.js +16 -2
- package/dist/navigation/helpers/get-tag.js.map +2 -2
- package/dist/navigation/helpers/traverse-description.d.ts +7 -2
- package/dist/navigation/helpers/traverse-description.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-description.js +24 -6
- package/dist/navigation/helpers/traverse-description.js.map +2 -2
- package/dist/navigation/helpers/traverse-document.d.ts +5 -2
- package/dist/navigation/helpers/traverse-document.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-document.js +53 -15
- package/dist/navigation/helpers/traverse-document.js.map +2 -2
- package/dist/navigation/helpers/traverse-paths.d.ts +9 -3
- package/dist/navigation/helpers/traverse-paths.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-paths.js +63 -9
- package/dist/navigation/helpers/traverse-paths.js.map +2 -2
- package/dist/navigation/helpers/traverse-schemas.d.ts +7 -8
- package/dist/navigation/helpers/traverse-schemas.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-schemas.js +35 -7
- package/dist/navigation/helpers/traverse-schemas.js.map +2 -2
- package/dist/navigation/helpers/traverse-tags.d.ts +8 -4
- package/dist/navigation/helpers/traverse-tags.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-tags.js +65 -17
- package/dist/navigation/helpers/traverse-tags.js.map +2 -2
- package/dist/navigation/helpers/traverse-webhooks.d.ts +9 -3
- package/dist/navigation/helpers/traverse-webhooks.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-webhooks.js +43 -17
- package/dist/navigation/helpers/traverse-webhooks.js.map +2 -2
- package/dist/navigation/types.d.ts +5 -24
- package/dist/navigation/types.d.ts.map +1 -1
- package/dist/persistence/index.d.ts +86 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +196 -0
- package/dist/persistence/index.js.map +7 -0
- package/dist/persistence/indexdb.d.ts +87 -0
- package/dist/persistence/indexdb.d.ts.map +1 -0
- package/dist/persistence/indexdb.js +125 -0
- package/dist/persistence/indexdb.js.map +7 -0
- package/dist/{plugins.d.ts → plugins/bundler/index.d.ts} +1 -1
- package/dist/plugins/bundler/index.d.ts.map +1 -0
- package/dist/{plugins.js → plugins/bundler/index.js} +2 -2
- package/dist/{plugins.js.map → plugins/bundler/index.js.map} +1 -1
- package/dist/plugins/client/index.d.ts +3 -0
- package/dist/plugins/client/index.d.ts.map +1 -0
- package/dist/plugins/client/index.js +5 -0
- package/dist/plugins/client/index.js.map +7 -0
- package/dist/plugins/client/persistence.d.ts +13 -0
- package/dist/plugins/client/persistence.d.ts.map +1 -0
- package/dist/plugins/client/persistence.js +57 -0
- package/dist/plugins/client/persistence.js.map +7 -0
- package/dist/schemas/extensions.d.ts +1 -0
- package/dist/schemas/extensions.d.ts.map +1 -1
- package/dist/schemas/extensions.js +1 -0
- package/dist/schemas/extensions.js.map +2 -2
- package/dist/schemas/inmemory-workspace.d.ts +73 -14
- package/dist/schemas/inmemory-workspace.d.ts.map +1 -1
- package/dist/schemas/inmemory-workspace.js +1 -9
- package/dist/schemas/inmemory-workspace.js.map +2 -2
- package/dist/schemas/navigation.d.ts +128 -1
- package/dist/schemas/navigation.d.ts.map +1 -1
- package/dist/schemas/navigation.js +20 -1
- package/dist/schemas/navigation.js.map +2 -2
- package/dist/schemas/reference-config/index.d.ts +233 -200
- package/dist/schemas/reference-config/index.d.ts.map +1 -1
- package/dist/schemas/reference-config/index.js.map +2 -2
- package/dist/schemas/reference-config/settings.d.ts +35 -3
- package/dist/schemas/reference-config/settings.d.ts.map +1 -1
- package/dist/schemas/reference-config/settings.js +1 -1
- package/dist/schemas/reference-config/settings.js.map +1 -1
- package/dist/schemas/v3.1/strict/openapi-document.d.ts +1165 -71
- package/dist/schemas/v3.1/strict/openapi-document.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/openapi-document.js +16 -9
- package/dist/schemas/v3.1/strict/openapi-document.js.map +2 -2
- package/dist/schemas/v3.1/strict/parameter.d.ts +23 -1
- package/dist/schemas/v3.1/strict/parameter.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/parameter.js +5 -1
- package/dist/schemas/v3.1/strict/parameter.js.map +2 -2
- package/dist/schemas/v3.1/strict/ref-definitions.d.ts +2 -0
- package/dist/schemas/v3.1/strict/ref-definitions.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/ref-definitions.js +4 -1
- package/dist/schemas/v3.1/strict/ref-definitions.js.map +2 -2
- package/dist/schemas/v3.1/strict/schema.d.ts +2 -2
- package/dist/schemas/v3.1/strict/schema.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/schema.js +1 -1
- package/dist/schemas/v3.1/strict/schema.js.map +2 -2
- package/dist/schemas/workspace-specification/config.d.ts +35 -8
- package/dist/schemas/workspace-specification/config.d.ts.map +1 -1
- package/dist/schemas/workspace-specification/config.js.map +1 -1
- package/dist/schemas/workspace-specification/index.d.ts +38 -5
- package/dist/schemas/workspace-specification/index.d.ts.map +1 -1
- package/dist/schemas/workspace-specification/index.js.map +1 -1
- package/dist/schemas/workspace.d.ts +245 -17
- package/dist/schemas/workspace.d.ts.map +1 -1
- package/dist/schemas/workspace.js +3 -1
- package/dist/schemas/workspace.js.map +2 -2
- package/dist/server.d.ts +4 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -6
- package/dist/server.js.map +2 -2
- package/dist/workspace-plugin.d.ts +49 -0
- package/dist/workspace-plugin.d.ts.map +1 -0
- package/dist/workspace-plugin.js +1 -0
- package/dist/workspace-plugin.js.map +7 -0
- package/package.json +22 -10
- package/dist/events/definitions.d.ts.map +0 -1
- package/dist/events/definitions.js.map +0 -7
- package/dist/plugins.d.ts.map +0 -1
|
@@ -1,25 +1,35 @@
|
|
|
1
1
|
import { isObject } from "../helpers/general.js";
|
|
2
2
|
const isOverridesProxy = Symbol("isOverridesProxy");
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const getOverridesTarget = Symbol("getOverridesTarget");
|
|
4
|
+
const createOverridesProxy = (target, options, args = {
|
|
5
|
+
cache: /* @__PURE__ */ new WeakMap()
|
|
6
|
+
}) => {
|
|
7
|
+
if (!target || typeof target !== "object") {
|
|
8
|
+
return target;
|
|
6
9
|
}
|
|
10
|
+
if (args.cache.has(target)) {
|
|
11
|
+
return args.cache.get(target);
|
|
12
|
+
}
|
|
13
|
+
const { overrides } = options ?? {};
|
|
7
14
|
const handler = {
|
|
8
|
-
get(
|
|
15
|
+
get(target2, prop, receiver) {
|
|
9
16
|
if (prop === isOverridesProxy) {
|
|
10
17
|
return true;
|
|
11
18
|
}
|
|
12
|
-
if (prop ===
|
|
13
|
-
return
|
|
19
|
+
if (prop === getOverridesTarget) {
|
|
20
|
+
return target2;
|
|
21
|
+
}
|
|
22
|
+
const value = Reflect.get(target2, prop, receiver);
|
|
23
|
+
if (isOverridesProxyObject(value)) {
|
|
24
|
+
return value;
|
|
14
25
|
}
|
|
15
|
-
const value = Reflect.get(target, prop, receiver);
|
|
16
26
|
if (!isObject(value)) {
|
|
17
27
|
return Reflect.get(overrides ?? {}, prop) ?? value;
|
|
18
28
|
}
|
|
19
|
-
return createOverridesProxy(value, Reflect.get(overrides ?? {}, prop));
|
|
29
|
+
return createOverridesProxy(value, { overrides: Reflect.get(overrides ?? {}, prop) }, args);
|
|
20
30
|
},
|
|
21
|
-
set(
|
|
22
|
-
if (prop === isOverridesProxy || prop ===
|
|
31
|
+
set(target2, prop, value, receiver) {
|
|
32
|
+
if (prop === isOverridesProxy || prop === getOverridesTarget) {
|
|
23
33
|
return false;
|
|
24
34
|
}
|
|
25
35
|
const hasOverride = overrides && Reflect.has(overrides, prop);
|
|
@@ -28,21 +38,26 @@ const createOverridesProxy = (targetObject, overrides) => {
|
|
|
28
38
|
overrides[prop] = value;
|
|
29
39
|
return true;
|
|
30
40
|
}
|
|
31
|
-
return Reflect.set(
|
|
41
|
+
return Reflect.set(target2, prop, value, receiver);
|
|
32
42
|
}
|
|
33
43
|
};
|
|
34
|
-
|
|
44
|
+
const proxy = new Proxy(target, handler);
|
|
45
|
+
args.cache.set(target, proxy);
|
|
46
|
+
return proxy;
|
|
47
|
+
};
|
|
48
|
+
const isOverridesProxyObject = (obj) => {
|
|
49
|
+
return typeof obj === "object" && obj !== null && obj[isOverridesProxy] === true;
|
|
35
50
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return obj[TARGET_SYMBOL];
|
|
51
|
+
function unpackOverridesProxy(input) {
|
|
52
|
+
if (input[isOverridesProxy]) {
|
|
53
|
+
return input[getOverridesTarget];
|
|
40
54
|
}
|
|
41
|
-
return
|
|
55
|
+
return input;
|
|
42
56
|
}
|
|
43
57
|
export {
|
|
44
|
-
TARGET_SYMBOL,
|
|
45
58
|
createOverridesProxy,
|
|
59
|
+
getOverridesTarget,
|
|
60
|
+
isOverridesProxyObject,
|
|
46
61
|
unpackOverridesProxy
|
|
47
62
|
};
|
|
48
63
|
//# sourceMappingURL=overrides-proxy.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/helpers/overrides-proxy.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "AAAA,
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import { isObject } from '@/helpers/general'\n\nconst isOverridesProxy = Symbol('isOverridesProxy')\nexport const getOverridesTarget = Symbol('getOverridesTarget')\n\n/**\n * Recursively makes all properties of a type optional.\n *\n * - If T is an object, recursively applies DeepPartial to each property, making them optional.\n * - Otherwise, T is returned as-is.\n *\n * @template T - The type to make deeply partial (optional).\n * @example\n * type Example = { a: { b: number } }\n * type PartialExample = DeepPartial<Example>\n * // Result: { a?: { b?: number } }\n */\nexport type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T\n\n/**\n * Creates a proxy object that overlays \"overrides\" on top of a target object.\n *\n * - When reading a property, if an override exists, it is returned; otherwise, the original value is returned.\n * - When writing to a property, if an override exists, it is updated; otherwise, the original object is updated.\n * - This works recursively for nested objects, so overrides can be deeply partial.\n * - Special symbols are used to identify the proxy and to access the original target.\n *\n * @template T - The type of the target object.\n * @param target - The original object to proxy.\n * @param overrides - An optional object containing override values (deeply partial).\n * @returns A proxy object that reflects overrides on top of the target.\n *\n * @example\n * const original = { a: 1, b: { c: 2 } }\n * const overrides = { b: { c: 42 } }\n * const proxy = createOverridesProxy(original, { overrides })\n *\n * console.log(proxy.a) // 1 (from original)\n * console.log(proxy.b.c) // 42 (from overrides)\n *\n * proxy.a = 100\n * console.log(original.a) // 100\n *\n * proxy.b.c = 99\n * console.log(overrides.b.c) // 99\n */\nexport const createOverridesProxy = <T extends Record<string, unknown>>(\n target: T,\n options?: {\n overrides?: DeepPartial<T>\n },\n args: {\n cache: WeakMap<object, any>\n } = {\n cache: new WeakMap(),\n },\n): T => {\n if (!target || typeof target !== 'object') {\n return target\n }\n\n // Return existing proxy for the same target to ensure referential stability\n if (args.cache.has(target)) {\n return args.cache.get(target)!\n }\n\n const { overrides } = options ?? {}\n\n // Proxy handler to intercept get/set operations\n const handler: ProxyHandler<T> = {\n get(target, prop, receiver) {\n // Special symbol to identify this as an overrides proxy\n if (prop === isOverridesProxy) {\n return true\n }\n\n // Special symbol to access the original target object\n if (prop === getOverridesTarget) {\n return target\n }\n\n const value = Reflect.get(target, prop, receiver)\n\n // Return early if the value is already an overrides proxy\n if (isOverridesProxyObject(value)) {\n return value\n }\n\n // If the value is not an object, return the override if it exists, else the original value\n if (!isObject(value)) {\n return Reflect.get(overrides ?? {}, prop) ?? value\n }\n\n // For nested objects, recursively create a proxy with the corresponding overrides\n return createOverridesProxy(value, { overrides: Reflect.get(overrides ?? {}, prop) }, args)\n },\n\n set(target, prop, value, receiver) {\n // Prevent setting special symbols\n if (prop === isOverridesProxy || prop === getOverridesTarget) {\n return false\n }\n\n // If an override exists for this property, update it\n const hasOverride = overrides && Reflect.has(overrides, prop)\n\n if (hasOverride && overrides && typeof overrides === 'object') {\n ;(overrides as any)[prop] = value\n return true\n }\n\n // Otherwise, update the original target\n return Reflect.set(target, prop, value, receiver)\n },\n }\n\n // Return the proxy object\n const proxy = new Proxy<T>(target, handler)\n args.cache.set(target, proxy)\n return proxy\n}\n\nexport const isOverridesProxyObject = (obj: unknown): boolean => {\n return typeof obj === 'object' && obj !== null && (obj as { [isOverridesProxy]: boolean })[isOverridesProxy] === true\n}\n\n/**\n * Unpacks an object from the overrides proxy, returning the original (unproxied) target object.\n * If the input is not an overrides proxy, returns the object as-is.\n *\n * @param input - The potentially proxied object\n * @returns The original unproxied target object or the input object\n */\nexport function unpackOverridesProxy<T>(input: T): T {\n if ((input as T & { [isOverridesProxy]: boolean | undefined })[isOverridesProxy]) {\n return (input as T & { [getOverridesTarget]: T })[getOverridesTarget]\n }\n\n return input\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,gBAAgB;AAEzB,MAAM,mBAAmB,OAAO,kBAAkB;AAC3C,MAAM,qBAAqB,OAAO,oBAAoB;AA2CtD,MAAM,uBAAuB,CAClC,QACA,SAGA,OAEI;AAAA,EACF,OAAO,oBAAI,QAAQ;AACrB,MACM;AACN,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,WAAO;AAAA,EACT;AAGA,MAAI,KAAK,MAAM,IAAI,MAAM,GAAG;AAC1B,WAAO,KAAK,MAAM,IAAI,MAAM;AAAA,EAC9B;AAEA,QAAM,EAAE,UAAU,IAAI,WAAW,CAAC;AAGlC,QAAM,UAA2B;AAAA,IAC/B,IAAIA,SAAQ,MAAM,UAAU;AAE1B,UAAI,SAAS,kBAAkB;AAC7B,eAAO;AAAA,MACT;AAGA,UAAI,SAAS,oBAAoB;AAC/B,eAAOA;AAAA,MACT;AAEA,YAAM,QAAQ,QAAQ,IAAIA,SAAQ,MAAM,QAAQ;AAGhD,UAAI,uBAAuB,KAAK,GAAG;AACjC,eAAO;AAAA,MACT;AAGA,UAAI,CAAC,SAAS,KAAK,GAAG;AACpB,eAAO,QAAQ,IAAI,aAAa,CAAC,GAAG,IAAI,KAAK;AAAA,MAC/C;AAGA,aAAO,qBAAqB,OAAO,EAAE,WAAW,QAAQ,IAAI,aAAa,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI;AAAA,IAC5F;AAAA,IAEA,IAAIA,SAAQ,MAAM,OAAO,UAAU;AAEjC,UAAI,SAAS,oBAAoB,SAAS,oBAAoB;AAC5D,eAAO;AAAA,MACT;AAGA,YAAM,cAAc,aAAa,QAAQ,IAAI,WAAW,IAAI;AAE5D,UAAI,eAAe,aAAa,OAAO,cAAc,UAAU;AAC7D;AAAC,QAAC,UAAkB,IAAI,IAAI;AAC5B,eAAO;AAAA,MACT;AAGA,aAAO,QAAQ,IAAIA,SAAQ,MAAM,OAAO,QAAQ;AAAA,IAClD;AAAA,EACF;AAGA,QAAM,QAAQ,IAAI,MAAS,QAAQ,OAAO;AAC1C,OAAK,MAAM,IAAI,QAAQ,KAAK;AAC5B,SAAO;AACT;AAEO,MAAM,yBAAyB,CAAC,QAA0B;AAC/D,SAAO,OAAO,QAAQ,YAAY,QAAQ,QAAS,IAAwC,gBAAgB,MAAM;AACnH;AASO,SAAS,qBAAwB,OAAa;AACnD,MAAK,MAA0D,gBAAgB,GAAG;AAChF,WAAQ,MAA0C,kBAAkB;AAAA,EACtE;AAEA,SAAO;AACT;",
|
|
6
|
+
"names": ["target"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unpacks special vue reactivity & override & detect-changes & magic proxy from an input object or array,
|
|
3
|
+
* returning the "raw" plain object or array.
|
|
4
|
+
*/
|
|
5
|
+
export declare const unpackProxyObject: <T extends object | Array<unknown>>(input: T) => T;
|
|
6
|
+
//# sourceMappingURL=unpack-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpack-proxy.d.ts","sourceRoot":"","sources":["../../src/helpers/unpack-proxy.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,KAAG,CACV,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getRaw } from "@scalar/json-magic/magic-proxy";
|
|
2
|
+
import { toRaw } from "vue";
|
|
3
|
+
import { unpackDetectChangesProxy } from "../helpers/detect-changes-proxy.js";
|
|
4
|
+
import { unpackOverridesProxy } from "../helpers/overrides-proxy.js";
|
|
5
|
+
const unpackProxyObject = (input) => unpackDetectChangesProxy(toRaw(getRaw(unpackOverridesProxy(input))));
|
|
6
|
+
export {
|
|
7
|
+
unpackProxyObject
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=unpack-proxy.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/helpers/unpack-proxy.ts"],
|
|
4
|
+
"sourcesContent": ["import { getRaw } from '@scalar/json-magic/magic-proxy'\nimport { toRaw } from 'vue'\n\nimport { unpackDetectChangesProxy } from '@/helpers/detect-changes-proxy'\nimport { unpackOverridesProxy } from '@/helpers/overrides-proxy'\n\n/**\n * Unpacks special vue reactivity & override & detect-changes & magic proxy from an input object or array,\n * returning the \"raw\" plain object or array.\n */\nexport const unpackProxyObject = <T extends object | Array<unknown>>(input: T): T =>\n unpackDetectChangesProxy(toRaw(getRaw(unpackOverridesProxy(input))))\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,cAAc;AACvB,SAAS,aAAa;AAEtB,SAAS,gCAAgC;AACzC,SAAS,4BAA4B;AAM9B,MAAM,oBAAoB,CAAoC,UACnE,yBAAyB,MAAM,OAAO,qBAAqB,KAAK,CAAC,CAAC,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -2,7 +2,7 @@ import type { HttpMethod } from '@scalar/helpers/http/http-methods';
|
|
|
2
2
|
import type { OpenApiDocument } from '../schemas/v3.1/strict/openapi-document.js';
|
|
3
3
|
export type OperationIdentifier = {
|
|
4
4
|
path: string;
|
|
5
|
-
method: Exclude<HttpMethod, '
|
|
5
|
+
method: Exclude<HttpMethod, 'head' | 'options'>;
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
8
|
* Provides mutator functions for managing OpenAPI operations (requests) within a workspace store.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/mutators/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/mutators/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAChD,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,eAAe;4CAoBrD;QACD,MAAM,EAAE,mBAAmB,CAAA;QAC3B,WAAW,EAAE,mBAAmB,CAAA;KACjC;sCAqDwC,mBAAmB;CA0B7D,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/mutators/request.ts"],
|
|
4
|
-
"sourcesContent": ["import type { HttpMethod } from '@scalar/helpers/http/http-methods'\n\nimport type { OpenApiDocument } from '@/schemas/v3.1/strict/openapi-document'\n\nexport type OperationIdentifier = {\n path: string\n method: Exclude<HttpMethod, '
|
|
4
|
+
"sourcesContent": ["import type { HttpMethod } from '@scalar/helpers/http/http-methods'\n\nimport type { OpenApiDocument } from '@/schemas/v3.1/strict/openapi-document'\n\nexport type OperationIdentifier = {\n path: string\n method: Exclude<HttpMethod, 'head' | 'options'>\n}\n\n/**\n * Provides mutator functions for managing OpenAPI operations (requests) within a workspace store.\n * This module contains utilities for moving and deleting API operations while maintaining\n * document integrity and preventing conflicts.\n *\n * @param document - The OpenAPI document to operate on\n * @returns Object containing mutator functions for request operations\n */\nexport const requestMutators = (document?: OpenApiDocument) => {\n /**\n * Moves an operation from one path/method to another within the OpenAPI document.\n * This function handles the relocation of API operations while preserving their configuration\n * and preventing accidental overwrites of existing operations.\n *\n * @param source - The current location of the operation to move\n * @param destination - The target location for the operation (path and/or method)\n * @returns true if the operation was successfully moved, false otherwise\n *\n * @example\n * // Move an operation to a completely new path and method\n * moveOperation({\n * source: { path: '/old-endpoint', method: 'get' },\n * destination: { path: '/new-endpoint', method: 'post' }\n * })\n */\n const moveOperation = ({\n source,\n destination,\n }: {\n source: OperationIdentifier\n destination: OperationIdentifier\n }) => {\n if (!document || !document.paths) {\n return false\n }\n\n const pathObject = document.paths[source.path]\n\n if (!pathObject) {\n return false\n }\n\n const operation = pathObject[source.method]\n\n if (!operation) {\n return false\n }\n\n const newPath = destination.path || source.path\n const newMethod = destination.method || source.method\n\n if (document.paths[newPath]?.[newMethod]) {\n // If the new path and method already exist, we should not overwrite it.\n console.warn(`Request already exists at ${newPath} with method ${newMethod}.`)\n return false\n }\n\n // delete the request from the old location\n delete pathObject[source.method]\n\n if (!document.paths[newPath]) {\n // If the new path does not exist, create it\n document.paths[newPath] = {}\n }\n\n document.paths[newPath][newMethod] = operation\n return true\n }\n\n /**\n * Deletes an operation from the OpenAPI document at the specified path and method.\n *\n * @param path - The path of the operation to delete\n * @param method - The HTTP method of the operation to delete\n * @returns void - Returns early if document, path, or operation doesn't exist\n *\n * @example\n * // Delete a GET operation from /users endpoint\n * deleteRequest({ path: '/users', method: 'get' })\n *\n * @example\n * // Delete a POST operation from /auth/login endpoint\n * deleteRequest({ path: '/auth/login', method: 'post' })\n */\n const deleteRequest = ({ path, method }: OperationIdentifier) => {\n if (!document) {\n return false\n }\n\n const pathObject = document?.paths?.[path]\n\n if (!pathObject) {\n return false\n }\n\n const operation = pathObject[method]\n\n if (!operation) {\n return false\n }\n\n // Delete the request by slug\n delete pathObject[method]\n return true\n }\n\n return {\n moveRequest: moveOperation,\n deleteRequest,\n }\n}\n"],
|
|
5
5
|
"mappings": "AAiBO,MAAM,kBAAkB,CAAC,aAA+B;AAiB7D,QAAM,gBAAgB,CAAC;AAAA,IACrB;AAAA,IACA;AAAA,EACF,MAGM;AACJ,QAAI,CAAC,YAAY,CAAC,SAAS,OAAO;AAChC,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,SAAS,MAAM,OAAO,IAAI;AAE7C,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,WAAW,OAAO,MAAM;AAE1C,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,YAAY,QAAQ,OAAO;AAC3C,UAAM,YAAY,YAAY,UAAU,OAAO;AAE/C,QAAI,SAAS,MAAM,OAAO,IAAI,SAAS,GAAG;AAExC,cAAQ,KAAK,6BAA6B,OAAO,gBAAgB,SAAS,GAAG;AAC7E,aAAO;AAAA,IACT;AAGA,WAAO,WAAW,OAAO,MAAM;AAE/B,QAAI,CAAC,SAAS,MAAM,OAAO,GAAG;AAE5B,eAAS,MAAM,OAAO,IAAI,CAAC;AAAA,IAC7B;AAEA,aAAS,MAAM,OAAO,EAAE,SAAS,IAAI;AACrC,WAAO;AAAA,EACT;AAiBA,QAAM,gBAAgB,CAAC,EAAE,MAAM,OAAO,MAA2B;AAC/D,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,UAAU,QAAQ,IAAI;AAEzC,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,WAAW,MAAM;AAEnC,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AAGA,WAAO,WAAW,MAAM;AACxB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,5 +5,5 @@ import type { DocumentConfiguration } from '../schemas/workspace-specification/c
|
|
|
5
5
|
* how IDs and slugs are generated for tags, headings, models, operations, and webhooks.
|
|
6
6
|
* The returned options can be influenced by the provided DocumentConfiguration
|
|
7
7
|
*/
|
|
8
|
-
export declare const getNavigationOptions: (config?: DocumentConfiguration) => TraverseSpecOptions;
|
|
8
|
+
export declare const getNavigationOptions: (documentName: string, config?: DocumentConfiguration) => TraverseSpecOptions;
|
|
9
9
|
//# sourceMappingURL=get-navigation-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-navigation-options.d.ts","sourceRoot":"","sources":["../../src/navigation/get-navigation-options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"get-navigation-options.d.ts","sourceRoot":"","sources":["../../src/navigation/get-navigation-options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAA;AAErF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,EAAE,SAAS,qBAAqB,KAAG,mBAkH3F,CAAA"}
|
|
@@ -1,62 +1,78 @@
|
|
|
1
1
|
import { slug } from "github-slugger";
|
|
2
|
-
const getNavigationOptions = (config) => {
|
|
2
|
+
const getNavigationOptions = (documentName, config) => {
|
|
3
3
|
const referenceConfig = config?.["x-scalar-reference-config"];
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
7
|
-
|
|
4
|
+
const generateId = (props) => {
|
|
5
|
+
const documentId = `${slug(documentName)}`;
|
|
6
|
+
if (props.type === "text") {
|
|
7
|
+
if (referenceConfig?.generateHeadingSlug) {
|
|
8
|
+
return referenceConfig?.generateHeadingSlug({ slug: props.slug });
|
|
9
|
+
}
|
|
10
|
+
if (props.slug) {
|
|
11
|
+
return `${documentId}/description/${props.slug}`;
|
|
12
|
+
}
|
|
13
|
+
return `${documentId}/`;
|
|
8
14
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return `${generateHeadingSlug(heading)}`;
|
|
15
|
+
if (props.type === "tag") {
|
|
16
|
+
if (referenceConfig?.generateTagSlug) {
|
|
17
|
+
return `${documentId}/tag/${referenceConfig.generateTagSlug(props.tag)}`;
|
|
18
|
+
}
|
|
19
|
+
return `${documentId}/tag/${slug(props.tag.name ?? "")}`;
|
|
15
20
|
}
|
|
16
|
-
if (
|
|
17
|
-
|
|
21
|
+
if (props.type === "operation") {
|
|
22
|
+
const tagId = `${generateId({
|
|
23
|
+
type: "tag",
|
|
24
|
+
tag: props.parentTag.tag,
|
|
25
|
+
parentId: props.parentTag.id
|
|
26
|
+
})}`;
|
|
27
|
+
if (referenceConfig?.generateOperationSlug) {
|
|
28
|
+
return `${tagId}/${referenceConfig.generateOperationSlug({
|
|
29
|
+
path: props.path,
|
|
30
|
+
operationId: props.operation.operationId,
|
|
31
|
+
method: props.method,
|
|
32
|
+
summary: props.operation.summary
|
|
33
|
+
})}`;
|
|
34
|
+
}
|
|
35
|
+
return `${tagId}/${props.method}${props.path}`;
|
|
18
36
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
37
|
+
if (props.type === "webhook") {
|
|
38
|
+
const prefixTag = props.parentTag ? `${generateId({
|
|
39
|
+
type: "tag",
|
|
40
|
+
parentId: props.parentTag.id,
|
|
41
|
+
tag: props.parentTag.tag
|
|
42
|
+
})}/` : `${documentId}/`;
|
|
43
|
+
if (referenceConfig?.generateWebhookSlug) {
|
|
44
|
+
return `${prefixTag}webhook/${referenceConfig.generateWebhookSlug({
|
|
45
|
+
name: props.name,
|
|
46
|
+
method: props.method
|
|
47
|
+
})}`;
|
|
48
|
+
}
|
|
49
|
+
return `${prefixTag}webhook/${props.method}/${slug(props.name)}`;
|
|
25
50
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
51
|
+
if (props.type === "model") {
|
|
52
|
+
if (!props.name) {
|
|
53
|
+
return `${documentId}/models`;
|
|
54
|
+
}
|
|
55
|
+
const prefixTag = props.parentTag ? `${generateId({
|
|
56
|
+
type: "tag",
|
|
57
|
+
parentId: props.parentTag.id,
|
|
58
|
+
tag: props.parentTag.tag
|
|
59
|
+
})}/` : `${documentId}/`;
|
|
60
|
+
if (referenceConfig?.generateModelSlug) {
|
|
61
|
+
return `${prefixTag}model/${referenceConfig.generateModelSlug({
|
|
62
|
+
name: props.name
|
|
63
|
+
})}`;
|
|
64
|
+
}
|
|
65
|
+
return `${prefixTag}model/${slug(props.name)}`;
|
|
29
66
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const getOperationIdDefault = (operation, parentTag) => {
|
|
33
|
-
const generateOperationSlug = referenceConfig?.generateOperationSlug;
|
|
34
|
-
if (generateOperationSlug) {
|
|
35
|
-
return `${getTagId(parentTag)}/${generateOperationSlug({
|
|
36
|
-
path: operation.path,
|
|
37
|
-
operationId: operation.operationId,
|
|
38
|
-
method: operation.method,
|
|
39
|
-
summary: operation.summary
|
|
40
|
-
})}`;
|
|
41
|
-
}
|
|
42
|
-
return `${getTagId(parentTag)}/${operation.method}${operation.path}`;
|
|
43
|
-
};
|
|
44
|
-
const getWebhookIdDefault = (webhook, parentTag) => {
|
|
45
|
-
const generateWebhookSlug = referenceConfig?.generateWebhookSlug;
|
|
46
|
-
if (!webhook?.name) {
|
|
47
|
-
return "webhooks";
|
|
67
|
+
if (props.type === "example") {
|
|
68
|
+
return `${props.parentId}/example/${slug(props.name)}`;
|
|
48
69
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return `${prefixTag}webhook/${generateWebhookSlug(webhook)}`;
|
|
70
|
+
if (props.type === "document") {
|
|
71
|
+
return documentId;
|
|
52
72
|
}
|
|
53
|
-
|
|
73
|
+
console.warn("[WARNING]: unhandled id generation for navigation item:", props);
|
|
74
|
+
return "unknown-id";
|
|
54
75
|
};
|
|
55
|
-
const getHeadingId = referenceConfig?.getHeadingId ?? getHeadingIdDefault;
|
|
56
|
-
const getModelId = referenceConfig?.getModelId ?? getModelIdDefault;
|
|
57
|
-
const getOperationId = referenceConfig?.getOperationId ?? getOperationIdDefault;
|
|
58
|
-
const getWebhookId = referenceConfig?.getWebhookId ?? getWebhookIdDefault;
|
|
59
|
-
const getTagId = referenceConfig?.getTagId ?? getTagIdDefault;
|
|
60
76
|
const hideModels = referenceConfig?.features?.showModels === false;
|
|
61
77
|
const operationsSorter = referenceConfig?.operationsSorter;
|
|
62
78
|
const tagsSorter = referenceConfig?.tagSort;
|
|
@@ -64,11 +80,7 @@ const getNavigationOptions = (config) => {
|
|
|
64
80
|
hideModels,
|
|
65
81
|
operationsSorter,
|
|
66
82
|
tagsSorter,
|
|
67
|
-
|
|
68
|
-
getModelId,
|
|
69
|
-
getOperationId,
|
|
70
|
-
getWebhookId,
|
|
71
|
-
getTagId
|
|
83
|
+
generateId
|
|
72
84
|
};
|
|
73
85
|
};
|
|
74
86
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/navigation/get-navigation-options.ts"],
|
|
4
|
-
"sourcesContent": ["import { slug } from 'github-slugger'\n\nimport type { TraverseSpecOptions } from '@/navigation/types'\nimport type { DocumentConfiguration } from '@/schemas/workspace-specification/config'\n\n/**\n * Returns options for traversing an OpenAPI document, allowing customization of\n * how IDs and slugs are generated for tags, headings, models, operations, and webhooks.\n * The returned options can be influenced by the provided DocumentConfiguration\n */\nexport const getNavigationOptions = (config?: DocumentConfiguration): TraverseSpecOptions => {\n const referenceConfig = config?.['x-scalar-reference-config']\n\n
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY;
|
|
4
|
+
"sourcesContent": ["import { slug } from 'github-slugger'\n\nimport type { TraverseSpecOptions } from '@/navigation/types'\nimport type { IdGenerator } from '@/schemas/navigation'\nimport type { DocumentConfiguration } from '@/schemas/workspace-specification/config'\n\n/**\n * Returns options for traversing an OpenAPI document, allowing customization of\n * how IDs and slugs are generated for tags, headings, models, operations, and webhooks.\n * The returned options can be influenced by the provided DocumentConfiguration\n */\nexport const getNavigationOptions = (documentName: string, config?: DocumentConfiguration): TraverseSpecOptions => {\n const referenceConfig = config?.['x-scalar-reference-config']\n\n const generateId: IdGenerator = (props) => {\n const documentId = `${slug(documentName)}`\n\n // -------- Default text id generation logic --------\n if (props.type === 'text') {\n if (referenceConfig?.generateHeadingSlug) {\n return referenceConfig?.generateHeadingSlug({ slug: props.slug })\n }\n\n if (props.slug) {\n return `${documentId}/description/${props.slug}`\n }\n\n return `${documentId}/`\n }\n\n // -------- Default tag id generation logic --------\n if (props.type === 'tag') {\n if (referenceConfig?.generateTagSlug) {\n return `${documentId}/tag/${referenceConfig.generateTagSlug(props.tag)}`\n }\n\n return `${documentId}/tag/${slug(props.tag.name ?? '')}`\n }\n\n // -------- Default operation id generation logic --------\n if (props.type === 'operation') {\n const tagId = `${generateId({\n type: 'tag',\n tag: props.parentTag.tag,\n parentId: props.parentTag.id,\n })}`\n\n if (referenceConfig?.generateOperationSlug) {\n return `${tagId}/${referenceConfig.generateOperationSlug({\n path: props.path,\n operationId: props.operation.operationId,\n method: props.method,\n summary: props.operation.summary,\n })}`\n }\n\n return `${tagId}/${props.method}${props.path}`\n }\n\n // -------- Default webhook id generation logic --------\n if (props.type === 'webhook') {\n const prefixTag = props.parentTag\n ? `${generateId({\n type: 'tag',\n parentId: props.parentTag.id,\n tag: props.parentTag.tag,\n })}/`\n : `${documentId}/`\n\n if (referenceConfig?.generateWebhookSlug) {\n return `${prefixTag}webhook/${referenceConfig.generateWebhookSlug({\n name: props.name,\n method: props.method,\n })}`\n }\n\n return `${prefixTag}webhook/${props.method}/${slug(props.name)}`\n }\n\n // -------- Default model id generation logic --------\n if (props.type === 'model') {\n if (!props.name) {\n return `${documentId}/models`\n }\n\n const prefixTag = props.parentTag\n ? `${generateId({\n type: 'tag',\n parentId: props.parentTag.id,\n tag: props.parentTag.tag,\n })}/`\n : `${documentId}/`\n\n if (referenceConfig?.generateModelSlug) {\n return `${prefixTag}model/${referenceConfig.generateModelSlug({\n name: props.name,\n })}`\n }\n\n return `${prefixTag}model/${slug(props.name)}`\n }\n\n if (props.type === 'example') {\n return `${props.parentId}/example/${slug(props.name)}`\n }\n\n if (props.type === 'document') {\n // -------- Default document id generation logic --------\n return documentId\n }\n\n console.warn('[WARNING]: unhandled id generation for navigation item:', props)\n return 'unknown-id'\n }\n\n const hideModels = referenceConfig?.features?.showModels === false\n const operationsSorter: TraverseSpecOptions['operationsSorter'] = referenceConfig?.operationsSorter\n const tagsSorter: TraverseSpecOptions['tagsSorter'] = referenceConfig?.tagSort\n\n return {\n hideModels,\n operationsSorter,\n tagsSorter,\n generateId,\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY;AAWd,MAAM,uBAAuB,CAAC,cAAsB,WAAwD;AACjH,QAAM,kBAAkB,SAAS,2BAA2B;AAE5D,QAAM,aAA0B,CAAC,UAAU;AACzC,UAAM,aAAa,GAAG,KAAK,YAAY,CAAC;AAGxC,QAAI,MAAM,SAAS,QAAQ;AACzB,UAAI,iBAAiB,qBAAqB;AACxC,eAAO,iBAAiB,oBAAoB,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,MAClE;AAEA,UAAI,MAAM,MAAM;AACd,eAAO,GAAG,UAAU,gBAAgB,MAAM,IAAI;AAAA,MAChD;AAEA,aAAO,GAAG,UAAU;AAAA,IACtB;AAGA,QAAI,MAAM,SAAS,OAAO;AACxB,UAAI,iBAAiB,iBAAiB;AACpC,eAAO,GAAG,UAAU,QAAQ,gBAAgB,gBAAgB,MAAM,GAAG,CAAC;AAAA,MACxE;AAEA,aAAO,GAAG,UAAU,QAAQ,KAAK,MAAM,IAAI,QAAQ,EAAE,CAAC;AAAA,IACxD;AAGA,QAAI,MAAM,SAAS,aAAa;AAC9B,YAAM,QAAQ,GAAG,WAAW;AAAA,QAC1B,MAAM;AAAA,QACN,KAAK,MAAM,UAAU;AAAA,QACrB,UAAU,MAAM,UAAU;AAAA,MAC5B,CAAC,CAAC;AAEF,UAAI,iBAAiB,uBAAuB;AAC1C,eAAO,GAAG,KAAK,IAAI,gBAAgB,sBAAsB;AAAA,UACvD,MAAM,MAAM;AAAA,UACZ,aAAa,MAAM,UAAU;AAAA,UAC7B,QAAQ,MAAM;AAAA,UACd,SAAS,MAAM,UAAU;AAAA,QAC3B,CAAC,CAAC;AAAA,MACJ;AAEA,aAAO,GAAG,KAAK,IAAI,MAAM,MAAM,GAAG,MAAM,IAAI;AAAA,IAC9C;AAGA,QAAI,MAAM,SAAS,WAAW;AAC5B,YAAM,YAAY,MAAM,YACpB,GAAG,WAAW;AAAA,QACZ,MAAM;AAAA,QACN,UAAU,MAAM,UAAU;AAAA,QAC1B,KAAK,MAAM,UAAU;AAAA,MACvB,CAAC,CAAC,MACF,GAAG,UAAU;AAEjB,UAAI,iBAAiB,qBAAqB;AACxC,eAAO,GAAG,SAAS,WAAW,gBAAgB,oBAAoB;AAAA,UAChE,MAAM,MAAM;AAAA,UACZ,QAAQ,MAAM;AAAA,QAChB,CAAC,CAAC;AAAA,MACJ;AAEA,aAAO,GAAG,SAAS,WAAW,MAAM,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;AAAA,IAChE;AAGA,QAAI,MAAM,SAAS,SAAS;AAC1B,UAAI,CAAC,MAAM,MAAM;AACf,eAAO,GAAG,UAAU;AAAA,MACtB;AAEA,YAAM,YAAY,MAAM,YACpB,GAAG,WAAW;AAAA,QACZ,MAAM;AAAA,QACN,UAAU,MAAM,UAAU;AAAA,QAC1B,KAAK,MAAM,UAAU;AAAA,MACvB,CAAC,CAAC,MACF,GAAG,UAAU;AAEjB,UAAI,iBAAiB,mBAAmB;AACtC,eAAO,GAAG,SAAS,SAAS,gBAAgB,kBAAkB;AAAA,UAC5D,MAAM,MAAM;AAAA,QACd,CAAC,CAAC;AAAA,MACJ;AAEA,aAAO,GAAG,SAAS,SAAS,KAAK,MAAM,IAAI,CAAC;AAAA,IAC9C;AAEA,QAAI,MAAM,SAAS,WAAW;AAC5B,aAAO,GAAG,MAAM,QAAQ,YAAY,KAAK,MAAM,IAAI,CAAC;AAAA,IACtD;AAEA,QAAI,MAAM,SAAS,YAAY;AAE7B,aAAO;AAAA,IACT;AAEA,YAAQ,KAAK,2DAA2D,KAAK;AAC7E,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,iBAAiB,UAAU,eAAe;AAC7D,QAAM,mBAA4D,iBAAiB;AACnF,QAAM,aAAgD,iBAAiB;AAEvE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TagsMap } from '../../navigation/types.js';
|
|
1
|
+
import type { TagsMap, TraverseSpecOptions } from '../../navigation/types.js';
|
|
2
2
|
type TagMapValue = NonNullable<TagsMap extends Map<string, infer V> ? V : never>;
|
|
3
3
|
/**
|
|
4
4
|
* Gets or creates a tag in the tags dictionary.
|
|
@@ -8,6 +8,11 @@ type TagMapValue = NonNullable<TagsMap extends Map<string, infer V> ? V : never>
|
|
|
8
8
|
* @param name - Name of the tag to get or create
|
|
9
9
|
* @returns The tag object for the given name
|
|
10
10
|
*/
|
|
11
|
-
export declare const getTag: (tagsMap
|
|
11
|
+
export declare const getTag: ({ tagsMap, name, documentId, generateId, }: {
|
|
12
|
+
tagsMap: TagsMap;
|
|
13
|
+
name: string;
|
|
14
|
+
documentId: string;
|
|
15
|
+
generateId: TraverseSpecOptions["generateId"];
|
|
16
|
+
}) => TagMapValue;
|
|
12
17
|
export {};
|
|
13
18
|
//# sourceMappingURL=get-tag.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-tag.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/get-tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"get-tag.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/get-tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAEtE,KAAK,WAAW,GAAG,WAAW,CAAC,OAAO,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;AAEhF;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GAAI,4CAKpB;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;CAC9C,KAAG,WAeH,CAAA"}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
const getTag = (
|
|
1
|
+
const getTag = ({
|
|
2
|
+
tagsMap,
|
|
3
|
+
name,
|
|
4
|
+
documentId,
|
|
5
|
+
generateId
|
|
6
|
+
}) => {
|
|
2
7
|
if (!tagsMap.get(name)) {
|
|
3
|
-
tagsMap.set(name, {
|
|
8
|
+
tagsMap.set(name, {
|
|
9
|
+
id: generateId({
|
|
10
|
+
type: "tag",
|
|
11
|
+
tag: { name },
|
|
12
|
+
parentId: documentId
|
|
13
|
+
}),
|
|
14
|
+
parentId: documentId,
|
|
15
|
+
entries: [],
|
|
16
|
+
tag: { name }
|
|
17
|
+
});
|
|
4
18
|
}
|
|
5
19
|
return tagsMap.get(name);
|
|
6
20
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/navigation/helpers/get-tag.ts"],
|
|
4
|
-
"sourcesContent": ["import type { TagsMap } from '@/navigation/types'\n\ntype TagMapValue = NonNullable<TagsMap extends Map<string, infer V> ? V : never>\n\n/**\n * Gets or creates a tag in the tags dictionary.\n * If the tag doesn't exist, it creates a new tag object with the given name.\n *\n * @param tagsDict - Map of tag names to tag objects\n * @param name - Name of the tag to get or create\n * @returns The tag object for the given name\n */\nexport const getTag = (tagsMap: TagsMap
|
|
5
|
-
"mappings": "AAYO,MAAM,SAAS,CAAC,
|
|
4
|
+
"sourcesContent": ["import type { TagsMap, TraverseSpecOptions } from '@/navigation/types'\n\ntype TagMapValue = NonNullable<TagsMap extends Map<string, infer V> ? V : never>\n\n/**\n * Gets or creates a tag in the tags dictionary.\n * If the tag doesn't exist, it creates a new tag object with the given name.\n *\n * @param tagsDict - Map of tag names to tag objects\n * @param name - Name of the tag to get or create\n * @returns The tag object for the given name\n */\nexport const getTag = ({\n tagsMap,\n name,\n documentId,\n generateId,\n}: {\n tagsMap: TagsMap\n name: string\n documentId: string\n generateId: TraverseSpecOptions['generateId']\n}): TagMapValue => {\n if (!tagsMap.get(name)) {\n tagsMap.set(name, {\n id: generateId({\n type: 'tag',\n tag: { name },\n parentId: documentId,\n }),\n parentId: documentId,\n entries: [],\n tag: { name },\n })\n }\n\n return tagsMap.get(name)! // We can safely assert non-null since we just set the value if it didn't exist\n}\n"],
|
|
5
|
+
"mappings": "AAYO,MAAM,SAAS,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKmB;AACjB,MAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;AACtB,YAAQ,IAAI,MAAM;AAAA,MAChB,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,KAAK,EAAE,KAAK;AAAA,QACZ,UAAU;AAAA,MACZ,CAAC;AAAA,MACD,UAAU;AAAA,MACV,SAAS,CAAC;AAAA,MACV,KAAK,EAAE,KAAK;AAAA,IACd,CAAC;AAAA,EACH;AAEA,SAAO,QAAQ,IAAI,IAAI;AACzB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { TraverseSpecOptions } from '../../navigation/types.js';
|
|
2
2
|
import type { TraversedDescription } from '../../schemas/navigation.js';
|
|
3
|
+
import type { InfoObject } from '../../schemas/v3.1/strict/info.js';
|
|
3
4
|
export declare const DEFAULT_INTRODUCTION_SLUG = "introduction";
|
|
4
5
|
/**
|
|
5
6
|
* Creates a hierarchical navigation structure from markdown headings in an OpenAPI description.
|
|
@@ -16,5 +17,9 @@ export declare const DEFAULT_INTRODUCTION_SLUG = "introduction";
|
|
|
16
17
|
* @param getHeadingId - Function to generate unique IDs for headings
|
|
17
18
|
* @returns Array of navigation entries with their hierarchy
|
|
18
19
|
*/
|
|
19
|
-
export declare const traverseDescription: (
|
|
20
|
+
export declare const traverseDescription: ({ generateId, parentId, info, }: {
|
|
21
|
+
generateId: TraverseSpecOptions["generateId"];
|
|
22
|
+
parentId: string;
|
|
23
|
+
info: InfoObject;
|
|
24
|
+
}) => TraversedDescription[];
|
|
20
25
|
//# sourceMappingURL=traverse-description.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-description.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-description.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"traverse-description.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-description.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,eAAO,MAAM,yBAAyB,iBAAiB,CAAA;AAEvD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,GAAI,iCAIjC;IACD,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;CACjB,KAAG,oBAAoB,EAoEvB,CAAA"}
|
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
import { getHeadingsFromMarkdown, getLowestHeadingLevel } from "../../navigation/helpers/utils.js";
|
|
2
2
|
const DEFAULT_INTRODUCTION_SLUG = "introduction";
|
|
3
|
-
const traverseDescription = (
|
|
4
|
-
|
|
3
|
+
const traverseDescription = ({
|
|
4
|
+
generateId,
|
|
5
|
+
parentId,
|
|
6
|
+
info
|
|
7
|
+
}) => {
|
|
8
|
+
if (!info.description?.trim()) {
|
|
5
9
|
return [];
|
|
6
10
|
}
|
|
7
|
-
const headings = getHeadingsFromMarkdown(description);
|
|
11
|
+
const headings = getHeadingsFromMarkdown(info.description);
|
|
8
12
|
const lowestLevel = getLowestHeadingLevel(headings);
|
|
9
13
|
const entries = [];
|
|
10
14
|
let currentParent = null;
|
|
11
|
-
if (description && !description.trim().startsWith("#")) {
|
|
15
|
+
if (info.description && !info.description.trim().startsWith("#")) {
|
|
12
16
|
const heading = {
|
|
13
17
|
depth: 1,
|
|
14
18
|
value: "Introduction",
|
|
15
19
|
slug: DEFAULT_INTRODUCTION_SLUG
|
|
16
20
|
};
|
|
17
|
-
const id =
|
|
21
|
+
const id = generateId({
|
|
22
|
+
type: "text",
|
|
23
|
+
depth: heading.depth,
|
|
24
|
+
slug: heading.slug,
|
|
25
|
+
parentId,
|
|
26
|
+
info,
|
|
27
|
+
value: heading.value
|
|
28
|
+
});
|
|
18
29
|
const title = heading.value;
|
|
19
30
|
const entry = {
|
|
20
31
|
id,
|
|
@@ -28,7 +39,14 @@ const traverseDescription = (description, getHeadingId) => {
|
|
|
28
39
|
continue;
|
|
29
40
|
}
|
|
30
41
|
const entry = {
|
|
31
|
-
id:
|
|
42
|
+
id: generateId({
|
|
43
|
+
type: "text",
|
|
44
|
+
depth: heading.depth,
|
|
45
|
+
slug: heading.slug,
|
|
46
|
+
parentId,
|
|
47
|
+
info,
|
|
48
|
+
value: heading.value
|
|
49
|
+
}),
|
|
32
50
|
title: heading.value,
|
|
33
51
|
type: "text"
|
|
34
52
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/navigation/helpers/traverse-description.ts"],
|
|
4
|
-
"sourcesContent": ["import { getHeadingsFromMarkdown, getLowestHeadingLevel } from '@/navigation/helpers/utils'\nimport type { Heading } from '@/navigation/types'\nimport type { TraversedDescription } from '@/schemas/navigation'\n\nexport const DEFAULT_INTRODUCTION_SLUG = 'introduction'\n\n/**\n * Creates a hierarchical navigation structure from markdown headings in an OpenAPI description.\n *\n * The function processes markdown headings to create a two-level navigation tree:\n * - Level 1: Main sections (based on the lowest heading level found)\n * - Level 2: Subsections (one level deeper than the main sections)\n *\n * If the description starts with content rather than a heading, an \"Introduction\" section\n * is automatically added as the first entry.\n *\n * @param description - The markdown description text to process\n * @param entitiesMap - Map to store heading IDs and titles for mobile header navigation\n * @param getHeadingId - Function to generate unique IDs for headings\n * @returns Array of navigation entries with their hierarchy\n */\nexport const traverseDescription = (\n
|
|
5
|
-
"mappings": "AAAA,SAAS,yBAAyB,6BAA6B;
|
|
4
|
+
"sourcesContent": ["import { getHeadingsFromMarkdown, getLowestHeadingLevel } from '@/navigation/helpers/utils'\nimport type { Heading, TraverseSpecOptions } from '@/navigation/types'\nimport type { TraversedDescription } from '@/schemas/navigation'\nimport type { InfoObject } from '@/schemas/v3.1/strict/info'\n\nexport const DEFAULT_INTRODUCTION_SLUG = 'introduction'\n\n/**\n * Creates a hierarchical navigation structure from markdown headings in an OpenAPI description.\n *\n * The function processes markdown headings to create a two-level navigation tree:\n * - Level 1: Main sections (based on the lowest heading level found)\n * - Level 2: Subsections (one level deeper than the main sections)\n *\n * If the description starts with content rather than a heading, an \"Introduction\" section\n * is automatically added as the first entry.\n *\n * @param description - The markdown description text to process\n * @param entitiesMap - Map to store heading IDs and titles for mobile header navigation\n * @param getHeadingId - Function to generate unique IDs for headings\n * @returns Array of navigation entries with their hierarchy\n */\nexport const traverseDescription = ({\n generateId,\n parentId,\n info,\n}: {\n generateId: TraverseSpecOptions['generateId']\n parentId: string\n info: InfoObject\n}): TraversedDescription[] => {\n if (!info.description?.trim()) {\n return []\n }\n\n const headings = getHeadingsFromMarkdown(info.description)\n const lowestLevel = getLowestHeadingLevel(headings)\n\n const entries: TraversedDescription[] = []\n let currentParent: TraversedDescription | null = null\n\n // Add \"Introduction\" as the first heading\n if (info.description && !info.description.trim().startsWith('#')) {\n const heading: Heading = {\n depth: 1,\n value: 'Introduction',\n slug: DEFAULT_INTRODUCTION_SLUG,\n }\n\n const id = generateId({\n type: 'text',\n depth: heading.depth,\n slug: heading.slug,\n parentId: parentId,\n info: info,\n value: heading.value,\n })\n const title = heading.value\n\n const entry = {\n id,\n title,\n type: 'text',\n } satisfies TraversedDescription\n\n // Push to entries\n entries.push(entry)\n }\n\n // Traverse for the rest\n for (const heading of headings) {\n if (heading.depth !== lowestLevel && heading.depth !== lowestLevel + 1) {\n continue\n }\n\n const entry: TraversedDescription = {\n id: generateId({\n type: 'text',\n depth: heading.depth,\n slug: heading.slug,\n parentId: parentId,\n info: info,\n value: heading.value,\n }),\n title: heading.value,\n type: 'text',\n }\n\n if (heading.depth === lowestLevel) {\n entry.children = []\n entries.push(entry)\n currentParent = entry\n } else if (currentParent) {\n currentParent.children?.push(entry)\n }\n }\n\n return entries\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,yBAAyB,6BAA6B;AAKxD,MAAM,4BAA4B;AAiBlC,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,MAI8B;AAC5B,MAAI,CAAC,KAAK,aAAa,KAAK,GAAG;AAC7B,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAW,wBAAwB,KAAK,WAAW;AACzD,QAAM,cAAc,sBAAsB,QAAQ;AAElD,QAAM,UAAkC,CAAC;AACzC,MAAI,gBAA6C;AAGjD,MAAI,KAAK,eAAe,CAAC,KAAK,YAAY,KAAK,EAAE,WAAW,GAAG,GAAG;AAChE,UAAM,UAAmB;AAAA,MACvB,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAEA,UAAM,KAAK,WAAW;AAAA,MACpB,MAAM;AAAA,MACN,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA,OAAO,QAAQ;AAAA,IACjB,CAAC;AACD,UAAM,QAAQ,QAAQ;AAEtB,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AAGA,YAAQ,KAAK,KAAK;AAAA,EACpB;AAGA,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,UAAU,eAAe,QAAQ,UAAU,cAAc,GAAG;AACtE;AAAA,IACF;AAEA,UAAM,QAA8B;AAAA,MAClC,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO,QAAQ;AAAA,QACf,MAAM,QAAQ;AAAA,QACd;AAAA,QACA;AAAA,QACA,OAAO,QAAQ;AAAA,MACjB,CAAC;AAAA,MACD,OAAO,QAAQ;AAAA,MACf,MAAM;AAAA,IACR;AAEA,QAAI,QAAQ,UAAU,aAAa;AACjC,YAAM,WAAW,CAAC;AAClB,cAAQ,KAAK,KAAK;AAClB,sBAAgB;AAAA,IAClB,WAAW,eAAe;AACxB,oBAAc,UAAU,KAAK,KAAK;AAAA,IACpC;AAAA,EACF;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -10,7 +10,10 @@ import type { DocumentConfiguration } from '../../schemas/workspace-specificatio
|
|
|
10
10
|
* - Tag-based organization of operations and webhooks
|
|
11
11
|
* - Optional schema/model documentation
|
|
12
12
|
*/
|
|
13
|
-
export declare const traverseDocument: (document: OpenApiDocument, config?: DocumentConfiguration) => {
|
|
14
|
-
|
|
13
|
+
export declare const traverseDocument: (documentName: string, document: OpenApiDocument, config?: DocumentConfiguration) => {
|
|
14
|
+
id: string;
|
|
15
|
+
type: "document";
|
|
16
|
+
title: string;
|
|
17
|
+
children: TraversedEntry[];
|
|
15
18
|
};
|
|
16
19
|
//# sourceMappingURL=traverse-document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-document.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-document.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"traverse-document.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-document.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAA;AAQrF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,cAAc,MAAM,EAAE,UAAU,eAAe,EAAE,SAAS,qBAAqB;;;;;CA6F/G,CAAA"}
|