@scalar/workspace-store 0.32.1 → 0.34.2
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 +89 -0
- package/dist/client.js +1 -1
- package/dist/client.js.map +2 -2
- package/dist/entities/auth/schema.d.ts +10 -0
- package/dist/entities/auth/schema.d.ts.map +1 -1
- package/dist/events/definitions/operation.d.ts +14 -0
- package/dist/events/definitions/operation.d.ts.map +1 -1
- package/dist/events/definitions/tag.d.ts +12 -6
- package/dist/events/definitions/tag.d.ts.map +1 -1
- package/dist/events/definitions/ui.d.ts +21 -8
- package/dist/events/definitions/ui.d.ts.map +1 -1
- package/dist/events/definitions/workspace.d.ts +4 -0
- package/dist/events/definitions/workspace.d.ts.map +1 -1
- package/dist/mutators/index.d.ts +4 -0
- package/dist/mutators/index.d.ts.map +1 -1
- package/dist/mutators/operation/index.d.ts +1 -0
- package/dist/mutators/operation/index.d.ts.map +1 -1
- package/dist/mutators/operation/index.js +3 -1
- package/dist/mutators/operation/index.js.map +2 -2
- package/dist/mutators/operation/operation.d.ts +9 -1
- package/dist/mutators/operation/operation.d.ts.map +1 -1
- package/dist/mutators/operation/operation.js +31 -36
- package/dist/mutators/operation/operation.js.map +2 -2
- package/dist/mutators/operation/parameters.d.ts.map +1 -1
- package/dist/mutators/operation/parameters.js +7 -8
- package/dist/mutators/operation/parameters.js.map +2 -2
- package/dist/mutators/server.d.ts.map +1 -1
- package/dist/mutators/server.js +5 -1
- package/dist/mutators/server.js.map +2 -2
- package/dist/mutators/tag.d.ts +8 -0
- package/dist/mutators/tag.d.ts.map +1 -1
- package/dist/mutators/tag.js +55 -12
- package/dist/mutators/tag.js.map +2 -2
- package/dist/mutators/workspace.js +1 -1
- package/dist/mutators/workspace.js.map +2 -2
- package/dist/navigation/helpers/get-tag-entries.d.ts +22 -0
- package/dist/navigation/helpers/get-tag-entries.d.ts.map +1 -0
- package/dist/navigation/helpers/get-tag-entries.js +30 -0
- package/dist/navigation/helpers/get-tag-entries.js.map +7 -0
- package/dist/navigation/helpers/traverse-examples.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-examples.js +1 -1
- package/dist/navigation/helpers/traverse-examples.js.map +2 -2
- package/dist/navigation/helpers/update-order-ids.d.ts +29 -0
- package/dist/navigation/helpers/update-order-ids.d.ts.map +1 -0
- package/dist/navigation/helpers/update-order-ids.js +54 -0
- package/dist/navigation/helpers/update-order-ids.js.map +7 -0
- package/dist/navigation/index.d.ts +1 -0
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +3 -1
- package/dist/navigation/index.js.map +2 -2
- package/dist/persistence/index.d.ts +16 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +17 -1
- package/dist/persistence/index.js.map +2 -2
- package/dist/persistence/indexdb.d.ts.map +1 -1
- package/dist/persistence/indexdb.js +1 -2
- package/dist/persistence/indexdb.js.map +2 -2
- package/dist/schemas/extensions/operation/x-draft-examples.d.ts +7 -0
- package/dist/schemas/extensions/operation/x-draft-examples.d.ts.map +1 -0
- package/dist/schemas/extensions/operation/x-draft-examples.js +8 -0
- package/dist/schemas/extensions/operation/x-draft-examples.js.map +7 -0
- package/dist/schemas/extensions/tag/index.d.ts +2 -0
- package/dist/schemas/extensions/tag/index.d.ts.map +1 -0
- package/dist/schemas/extensions/tag/index.js +1 -0
- package/dist/schemas/extensions/tag/index.js.map +7 -0
- package/dist/schemas/extensions/tag/x-tag-groups.d.ts +1 -2
- package/dist/schemas/extensions/tag/x-tag-groups.d.ts.map +1 -1
- package/dist/schemas/extensions/tag/x-tag-groups.js.map +1 -1
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.d.ts +2 -2
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.d.ts.map +1 -1
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.js +1 -1
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.js.map +2 -2
- package/dist/schemas/inmemory-workspace.d.ts +42 -5
- package/dist/schemas/inmemory-workspace.d.ts.map +1 -1
- package/dist/schemas/inmemory-workspace.js +3 -1
- package/dist/schemas/inmemory-workspace.js.map +2 -2
- package/dist/schemas/reference-config/index.d.ts +2 -0
- package/dist/schemas/reference-config/index.d.ts.map +1 -1
- package/dist/schemas/reference-config/settings.d.ts +2 -0
- package/dist/schemas/reference-config/settings.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/openapi-document.d.ts +70 -0
- package/dist/schemas/v3.1/strict/openapi-document.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/operation.d.ts +4 -1
- package/dist/schemas/v3.1/strict/operation.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/operation.js +3 -1
- package/dist/schemas/v3.1/strict/operation.js.map +2 -2
- package/dist/schemas/workspace-specification/index.d.ts +1 -1
- package/dist/schemas/workspace.d.ts +62 -5646
- package/dist/schemas/workspace.d.ts.map +1 -1
- package/dist/schemas/workspace.js +4 -16
- package/dist/schemas/workspace.js.map +2 -2
- package/dist/server.d.ts +1 -1
- package/package.json +11 -6
|
@@ -242,6 +242,10 @@ const createWorkspaceStorePersistence = async () => {
|
|
|
242
242
|
authTable.deleteRange([id])
|
|
243
243
|
]);
|
|
244
244
|
},
|
|
245
|
+
/**
|
|
246
|
+
* Deletes a single document and all related records (overrides, history, auth, etc.)
|
|
247
|
+
* for the given workspace and document name from all relevant tables.
|
|
248
|
+
*/
|
|
245
249
|
deleteDocument: async (workspaceId, documentName) => {
|
|
246
250
|
await Promise.all([
|
|
247
251
|
documentsTable.deleteItem({ workspaceId, documentName }),
|
|
@@ -252,6 +256,17 @@ const createWorkspaceStorePersistence = async () => {
|
|
|
252
256
|
authTable.deleteItem({ workspaceId, documentName })
|
|
253
257
|
]);
|
|
254
258
|
},
|
|
259
|
+
/**
|
|
260
|
+
* Updates the name of an existing workspace.
|
|
261
|
+
* Returns the updated workspace object, or undefined if the workspace does not exist.
|
|
262
|
+
*/
|
|
263
|
+
updateName: async ({ namespace, slug }, name) => {
|
|
264
|
+
const workspace = await workspaceTable.getItem({ namespace, slug });
|
|
265
|
+
if (!workspace) {
|
|
266
|
+
return void 0;
|
|
267
|
+
}
|
|
268
|
+
return await workspaceTable.addItem({ namespace, slug }, { ...workspace, name });
|
|
269
|
+
},
|
|
255
270
|
/**
|
|
256
271
|
* Checks if a workspace with the given ID exists in the store.
|
|
257
272
|
*/
|
|
@@ -265,6 +280,7 @@ const createWorkspaceStorePersistence = async () => {
|
|
|
265
280
|
};
|
|
266
281
|
};
|
|
267
282
|
export {
|
|
268
|
-
createWorkspaceStorePersistence
|
|
283
|
+
createWorkspaceStorePersistence,
|
|
284
|
+
getWorkspaceId
|
|
269
285
|
};
|
|
270
286
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/persistence/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\nimport type { PathMethodHistory } from '@/entities/history/schema'\nimport { createIndexDbConnection } from '@/persistence/indexdb'\nimport type { InMemoryWorkspace } from '@/schemas/inmemory-workspace'\nimport type { WorkspaceMeta } from '@/schemas/workspace'\n\ntype WorkspaceKey = {\n namespace?: string\n slug: string\n}\n\ntype WorkspaceStoreShape = {\n teamUid: string\n name: string\n workspace: InMemoryWorkspace\n}\n\n/** Generates a workspace ID from namespace and slug. */\nconst getWorkspaceId = (namespace: string, slug: string) => `${namespace}/${slug}`\n\n/**\n * Creates the persistence layer for the workspace store using IndexedDB.\n * This sets up all the required tables for storing workspace chunk information,\n * such as workspace meta, documents, original documents, intermediate documents, overrides, etc.\n * Each logical group (meta, documents, etc) gets its own table keyed appropriately for efficient sub-document access.\n * Returns an object containing `meta`, `documents`, `originalDocuments`, `intermediateDocuments`, `overrides`,\n * `documentMeta`, `documentConfigs`, and `workspace` sections, each exposing a `setItem` method\n * for upsetting records, and in the case of `workspace`, also `getItem` and `deleteItem`.\n */\nexport const createWorkspaceStorePersistence = async () => {\n // Create the database connection and setup all required tables for workspace storage.\n const connection = await createIndexDbConnection({\n name: 'scalar-workspace-store',\n version: 1,\n tables: {\n workspace: {\n schema: Type.Object({\n /** Visual name for a given workspace */\n name: Type.String(),\n /** When logged in all new workspaces (remote and local) are scoped to a team */\n teamUid: Type.String({ default: 'local' }),\n /** Namespace associated with a remote workspace */\n namespace: Type.String({ default: 'local' }),\n /** Slug associated with a remote workspace */\n slug: Type.String({ default: 'local' }),\n }),\n keyPath: ['namespace', 'slug'],\n indexes: {\n teamUid: ['teamUid'],\n },\n },\n meta: {\n schema: Type.Object({ workspaceId: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId'],\n },\n documents: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n originalDocuments: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n intermediateDocuments: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n overrides: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n history: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n auth: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n },\n })\n\n // Tables wrappers for each logical section.\n const workspaceTable = connection.get('workspace')\n const metaTable = connection.get('meta')\n const documentsTable = connection.get('documents')\n const originalDocumentTable = connection.get('originalDocuments')\n const intermediateDocumentTable = connection.get('intermediateDocuments')\n const overridesTable = connection.get('overrides')\n const historyTable = connection.get('history')\n const authTable = connection.get('auth')\n\n // The returned persistence API with logical sections for each table and mapping.\n return {\n close: () => {\n connection.closeDatabase()\n },\n meta: {\n /**\n * Set meta data for a workspace.\n */\n setItem: async (workspaceId: string, data: WorkspaceMeta) => {\n await metaTable.addItem({ workspaceId }, { data })\n },\n },\n documents: {\n /**\n * Set (persist) a workspace document using workspaceId and documentName as composite key.\n */\n setItem: async (workspaceId: string, documentName: string, data: InMemoryWorkspace['documents'][string]) => {\n await documentsTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n originalDocuments: {\n /**\n * Set an original (raw) document for a workspace/document pair.\n */\n setItem: async (\n workspaceId: string,\n documentName: string,\n data: InMemoryWorkspace['originalDocuments'][string],\n ) => {\n await originalDocumentTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n intermediateDocuments: {\n /**\n * Set an intermediate (transformed) document for a workspace/document pair.\n */\n setItem: async (\n workspaceId: string,\n documentName: string,\n data: InMemoryWorkspace['intermediateDocuments'][string],\n ) => {\n await intermediateDocumentTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n overrides: {\n /**\n * Set document overrides for a workspace/document pair.\n */\n setItem: async (workspaceId: string, documentName: string, data: InMemoryWorkspace['overrides'][string]) => {\n await overridesTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n history: {\n /**\n * Set history for a document.\n */\n setItem: async (workspaceId: string, documentName: string, data: PathMethodHistory) => {\n await historyTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n auth: {\n /**\n * Set auth for a document.\n */\n setItem: async (workspaceId: string, documentName: string, data: InMemoryWorkspace['auth'][string]) => {\n await authTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n workspace: {\n /**\n * Retrieves a workspace by its ID.\n * Returns undefined if the workspace does not exist.\n * Gathers all workspace 'chunk' tables and assembles a full workspace shape.\n */\n getItem: async ({\n namespace,\n slug,\n }: Required<WorkspaceKey>): Promise<(WorkspaceStoreShape & Required<WorkspaceKey>) | undefined> => {\n const workspace = await workspaceTable.getItem({ namespace, slug })\n\n if (!workspace) {\n return undefined\n }\n\n // Create a composite key for the workspace chunks.\n const id = getWorkspaceId(namespace, slug)\n\n // Retrieve all chunk records for this workspace.\n const workspaceDocuments = await documentsTable.getRange([id])\n const workspaceOriginalDocuments = await originalDocumentTable.getRange([id])\n const workspaceIntermediateDocuments = await intermediateDocumentTable.getRange([id])\n const workspaceOverrides = await overridesTable.getRange([id])\n const workspaceMeta = await metaTable.getItem({ workspaceId: id })\n const workspaceHistory = await historyTable.getRange([id])\n const workspaceAuth = await authTable.getRange([id])\n\n // Compose the workspace structure from table records.\n return {\n name: workspace.name,\n teamUid: workspace.teamUid,\n namespace: workspace.namespace,\n slug: workspace.slug,\n workspace: {\n documents: Object.fromEntries(workspaceDocuments.map((item) => [item.documentName, item.data])),\n originalDocuments: Object.fromEntries(\n workspaceOriginalDocuments.map((item) => [item.documentName, item.data]),\n ),\n intermediateDocuments: Object.fromEntries(\n workspaceIntermediateDocuments.map((item) => [item.documentName, item.data]),\n ),\n overrides: Object.fromEntries(workspaceOverrides.map((item) => [item.documentName, item.data])),\n meta: workspaceMeta?.data,\n history: Object.fromEntries(workspaceHistory.map((item) => [item.documentName, item.data])),\n auth: Object.fromEntries(workspaceAuth.map((item) => [item.documentName, item.data])),\n },\n }\n },\n\n /**\n * Retrieves all workspaces from the database.\n * Returns only the workspace ID and name for each workspace.\n * To get the full workspace data including documents and metadata, use getItem() with a specific ID.\n * Returns an empty array if no workspaces exist.\n */\n getAll: async () => {\n return await workspaceTable.getAll()\n },\n\n /**\n * Retrieves all workspaces for a given team UID.\n */\n getAllByTeamUid: async (teamUid: string) => {\n return await workspaceTable.getRange([teamUid], 'teamUid')\n },\n\n /**\n * Saves a workspace to the database.\n * All chunks (meta, documents, configs, etc.) are upsert in their respective tables.\n * If a workspace with the same ID already exists, it will be replaced.\n */\n setItem: async (\n { namespace = 'local', slug }: WorkspaceKey,\n value: Omit<WorkspaceStoreShape, 'teamUid'> & Partial<Pick<WorkspaceStoreShape, 'teamUid'>>,\n ) => {\n const workspace = await workspaceTable.addItem(\n { namespace, slug },\n {\n name: value.name,\n teamUid: value.teamUid ?? 'local',\n },\n )\n const id = getWorkspaceId(namespace, slug)\n\n // Save all meta info for workspace.\n await metaTable.addItem({ workspaceId: id }, { data: value.workspace.meta })\n\n // Persist all workspace documents (chunks).\n await Promise.all(\n Object.entries(value.workspace.documents ?? {}).map(([name, data]) => {\n return documentsTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all original documents.\n await Promise.all(\n Object.entries(value.workspace.originalDocuments ?? {}).map(([name, data]) => {\n return originalDocumentTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all intermediate documents.\n await Promise.all(\n Object.entries(value.workspace.intermediateDocuments ?? {}).map(([name, data]) => {\n return intermediateDocumentTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all document overrides.\n await Promise.all(\n Object.entries(value.workspace.overrides ?? {}).map(([name, data]) => {\n return overridesTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all history.\n await Promise.all(\n Object.entries(value.workspace.history ?? {}).map(([name, data]) => {\n return historyTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all auth.\n await Promise.all(\n Object.entries(value.workspace.auth ?? {}).map(([name, data]) => {\n return authTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n return workspace\n },\n\n /**\n * Deletes an entire workspace and all associated chunk records from all tables by ID.\n */\n deleteItem: async ({ namespace, slug }: Required<WorkspaceKey>): Promise<void> => {\n const id = getWorkspaceId(namespace, slug)\n\n await workspaceTable.deleteItem({ namespace, slug })\n\n // Remove all workspace-related records from all chunk tables.\n await Promise.all([\n // By id\n metaTable.deleteItem({ workspaceId: id }),\n\n // By range (composite-key tables)\n documentsTable.deleteRange([id]),\n originalDocumentTable.deleteRange([id]),\n intermediateDocumentTable.deleteRange([id]),\n overridesTable.deleteRange([id]),\n historyTable.deleteRange([id]),\n authTable.deleteRange([id]),\n ])\n },\n\n deleteDocument: async (workspaceId: string, documentName: string): Promise<void> => {\n await Promise.all([\n documentsTable.deleteItem({ workspaceId, documentName }),\n intermediateDocumentTable.deleteItem({ workspaceId, documentName }),\n originalDocumentTable.deleteItem({ workspaceId, documentName }),\n overridesTable.deleteItem({ workspaceId, documentName }),\n historyTable.deleteItem({ workspaceId, documentName }),\n authTable.deleteItem({ workspaceId, documentName }),\n ])\n },\n\n /**\n * Checks if a workspace with the given ID exists in the store.\n */\n has: async ({ namespace, slug }: Required<WorkspaceKey>): Promise<boolean> => {\n return (await workspaceTable.getItem({ namespace, slug })) !== undefined\n },\n },\n clear: async () => {\n await workspaceTable.deleteAll()\n },\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY;AAGrB,SAAS,+BAA+B;
|
|
4
|
+
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\nimport type { PathMethodHistory } from '@/entities/history/schema'\nimport { createIndexDbConnection } from '@/persistence/indexdb'\nimport type { InMemoryWorkspace } from '@/schemas/inmemory-workspace'\nimport type { WorkspaceMeta } from '@/schemas/workspace'\n\ntype WorkspaceKey = {\n namespace?: string\n slug: string\n}\n\ntype WorkspaceStoreShape = {\n teamUid: string\n name: string\n workspace: InMemoryWorkspace\n}\n\n/** Generates a workspace ID from namespace and slug. */\nexport const getWorkspaceId = (namespace: string, slug: string) => `${namespace}/${slug}`\n\n/**\n * Creates the persistence layer for the workspace store using IndexedDB.\n * This sets up all the required tables for storing workspace chunk information,\n * such as workspace meta, documents, original documents, intermediate documents, overrides, etc.\n * Each logical group (meta, documents, etc) gets its own table keyed appropriately for efficient sub-document access.\n * Returns an object containing `meta`, `documents`, `originalDocuments`, `intermediateDocuments`, `overrides`,\n * `documentMeta`, `documentConfigs`, and `workspace` sections, each exposing a `setItem` method\n * for upsetting records, and in the case of `workspace`, also `getItem` and `deleteItem`.\n */\nexport const createWorkspaceStorePersistence = async () => {\n // Create the database connection and setup all required tables for workspace storage.\n const connection = await createIndexDbConnection({\n name: 'scalar-workspace-store',\n version: 1,\n tables: {\n workspace: {\n schema: Type.Object({\n /** Visual name for a given workspace */\n name: Type.String(),\n /** When logged in all new workspaces (remote and local) are scoped to a team */\n teamUid: Type.String({ default: 'local' }),\n /** Namespace associated with a remote workspace */\n namespace: Type.String({ default: 'local' }),\n /** Slug associated with a remote workspace */\n slug: Type.String({ default: 'local' }),\n }),\n keyPath: ['namespace', 'slug'],\n indexes: {\n teamUid: ['teamUid'],\n },\n },\n meta: {\n schema: Type.Object({ workspaceId: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId'],\n },\n documents: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n originalDocuments: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n intermediateDocuments: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n overrides: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n history: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n auth: {\n schema: Type.Object({ workspaceId: Type.String(), documentName: Type.String(), data: Type.Any() }),\n keyPath: ['workspaceId', 'documentName'],\n },\n },\n })\n\n // Tables wrappers for each logical section.\n const workspaceTable = connection.get('workspace')\n const metaTable = connection.get('meta')\n const documentsTable = connection.get('documents')\n const originalDocumentTable = connection.get('originalDocuments')\n const intermediateDocumentTable = connection.get('intermediateDocuments')\n const overridesTable = connection.get('overrides')\n const historyTable = connection.get('history')\n const authTable = connection.get('auth')\n\n // The returned persistence API with logical sections for each table and mapping.\n return {\n close: () => {\n connection.closeDatabase()\n },\n meta: {\n /**\n * Set meta data for a workspace.\n */\n setItem: async (workspaceId: string, data: WorkspaceMeta) => {\n await metaTable.addItem({ workspaceId }, { data })\n },\n },\n documents: {\n /**\n * Set (persist) a workspace document using workspaceId and documentName as composite key.\n */\n setItem: async (workspaceId: string, documentName: string, data: InMemoryWorkspace['documents'][string]) => {\n await documentsTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n originalDocuments: {\n /**\n * Set an original (raw) document for a workspace/document pair.\n */\n setItem: async (\n workspaceId: string,\n documentName: string,\n data: InMemoryWorkspace['originalDocuments'][string],\n ) => {\n await originalDocumentTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n intermediateDocuments: {\n /**\n * Set an intermediate (transformed) document for a workspace/document pair.\n */\n setItem: async (\n workspaceId: string,\n documentName: string,\n data: InMemoryWorkspace['intermediateDocuments'][string],\n ) => {\n await intermediateDocumentTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n overrides: {\n /**\n * Set document overrides for a workspace/document pair.\n */\n setItem: async (workspaceId: string, documentName: string, data: InMemoryWorkspace['overrides'][string]) => {\n await overridesTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n history: {\n /**\n * Set history for a document.\n */\n setItem: async (workspaceId: string, documentName: string, data: PathMethodHistory) => {\n await historyTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n auth: {\n /**\n * Set auth for a document.\n */\n setItem: async (workspaceId: string, documentName: string, data: InMemoryWorkspace['auth'][string]) => {\n await authTable.addItem({ workspaceId, documentName }, { data })\n },\n },\n workspace: {\n /**\n * Retrieves a workspace by its ID.\n * Returns undefined if the workspace does not exist.\n * Gathers all workspace 'chunk' tables and assembles a full workspace shape.\n */\n getItem: async ({\n namespace,\n slug,\n }: Required<WorkspaceKey>): Promise<(WorkspaceStoreShape & Required<WorkspaceKey>) | undefined> => {\n const workspace = await workspaceTable.getItem({ namespace, slug })\n\n if (!workspace) {\n return undefined\n }\n\n // Create a composite key for the workspace chunks.\n const id = getWorkspaceId(namespace, slug)\n\n // Retrieve all chunk records for this workspace.\n const workspaceDocuments = await documentsTable.getRange([id])\n const workspaceOriginalDocuments = await originalDocumentTable.getRange([id])\n const workspaceIntermediateDocuments = await intermediateDocumentTable.getRange([id])\n const workspaceOverrides = await overridesTable.getRange([id])\n const workspaceMeta = await metaTable.getItem({ workspaceId: id })\n const workspaceHistory = await historyTable.getRange([id])\n const workspaceAuth = await authTable.getRange([id])\n\n // Compose the workspace structure from table records.\n return {\n name: workspace.name,\n teamUid: workspace.teamUid,\n namespace: workspace.namespace,\n slug: workspace.slug,\n workspace: {\n documents: Object.fromEntries(workspaceDocuments.map((item) => [item.documentName, item.data])),\n originalDocuments: Object.fromEntries(\n workspaceOriginalDocuments.map((item) => [item.documentName, item.data]),\n ),\n intermediateDocuments: Object.fromEntries(\n workspaceIntermediateDocuments.map((item) => [item.documentName, item.data]),\n ),\n overrides: Object.fromEntries(workspaceOverrides.map((item) => [item.documentName, item.data])),\n meta: workspaceMeta?.data,\n history: Object.fromEntries(workspaceHistory.map((item) => [item.documentName, item.data])),\n auth: Object.fromEntries(workspaceAuth.map((item) => [item.documentName, item.data])),\n },\n }\n },\n\n /**\n * Retrieves all workspaces from the database.\n * Returns only the workspace ID and name for each workspace.\n * To get the full workspace data including documents and metadata, use getItem() with a specific ID.\n * Returns an empty array if no workspaces exist.\n */\n getAll: async () => {\n return await workspaceTable.getAll()\n },\n\n /**\n * Retrieves all workspaces for a given team UID.\n */\n getAllByTeamUid: async (teamUid: string) => {\n return await workspaceTable.getRange([teamUid], 'teamUid')\n },\n\n /**\n * Saves a workspace to the database.\n * All chunks (meta, documents, configs, etc.) are upsert in their respective tables.\n * If a workspace with the same ID already exists, it will be replaced.\n */\n setItem: async (\n { namespace = 'local', slug }: WorkspaceKey,\n value: Omit<WorkspaceStoreShape, 'teamUid'> & Partial<Pick<WorkspaceStoreShape, 'teamUid'>>,\n ) => {\n const workspace = await workspaceTable.addItem(\n { namespace, slug },\n {\n name: value.name,\n teamUid: value.teamUid ?? 'local',\n },\n )\n const id = getWorkspaceId(namespace, slug)\n\n // Save all meta info for workspace.\n await metaTable.addItem({ workspaceId: id }, { data: value.workspace.meta })\n\n // Persist all workspace documents (chunks).\n await Promise.all(\n Object.entries(value.workspace.documents ?? {}).map(([name, data]) => {\n return documentsTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all original documents.\n await Promise.all(\n Object.entries(value.workspace.originalDocuments ?? {}).map(([name, data]) => {\n return originalDocumentTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all intermediate documents.\n await Promise.all(\n Object.entries(value.workspace.intermediateDocuments ?? {}).map(([name, data]) => {\n return intermediateDocumentTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all document overrides.\n await Promise.all(\n Object.entries(value.workspace.overrides ?? {}).map(([name, data]) => {\n return overridesTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all history.\n await Promise.all(\n Object.entries(value.workspace.history ?? {}).map(([name, data]) => {\n return historyTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n // Persist all auth.\n await Promise.all(\n Object.entries(value.workspace.auth ?? {}).map(([name, data]) => {\n return authTable.addItem({ workspaceId: id, documentName: name }, { data })\n }),\n )\n\n return workspace\n },\n\n /**\n * Deletes an entire workspace and all associated chunk records from all tables by ID.\n */\n deleteItem: async ({ namespace, slug }: Required<WorkspaceKey>): Promise<void> => {\n const id = getWorkspaceId(namespace, slug)\n\n await workspaceTable.deleteItem({ namespace, slug })\n\n // Remove all workspace-related records from all chunk tables.\n await Promise.all([\n // By id\n metaTable.deleteItem({ workspaceId: id }),\n\n // By range (composite-key tables)\n documentsTable.deleteRange([id]),\n originalDocumentTable.deleteRange([id]),\n intermediateDocumentTable.deleteRange([id]),\n overridesTable.deleteRange([id]),\n historyTable.deleteRange([id]),\n authTable.deleteRange([id]),\n ])\n },\n\n /**\n * Deletes a single document and all related records (overrides, history, auth, etc.)\n * for the given workspace and document name from all relevant tables.\n */\n deleteDocument: async (workspaceId: string, documentName: string): Promise<void> => {\n await Promise.all([\n documentsTable.deleteItem({ workspaceId, documentName }),\n intermediateDocumentTable.deleteItem({ workspaceId, documentName }),\n originalDocumentTable.deleteItem({ workspaceId, documentName }),\n overridesTable.deleteItem({ workspaceId, documentName }),\n historyTable.deleteItem({ workspaceId, documentName }),\n authTable.deleteItem({ workspaceId, documentName }),\n ])\n },\n\n /**\n * Updates the name of an existing workspace.\n * Returns the updated workspace object, or undefined if the workspace does not exist.\n */\n updateName: async ({ namespace, slug }: Required<WorkspaceKey>, name: string) => {\n const workspace = await workspaceTable.getItem({ namespace, slug })\n if (!workspace) {\n return undefined\n }\n\n // Update the workspace name\n return await workspaceTable.addItem({ namespace, slug }, { ...workspace, name })\n },\n\n /**\n * Checks if a workspace with the given ID exists in the store.\n */\n has: async ({ namespace, slug }: Required<WorkspaceKey>): Promise<boolean> => {\n return (await workspaceTable.getItem({ namespace, slug })) !== undefined\n },\n },\n clear: async () => {\n await workspaceTable.deleteAll()\n },\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexdb.d.ts","sourceRoot":"","sources":["../../src/persistence/indexdb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAW,MAAM,iBAAiB,CAAA;AAE/D,KAAK,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;IAC3E,MAAM,EAAE,CAAC,CAAA;IACT,OAAO,EAAE,CAAC,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;CACvD,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,uBAAuB,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,wCAK9G;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,CAAA;IACT,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,KAAK,EAAE,CAAA;KAAE,EAAE,CAAA;CAChG;UAqCS,IAAI,SAAS,MAAM,CAAC,QAAQ,IAAI;;;;;;;;;+
|
|
1
|
+
{"version":3,"file":"indexdb.d.ts","sourceRoot":"","sources":["../../src/persistence/indexdb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAW,MAAM,iBAAiB,CAAA;AAE/D,KAAK,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;IAC3E,MAAM,EAAE,CAAC,CAAA;IACT,OAAO,EAAE,CAAC,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;CACvD,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,uBAAuB,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,wCAK9G;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,CAAA;IACT,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,KAAK,EAAE,CAAA;KAAE,EAAE,CAAA;CAChG;UAqCS,IAAI,SAAS,MAAM,CAAC,QAAQ,IAAI;;;;;;;;;+BA8FV,WAAW,EAAE,cAAc,MAAM;;;8EA+BP,OAAO,CAAC,IAAI,CAAC;kCAmBpC,WAAW,EAAE,KAAG,OAAO,CAAC,MAAM,CAAC;;;;yBA6BpC,OAAO,CAAC,IAAI,CAAC;;;EAtK1C,CAAA"}
|
|
@@ -45,8 +45,7 @@ function createTableWrapper(name, db) {
|
|
|
45
45
|
};
|
|
46
46
|
async function addItem(key, value) {
|
|
47
47
|
const store = getStore("readwrite");
|
|
48
|
-
const
|
|
49
|
-
const finalValue = { ...keyObj, ...value };
|
|
48
|
+
const finalValue = { ...value, ...key };
|
|
50
49
|
await requestAsPromise(store.put(finalValue));
|
|
51
50
|
return finalValue;
|
|
52
51
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/persistence/indexdb.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Static, TObject, TRecord } from '@scalar/typebox'\n\ntype TableEntry<S extends TObject, K extends readonly (keyof Static<S>)[]> = {\n schema: S\n keyPath: K\n indexes?: Record<string, readonly (keyof Static<S>)[]>\n}\n\n/**\n * Initializes and manages an IndexedDB database connection for table-based persistence.\n *\n * @param name - The database name. Defaults to 'scalar-workspace-store'.\n * @param tables - Table definitions: the tables to create and their key schemas.\n * @param version - The database version. Bump this to trigger upgrades (default: 1).\n * @param migrations - Optional migration steps to run for version upgrades.\n * @returns An object with the following methods:\n * - `get(tableName)` \u2014 Get a wrapper to interact with the object store for the given table name.\n * - `closeDatabase()` \u2014 Closes the database connection.\n *\n * Example usage:\n * ```ts\n * import { Type } from '@scalar/typebox'\n * import { createIndexDbConnection } from './indexdb'\n *\n * // Define a schema for a user\n * const UserSchema = Type.Object({\n * id: Type.String(),\n * name: Type.String(),\n * age: Type.Number(),\n * })\n *\n * // Define tables in the database\n * const dbConfig = {\n * users: {\n * schema: UserSchema,\n * index: ['id'] as const,\n * },\n * }\n *\n * // Open the database connection and get table API\n * const { get, closeDatabase } = await createIndexDbConnection({\n * name: 'my-app-db',\n * tables: dbConfig,\n * version: 1,\n * })\n *\n * // Get a strongly-typed users table API\n * const usersTable = get('users')\n *\n * // Add a user\n * await usersTable.addItem({ id: 'user-1' }, { name: 'Alice', age: 25 })\n *\n * // Retrieve a user by id\n * const user = await usersTable.getItem({ id: 'user-1' })\n *\n * // Don't forget to close the database when done!\n * closeDatabase()\n * ```\n */\nexport const createIndexDbConnection = async <T extends Record<string, TableEntry<any, readonly (keyof any)[]>>>({\n name = 'scalar-workspace-store',\n tables,\n version = 1,\n migrations = [],\n}: {\n name: string\n tables: T\n version: number\n migrations?: { version: number; exec: (db: IDBDatabase, event: IDBVersionChangeEvent) => {} }[]\n}) => {\n const db = indexedDB.open(name, version)\n\n db.onupgradeneeded = (e) => {\n // Initial setup of object stores\n if (e.oldVersion < 1) {\n const database = db.result\n\n // Initialize all the tables\n Object.entries(tables).forEach(([name, options]) => {\n if (!database.objectStoreNames.contains(name)) {\n const objectStore = database.createObjectStore(name, {\n keyPath: options.keyPath.length === 1 ? (options.keyPath[0] as string) : (options.keyPath as string[]),\n })\n\n // Create any indexes for the object store\n Object.entries(options.indexes ?? {}).forEach(([indexName, indexPath]) => {\n objectStore.createIndex(indexName, indexPath as string[])\n })\n }\n })\n }\n\n // Run any future migrations here\n migrations.forEach((migration) => {\n if (e.oldVersion < migration.version) {\n migration.exec(db.result, e)\n }\n })\n }\n\n await new Promise((resolve, reject) => {\n db.onsuccess = () => resolve(true)\n db.onerror = () => reject(db.error)\n })\n\n return {\n get: <Name extends keyof T>(name: Name) => {\n return createTableWrapper<T[Name]['schema'], T[Name]['keyPath'][number]>(name as string, db.result)\n },\n closeDatabase: () => {\n db.result.close()\n },\n }\n}\n\n/**\n * Utility wrapper for interacting with an IndexedDB object store, typed by the schema.\n *\n * Usage example:\n * ```\n * // Define a TypeBox schema for users\n * const UserSchema = Type.Object({\n * id: Type.String(),\n * name: Type.String(),\n * age: Type.Number(),\n * })\n * \n * // Open or create the users table\n * const usersTable = createTableWrapper<typeof UserSchema, 'id'>('users', openDatabase)\n * \n * // Add a user\n await usersTable.addItem({ id: 'user-1' }, { name: 'Alice', age: 24 })\n * \n * // Get a user by id\n * const alic = await usersTable.getItem({ id: 'user-1' })\n * \n * // Get users with a partial key (use [] if no composite key)\n * const users = await usersTable.getRange(['user-1'])\n * \n * // Get all users\n * const allUsers = await usersTable.getAll()\n * ```\n *\n * @template T TypeBox schema type for objects in the store\n * @template K Key property names that compose the primary key\n *\n * @param name - Object store name\n * @param getDb - Function returning a Promise for the IDBDatabase\n * @returns Methods to interact with the object store\n */\nfunction createTableWrapper<T extends TRecord | TObject, const K extends keyof Static<T>>(\n name: string,\n db: IDBDatabase,\n) {\n /**\n * Gets the object store from the latest DB connection, for the given transaction mode.\n */\n const getStore = (mode: IDBTransactionMode): IDBObjectStore => {\n const tx = db.transaction(name, mode)\n return tx.objectStore(name)\n }\n\n /**\n * Adds or updates an item in the store.\n * @param key - The primary key values, as { key1, key2 }\n * @param value - The value for the other properties, omitting keys\n * @returns The full inserted/updated object\n */\n async function addItem(key: Record<K, IDBValidKey>, value: Omit<Static<T>, K>): Promise<Static<T>> {\n const store = getStore('readwrite')\n const keyObj: any = { ...key }\n const finalValue = { ...keyObj, ...value }\n await requestAsPromise(store.put(finalValue))\n\n return finalValue\n }\n\n /**\n * Retrieves a single item by composite key.\n * @param key - Key values. For a single key: { id: '...' }\n * @returns The found object or undefined\n */\n function getItem(key: Record<K, IDBValidKey>): Promise<Static<T> | undefined> {\n const store = getStore('readonly')\n const keyValues = Object.values(key)\n // For single keys, pass value directly; for compound keys, pass array\n const keyToUse = keyValues.length === 1 ? keyValues[0] : keyValues\n return requestAsPromise(store.get(keyToUse as IDBValidKey))\n }\n\n /**\n * Returns all records matching a partial (prefix) key. Use for composite keys.\n * For non-compound keys, pass single-element array: getRange(['some-id'])\n * For prefix search, pass subset of key parts.\n * @param partialKey - Array of partial key values\n * @returns Matching objects\n *\n * Example (composite [a,b]):\n * getRange(['foo']) // All with a === 'foo'\n * getRange(['foo', 'bar']) // All with a === 'foo' and b === 'bar'\n */\n function getRange(partialKey: IDBValidKey[], indexName?: string): Promise<Static<T>[]> {\n const store = getStore('readonly')\n const objectStoreOrIndex = indexName ? store.index(indexName as string) : store\n\n const results: Static<T>[] = []\n\n // Construct upper bound to match all keys starting with partialKey\n const upperBound = [...partialKey]\n upperBound.push([]) // ensures upper bound includes all keys with this prefix\n const range = IDBKeyRange.bound(partialKey, upperBound, false, true)\n\n return new Promise((resolve, reject) => {\n const request = objectStoreOrIndex.openCursor(range)\n request.onerror = () => reject(request.error)\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result\n if (cursor) {\n results.push(cursor.value)\n cursor.continue()\n } else {\n resolve(results)\n }\n }\n })\n }\n\n /**\n * Deletes an item from the store by its composite key.\n * @param key - Key values. For a single key: { id: '...' }\n * @returns void\n */\n async function deleteItem(key: Record<K, IDBValidKey>): Promise<void> {\n const store = getStore('readwrite')\n const keyValues = Object.values(key)\n // For single keys, pass value directly; for compound keys, pass array\n const keyToUse = keyValues.length === 1 ? keyValues[0] : keyValues\n await requestAsPromise(store.delete(keyToUse as IDBValidKey))\n }\n\n /**\n * Deletes all records matching a partial (prefix) key. Use for composite keys.\n * For non-compound keys, pass single-element array: deleteRange(['some-id'])\n * For prefix deletion, pass subset of key parts.\n * @param partialKey - Array of partial key values\n * @returns Number of deleted items\n *\n * Example (composite [a,b]):\n * deleteRange(['foo']) // Delete all with a === 'foo'\n * deleteRange(['foo', 'bar']) // Delete all with a === 'foo' and b === 'bar'\n */\n function deleteRange(partialKey: IDBValidKey[]): Promise<number> {\n const store = getStore('readwrite')\n let deletedCount = 0\n\n // Construct upper bound to match all keys starting with partialKey\n const upperBound = [...partialKey]\n upperBound.push([]) // ensures upper bound includes all keys with this prefix\n const range = IDBKeyRange.bound(partialKey, upperBound, false, true)\n\n return new Promise((resolve, reject) => {\n const request = store.openCursor(range)\n request.onerror = () => reject(request.error)\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result\n if (cursor) {\n cursor.delete()\n deletedCount++\n cursor.continue()\n } else {\n resolve(deletedCount)\n }\n }\n })\n }\n\n /**\n * Deletes all items from the table.\n * @returns void\n */\n async function deleteAll(): Promise<void> {\n const store = getStore('readwrite')\n await requestAsPromise(store.clear())\n }\n\n /**\n * Retrieves all items from the table.\n * @returns Array of all objects in the store\n */\n function getAll(): Promise<Static<T>[]> {\n const store = getStore('readonly')\n return requestAsPromise(store.getAll())\n }\n\n return {\n addItem,\n getItem,\n getRange,\n deleteItem,\n deleteRange,\n getAll,\n deleteAll,\n }\n}\n\n// ---- Utility ----\nfunction requestAsPromise<T>(req: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n req.onsuccess = () => resolve(req.result)\n req.onerror = () => reject(req.error)\n })\n}\n"],
|
|
5
|
-
"mappings": "AA2DO,MAAM,0BAA0B,OAA0E;AAAA,EAC/G,OAAO;AAAA,EACP;AAAA,EACA,UAAU;AAAA,EACV,aAAa,CAAC;AAChB,MAKM;AACJ,QAAM,KAAK,UAAU,KAAK,MAAM,OAAO;AAEvC,KAAG,kBAAkB,CAAC,MAAM;AAE1B,QAAI,EAAE,aAAa,GAAG;AACpB,YAAM,WAAW,GAAG;AAGpB,aAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAACA,OAAM,OAAO,MAAM;AAClD,YAAI,CAAC,SAAS,iBAAiB,SAASA,KAAI,GAAG;AAC7C,gBAAM,cAAc,SAAS,kBAAkBA,OAAM;AAAA,YACnD,SAAS,QAAQ,QAAQ,WAAW,IAAK,QAAQ,QAAQ,CAAC,IAAgB,QAAQ;AAAA,UACpF,CAAC;AAGD,iBAAO,QAAQ,QAAQ,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,SAAS,MAAM;AACxE,wBAAY,YAAY,WAAW,SAAqB;AAAA,UAC1D,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAGA,eAAW,QAAQ,CAAC,cAAc;AAChC,UAAI,EAAE,aAAa,UAAU,SAAS;AACpC,kBAAU,KAAK,GAAG,QAAQ,CAAC;AAAA,MAC7B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrC,OAAG,YAAY,MAAM,QAAQ,IAAI;AACjC,OAAG,UAAU,MAAM,OAAO,GAAG,KAAK;AAAA,EACpC,CAAC;AAED,SAAO;AAAA,IACL,KAAK,CAAuBA,UAAe;AACzC,aAAO,mBAAkEA,OAAgB,GAAG,MAAM;AAAA,IACpG;AAAA,IACA,eAAe,MAAM;AACnB,SAAG,OAAO,MAAM;AAAA,IAClB;AAAA,EACF;AACF;AAqCA,SAAS,mBACP,MACA,IACA;AAIA,QAAM,WAAW,CAAC,SAA6C;AAC7D,UAAM,KAAK,GAAG,YAAY,MAAM,IAAI;AACpC,WAAO,GAAG,YAAY,IAAI;AAAA,EAC5B;AAQA,iBAAe,QAAQ,KAA6B,OAA+C;AACjG,UAAM,QAAQ,SAAS,WAAW;AAClC,UAAM,
|
|
4
|
+
"sourcesContent": ["import type { Static, TObject, TRecord } from '@scalar/typebox'\n\ntype TableEntry<S extends TObject, K extends readonly (keyof Static<S>)[]> = {\n schema: S\n keyPath: K\n indexes?: Record<string, readonly (keyof Static<S>)[]>\n}\n\n/**\n * Initializes and manages an IndexedDB database connection for table-based persistence.\n *\n * @param name - The database name. Defaults to 'scalar-workspace-store'.\n * @param tables - Table definitions: the tables to create and their key schemas.\n * @param version - The database version. Bump this to trigger upgrades (default: 1).\n * @param migrations - Optional migration steps to run for version upgrades.\n * @returns An object with the following methods:\n * - `get(tableName)` \u2014 Get a wrapper to interact with the object store for the given table name.\n * - `closeDatabase()` \u2014 Closes the database connection.\n *\n * Example usage:\n * ```ts\n * import { Type } from '@scalar/typebox'\n * import { createIndexDbConnection } from './indexdb'\n *\n * // Define a schema for a user\n * const UserSchema = Type.Object({\n * id: Type.String(),\n * name: Type.String(),\n * age: Type.Number(),\n * })\n *\n * // Define tables in the database\n * const dbConfig = {\n * users: {\n * schema: UserSchema,\n * index: ['id'] as const,\n * },\n * }\n *\n * // Open the database connection and get table API\n * const { get, closeDatabase } = await createIndexDbConnection({\n * name: 'my-app-db',\n * tables: dbConfig,\n * version: 1,\n * })\n *\n * // Get a strongly-typed users table API\n * const usersTable = get('users')\n *\n * // Add a user\n * await usersTable.addItem({ id: 'user-1' }, { name: 'Alice', age: 25 })\n *\n * // Retrieve a user by id\n * const user = await usersTable.getItem({ id: 'user-1' })\n *\n * // Don't forget to close the database when done!\n * closeDatabase()\n * ```\n */\nexport const createIndexDbConnection = async <T extends Record<string, TableEntry<any, readonly (keyof any)[]>>>({\n name = 'scalar-workspace-store',\n tables,\n version = 1,\n migrations = [],\n}: {\n name: string\n tables: T\n version: number\n migrations?: { version: number; exec: (db: IDBDatabase, event: IDBVersionChangeEvent) => {} }[]\n}) => {\n const db = indexedDB.open(name, version)\n\n db.onupgradeneeded = (e) => {\n // Initial setup of object stores\n if (e.oldVersion < 1) {\n const database = db.result\n\n // Initialize all the tables\n Object.entries(tables).forEach(([name, options]) => {\n if (!database.objectStoreNames.contains(name)) {\n const objectStore = database.createObjectStore(name, {\n keyPath: options.keyPath.length === 1 ? (options.keyPath[0] as string) : (options.keyPath as string[]),\n })\n\n // Create any indexes for the object store\n Object.entries(options.indexes ?? {}).forEach(([indexName, indexPath]) => {\n objectStore.createIndex(indexName, indexPath as string[])\n })\n }\n })\n }\n\n // Run any future migrations here\n migrations.forEach((migration) => {\n if (e.oldVersion < migration.version) {\n migration.exec(db.result, e)\n }\n })\n }\n\n await new Promise((resolve, reject) => {\n db.onsuccess = () => resolve(true)\n db.onerror = () => reject(db.error)\n })\n\n return {\n get: <Name extends keyof T>(name: Name) => {\n return createTableWrapper<T[Name]['schema'], T[Name]['keyPath'][number]>(name as string, db.result)\n },\n closeDatabase: () => {\n db.result.close()\n },\n }\n}\n\n/**\n * Utility wrapper for interacting with an IndexedDB object store, typed by the schema.\n *\n * Usage example:\n * ```\n * // Define a TypeBox schema for users\n * const UserSchema = Type.Object({\n * id: Type.String(),\n * name: Type.String(),\n * age: Type.Number(),\n * })\n * \n * // Open or create the users table\n * const usersTable = createTableWrapper<typeof UserSchema, 'id'>('users', openDatabase)\n * \n * // Add a user\n await usersTable.addItem({ id: 'user-1' }, { name: 'Alice', age: 24 })\n * \n * // Get a user by id\n * const alic = await usersTable.getItem({ id: 'user-1' })\n * \n * // Get users with a partial key (use [] if no composite key)\n * const users = await usersTable.getRange(['user-1'])\n * \n * // Get all users\n * const allUsers = await usersTable.getAll()\n * ```\n *\n * @template T TypeBox schema type for objects in the store\n * @template K Key property names that compose the primary key\n *\n * @param name - Object store name\n * @param getDb - Function returning a Promise for the IDBDatabase\n * @returns Methods to interact with the object store\n */\nfunction createTableWrapper<T extends TRecord | TObject, const K extends keyof Static<T>>(\n name: string,\n db: IDBDatabase,\n) {\n /**\n * Gets the object store from the latest DB connection, for the given transaction mode.\n */\n const getStore = (mode: IDBTransactionMode): IDBObjectStore => {\n const tx = db.transaction(name, mode)\n return tx.objectStore(name)\n }\n\n /**\n * Adds or updates an item in the store.\n * @param key - The primary key values, as { key1, key2 }\n * @param value - The value for the other properties, omitting keys\n * @returns The full inserted/updated object\n */\n async function addItem(key: Record<K, IDBValidKey>, value: Omit<Static<T>, K>): Promise<Static<T>> {\n const store = getStore('readwrite')\n const finalValue = { ...value, ...key }\n await requestAsPromise(store.put(finalValue))\n\n return finalValue\n }\n\n /**\n * Retrieves a single item by composite key.\n * @param key - Key values. For a single key: { id: '...' }\n * @returns The found object or undefined\n */\n function getItem(key: Record<K, IDBValidKey>): Promise<Static<T> | undefined> {\n const store = getStore('readonly')\n const keyValues = Object.values(key)\n // For single keys, pass value directly; for compound keys, pass array\n const keyToUse = keyValues.length === 1 ? keyValues[0] : keyValues\n return requestAsPromise(store.get(keyToUse as IDBValidKey))\n }\n\n /**\n * Returns all records matching a partial (prefix) key. Use for composite keys.\n * For non-compound keys, pass single-element array: getRange(['some-id'])\n * For prefix search, pass subset of key parts.\n * @param partialKey - Array of partial key values\n * @returns Matching objects\n *\n * Example (composite [a,b]):\n * getRange(['foo']) // All with a === 'foo'\n * getRange(['foo', 'bar']) // All with a === 'foo' and b === 'bar'\n */\n function getRange(partialKey: IDBValidKey[], indexName?: string): Promise<Static<T>[]> {\n const store = getStore('readonly')\n const objectStoreOrIndex = indexName ? store.index(indexName as string) : store\n\n const results: Static<T>[] = []\n\n // Construct upper bound to match all keys starting with partialKey\n const upperBound = [...partialKey]\n upperBound.push([]) // ensures upper bound includes all keys with this prefix\n const range = IDBKeyRange.bound(partialKey, upperBound, false, true)\n\n return new Promise((resolve, reject) => {\n const request = objectStoreOrIndex.openCursor(range)\n request.onerror = () => reject(request.error)\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result\n if (cursor) {\n results.push(cursor.value)\n cursor.continue()\n } else {\n resolve(results)\n }\n }\n })\n }\n\n /**\n * Deletes an item from the store by its composite key.\n * @param key - Key values. For a single key: { id: '...' }\n * @returns void\n */\n async function deleteItem(key: Record<K, IDBValidKey>): Promise<void> {\n const store = getStore('readwrite')\n const keyValues = Object.values(key)\n // For single keys, pass value directly; for compound keys, pass array\n const keyToUse = keyValues.length === 1 ? keyValues[0] : keyValues\n await requestAsPromise(store.delete(keyToUse as IDBValidKey))\n }\n\n /**\n * Deletes all records matching a partial (prefix) key. Use for composite keys.\n * For non-compound keys, pass single-element array: deleteRange(['some-id'])\n * For prefix deletion, pass subset of key parts.\n * @param partialKey - Array of partial key values\n * @returns Number of deleted items\n *\n * Example (composite [a,b]):\n * deleteRange(['foo']) // Delete all with a === 'foo'\n * deleteRange(['foo', 'bar']) // Delete all with a === 'foo' and b === 'bar'\n */\n function deleteRange(partialKey: IDBValidKey[]): Promise<number> {\n const store = getStore('readwrite')\n let deletedCount = 0\n\n // Construct upper bound to match all keys starting with partialKey\n const upperBound = [...partialKey]\n upperBound.push([]) // ensures upper bound includes all keys with this prefix\n const range = IDBKeyRange.bound(partialKey, upperBound, false, true)\n\n return new Promise((resolve, reject) => {\n const request = store.openCursor(range)\n request.onerror = () => reject(request.error)\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result\n if (cursor) {\n cursor.delete()\n deletedCount++\n cursor.continue()\n } else {\n resolve(deletedCount)\n }\n }\n })\n }\n\n /**\n * Deletes all items from the table.\n * @returns void\n */\n async function deleteAll(): Promise<void> {\n const store = getStore('readwrite')\n await requestAsPromise(store.clear())\n }\n\n /**\n * Retrieves all items from the table.\n * @returns Array of all objects in the store\n */\n function getAll(): Promise<Static<T>[]> {\n const store = getStore('readonly')\n return requestAsPromise(store.getAll())\n }\n\n return {\n addItem,\n getItem,\n getRange,\n deleteItem,\n deleteRange,\n getAll,\n deleteAll,\n }\n}\n\n// ---- Utility ----\nfunction requestAsPromise<T>(req: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n req.onsuccess = () => resolve(req.result)\n req.onerror = () => reject(req.error)\n })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["name"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const XDraftExamplesSchema: import("@scalar/typebox").TObject<{
|
|
2
|
+
'x-draft-examples': import("@scalar/typebox").TOptional<import("@scalar/typebox").TArray<import("@scalar/typebox").TString>>;
|
|
3
|
+
}>;
|
|
4
|
+
export type XDraftExamples = {
|
|
5
|
+
'x-draft-examples'?: string[];
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=x-draft-examples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-draft-examples.d.ts","sourceRoot":"","sources":["../../../../src/schemas/extensions/operation/x-draft-examples.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB;;EAE/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/schemas/extensions/operation/x-draft-examples.ts"],
|
|
4
|
+
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\nexport const XDraftExamplesSchema = Type.Object({\n 'x-draft-examples': Type.Optional(Type.Array(Type.String())),\n})\n\nexport type XDraftExamples = {\n 'x-draft-examples'?: string[]\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY;AAEd,MAAM,uBAAuB,KAAK,OAAO;AAAA,EAC9C,oBAAoB,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,CAAC,CAAC;AAC7D,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/schemas/extensions/tag/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type XScalarOrder } from '../../../schemas/extensions/general/x-scalar-order.js';
|
|
2
|
-
type XTagGroup = {
|
|
2
|
+
export type XTagGroup = {
|
|
3
3
|
/**
|
|
4
4
|
* The group name.
|
|
5
5
|
*/
|
|
@@ -36,5 +36,4 @@ export type XTagGroups = {
|
|
|
36
36
|
*/
|
|
37
37
|
'x-tagGroups'?: XTagGroup[];
|
|
38
38
|
};
|
|
39
|
-
export {};
|
|
40
39
|
//# sourceMappingURL=x-tag-groups.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-tag-groups.d.ts","sourceRoot":"","sources":["../../../../src/schemas/extensions/tag/x-tag-groups.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,6CAA6C,CAAA;AAgBnG,
|
|
1
|
+
{"version":3,"file":"x-tag-groups.d.ts","sourceRoot":"","sources":["../../../../src/schemas/extensions/tag/x-tag-groups.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,6CAA6C,CAAA;AAgBnG,MAAM,MAAM,SAAS,GAAG;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAA;CACf,GAAG,YAAY,CAAA;AAEhB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;QA5BzB;;WAEG;;QAEH;;WAEG;;;;;EAwBL,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,SAAS,EAAE,CAAA;CAC5B,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/schemas/extensions/tag/x-tag-groups.ts"],
|
|
4
|
-
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\nimport { compose } from '@/schemas/compose'\nimport { type XScalarOrder, XScalarOrderSchema } from '@/schemas/extensions/general/x-scalar-order'\n\nconst XTagGroupSchema = compose(\n Type.Object({\n /**\n * The group name.\n */\n name: Type.String(),\n /**\n * List of tags to include in this group.\n */\n tags: Type.Array(Type.String()),\n }),\n XScalarOrderSchema,\n)\n\
|
|
4
|
+
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\nimport { compose } from '@/schemas/compose'\nimport { type XScalarOrder, XScalarOrderSchema } from '@/schemas/extensions/general/x-scalar-order'\n\nconst XTagGroupSchema = compose(\n Type.Object({\n /**\n * The group name.\n */\n name: Type.String(),\n /**\n * List of tags to include in this group.\n */\n tags: Type.Array(Type.String()),\n }),\n XScalarOrderSchema,\n)\n\nexport type XTagGroup = {\n /**\n * The group name.\n */\n name: string\n /**\n * List of tags to include in this group.\n */\n tags: string[]\n} & XScalarOrder\n\n/**\n * x-tagGroups\n *\n * List of tags to include in this group.\n */\nexport const XTagGroupsSchema = Type.Object({\n 'x-tagGroups': Type.Optional(Type.Array(XTagGroupSchema)),\n})\n\nexport type XTagGroups = {\n /**\n * x-tagGroups\n *\n * List of tags to include in this group.\n */\n 'x-tagGroups'?: XTagGroup[]\n}\n"],
|
|
5
5
|
"mappings": "AAAA,SAAS,YAAY;AAErB,SAAS,eAAe;AACxB,SAA4B,0BAA0B;AAEtD,MAAM,kBAAkB;AAAA,EACtB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA,IAIV,MAAM,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA,IAIlB,MAAM,KAAK,MAAM,KAAK,OAAO,CAAC;AAAA,EAChC,CAAC;AAAA,EACD;AACF;AAkBO,MAAM,mBAAmB,KAAK,OAAO;AAAA,EAC1C,eAAe,KAAK,SAAS,KAAK,MAAM,eAAe,CAAC;AAC1D,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* }
|
|
10
10
|
*/
|
|
11
11
|
export declare const XScalarActiveProxySchema: import("@scalar/typebox").TObject<{
|
|
12
|
-
'x-scalar-active-proxy': import("@scalar/typebox").TOptional<import("@scalar/typebox").TString
|
|
12
|
+
'x-scalar-active-proxy': import("@scalar/typebox").TOptional<import("@scalar/typebox").TUnion<[import("@scalar/typebox").TString, import("@scalar/typebox").TNull]>>;
|
|
13
13
|
}>;
|
|
14
14
|
export type XScalarActiveProxy = {
|
|
15
15
|
/** The currently selected proxy */
|
|
16
|
-
'x-scalar-active-proxy'?: string;
|
|
16
|
+
'x-scalar-active-proxy'?: string | null;
|
|
17
17
|
};
|
|
18
18
|
//# sourceMappingURL=x-scalar-active-proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-scalar-active-proxy.d.ts","sourceRoot":"","sources":["../../../../src/schemas/extensions/workspace/x-scalar-active-proxy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;EAEnC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,mCAAmC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"x-scalar-active-proxy.d.ts","sourceRoot":"","sources":["../../../../src/schemas/extensions/workspace/x-scalar-active-proxy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;EAEnC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,mCAAmC;IACnC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Type } from "@scalar/typebox";
|
|
2
2
|
const XScalarActiveProxySchema = Type.Object({
|
|
3
|
-
"x-scalar-active-proxy": Type.Optional(Type.String())
|
|
3
|
+
"x-scalar-active-proxy": Type.Optional(Type.Union([Type.String(), Type.Null()]))
|
|
4
4
|
});
|
|
5
5
|
export {
|
|
6
6
|
XScalarActiveProxySchema
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/schemas/extensions/workspace/x-scalar-active-proxy.ts"],
|
|
4
|
-
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\n/**\n * Schema for the x-scalar-active-proxy extension.\n *\n * This property indicates the currently selected proxy's identifier.\n *\n * @example\n * {\n * \"x-scalar-active-proxy\": \"my-proxy-id\"\n * }\n */\nexport const XScalarActiveProxySchema = Type.Object({\n 'x-scalar-active-proxy': Type.Optional(Type.String()),\n})\n\nexport type XScalarActiveProxy = {\n /** The currently selected proxy */\n 'x-scalar-active-proxy'?: string\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY;AAYd,MAAM,2BAA2B,KAAK,OAAO;AAAA,EAClD,yBAAyB,KAAK,SAAS,KAAK,OAAO,CAAC;
|
|
4
|
+
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\n/**\n * Schema for the x-scalar-active-proxy extension.\n *\n * This property indicates the currently selected proxy's identifier.\n *\n * @example\n * {\n * \"x-scalar-active-proxy\": \"my-proxy-id\"\n * }\n */\nexport const XScalarActiveProxySchema = Type.Object({\n 'x-scalar-active-proxy': Type.Optional(Type.Union([Type.String(), Type.Null()])),\n})\n\nexport type XScalarActiveProxy = {\n /** The currently selected proxy */\n 'x-scalar-active-proxy'?: string | null\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY;AAYd,MAAM,2BAA2B,KAAK,OAAO;AAAA,EAClD,yBAAyB,KAAK,SAAS,KAAK,MAAM,CAAC,KAAK,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC;AACjF,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,16 +1,47 @@
|
|
|
1
1
|
import { type DocumentAuth } from '../entities/auth/schema.js';
|
|
2
2
|
import { type DocumentHistory } from '../entities/history/schema.js';
|
|
3
|
-
import { type WorkspaceDocument, type WorkspaceMeta } from '../schemas/workspace.js';
|
|
3
|
+
import { type WorkspaceDocument, type WorkspaceExtensions, type WorkspaceMeta } from '../schemas/workspace.js';
|
|
4
4
|
export declare const InMemoryWorkspaceSchema: import("@scalar/typebox").TObject<{
|
|
5
|
-
meta: import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
5
|
+
meta: import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
6
6
|
"x-scalar-color-mode": import("@scalar/typebox").TOptional<import("@scalar/typebox").TUnion<[import("@scalar/typebox").TLiteral<"system">, import("@scalar/typebox").TLiteral<"light">, import("@scalar/typebox").TLiteral<"dark">]>>;
|
|
7
7
|
"x-scalar-default-client": import("@scalar/typebox").TOptional<import("@scalar/typebox").TUnion<import("@scalar/typebox").TLiteral<"c/libcurl" | "c/clj_http" | "c/httpclient" | "c/restsharp" | "c/http" | "c/native" | "c/http1.1" | "c/asynchttp" | "c/nethttp" | "c/okhttp" | "c/unirest" | "c/axios" | "c/fetch" | "c/jquery" | "c/ofetch" | "c/xhr" | "c/undici" | "c/nsurlsession" | "c/cohttp" | "c/curl" | "c/guzzle" | "c/restmethod" | "c/webrequest" | "c/python3" | "c/requests" | "c/httpx_sync" | "c/httpx_async" | "c/httr" | "c/reqwest" | "c/httpie" | "c/wget" | "r/libcurl" | "r/clj_http" | "r/httpclient" | "r/restsharp" | "r/http" | "r/native" | "r/http1.1" | "r/asynchttp" | "r/nethttp" | "r/okhttp" | "r/unirest" | "r/axios" | "r/fetch" | "r/jquery" | "r/ofetch" | "r/xhr" | "r/undici" | "r/nsurlsession" | "r/cohttp" | "r/curl" | "r/guzzle" | "r/restmethod" | "r/webrequest" | "r/python3" | "r/requests" | "r/httpx_sync" | "r/httpx_async" | "r/httr" | "r/reqwest" | "r/httpie" | "r/wget" | "go/libcurl" | "go/clj_http" | "go/httpclient" | "go/restsharp" | "go/http" | "go/native" | "go/http1.1" | "go/asynchttp" | "go/nethttp" | "go/okhttp" | "go/unirest" | "go/axios" | "go/fetch" | "go/jquery" | "go/ofetch" | "go/xhr" | "go/undici" | "go/nsurlsession" | "go/cohttp" | "go/curl" | "go/guzzle" | "go/restmethod" | "go/webrequest" | "go/python3" | "go/requests" | "go/httpx_sync" | "go/httpx_async" | "go/httr" | "go/reqwest" | "go/httpie" | "go/wget" | "rust/libcurl" | "rust/clj_http" | "rust/httpclient" | "rust/restsharp" | "rust/http" | "rust/native" | "rust/http1.1" | "rust/asynchttp" | "rust/nethttp" | "rust/okhttp" | "rust/unirest" | "rust/axios" | "rust/fetch" | "rust/jquery" | "rust/ofetch" | "rust/xhr" | "rust/undici" | "rust/nsurlsession" | "rust/cohttp" | "rust/curl" | "rust/guzzle" | "rust/restmethod" | "rust/webrequest" | "rust/python3" | "rust/requests" | "rust/httpx_sync" | "rust/httpx_async" | "rust/httr" | "rust/reqwest" | "rust/httpie" | "rust/wget" | "http/libcurl" | "http/clj_http" | "http/httpclient" | "http/restsharp" | "http/http" | "http/native" | "http/http1.1" | "http/asynchttp" | "http/nethttp" | "http/okhttp" | "http/unirest" | "http/axios" | "http/fetch" | "http/jquery" | "http/ofetch" | "http/xhr" | "http/undici" | "http/nsurlsession" | "http/cohttp" | "http/curl" | "http/guzzle" | "http/restmethod" | "http/webrequest" | "http/python3" | "http/requests" | "http/httpx_sync" | "http/httpx_async" | "http/httr" | "http/reqwest" | "http/httpie" | "http/wget" | "clojure/libcurl" | "clojure/clj_http" | "clojure/httpclient" | "clojure/restsharp" | "clojure/http" | "clojure/native" | "clojure/http1.1" | "clojure/asynchttp" | "clojure/nethttp" | "clojure/okhttp" | "clojure/unirest" | "clojure/axios" | "clojure/fetch" | "clojure/jquery" | "clojure/ofetch" | "clojure/xhr" | "clojure/undici" | "clojure/nsurlsession" | "clojure/cohttp" | "clojure/curl" | "clojure/guzzle" | "clojure/restmethod" | "clojure/webrequest" | "clojure/python3" | "clojure/requests" | "clojure/httpx_sync" | "clojure/httpx_async" | "clojure/httr" | "clojure/reqwest" | "clojure/httpie" | "clojure/wget" | "csharp/libcurl" | "csharp/clj_http" | "csharp/httpclient" | "csharp/restsharp" | "csharp/http" | "csharp/native" | "csharp/http1.1" | "csharp/asynchttp" | "csharp/nethttp" | "csharp/okhttp" | "csharp/unirest" | "csharp/axios" | "csharp/fetch" | "csharp/jquery" | "csharp/ofetch" | "csharp/xhr" | "csharp/undici" | "csharp/nsurlsession" | "csharp/cohttp" | "csharp/curl" | "csharp/guzzle" | "csharp/restmethod" | "csharp/webrequest" | "csharp/python3" | "csharp/requests" | "csharp/httpx_sync" | "csharp/httpx_async" | "csharp/httr" | "csharp/reqwest" | "csharp/httpie" | "csharp/wget" | "dart/libcurl" | "dart/clj_http" | "dart/httpclient" | "dart/restsharp" | "dart/http" | "dart/native" | "dart/http1.1" | "dart/asynchttp" | "dart/nethttp" | "dart/okhttp" | "dart/unirest" | "dart/axios" | "dart/fetch" | "dart/jquery" | "dart/ofetch" | "dart/xhr" | "dart/undici" | "dart/nsurlsession" | "dart/cohttp" | "dart/curl" | "dart/guzzle" | "dart/restmethod" | "dart/webrequest" | "dart/python3" | "dart/requests" | "dart/httpx_sync" | "dart/httpx_async" | "dart/httr" | "dart/reqwest" | "dart/httpie" | "dart/wget" | "fsharp/libcurl" | "fsharp/clj_http" | "fsharp/httpclient" | "fsharp/restsharp" | "fsharp/http" | "fsharp/native" | "fsharp/http1.1" | "fsharp/asynchttp" | "fsharp/nethttp" | "fsharp/okhttp" | "fsharp/unirest" | "fsharp/axios" | "fsharp/fetch" | "fsharp/jquery" | "fsharp/ofetch" | "fsharp/xhr" | "fsharp/undici" | "fsharp/nsurlsession" | "fsharp/cohttp" | "fsharp/curl" | "fsharp/guzzle" | "fsharp/restmethod" | "fsharp/webrequest" | "fsharp/python3" | "fsharp/requests" | "fsharp/httpx_sync" | "fsharp/httpx_async" | "fsharp/httr" | "fsharp/reqwest" | "fsharp/httpie" | "fsharp/wget" | "java/libcurl" | "java/clj_http" | "java/httpclient" | "java/restsharp" | "java/http" | "java/native" | "java/http1.1" | "java/asynchttp" | "java/nethttp" | "java/okhttp" | "java/unirest" | "java/axios" | "java/fetch" | "java/jquery" | "java/ofetch" | "java/xhr" | "java/undici" | "java/nsurlsession" | "java/cohttp" | "java/curl" | "java/guzzle" | "java/restmethod" | "java/webrequest" | "java/python3" | "java/requests" | "java/httpx_sync" | "java/httpx_async" | "java/httr" | "java/reqwest" | "java/httpie" | "java/wget" | "js/libcurl" | "js/clj_http" | "js/httpclient" | "js/restsharp" | "js/http" | "js/native" | "js/http1.1" | "js/asynchttp" | "js/nethttp" | "js/okhttp" | "js/unirest" | "js/axios" | "js/fetch" | "js/jquery" | "js/ofetch" | "js/xhr" | "js/undici" | "js/nsurlsession" | "js/cohttp" | "js/curl" | "js/guzzle" | "js/restmethod" | "js/webrequest" | "js/python3" | "js/requests" | "js/httpx_sync" | "js/httpx_async" | "js/httr" | "js/reqwest" | "js/httpie" | "js/wget" | "kotlin/libcurl" | "kotlin/clj_http" | "kotlin/httpclient" | "kotlin/restsharp" | "kotlin/http" | "kotlin/native" | "kotlin/http1.1" | "kotlin/asynchttp" | "kotlin/nethttp" | "kotlin/okhttp" | "kotlin/unirest" | "kotlin/axios" | "kotlin/fetch" | "kotlin/jquery" | "kotlin/ofetch" | "kotlin/xhr" | "kotlin/undici" | "kotlin/nsurlsession" | "kotlin/cohttp" | "kotlin/curl" | "kotlin/guzzle" | "kotlin/restmethod" | "kotlin/webrequest" | "kotlin/python3" | "kotlin/requests" | "kotlin/httpx_sync" | "kotlin/httpx_async" | "kotlin/httr" | "kotlin/reqwest" | "kotlin/httpie" | "kotlin/wget" | "node/libcurl" | "node/clj_http" | "node/httpclient" | "node/restsharp" | "node/http" | "node/native" | "node/http1.1" | "node/asynchttp" | "node/nethttp" | "node/okhttp" | "node/unirest" | "node/axios" | "node/fetch" | "node/jquery" | "node/ofetch" | "node/xhr" | "node/undici" | "node/nsurlsession" | "node/cohttp" | "node/curl" | "node/guzzle" | "node/restmethod" | "node/webrequest" | "node/python3" | "node/requests" | "node/httpx_sync" | "node/httpx_async" | "node/httr" | "node/reqwest" | "node/httpie" | "node/wget" | "objc/libcurl" | "objc/clj_http" | "objc/httpclient" | "objc/restsharp" | "objc/http" | "objc/native" | "objc/http1.1" | "objc/asynchttp" | "objc/nethttp" | "objc/okhttp" | "objc/unirest" | "objc/axios" | "objc/fetch" | "objc/jquery" | "objc/ofetch" | "objc/xhr" | "objc/undici" | "objc/nsurlsession" | "objc/cohttp" | "objc/curl" | "objc/guzzle" | "objc/restmethod" | "objc/webrequest" | "objc/python3" | "objc/requests" | "objc/httpx_sync" | "objc/httpx_async" | "objc/httr" | "objc/reqwest" | "objc/httpie" | "objc/wget" | "ocaml/libcurl" | "ocaml/clj_http" | "ocaml/httpclient" | "ocaml/restsharp" | "ocaml/http" | "ocaml/native" | "ocaml/http1.1" | "ocaml/asynchttp" | "ocaml/nethttp" | "ocaml/okhttp" | "ocaml/unirest" | "ocaml/axios" | "ocaml/fetch" | "ocaml/jquery" | "ocaml/ofetch" | "ocaml/xhr" | "ocaml/undici" | "ocaml/nsurlsession" | "ocaml/cohttp" | "ocaml/curl" | "ocaml/guzzle" | "ocaml/restmethod" | "ocaml/webrequest" | "ocaml/python3" | "ocaml/requests" | "ocaml/httpx_sync" | "ocaml/httpx_async" | "ocaml/httr" | "ocaml/reqwest" | "ocaml/httpie" | "ocaml/wget" | "php/libcurl" | "php/clj_http" | "php/httpclient" | "php/restsharp" | "php/http" | "php/native" | "php/http1.1" | "php/asynchttp" | "php/nethttp" | "php/okhttp" | "php/unirest" | "php/axios" | "php/fetch" | "php/jquery" | "php/ofetch" | "php/xhr" | "php/undici" | "php/nsurlsession" | "php/cohttp" | "php/curl" | "php/guzzle" | "php/restmethod" | "php/webrequest" | "php/python3" | "php/requests" | "php/httpx_sync" | "php/httpx_async" | "php/httr" | "php/reqwest" | "php/httpie" | "php/wget" | "powershell/libcurl" | "powershell/clj_http" | "powershell/httpclient" | "powershell/restsharp" | "powershell/http" | "powershell/native" | "powershell/http1.1" | "powershell/asynchttp" | "powershell/nethttp" | "powershell/okhttp" | "powershell/unirest" | "powershell/axios" | "powershell/fetch" | "powershell/jquery" | "powershell/ofetch" | "powershell/xhr" | "powershell/undici" | "powershell/nsurlsession" | "powershell/cohttp" | "powershell/curl" | "powershell/guzzle" | "powershell/restmethod" | "powershell/webrequest" | "powershell/python3" | "powershell/requests" | "powershell/httpx_sync" | "powershell/httpx_async" | "powershell/httr" | "powershell/reqwest" | "powershell/httpie" | "powershell/wget" | "python/libcurl" | "python/clj_http" | "python/httpclient" | "python/restsharp" | "python/http" | "python/native" | "python/http1.1" | "python/asynchttp" | "python/nethttp" | "python/okhttp" | "python/unirest" | "python/axios" | "python/fetch" | "python/jquery" | "python/ofetch" | "python/xhr" | "python/undici" | "python/nsurlsession" | "python/cohttp" | "python/curl" | "python/guzzle" | "python/restmethod" | "python/webrequest" | "python/python3" | "python/requests" | "python/httpx_sync" | "python/httpx_async" | "python/httr" | "python/reqwest" | "python/httpie" | "python/wget" | "ruby/libcurl" | "ruby/clj_http" | "ruby/httpclient" | "ruby/restsharp" | "ruby/http" | "ruby/native" | "ruby/http1.1" | "ruby/asynchttp" | "ruby/nethttp" | "ruby/okhttp" | "ruby/unirest" | "ruby/axios" | "ruby/fetch" | "ruby/jquery" | "ruby/ofetch" | "ruby/xhr" | "ruby/undici" | "ruby/nsurlsession" | "ruby/cohttp" | "ruby/curl" | "ruby/guzzle" | "ruby/restmethod" | "ruby/webrequest" | "ruby/python3" | "ruby/requests" | "ruby/httpx_sync" | "ruby/httpx_async" | "ruby/httr" | "ruby/reqwest" | "ruby/httpie" | "ruby/wget" | "shell/libcurl" | "shell/clj_http" | "shell/httpclient" | "shell/restsharp" | "shell/http" | "shell/native" | "shell/http1.1" | "shell/asynchttp" | "shell/nethttp" | "shell/okhttp" | "shell/unirest" | "shell/axios" | "shell/fetch" | "shell/jquery" | "shell/ofetch" | "shell/xhr" | "shell/undici" | "shell/nsurlsession" | "shell/cohttp" | "shell/curl" | "shell/guzzle" | "shell/restmethod" | "shell/webrequest" | "shell/python3" | "shell/requests" | "shell/httpx_sync" | "shell/httpx_async" | "shell/httr" | "shell/reqwest" | "shell/httpie" | "shell/wget" | "swift/libcurl" | "swift/clj_http" | "swift/httpclient" | "swift/restsharp" | "swift/http" | "swift/native" | "swift/http1.1" | "swift/asynchttp" | "swift/nethttp" | "swift/okhttp" | "swift/unirest" | "swift/axios" | "swift/fetch" | "swift/jquery" | "swift/ofetch" | "swift/xhr" | "swift/undici" | "swift/nsurlsession" | "swift/cohttp" | "swift/curl" | "swift/guzzle" | "swift/restmethod" | "swift/webrequest" | "swift/python3" | "swift/requests" | "swift/httpx_sync" | "swift/httpx_async" | "swift/httr" | "swift/reqwest" | "swift/httpie" | "swift/wget">[]>>;
|
|
8
8
|
"x-scalar-active-document": import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
9
9
|
"x-scalar-theme": import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
10
10
|
"x-scalar-sidebar-width": import("@scalar/typebox").TOptional<import("@scalar/typebox").TNumber>;
|
|
11
11
|
}>, import("@scalar/typebox").TObject<{
|
|
12
|
-
'x-scalar-active-proxy': import("@scalar/typebox").TOptional<import("@scalar/typebox").TString
|
|
13
|
-
}>]
|
|
12
|
+
'x-scalar-active-proxy': import("@scalar/typebox").TOptional<import("@scalar/typebox").TUnion<[import("@scalar/typebox").TString, import("@scalar/typebox").TNull]>>;
|
|
13
|
+
}>]>, import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
14
|
+
'x-scalar-environments': import("@scalar/typebox").TOptional<import("@scalar/typebox").TRecord<import("@scalar/typebox").TString, import("@scalar/typebox").TObject<{
|
|
15
|
+
description: import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
16
|
+
color: import("@scalar/typebox").TString;
|
|
17
|
+
variables: import("@scalar/typebox").TArray<import("@scalar/typebox").TObject<{
|
|
18
|
+
name: import("@scalar/typebox").TString;
|
|
19
|
+
value: import("@scalar/typebox").TUnion<[import("@scalar/typebox").TObject<{
|
|
20
|
+
description: import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
21
|
+
default: import("@scalar/typebox").TString;
|
|
22
|
+
}>, import("@scalar/typebox").TString]>;
|
|
23
|
+
}>>;
|
|
24
|
+
}>>>;
|
|
25
|
+
}>, import("@scalar/typebox").TObject<{
|
|
26
|
+
'x-scalar-active-environment': import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
27
|
+
}>, import("@scalar/typebox").TObject<{
|
|
28
|
+
'x-scalar-order': import("@scalar/typebox").TOptional<import("@scalar/typebox").TArray<import("@scalar/typebox").TString>>;
|
|
29
|
+
}>, import("@scalar/typebox").TObject<{
|
|
30
|
+
'x-scalar-cookies': import("@scalar/typebox").TOptional<import("@scalar/typebox").TArray<import("@scalar/typebox").TObject<{
|
|
31
|
+
name: import("@scalar/typebox").TString;
|
|
32
|
+
value: import("@scalar/typebox").TString;
|
|
33
|
+
domain: import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
34
|
+
path: import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
35
|
+
isDisabled: import("@scalar/typebox").TOptional<import("@scalar/typebox").TBoolean>;
|
|
36
|
+
}>>>;
|
|
37
|
+
}>, import("@scalar/typebox").TObject<{
|
|
38
|
+
'x-scalar-tabs': import("@scalar/typebox").TOptional<import("@scalar/typebox").TArray<import("@scalar/typebox").TObject<{
|
|
39
|
+
path: import("@scalar/typebox").TString;
|
|
40
|
+
title: import("@scalar/typebox").TString;
|
|
41
|
+
icon: import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
42
|
+
}>>>;
|
|
43
|
+
'x-scalar-active-tab': import("@scalar/typebox").TOptional<import("@scalar/typebox").TNumber>;
|
|
44
|
+
}>]>]>;
|
|
14
45
|
documents: import("@scalar/typebox").TRecord<import("@scalar/typebox").TString, import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
15
46
|
"x-scalar-active-auth": import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
16
47
|
'x-scalar-watch-mode': import("@scalar/typebox").TOptional<import("@scalar/typebox").TBoolean>;
|
|
@@ -317,6 +348,8 @@ export declare const InMemoryWorkspaceSchema: import("@scalar/typebox").TObject<
|
|
|
317
348
|
}>>;
|
|
318
349
|
}>, import("@scalar/typebox").TObject<{
|
|
319
350
|
'x-post-response': import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
351
|
+
}>, import("@scalar/typebox").TObject<{
|
|
352
|
+
'x-draft-examples': import("@scalar/typebox").TOptional<import("@scalar/typebox").TArray<import("@scalar/typebox").TString>>;
|
|
320
353
|
}>]>;
|
|
321
354
|
SchemaObject: import("@scalar/typebox").TUnion<[import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
322
355
|
__scalar_: import("@scalar/typebox").TString;
|
|
@@ -1929,6 +1962,8 @@ export declare const InMemoryWorkspaceSchema: import("@scalar/typebox").TObject<
|
|
|
1929
1962
|
}>>;
|
|
1930
1963
|
}>, import("@scalar/typebox").TObject<{
|
|
1931
1964
|
'x-post-response': import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
1965
|
+
}>, import("@scalar/typebox").TObject<{
|
|
1966
|
+
'x-draft-examples': import("@scalar/typebox").TOptional<import("@scalar/typebox").TArray<import("@scalar/typebox").TString>>;
|
|
1932
1967
|
}>]>;
|
|
1933
1968
|
SchemaObject: import("@scalar/typebox").TUnion<[import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
1934
1969
|
__scalar_: import("@scalar/typebox").TString;
|
|
@@ -3328,6 +3363,8 @@ export declare const InMemoryWorkspaceSchema: import("@scalar/typebox").TObject<
|
|
|
3328
3363
|
}>>;
|
|
3329
3364
|
}>, import("@scalar/typebox").TObject<{
|
|
3330
3365
|
'x-post-response': import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
3366
|
+
}>, import("@scalar/typebox").TObject<{
|
|
3367
|
+
'x-draft-examples': import("@scalar/typebox").TOptional<import("@scalar/typebox").TArray<import("@scalar/typebox").TString>>;
|
|
3331
3368
|
}>]>;
|
|
3332
3369
|
SchemaObject: import("@scalar/typebox").TUnion<[import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
3333
3370
|
__scalar_: import("@scalar/typebox").TString;
|
|
@@ -4428,7 +4465,7 @@ export declare const InMemoryWorkspaceSchema: import("@scalar/typebox").TObject<
|
|
|
4428
4465
|
}>>;
|
|
4429
4466
|
}>;
|
|
4430
4467
|
export type InMemoryWorkspace = {
|
|
4431
|
-
meta: WorkspaceMeta;
|
|
4468
|
+
meta: WorkspaceMeta & WorkspaceExtensions;
|
|
4432
4469
|
documents: Record<string, WorkspaceDocument>;
|
|
4433
4470
|
originalDocuments: Record<string, Record<string, unknown>>;
|
|
4434
4471
|
intermediateDocuments: Record<string, Record<string, unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inmemory-workspace.d.ts","sourceRoot":"","sources":["../../src/schemas/inmemory-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,wBAAwB,CAAA;AAC9E,OAAO,EAAE,KAAK,eAAe,EAAyB,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"inmemory-workspace.d.ts","sourceRoot":"","sources":["../../src/schemas/inmemory-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,wBAAwB,CAAA;AAC9E,OAAO,EAAE,KAAK,eAAe,EAAyB,MAAM,2BAA2B,CAAA;AAEvF,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAA;AAI5B,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQlC,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,GAAG,mBAAmB,CAAA;IACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC5C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC1D,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,IAAI,EAAE,YAAY,CAAA;CACnB,CAAA"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { Type } from "@scalar/typebox";
|
|
2
2
|
import { DocumentAuthSchema } from "../entities/auth/schema.js";
|
|
3
3
|
import { DocumentHistorySchema } from "../entities/history/schema.js";
|
|
4
|
+
import { compose } from "../schemas/compose.js";
|
|
4
5
|
import {
|
|
5
6
|
WorkspaceDocumentSchema,
|
|
7
|
+
WorkspaceExtensionsSchema,
|
|
6
8
|
WorkspaceMetaSchema
|
|
7
9
|
} from "../schemas/workspace.js";
|
|
8
10
|
const UnknownObjectSchema = Type.Record(Type.String(), Type.Unknown());
|
|
9
11
|
const InMemoryWorkspaceSchema = Type.Object({
|
|
10
|
-
meta: WorkspaceMetaSchema,
|
|
12
|
+
meta: compose(WorkspaceMetaSchema, WorkspaceExtensionsSchema),
|
|
11
13
|
documents: Type.Record(Type.String(), WorkspaceDocumentSchema),
|
|
12
14
|
originalDocuments: Type.Record(Type.String(), UnknownObjectSchema),
|
|
13
15
|
intermediateDocuments: Type.Record(Type.String(), UnknownObjectSchema),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/schemas/inmemory-workspace.ts"],
|
|
4
|
-
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\nimport { type DocumentAuth, DocumentAuthSchema } from '@/entities/auth/schema'\nimport { type DocumentHistory, DocumentHistorySchema } from '@/entities/history/schema'\nimport {\n type WorkspaceDocument,\n WorkspaceDocumentSchema,\n type WorkspaceMeta,\n WorkspaceMetaSchema,\n} from '@/schemas/workspace'\n\nconst UnknownObjectSchema = Type.Record(Type.String(), Type.Unknown())\n\nexport const InMemoryWorkspaceSchema = Type.Object({\n meta: WorkspaceMetaSchema,\n documents: Type.Record(Type.String(), WorkspaceDocumentSchema),\n originalDocuments: Type.Record(Type.String(), UnknownObjectSchema),\n intermediateDocuments: Type.Record(Type.String(), UnknownObjectSchema),\n overrides: Type.Record(Type.String(), Type.Any()),\n history: DocumentHistorySchema,\n auth: DocumentAuthSchema,\n})\n\nexport type InMemoryWorkspace = {\n meta: WorkspaceMeta\n documents: Record<string, WorkspaceDocument>\n originalDocuments: Record<string, Record<string, unknown>>\n intermediateDocuments: Record<string, Record<string, unknown>>\n overrides: Record<string, any>\n history: DocumentHistory\n auth: DocumentAuth\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY;AAErB,SAA4B,0BAA0B;AACtD,SAA+B,6BAA6B;AAC5D;AAAA,EAEE;AAAA,EAEA;AAAA,OACK;AAEP,MAAM,sBAAsB,KAAK,OAAO,KAAK,OAAO,GAAG,KAAK,QAAQ,CAAC;AAE9D,MAAM,0BAA0B,KAAK,OAAO;AAAA,EACjD,MAAM;AAAA,
|
|
4
|
+
"sourcesContent": ["import { Type } from '@scalar/typebox'\n\nimport { type DocumentAuth, DocumentAuthSchema } from '@/entities/auth/schema'\nimport { type DocumentHistory, DocumentHistorySchema } from '@/entities/history/schema'\nimport { compose } from '@/schemas/compose'\nimport {\n type WorkspaceDocument,\n WorkspaceDocumentSchema,\n type WorkspaceExtensions,\n WorkspaceExtensionsSchema,\n type WorkspaceMeta,\n WorkspaceMetaSchema,\n} from '@/schemas/workspace'\n\nconst UnknownObjectSchema = Type.Record(Type.String(), Type.Unknown())\n\nexport const InMemoryWorkspaceSchema = Type.Object({\n meta: compose(WorkspaceMetaSchema, WorkspaceExtensionsSchema),\n documents: Type.Record(Type.String(), WorkspaceDocumentSchema),\n originalDocuments: Type.Record(Type.String(), UnknownObjectSchema),\n intermediateDocuments: Type.Record(Type.String(), UnknownObjectSchema),\n overrides: Type.Record(Type.String(), Type.Any()),\n history: DocumentHistorySchema,\n auth: DocumentAuthSchema,\n})\n\nexport type InMemoryWorkspace = {\n meta: WorkspaceMeta & WorkspaceExtensions\n documents: Record<string, WorkspaceDocument>\n originalDocuments: Record<string, Record<string, unknown>>\n intermediateDocuments: Record<string, Record<string, unknown>>\n overrides: Record<string, any>\n history: DocumentHistory\n auth: DocumentAuth\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY;AAErB,SAA4B,0BAA0B;AACtD,SAA+B,6BAA6B;AAC5D,SAAS,eAAe;AACxB;AAAA,EAEE;AAAA,EAEA;AAAA,EAEA;AAAA,OACK;AAEP,MAAM,sBAAsB,KAAK,OAAO,KAAK,OAAO,GAAG,KAAK,QAAQ,CAAC;AAE9D,MAAM,0BAA0B,KAAK,OAAO;AAAA,EACjD,MAAM,QAAQ,qBAAqB,yBAAyB;AAAA,EAC5D,WAAW,KAAK,OAAO,KAAK,OAAO,GAAG,uBAAuB;AAAA,EAC7D,mBAAmB,KAAK,OAAO,KAAK,OAAO,GAAG,mBAAmB;AAAA,EACjE,uBAAuB,KAAK,OAAO,KAAK,OAAO,GAAG,mBAAmB;AAAA,EACrE,WAAW,KAAK,OAAO,KAAK,OAAO,GAAG,KAAK,IAAI,CAAC;AAAA,EAChD,SAAS;AAAA,EACT,MAAM;AACR,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -318,6 +318,8 @@ export declare const ReferenceConfigSchema: import("@scalar/typebox").TObject<{
|
|
|
318
318
|
}>>;
|
|
319
319
|
}>, import("@scalar/typebox").TObject<{
|
|
320
320
|
'x-post-response': import("@scalar/typebox").TOptional<import("@scalar/typebox").TString>;
|
|
321
|
+
}>, import("@scalar/typebox").TObject<{
|
|
322
|
+
'x-draft-examples': import("@scalar/typebox").TOptional<TArray<import("@scalar/typebox").TString>>;
|
|
321
323
|
}>]>;
|
|
322
324
|
SchemaObject: import("@scalar/typebox").TUnion<[import("@scalar/typebox").TIntersect<[import("@scalar/typebox").TObject<{
|
|
323
325
|
__scalar_: import("@scalar/typebox").TString;
|