@scalar/workspace-store 0.10.2 → 0.12.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +115 -3
  3. package/dist/client.d.ts +14 -7
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +175 -69
  6. package/dist/client.js.map +3 -3
  7. package/dist/helpers/apply-selective-updates.d.ts +1 -1
  8. package/dist/helpers/apply-selective-updates.d.ts.map +1 -1
  9. package/dist/helpers/apply-selective-updates.js +1 -1
  10. package/dist/helpers/apply-selective-updates.js.map +1 -1
  11. package/dist/helpers/overrides-proxy.d.ts +5 -0
  12. package/dist/helpers/overrides-proxy.d.ts.map +1 -0
  13. package/dist/helpers/overrides-proxy.js +48 -0
  14. package/dist/helpers/overrides-proxy.js.map +7 -0
  15. package/dist/mutators/index.js +1 -1
  16. package/dist/mutators/index.js.map +2 -2
  17. package/dist/navigation/helpers/traverse-schemas.js +2 -2
  18. package/dist/navigation/helpers/traverse-schemas.js.map +2 -2
  19. package/dist/navigation/helpers/traverse-tags.js +2 -2
  20. package/dist/navigation/helpers/traverse-tags.js.map +2 -2
  21. package/dist/schemas/inmemory-workspace.d.ts +5633 -0
  22. package/dist/schemas/inmemory-workspace.d.ts.map +1 -1
  23. package/dist/schemas/inmemory-workspace.js +3 -1
  24. package/dist/schemas/inmemory-workspace.js.map +2 -2
  25. package/dist/schemas/reference-config/index.d.ts +2 -2
  26. package/dist/schemas/reference-config/index.d.ts.map +1 -1
  27. package/dist/schemas/reference-config/index.js.map +2 -2
  28. package/dist/schemas/typebox-types.d.ts +14 -0
  29. package/dist/schemas/typebox-types.d.ts.map +1 -0
  30. package/dist/schemas/typebox-types.js +19 -0
  31. package/dist/schemas/typebox-types.js.map +7 -0
  32. package/dist/schemas/v3.1/type-guard.d.ts +4 -2
  33. package/dist/schemas/v3.1/type-guard.d.ts.map +1 -1
  34. package/dist/schemas/v3.1/type-guard.js +3 -1
  35. package/dist/schemas/v3.1/type-guard.js.map +2 -2
  36. package/dist/server.d.ts.map +1 -1
  37. package/dist/server.js +6 -4
  38. package/dist/server.js.map +2 -2
  39. package/dist/types.d.ts +6 -39
  40. package/dist/types.d.ts.map +1 -1
  41. package/package.json +18 -9
  42. package/dist/helpers/proxy.d.ts +0 -63
  43. package/dist/helpers/proxy.d.ts.map +0 -1
  44. package/dist/helpers/proxy.js +0 -103
  45. package/dist/helpers/proxy.js.map +0 -7
@@ -1,103 +0,0 @@
1
- import { isReactive, toRaw } from "vue";
2
- import { getValueByPath, parseJsonPointer } from "./json-path-utils.js";
3
- import { isLocalRef, isObject } from "./general.js";
4
- const TARGET_SYMBOL = Symbol("target");
5
- function createProxyHandler(sourceDocument, resolvedProxyCache) {
6
- return {
7
- get(target, property, receiver) {
8
- if (property === TARGET_SYMBOL) {
9
- return target;
10
- }
11
- if (property === "__isProxy") {
12
- return true;
13
- }
14
- const value = Reflect.get(target, property, receiver);
15
- const deepResolveNestedRefs = (value2, originalRef) => {
16
- if (!isObject(value2) && !Array.isArray(value2)) {
17
- return value2;
18
- }
19
- if ("$ref" in value2) {
20
- const ref = value2.$ref;
21
- if (isLocalRef(ref)) {
22
- const referencePath = parseJsonPointer(ref);
23
- const resolvedValue = getValueByPath(sourceDocument, referencePath);
24
- return deepResolveNestedRefs(resolvedValue, originalRef ?? ref);
25
- }
26
- }
27
- if (originalRef) {
28
- return createMagicProxy({ ...value2, "x-original-ref": originalRef }, sourceDocument, resolvedProxyCache);
29
- }
30
- return createMagicProxy(value2, sourceDocument, resolvedProxyCache);
31
- };
32
- return deepResolveNestedRefs(value);
33
- },
34
- set(target, property, newValue, receiver) {
35
- const rawTarget = isReactive(target) ? toRaw(target) : target;
36
- const currentValue = rawTarget[property];
37
- if (isObject(currentValue) && "$ref" in currentValue && typeof currentValue.$ref === "string" && isLocalRef(currentValue.$ref)) {
38
- const referencePath = parseJsonPointer(currentValue.$ref);
39
- const targetObject = getValueByPath(sourceDocument, referencePath.slice(0, -1));
40
- const lastPathSegment = referencePath[referencePath.length - 1];
41
- if (targetObject && lastPathSegment) {
42
- targetObject[lastPathSegment] = newValue;
43
- }
44
- } else {
45
- Reflect.set(rawTarget, property, newValue, receiver);
46
- }
47
- return true;
48
- },
49
- has(target, key) {
50
- if (typeof key === "string" && key !== "$ref" && typeof target.$ref === "string" && isLocalRef(target.$ref)) {
51
- const referencePath = parseJsonPointer(target["$ref"]);
52
- const resolvedValue = getValueByPath(sourceDocument, referencePath);
53
- return resolvedValue ? key in resolvedValue : false;
54
- }
55
- return key in target;
56
- },
57
- ownKeys(target) {
58
- if ("$ref" in target && typeof target.$ref === "string" && isLocalRef(target.$ref)) {
59
- const referencePath = parseJsonPointer(target["$ref"]);
60
- const resolvedValue = getValueByPath(sourceDocument, referencePath);
61
- return resolvedValue ? Reflect.ownKeys(resolvedValue) : [];
62
- }
63
- return Reflect.ownKeys(target);
64
- },
65
- getOwnPropertyDescriptor(target, key) {
66
- if ("$ref" in target && key !== "$ref" && typeof target.$ref === "string" && isLocalRef(target.$ref)) {
67
- const referencePath = parseJsonPointer(target["$ref"]);
68
- const resolvedValue = getValueByPath(sourceDocument, referencePath);
69
- if (resolvedValue) {
70
- return Object.getOwnPropertyDescriptor(resolvedValue, key);
71
- }
72
- }
73
- return Object.getOwnPropertyDescriptor(target, key);
74
- }
75
- };
76
- }
77
- function createMagicProxy(targetObject, sourceDocument = targetObject, resolvedProxyCache) {
78
- if (!isObject(targetObject) && !Array.isArray(targetObject)) {
79
- return targetObject;
80
- }
81
- const rawTarget = isReactive(targetObject) ? toRaw(targetObject) : targetObject;
82
- if (resolvedProxyCache?.has(rawTarget)) {
83
- const cachedValue = resolvedProxyCache.get(rawTarget);
84
- if (cachedValue) {
85
- return cachedValue;
86
- }
87
- }
88
- const handler = createProxyHandler(sourceDocument, resolvedProxyCache);
89
- const proxy = new Proxy(rawTarget, handler);
90
- if (resolvedProxyCache) {
91
- resolvedProxyCache.set(rawTarget, proxy);
92
- }
93
- return proxy;
94
- }
95
- function getRaw(obj) {
96
- return obj[TARGET_SYMBOL];
97
- }
98
- export {
99
- TARGET_SYMBOL,
100
- createMagicProxy,
101
- getRaw
102
- };
103
- //# sourceMappingURL=proxy.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/helpers/proxy.ts"],
4
- "sourcesContent": ["import { isReactive, toRaw } from 'vue'\nimport { getValueByPath, parseJsonPointer } from './json-path-utils'\nimport { isLocalRef, isObject } from './general'\nimport type { UnknownObject } from './general'\n\nexport const TARGET_SYMBOL = Symbol('target')\n\n/**\n * Creates a proxy handler that automatically resolves JSON references ($ref) in an object.\n * The handler intercepts property access, assignment, and property enumeration to automatically\n * resolve any $ref references to their target values in the source document.\n *\n * @param sourceDocument - The source document containing the reference targets\n * @param resolvedProxyCache - Optional cache to store resolved proxies and prevent duplicate proxies\n * @returns A proxy handler that automatically resolves $ref references\n */\nfunction createProxyHandler(\n sourceDocument: UnknownObject | UnknownObject[],\n resolvedProxyCache?: WeakMap<object, UnknownObject | UnknownObject[]>,\n): ProxyHandler<UnknownObject | UnknownObject[]> {\n return {\n get(target, property, receiver) {\n if (property === TARGET_SYMBOL) {\n return target\n }\n\n if (property === '__isProxy') {\n return true\n }\n\n const value = Reflect.get(target, property, receiver)\n\n /**\n * Recursively resolves nested references in an object.\n * If the value is not an object, returns it as is.\n * If the value has a $ref property:\n * - For local references: resolves the reference and continues resolving nested refs\n * - For all other objects: creates a proxy for lazy resolution\n */\n const deepResolveNestedRefs = (value: unknown, originalRef?: string) => {\n if (!isObject(value) && !Array.isArray(value)) {\n return value\n }\n\n if ('$ref' in value) {\n const ref = value.$ref as string\n\n if (isLocalRef(ref)) {\n const referencePath = parseJsonPointer(ref)\n const resolvedValue = getValueByPath(sourceDocument, referencePath)\n\n // preserve the first $ref to maintain the original reference\n return deepResolveNestedRefs(resolvedValue, originalRef ?? ref)\n }\n }\n\n if (originalRef) {\n return createMagicProxy({ ...value, 'x-original-ref': originalRef }, sourceDocument, resolvedProxyCache)\n }\n\n return createMagicProxy(value, sourceDocument, resolvedProxyCache)\n }\n\n return deepResolveNestedRefs(value)\n },\n\n set(target: UnknownObject, property: string, newValue: unknown, receiver: UnknownObject) {\n const rawTarget = isReactive(target) ? toRaw(target) : target\n const currentValue = rawTarget[property]\n\n if (\n isObject(currentValue) &&\n '$ref' in currentValue &&\n typeof currentValue.$ref === 'string' &&\n isLocalRef(currentValue.$ref)\n ) {\n const referencePath = parseJsonPointer(currentValue.$ref)\n const targetObject = getValueByPath(sourceDocument, referencePath.slice(0, -1)) as UnknownObject\n const lastPathSegment = referencePath[referencePath.length - 1]\n\n if (targetObject && lastPathSegment) {\n targetObject[lastPathSegment] = newValue\n }\n } else {\n Reflect.set(rawTarget, property, newValue, receiver)\n }\n return true\n },\n\n has(target: UnknownObject, key: string) {\n if (typeof key === 'string' && key !== '$ref' && typeof target.$ref === 'string' && isLocalRef(target.$ref)) {\n const referencePath = parseJsonPointer(target['$ref'])\n const resolvedValue = getValueByPath(sourceDocument, referencePath) as UnknownObject\n\n return resolvedValue ? key in resolvedValue : false\n }\n\n return key in target\n },\n\n ownKeys(target: UnknownObject) {\n if ('$ref' in target && typeof target.$ref === 'string' && isLocalRef(target.$ref)) {\n const referencePath = parseJsonPointer(target['$ref'])\n const resolvedValue = getValueByPath(sourceDocument, referencePath)\n\n return resolvedValue ? Reflect.ownKeys(resolvedValue) : []\n }\n\n return Reflect.ownKeys(target)\n },\n\n getOwnPropertyDescriptor(target: UnknownObject, key: string) {\n if ('$ref' in target && key !== '$ref' && typeof target.$ref === 'string' && isLocalRef(target.$ref)) {\n const referencePath = parseJsonPointer(target['$ref'])\n const resolvedValue = getValueByPath(sourceDocument, referencePath)\n\n if (resolvedValue) {\n return Object.getOwnPropertyDescriptor(resolvedValue, key)\n }\n }\n\n return Object.getOwnPropertyDescriptor(target, key)\n },\n }\n}\n\n/**\n * Creates a proxy that automatically resolves JSON references ($ref) in an object.\n * The proxy intercepts property access and automatically resolves any $ref references\n * to their target values in the source document.\n *\n * @param targetObject - The object to create a proxy for\n * @param sourceDocument - The source document containing the reference targets (defaults to targetObject)\n * @param resolvedProxyCache - Optional cache to store resolved proxies and prevent duplicate proxies\n * @returns A proxy that automatically resolves $ref references\n *\n * @example\n * // Basic usage with local references\n * const doc = {\n * components: {\n * schemas: {\n * User: { type: 'object', properties: { name: { type: 'string' } } }\n * }\n * },\n * paths: {\n * '/users': {\n * get: {\n * responses: {\n * 200: {\n * content: {\n * 'application/json': {\n * schema: { $ref: '#/components/schemas/User' }\n * }\n * }\n * }\n * }\n * }\n * }\n * }\n * }\n *\n * const proxy = createMagicProxy(doc)\n * // Accessing the schema will automatically resolve the $ref\n * console.log(proxy.paths['/users'].get.responses[200].content['application/json'].schema)\n * // Output: { type: 'object', properties: { name: { type: 'string' } } }\n *\n * @example\n * // Using with a cache to prevent duplicate proxies\n * const cache = new WeakMap()\n * const proxy1 = createMagicProxy(doc, doc, cache)\n * const proxy2 = createMagicProxy(doc, doc, cache)\n * // proxy1 and proxy2 are the same instance due to caching\n * console.log(proxy1 === proxy2) // true\n */\nexport function createMagicProxy<T extends UnknownObject | UnknownObject[]>(\n targetObject: T,\n sourceDocument: T = targetObject,\n resolvedProxyCache?: WeakMap<object, T>,\n): T {\n if (!isObject(targetObject) && !Array.isArray(targetObject)) {\n return targetObject\n }\n\n const rawTarget = isReactive(targetObject) ? toRaw(targetObject) : targetObject\n\n // check for cached results\n if (resolvedProxyCache?.has(rawTarget)) {\n const cachedValue = resolvedProxyCache.get(rawTarget)\n\n if (cachedValue) {\n return cachedValue\n }\n }\n\n // Create a handler with the correct context\n const handler = createProxyHandler(sourceDocument, resolvedProxyCache)\n const proxy = new Proxy<T>(rawTarget, handler)\n\n if (resolvedProxyCache) {\n resolvedProxyCache.set(rawTarget, proxy)\n }\n\n return proxy\n}\n\n/**\n * Gets the raw (non-proxied) version of an object created by createMagicProxy.\n * This is useful when you need to access the original object without the magic proxy wrapper.\n *\n * @param obj - The magic proxy object to get the raw version of\n * @returns The raw version of the object\n * @example\n * const proxy = createMagicProxy({ foo: { $ref: '#/bar' } })\n * const raw = getRaw(proxy) // { foo: { $ref: '#/bar' } }\n */\nexport function getRaw<T extends UnknownObject>(obj: T): T {\n return (obj as T & { [TARGET_SYMBOL]: T })[TARGET_SYMBOL]\n}\n"],
5
- "mappings": "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",
6
- "names": ["value"]
7
- }