@omnistreamai/data-adapter-webdav 0.3.5 → 0.3.6

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/dist/index.d.mts CHANGED
@@ -32,7 +32,7 @@ declare class WebDAVAdapter implements RemoteAdapter {
32
32
  /**
33
33
  * Add data
34
34
  */
35
- add<T extends Record<string, unknown>>(storeName: string, data: T, idKey?: string): Promise<T>;
35
+ add<T extends Record<string, unknown>>(storeName: string, data: T, _idKey?: string): Promise<T>;
36
36
  /**
37
37
  * Update data
38
38
  */
@@ -40,11 +40,11 @@ declare class WebDAVAdapter implements RemoteAdapter {
40
40
  /**
41
41
  * Delete data
42
42
  */
43
- delete(storeName: string, id: string, _idKey?: string): Promise<void>;
43
+ delete(storeName: string, id: string, idKey?: string): Promise<void>;
44
44
  /**
45
45
  * Get data by ID
46
46
  */
47
- getData<T extends Record<string, unknown>>(storeName: string, id: string, _idKey?: string): Promise<T | null>;
47
+ getData<T extends Record<string, unknown>>(storeName: string, id: string, idKey?: string): Promise<T | null>;
48
48
  /**
49
49
  * Get list data (with pagination support)
50
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/webdav-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;AAYA;AACe,cADF,aAAA,YAAyB,aACvB,CAAA;EAQO,SAAA,IAAA,GARP,WAAA,CAAA,MAAA;EAqHV,SAAA,IAAA,GAAA,eAAA;EA4BiB,QAAA,OAAA;EAEZ;;;EAiBe,UAAA,CAAA,OAAA,EA5JH,aA4JG,CAAA,EAAA,IAAA;EAGP;;;EAEb,QAAA,UAAA;EAwBA;;;EAeA,QAAA,QAAA;EAmBqB;;;EAIG,QAAA,OAAA;EAAhB;;;EA0H6B,SAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EA5OrC,OA4OqC,CAAA,IAAA,CAAA;EAiDhB;;;gBAjQJ,kDAEZ,oBAEL,QAAQ;;;;mBAeY,8DAGf,QAAQ,qBAEb,QAAQ;;;;0DAwBR;;;;oBAWqB,0EAIrB,QAAQ;;;;oBAmBa,sDAEb,aAAa,sBAErB,QAAQ,gBAAgB;;;;;;;;;;;;4BA8GK;;;;gCAYQ;;;;oBAiDhB"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/webdav-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;AAYA;AACe,cADF,aAAA,YAAyB,aACvB,CAAA;EAQO,SAAA,IAAA,GARP,WAAA,CAAA,MAAA;EA+GV,SAAA,IAAA,GAAA,eAAA;EAiCiB,QAAA,OAAA;EAEZ;;;EAyBe,UAAA,CAAA,OAAA,EAnKH,aAmKG,CAAA,EAAA,IAAA;EAGP;;;EAEb,QAAA,UAAA;EAiCA;;;EA+BA,QAAA,QAAA;EAoBqB;;;EAIG,QAAA,OAAA;EAAhB;;;EAoH6B,SAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EA7QrC,OA6QqC,CAAA,IAAA,CAAA;EAiDhB;;;gBA7RJ,kDAEZ,qBAEL,QAAQ;;;;mBAuBY,8DAGf,QAAQ,qBAEb,QAAQ;;;;yDAiCR;;;;oBA2BqB,yEAIrB,QAAQ;;;;oBAoBa,sDAEb,aAAa,sBAErB,QAAQ,gBAAgB;;;;;;;;;;;;4BAwGK;;;;gCAYQ;;;;oBAiDhB"}
package/dist/index.d.ts CHANGED
@@ -32,7 +32,7 @@ declare class WebDAVAdapter implements RemoteAdapter {
32
32
  /**
33
33
  * Add data
34
34
  */
35
- add<T extends Record<string, unknown>>(storeName: string, data: T, idKey?: string): Promise<T>;
35
+ add<T extends Record<string, unknown>>(storeName: string, data: T, _idKey?: string): Promise<T>;
36
36
  /**
37
37
  * Update data
38
38
  */
@@ -40,11 +40,11 @@ declare class WebDAVAdapter implements RemoteAdapter {
40
40
  /**
41
41
  * Delete data
42
42
  */
43
- delete(storeName: string, id: string, _idKey?: string): Promise<void>;
43
+ delete(storeName: string, id: string, idKey?: string): Promise<void>;
44
44
  /**
45
45
  * Get data by ID
46
46
  */
47
- getData<T extends Record<string, unknown>>(storeName: string, id: string, _idKey?: string): Promise<T | null>;
47
+ getData<T extends Record<string, unknown>>(storeName: string, id: string, idKey?: string): Promise<T | null>;
48
48
  /**
49
49
  * Get list data (with pagination support)
50
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/webdav-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;AAYA;AACe,cADF,aAAA,YAAyB,aACvB,CAAA;EAQO,SAAA,IAAA,GARP,WAAA,CAAA,MAAA;EAqHV,SAAA,IAAA,GAAA,eAAA;EA4BiB,QAAA,OAAA;EAEZ;;;EAiBe,UAAA,CAAA,OAAA,EA5JH,aA4JG,CAAA,EAAA,IAAA;EAGP;;;EAEb,QAAA,UAAA;EAwBA;;;EAeA,QAAA,QAAA;EAmBqB;;;EAIG,QAAA,OAAA;EAAhB;;;EA0H6B,SAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EA5OrC,OA4OqC,CAAA,IAAA,CAAA;EAiDhB;;;gBAjQJ,kDAEZ,oBAEL,QAAQ;;;;mBAeY,8DAGf,QAAQ,qBAEb,QAAQ;;;;0DAwBR;;;;oBAWqB,0EAIrB,QAAQ;;;;oBAmBa,sDAEb,aAAa,sBAErB,QAAQ,gBAAgB;;;;;;;;;;;;4BA8GK;;;;gCAYQ;;;;oBAiDhB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/webdav-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;AAYA;AACe,cADF,aAAA,YAAyB,aACvB,CAAA;EAQO,SAAA,IAAA,GARP,WAAA,CAAA,MAAA;EA+GV,SAAA,IAAA,GAAA,eAAA;EAiCiB,QAAA,OAAA;EAEZ;;;EAyBe,UAAA,CAAA,OAAA,EAnKH,aAmKG,CAAA,EAAA,IAAA;EAGP;;;EAEb,QAAA,UAAA;EAiCA;;;EA+BA,QAAA,QAAA;EAoBqB;;;EAIG,QAAA,OAAA;EAAhB;;;EAoH6B,SAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EA7QrC,OA6QqC,CAAA,IAAA,CAAA;EAiDhB;;;gBA7RJ,kDAEZ,qBAEL,QAAQ;;;;mBAuBY,8DAGf,QAAQ,qBAEb,QAAQ;;;;yDAiCR;;;;oBA2BqB,yEAIrB,QAAQ;;;;oBAoBa,sDAEb,aAAa,sBAErB,QAAQ,gBAAgB;;;;;;;;;;;;4BAwGK;;;;gCAYQ;;;;oBAiDhB"}
package/dist/index.js CHANGED
@@ -37,12 +37,9 @@ var WebDAVAdapter = class {
37
37
  /**
38
38
  * Build URL
39
39
  */
40
- buildUrl(storeName, id) {
40
+ buildUrl(storeName) {
41
41
  if (!this.service) throw new Error("Service not configured. Call setService() first.");
42
- const baseUrl = this.service.endpoint.replace(/\/$/, "");
43
- const storePath = `/${storeName}`;
44
- if (id) return `${baseUrl}${storePath}/${id}`;
45
- return `${baseUrl}${storePath}`;
42
+ return `${this.service.endpoint.replace(/\/$/, "")}/${storeName}.json`;
46
43
  }
47
44
  /**
48
45
  * Send request
@@ -71,14 +68,16 @@ var WebDAVAdapter = class {
71
68
  * Initialize store
72
69
  */
73
70
  async initStore(storeName, _indexes = [], _idKey = "id") {
71
+ if (!this.service) throw new Error("Service not configured. Call setService() first.");
74
72
  const parts = storeName.replace(/^\/+|\/+$/g, "").split("/");
73
+ const baseUrl = this.service.endpoint.replace(/\/$/, "");
75
74
  let currentPath = "";
76
75
  for (const part of parts) {
77
76
  currentPath = currentPath ? `${currentPath}/${part}` : part;
78
77
  try {
79
78
  await this.listDirectory(currentPath);
80
79
  } catch {
81
- const url = this.buildUrl(currentPath);
80
+ const url = `${baseUrl}/${currentPath}`;
82
81
  const response = await fetch(url, {
83
82
  method: "MKCOL",
84
83
  headers: this.getHeaders()
@@ -90,54 +89,65 @@ var WebDAVAdapter = class {
90
89
  /**
91
90
  * Add data
92
91
  */
93
- async add(storeName, data, idKey = "id") {
94
- const id = String(data[idKey]);
95
- const url = this.buildUrl(storeName, id);
96
- return await this.request(url, {
92
+ async add(storeName, data, _idKey = "id") {
93
+ const url = this.buildUrl(storeName);
94
+ const items = await this.request(url, { method: "GET" }, { allowNotFound: true }) || [];
95
+ items.push(data);
96
+ await this.request(url, {
97
97
  method: "PUT",
98
- body: JSON.stringify(data)
99
- }) ?? data;
98
+ body: JSON.stringify(items)
99
+ });
100
+ return data;
100
101
  }
101
102
  /**
102
103
  * Update data
103
104
  */
104
105
  async update(storeName, id, data, idKey = "id") {
105
- const existing = await this.getData(storeName, id, idKey);
106
+ const url = this.buildUrl(storeName);
107
+ const existing = await this.request(url, { method: "GET" });
106
108
  if (!existing) throw new Error("Not found id:" + id);
107
- const updated = {
108
- ...existing,
109
+ const index = existing.findIndex((item) => String(item[idKey]) === id);
110
+ if (index === -1) throw new Error("Not found id:" + id);
111
+ existing[index] = {
112
+ ...existing[index],
109
113
  ...data
110
114
  };
111
- const url = this.buildUrl(storeName, id);
112
- return await this.request(url, {
115
+ await this.request(url, {
113
116
  method: "PUT",
114
- body: JSON.stringify(updated)
115
- }) ?? updated;
117
+ body: JSON.stringify(existing)
118
+ });
119
+ return existing[index];
116
120
  }
117
121
  /**
118
122
  * Delete data
119
123
  */
120
- async delete(storeName, id, _idKey = "id") {
121
- const url = this.buildUrl(storeName, id);
122
- await this.request(url, { method: "DELETE" });
124
+ async delete(storeName, id, idKey = "id") {
125
+ const url = this.buildUrl(storeName);
126
+ const existing = await this.request(url, { method: "GET" });
127
+ if (!existing) throw new Error("Not found id:" + id);
128
+ const index = existing.findIndex((item) => String(item[idKey]) === id);
129
+ if (index === -1) throw new Error("Not found id:" + id);
130
+ existing.splice(index, 1);
131
+ await this.request(url, {
132
+ method: "PUT",
133
+ body: JSON.stringify(existing)
134
+ });
123
135
  }
124
136
  /**
125
137
  * Get data by ID
126
138
  */
127
- async getData(storeName, id, _idKey = "id") {
128
- const url = this.buildUrl(storeName, id);
129
- return await this.request(url, { method: "GET" }, { allowNotFound: true });
139
+ async getData(storeName, id, idKey = "id") {
140
+ const url = this.buildUrl(storeName);
141
+ const existing = await this.request(url, { method: "GET" }, { allowNotFound: true });
142
+ if (!existing) return null;
143
+ return existing.find((item) => String(item[idKey]) === id) ?? null;
130
144
  }
131
145
  /**
132
146
  * Get list data (with pagination support)
133
147
  */
134
148
  async getList(storeName, options = {}, _idKey = "id") {
135
- const files = await this.listDirectory(storeName);
136
- const allData = [];
137
- for (const file of files) try {
138
- const data = await this.request(this.buildUrl(storeName, file), { method: "GET" });
139
- if (data) allData.push(data);
140
- } catch {}
149
+ const url = this.buildUrl(storeName);
150
+ const allData = await this.request(url, { method: "GET" }, { allowNotFound: true }) || [];
141
151
  let filteredData = allData;
142
152
  if (options.where) filteredData = allData.filter((item) => {
143
153
  for (const key in options.where) if (item[key] !== options.where[key]) return false;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["AdapterType","headers: Record<string, string>","AuthType","allData: T[]","files: string[]"],"sources":["../src/webdav-adapter.ts"],"sourcesContent":["import {\n AdapterType,\n type RemoteAdapter,\n type QueryOptions,\n type PaginatedResult,\n type ServiceConfig,\n AuthType,\n} from \"@omnistreamai/data-core\";\n\n/**\n * WebDAV adapter implementation\n */\nexport class WebDAVAdapter implements RemoteAdapter {\n readonly type = AdapterType.Remote;\n readonly name = \"WebDAVAdapter\";\n\n private service: ServiceConfig | null = null;\n\n /**\n * Set service configuration\n */\n setService(service: ServiceConfig): void {\n this.service = service;\n }\n\n /**\n * Get request headers\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (!this.service?.authentication) {\n return headers;\n }\n\n const { authentication } = this.service;\n\n switch (authentication.authType) {\n case AuthType.Token:\n if (authentication.token) {\n headers[\"Authorization\"] =\n `${authentication.token.token_type} ${authentication.token.access_token}`;\n }\n break;\n case AuthType.Bearer:\n if (authentication.bearer) {\n headers[\"Authorization\"] = `Bearer ${authentication.bearer}`;\n }\n break;\n case AuthType.Basic:\n if (authentication.username && authentication.password) {\n const credentials = btoa(\n `${authentication.username}:${authentication.password}`,\n );\n headers[\"Authorization\"] = `Basic ${credentials}`;\n }\n break;\n }\n\n return headers;\n }\n\n /**\n * Build URL\n */\n private buildUrl(storeName: string, id?: string): string {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n const storePath = `/${storeName}`;\n\n if (id) {\n return `${baseUrl}${storePath}/${id}`;\n }\n\n return `${baseUrl}${storePath}`;\n }\n\n /**\n * Send request\n */\n private async request<T>(\n url: string,\n options: RequestInit = {},\n {\n allowNotFound,\n }: {\n allowNotFound?: boolean;\n } = {},\n ): Promise<T | null> {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n if (allowNotFound && response.status == 404) {\n return null;\n }\n throw new Error(\n `HTTP error! status: ${response.status}, message: ${response.statusText}`,\n );\n }\n\n const text = await response.text();\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n }\n\n /**\n * Initialize store\n */\n async initStore(\n storeName: string,\n _indexes: string[] = [],\n _idKey: string = \"id\",\n ): Promise<void> {\n const path = storeName.replace(/^\\/+|\\/+$/g, \"\");\n const parts = path.split(\"/\");\n\n let currentPath = \"\";\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n\n try {\n await this.listDirectory(currentPath);\n } catch {\n const url = this.buildUrl(currentPath);\n\n const response = await fetch(url, {\n method: \"MKCOL\",\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create store: ${response.statusText}`);\n }\n }\n }\n }\n\n /**\n * Add data\n */\n async add<T extends Record<string, unknown>>(\n storeName: string,\n data: T,\n idKey: string = \"id\",\n ): Promise<T> {\n const id = String(data[idKey]);\n const url = this.buildUrl(storeName, id);\n\n const result = await this.request<T>(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n });\n\n return result ?? data;\n }\n\n /**\n * Update data\n */\n async update<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n data: Partial<T>,\n idKey: string = \"id\",\n ): Promise<T> {\n const existing = await this.getData<T>(storeName, id, idKey);\n if (!existing) {\n throw new Error(\"Not found id:\" + id);\n }\n\n const updated = { ...existing, ...data };\n const url = this.buildUrl(storeName, id);\n\n const result = await this.request<T>(url, {\n method: \"PUT\",\n body: JSON.stringify(updated),\n });\n\n return result ?? updated;\n }\n\n /**\n * Delete data\n */\n async delete(\n storeName: string,\n id: string,\n _idKey: string = \"id\",\n ): Promise<void> {\n const url = this.buildUrl(storeName, id);\n\n await this.request(url, {\n method: \"DELETE\",\n });\n }\n\n /**\n * Get data by ID\n */\n async getData<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n _idKey: string = \"id\",\n ): Promise<T | null> {\n const url = this.buildUrl(storeName, id);\n\n const result = await this.request<T>(\n url,\n {\n method: \"GET\",\n },\n {\n allowNotFound: true,\n },\n );\n\n return result;\n }\n\n /**\n * Get list data (with pagination support)\n */\n async getList<T extends Record<string, unknown>>(\n storeName: string,\n options: QueryOptions<T> = {},\n _idKey: string = \"id\",\n ): Promise<PaginatedResult<T>> {\n const files = await this.listDirectory(storeName);\n\n const allData: T[] = [];\n for (const file of files) {\n try {\n const data = await this.request<T>(this.buildUrl(storeName, file), {\n method: \"GET\",\n });\n if (data) {\n allData.push(data);\n }\n } catch {}\n }\n\n let filteredData = allData;\n\n if (options.where) {\n filteredData = allData.filter((item) => {\n for (const key in options.where) {\n const itemValue = item[key];\n const whereValue = options.where![key];\n if (itemValue !== whereValue) {\n return false;\n }\n }\n return true;\n });\n }\n\n // Sorting\n if (options.sortBy) {\n filteredData = this.sortEntries(\n filteredData,\n String(options.sortBy),\n options.sortOrder,\n );\n }\n\n const totalCount = filteredData.length;\n const page = options.page ?? 1;\n const limit = options.limit ?? totalCount;\n\n const startIndex = (page - 1) * limit;\n const endIndex = startIndex + limit;\n const paginatedData = filteredData.slice(startIndex, endIndex);\n\n return {\n data: paginatedData,\n totalCount,\n page,\n limit,\n };\n }\n\n /**\n * Sort entries by specified field\n * @param entries Array of entries to sort\n * @param key Sorting field name\n * @param sortOrder Sort order: 'asc' or 'desc' (default: 'asc')\n * @returns Sorted array of entries\n */\n private sortEntries<T extends Record<string, unknown>>(\n entries: T[],\n key: string,\n sortOrder: \"asc\" | \"desc\" = \"asc\",\n ): T[] {\n return [...entries].sort((a, b) => {\n const aValue = a[key];\n const bValue = b[key];\n\n // Handle undefined or null values\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1; // null/undefined at the end\n if (bValue == null) return -1; // null/undefined at the end\n\n let comparison = 0;\n\n // Number type sorting\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n }\n // String type sorting\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n comparison = aValue.localeCompare(bValue);\n }\n // Date type sorting (if string format date)\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n comparison = aDate.getTime() - bDate.getTime();\n } else {\n // Convert other types to string for comparison\n comparison = String(aValue).localeCompare(String(bValue));\n }\n }\n // Convert other types to string for comparison\n else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n // Apply sort order\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n\n /**\n * Clear store\n */\n async clear(storeName: string): Promise<void> {\n const list = await this.getList(storeName);\n\n for (const item of list.data) {\n const id = String((item as Record<string, unknown>)[\"id\"]);\n await this.delete(storeName, id);\n }\n }\n\n /**\n * List directory contents\n */\n async listDirectory(path: string = \"\"): Promise<string[]> {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n const url = path ? `${baseUrl}/${path.replace(/^\\//, \"\")}` : baseUrl;\n\n const response = await fetch(url, {\n method: \"PROPFIND\",\n headers: {\n ...this.getHeaders(),\n Depth: \"1\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to list directory: ${response.statusText}`);\n }\n\n const text = await response.text();\n\n const hrefRegex = /<d:href[^>]*>([^<]+)<\\/d:href>/gi;\n const files: string[] = [];\n let match;\n\n const baseUrlObj = new URL(baseUrl);\n const basePath = baseUrlObj.pathname;\n\n while ((match = hrefRegex.exec(text)) !== null) {\n const fullPath = match[1] || \"\";\n let relativePath = \"\";\n try {\n const hrefUrl = new URL(fullPath);\n relativePath = hrefUrl.pathname;\n } catch {}\n const pathRegex = new RegExp(`^/*${path}`)\n relativePath = fullPath.replace(basePath, \"\").replace(pathRegex, '').replace(/^\\//, \"\");\n if (relativePath && relativePath !== path.replace(/^\\//, \"\")) {\n files.push(relativePath);\n }\n }\n\n return files;\n }\n\n /**\n * Test connection\n */\n async testConnection(): Promise<boolean> {\n try {\n await this.listDirectory(\"\");\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["AdapterType","headers: Record<string, string>","AuthType","files: string[]"],"sources":["../src/webdav-adapter.ts"],"sourcesContent":["import {\n AdapterType,\n type RemoteAdapter,\n type QueryOptions,\n type PaginatedResult,\n type ServiceConfig,\n AuthType,\n} from \"@omnistreamai/data-core\";\n\n/**\n * WebDAV adapter implementation\n */\nexport class WebDAVAdapter implements RemoteAdapter {\n readonly type = AdapterType.Remote;\n readonly name = \"WebDAVAdapter\";\n\n private service: ServiceConfig | null = null;\n\n /**\n * Set service configuration\n */\n setService(service: ServiceConfig): void {\n this.service = service;\n }\n\n /**\n * Get request headers\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (!this.service?.authentication) {\n return headers;\n }\n\n const { authentication } = this.service;\n\n switch (authentication.authType) {\n case AuthType.Token:\n if (authentication.token) {\n headers[\"Authorization\"] =\n `${authentication.token.token_type} ${authentication.token.access_token}`;\n }\n break;\n case AuthType.Bearer:\n if (authentication.bearer) {\n headers[\"Authorization\"] = `Bearer ${authentication.bearer}`;\n }\n break;\n case AuthType.Basic:\n if (authentication.username && authentication.password) {\n const credentials = btoa(\n `${authentication.username}:${authentication.password}`,\n );\n headers[\"Authorization\"] = `Basic ${credentials}`;\n }\n break;\n }\n\n return headers;\n }\n\n /**\n * Build URL\n */\n private buildUrl(storeName: string): string {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n return `${baseUrl}/${storeName}.json`;\n }\n\n /**\n * Send request\n */\n private async request<T>(\n url: string,\n options: RequestInit = {},\n {\n allowNotFound,\n }: {\n allowNotFound?: boolean;\n } = {},\n ): Promise<T | null> {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n if (allowNotFound && response.status == 404) {\n return null;\n }\n throw new Error(\n `HTTP error! status: ${response.status}, message: ${response.statusText}`,\n );\n }\n\n const text = await response.text();\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n }\n\n /**\n * Initialize store\n */\n async initStore(\n storeName: string,\n _indexes: string[] = [],\n _idKey: string = \"id\",\n ): Promise<void> {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const path = storeName.replace(/^\\/+|\\/+$/g, \"\");\n const parts = path.split(\"/\");\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n\n let currentPath = \"\";\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n\n try {\n await this.listDirectory(currentPath);\n } catch {\n const url = `${baseUrl}/${currentPath}`;\n\n const response = await fetch(url, {\n method: \"MKCOL\",\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create store: ${response.statusText}`);\n }\n }\n }\n }\n\n /**\n * Add data\n */\n async add<T extends Record<string, unknown>>(\n storeName: string,\n data: T,\n _idKey: string = \"id\",\n ): Promise<T> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<T[]>(url, {\n method: \"GET\",\n }, {\n allowNotFound: true,\n });\n\n const items = existing || [];\n items.push(data);\n\n await this.request(url, {\n method: \"PUT\",\n body: JSON.stringify(items),\n });\n\n return data;\n }\n\n /**\n * Update data\n */\n async update<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n data: Partial<T>,\n idKey: string = \"id\",\n ): Promise<T> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<T[]>(url, {\n method: \"GET\",\n });\n\n if (!existing) {\n throw new Error(\"Not found id:\" + id);\n }\n\n const index = existing.findIndex(item => String(item[idKey]) === id);\n if (index === -1) {\n throw new Error(\"Not found id:\" + id);\n }\n\n existing[index] = { ...existing[index], ...data } as T;\n\n await this.request(url, {\n method: \"PUT\",\n body: JSON.stringify(existing),\n });\n\n return existing[index];\n }\n\n /**\n * Delete data\n */\n async delete(\n storeName: string,\n id: string,\n idKey: string = \"id\",\n ): Promise<void> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<Record<string, unknown>[]>(url, {\n method: \"GET\",\n });\n\n if (!existing) {\n throw new Error(\"Not found id:\" + id);\n }\n\n const index = existing.findIndex(item => String(item[idKey]) === id);\n if (index === -1) {\n throw new Error(\"Not found id:\" + id);\n }\n\n existing.splice(index, 1);\n\n await this.request(url, {\n method: \"PUT\",\n body: JSON.stringify(existing),\n });\n }\n\n /**\n * Get data by ID\n */\n async getData<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n idKey: string = \"id\",\n ): Promise<T | null> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<T[]>(url, {\n method: \"GET\",\n }, {\n allowNotFound: true,\n });\n\n if (!existing) {\n return null;\n }\n\n const item = existing.find(item => String(item[idKey]) === id);\n return item ?? null;\n }\n\n /**\n * Get list data (with pagination support)\n */\n async getList<T extends Record<string, unknown>>(\n storeName: string,\n options: QueryOptions<T> = {},\n _idKey: string = \"id\",\n ): Promise<PaginatedResult<T>> {\n const url = this.buildUrl(storeName);\n\n const allData = await this.request<T[]>(url, {\n method: \"GET\",\n }, {\n allowNotFound: true,\n }) || [];\n\n let filteredData = allData;\n\n if (options.where) {\n filteredData = allData.filter((item) => {\n for (const key in options.where) {\n const itemValue = item[key];\n const whereValue = options.where![key];\n if (itemValue !== whereValue) {\n return false;\n }\n }\n return true;\n });\n }\n\n // Sorting\n if (options.sortBy) {\n filteredData = this.sortEntries(\n filteredData,\n String(options.sortBy),\n options.sortOrder,\n );\n }\n\n const totalCount = filteredData.length;\n const page = options.page ?? 1;\n const limit = options.limit ?? totalCount;\n\n const startIndex = (page - 1) * limit;\n const endIndex = startIndex + limit;\n const paginatedData = filteredData.slice(startIndex, endIndex);\n\n return {\n data: paginatedData,\n totalCount,\n page,\n limit,\n };\n }\n\n /**\n * Sort entries by specified field\n * @param entries Array of entries to sort\n * @param key Sorting field name\n * @param sortOrder Sort order: 'asc' or 'desc' (default: 'asc')\n * @returns Sorted array of entries\n */\n private sortEntries<T extends Record<string, unknown>>(\n entries: T[],\n key: string,\n sortOrder: \"asc\" | \"desc\" = \"asc\",\n ): T[] {\n return [...entries].sort((a, b) => {\n const aValue = a[key];\n const bValue = b[key];\n\n // Handle undefined or null values\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1; // null/undefined at the end\n if (bValue == null) return -1; // null/undefined at the end\n\n let comparison = 0;\n\n // Number type sorting\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n }\n // String type sorting\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n comparison = aValue.localeCompare(bValue);\n }\n // Date type sorting (if string format date)\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n comparison = aDate.getTime() - bDate.getTime();\n } else {\n // Convert other types to string for comparison\n comparison = String(aValue).localeCompare(String(bValue));\n }\n }\n // Convert other types to string for comparison\n else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n // Apply sort order\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n\n /**\n * Clear store\n */\n async clear(storeName: string): Promise<void> {\n const list = await this.getList(storeName);\n\n for (const item of list.data) {\n const id = String((item as Record<string, unknown>)[\"id\"]);\n await this.delete(storeName, id);\n }\n }\n\n /**\n * List directory contents\n */\n async listDirectory(path: string = \"\"): Promise<string[]> {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n const url = path ? `${baseUrl}/${path.replace(/^\\//, \"\")}` : baseUrl;\n\n const response = await fetch(url, {\n method: \"PROPFIND\",\n headers: {\n ...this.getHeaders(),\n Depth: \"1\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to list directory: ${response.statusText}`);\n }\n\n const text = await response.text();\n\n const hrefRegex = /<d:href[^>]*>([^<]+)<\\/d:href>/gi;\n const files: string[] = [];\n let match;\n\n const baseUrlObj = new URL(baseUrl);\n const basePath = baseUrlObj.pathname;\n\n while ((match = hrefRegex.exec(text)) !== null) {\n const fullPath = match[1] || \"\";\n let relativePath = \"\";\n try {\n const hrefUrl = new URL(fullPath);\n relativePath = hrefUrl.pathname;\n } catch {}\n const pathRegex = new RegExp(`^/*${path}`)\n relativePath = fullPath.replace(basePath, \"\").replace(pathRegex, '').replace(/^\\//, \"\");\n if (relativePath && relativePath !== path.replace(/^\\//, \"\")) {\n files.push(relativePath);\n }\n }\n\n return files;\n }\n\n /**\n * Test connection\n */\n async testConnection(): Promise<boolean> {\n try {\n await this.listDirectory(\"\");\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -37,12 +37,9 @@ var WebDAVAdapter = class {
37
37
  /**
38
38
  * Build URL
39
39
  */
40
- buildUrl(storeName, id) {
40
+ buildUrl(storeName) {
41
41
  if (!this.service) throw new Error("Service not configured. Call setService() first.");
42
- const baseUrl = this.service.endpoint.replace(/\/$/, "");
43
- const storePath = `/${storeName}`;
44
- if (id) return `${baseUrl}${storePath}/${id}`;
45
- return `${baseUrl}${storePath}`;
42
+ return `${this.service.endpoint.replace(/\/$/, "")}/${storeName}.json`;
46
43
  }
47
44
  /**
48
45
  * Send request
@@ -71,14 +68,16 @@ var WebDAVAdapter = class {
71
68
  * Initialize store
72
69
  */
73
70
  async initStore(storeName, _indexes = [], _idKey = "id") {
71
+ if (!this.service) throw new Error("Service not configured. Call setService() first.");
74
72
  const parts = storeName.replace(/^\/+|\/+$/g, "").split("/");
73
+ const baseUrl = this.service.endpoint.replace(/\/$/, "");
75
74
  let currentPath = "";
76
75
  for (const part of parts) {
77
76
  currentPath = currentPath ? `${currentPath}/${part}` : part;
78
77
  try {
79
78
  await this.listDirectory(currentPath);
80
79
  } catch {
81
- const url = this.buildUrl(currentPath);
80
+ const url = `${baseUrl}/${currentPath}`;
82
81
  const response = await fetch(url, {
83
82
  method: "MKCOL",
84
83
  headers: this.getHeaders()
@@ -90,54 +89,65 @@ var WebDAVAdapter = class {
90
89
  /**
91
90
  * Add data
92
91
  */
93
- async add(storeName, data, idKey = "id") {
94
- const id = String(data[idKey]);
95
- const url = this.buildUrl(storeName, id);
96
- return await this.request(url, {
92
+ async add(storeName, data, _idKey = "id") {
93
+ const url = this.buildUrl(storeName);
94
+ const items = await this.request(url, { method: "GET" }, { allowNotFound: true }) || [];
95
+ items.push(data);
96
+ await this.request(url, {
97
97
  method: "PUT",
98
- body: JSON.stringify(data)
99
- }) ?? data;
98
+ body: JSON.stringify(items)
99
+ });
100
+ return data;
100
101
  }
101
102
  /**
102
103
  * Update data
103
104
  */
104
105
  async update(storeName, id, data, idKey = "id") {
105
- const existing = await this.getData(storeName, id, idKey);
106
+ const url = this.buildUrl(storeName);
107
+ const existing = await this.request(url, { method: "GET" });
106
108
  if (!existing) throw new Error("Not found id:" + id);
107
- const updated = {
108
- ...existing,
109
+ const index = existing.findIndex((item) => String(item[idKey]) === id);
110
+ if (index === -1) throw new Error("Not found id:" + id);
111
+ existing[index] = {
112
+ ...existing[index],
109
113
  ...data
110
114
  };
111
- const url = this.buildUrl(storeName, id);
112
- return await this.request(url, {
115
+ await this.request(url, {
113
116
  method: "PUT",
114
- body: JSON.stringify(updated)
115
- }) ?? updated;
117
+ body: JSON.stringify(existing)
118
+ });
119
+ return existing[index];
116
120
  }
117
121
  /**
118
122
  * Delete data
119
123
  */
120
- async delete(storeName, id, _idKey = "id") {
121
- const url = this.buildUrl(storeName, id);
122
- await this.request(url, { method: "DELETE" });
124
+ async delete(storeName, id, idKey = "id") {
125
+ const url = this.buildUrl(storeName);
126
+ const existing = await this.request(url, { method: "GET" });
127
+ if (!existing) throw new Error("Not found id:" + id);
128
+ const index = existing.findIndex((item) => String(item[idKey]) === id);
129
+ if (index === -1) throw new Error("Not found id:" + id);
130
+ existing.splice(index, 1);
131
+ await this.request(url, {
132
+ method: "PUT",
133
+ body: JSON.stringify(existing)
134
+ });
123
135
  }
124
136
  /**
125
137
  * Get data by ID
126
138
  */
127
- async getData(storeName, id, _idKey = "id") {
128
- const url = this.buildUrl(storeName, id);
129
- return await this.request(url, { method: "GET" }, { allowNotFound: true });
139
+ async getData(storeName, id, idKey = "id") {
140
+ const url = this.buildUrl(storeName);
141
+ const existing = await this.request(url, { method: "GET" }, { allowNotFound: true });
142
+ if (!existing) return null;
143
+ return existing.find((item) => String(item[idKey]) === id) ?? null;
130
144
  }
131
145
  /**
132
146
  * Get list data (with pagination support)
133
147
  */
134
148
  async getList(storeName, options = {}, _idKey = "id") {
135
- const files = await this.listDirectory(storeName);
136
- const allData = [];
137
- for (const file of files) try {
138
- const data = await this.request(this.buildUrl(storeName, file), { method: "GET" });
139
- if (data) allData.push(data);
140
- } catch {}
149
+ const url = this.buildUrl(storeName);
150
+ const allData = await this.request(url, { method: "GET" }, { allowNotFound: true }) || [];
141
151
  let filteredData = allData;
142
152
  if (options.where) filteredData = allData.filter((item) => {
143
153
  for (const key in options.where) if (item[key] !== options.where[key]) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["headers: Record<string, string>","allData: T[]","files: string[]"],"sources":["../src/webdav-adapter.ts"],"sourcesContent":["import {\n AdapterType,\n type RemoteAdapter,\n type QueryOptions,\n type PaginatedResult,\n type ServiceConfig,\n AuthType,\n} from \"@omnistreamai/data-core\";\n\n/**\n * WebDAV adapter implementation\n */\nexport class WebDAVAdapter implements RemoteAdapter {\n readonly type = AdapterType.Remote;\n readonly name = \"WebDAVAdapter\";\n\n private service: ServiceConfig | null = null;\n\n /**\n * Set service configuration\n */\n setService(service: ServiceConfig): void {\n this.service = service;\n }\n\n /**\n * Get request headers\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (!this.service?.authentication) {\n return headers;\n }\n\n const { authentication } = this.service;\n\n switch (authentication.authType) {\n case AuthType.Token:\n if (authentication.token) {\n headers[\"Authorization\"] =\n `${authentication.token.token_type} ${authentication.token.access_token}`;\n }\n break;\n case AuthType.Bearer:\n if (authentication.bearer) {\n headers[\"Authorization\"] = `Bearer ${authentication.bearer}`;\n }\n break;\n case AuthType.Basic:\n if (authentication.username && authentication.password) {\n const credentials = btoa(\n `${authentication.username}:${authentication.password}`,\n );\n headers[\"Authorization\"] = `Basic ${credentials}`;\n }\n break;\n }\n\n return headers;\n }\n\n /**\n * Build URL\n */\n private buildUrl(storeName: string, id?: string): string {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n const storePath = `/${storeName}`;\n\n if (id) {\n return `${baseUrl}${storePath}/${id}`;\n }\n\n return `${baseUrl}${storePath}`;\n }\n\n /**\n * Send request\n */\n private async request<T>(\n url: string,\n options: RequestInit = {},\n {\n allowNotFound,\n }: {\n allowNotFound?: boolean;\n } = {},\n ): Promise<T | null> {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n if (allowNotFound && response.status == 404) {\n return null;\n }\n throw new Error(\n `HTTP error! status: ${response.status}, message: ${response.statusText}`,\n );\n }\n\n const text = await response.text();\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n }\n\n /**\n * Initialize store\n */\n async initStore(\n storeName: string,\n _indexes: string[] = [],\n _idKey: string = \"id\",\n ): Promise<void> {\n const path = storeName.replace(/^\\/+|\\/+$/g, \"\");\n const parts = path.split(\"/\");\n\n let currentPath = \"\";\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n\n try {\n await this.listDirectory(currentPath);\n } catch {\n const url = this.buildUrl(currentPath);\n\n const response = await fetch(url, {\n method: \"MKCOL\",\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create store: ${response.statusText}`);\n }\n }\n }\n }\n\n /**\n * Add data\n */\n async add<T extends Record<string, unknown>>(\n storeName: string,\n data: T,\n idKey: string = \"id\",\n ): Promise<T> {\n const id = String(data[idKey]);\n const url = this.buildUrl(storeName, id);\n\n const result = await this.request<T>(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n });\n\n return result ?? data;\n }\n\n /**\n * Update data\n */\n async update<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n data: Partial<T>,\n idKey: string = \"id\",\n ): Promise<T> {\n const existing = await this.getData<T>(storeName, id, idKey);\n if (!existing) {\n throw new Error(\"Not found id:\" + id);\n }\n\n const updated = { ...existing, ...data };\n const url = this.buildUrl(storeName, id);\n\n const result = await this.request<T>(url, {\n method: \"PUT\",\n body: JSON.stringify(updated),\n });\n\n return result ?? updated;\n }\n\n /**\n * Delete data\n */\n async delete(\n storeName: string,\n id: string,\n _idKey: string = \"id\",\n ): Promise<void> {\n const url = this.buildUrl(storeName, id);\n\n await this.request(url, {\n method: \"DELETE\",\n });\n }\n\n /**\n * Get data by ID\n */\n async getData<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n _idKey: string = \"id\",\n ): Promise<T | null> {\n const url = this.buildUrl(storeName, id);\n\n const result = await this.request<T>(\n url,\n {\n method: \"GET\",\n },\n {\n allowNotFound: true,\n },\n );\n\n return result;\n }\n\n /**\n * Get list data (with pagination support)\n */\n async getList<T extends Record<string, unknown>>(\n storeName: string,\n options: QueryOptions<T> = {},\n _idKey: string = \"id\",\n ): Promise<PaginatedResult<T>> {\n const files = await this.listDirectory(storeName);\n\n const allData: T[] = [];\n for (const file of files) {\n try {\n const data = await this.request<T>(this.buildUrl(storeName, file), {\n method: \"GET\",\n });\n if (data) {\n allData.push(data);\n }\n } catch {}\n }\n\n let filteredData = allData;\n\n if (options.where) {\n filteredData = allData.filter((item) => {\n for (const key in options.where) {\n const itemValue = item[key];\n const whereValue = options.where![key];\n if (itemValue !== whereValue) {\n return false;\n }\n }\n return true;\n });\n }\n\n // Sorting\n if (options.sortBy) {\n filteredData = this.sortEntries(\n filteredData,\n String(options.sortBy),\n options.sortOrder,\n );\n }\n\n const totalCount = filteredData.length;\n const page = options.page ?? 1;\n const limit = options.limit ?? totalCount;\n\n const startIndex = (page - 1) * limit;\n const endIndex = startIndex + limit;\n const paginatedData = filteredData.slice(startIndex, endIndex);\n\n return {\n data: paginatedData,\n totalCount,\n page,\n limit,\n };\n }\n\n /**\n * Sort entries by specified field\n * @param entries Array of entries to sort\n * @param key Sorting field name\n * @param sortOrder Sort order: 'asc' or 'desc' (default: 'asc')\n * @returns Sorted array of entries\n */\n private sortEntries<T extends Record<string, unknown>>(\n entries: T[],\n key: string,\n sortOrder: \"asc\" | \"desc\" = \"asc\",\n ): T[] {\n return [...entries].sort((a, b) => {\n const aValue = a[key];\n const bValue = b[key];\n\n // Handle undefined or null values\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1; // null/undefined at the end\n if (bValue == null) return -1; // null/undefined at the end\n\n let comparison = 0;\n\n // Number type sorting\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n }\n // String type sorting\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n comparison = aValue.localeCompare(bValue);\n }\n // Date type sorting (if string format date)\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n comparison = aDate.getTime() - bDate.getTime();\n } else {\n // Convert other types to string for comparison\n comparison = String(aValue).localeCompare(String(bValue));\n }\n }\n // Convert other types to string for comparison\n else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n // Apply sort order\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n\n /**\n * Clear store\n */\n async clear(storeName: string): Promise<void> {\n const list = await this.getList(storeName);\n\n for (const item of list.data) {\n const id = String((item as Record<string, unknown>)[\"id\"]);\n await this.delete(storeName, id);\n }\n }\n\n /**\n * List directory contents\n */\n async listDirectory(path: string = \"\"): Promise<string[]> {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n const url = path ? `${baseUrl}/${path.replace(/^\\//, \"\")}` : baseUrl;\n\n const response = await fetch(url, {\n method: \"PROPFIND\",\n headers: {\n ...this.getHeaders(),\n Depth: \"1\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to list directory: ${response.statusText}`);\n }\n\n const text = await response.text();\n\n const hrefRegex = /<d:href[^>]*>([^<]+)<\\/d:href>/gi;\n const files: string[] = [];\n let match;\n\n const baseUrlObj = new URL(baseUrl);\n const basePath = baseUrlObj.pathname;\n\n while ((match = hrefRegex.exec(text)) !== null) {\n const fullPath = match[1] || \"\";\n let relativePath = \"\";\n try {\n const hrefUrl = new URL(fullPath);\n relativePath = hrefUrl.pathname;\n } catch {}\n const pathRegex = new RegExp(`^/*${path}`)\n relativePath = fullPath.replace(basePath, \"\").replace(pathRegex, '').replace(/^\\//, \"\");\n if (relativePath && relativePath !== path.replace(/^\\//, \"\")) {\n files.push(relativePath);\n }\n }\n\n return files;\n }\n\n /**\n * Test connection\n */\n async testConnection(): Promise<boolean> {\n try {\n await this.listDirectory(\"\");\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["headers: Record<string, string>","files: string[]"],"sources":["../src/webdav-adapter.ts"],"sourcesContent":["import {\n AdapterType,\n type RemoteAdapter,\n type QueryOptions,\n type PaginatedResult,\n type ServiceConfig,\n AuthType,\n} from \"@omnistreamai/data-core\";\n\n/**\n * WebDAV adapter implementation\n */\nexport class WebDAVAdapter implements RemoteAdapter {\n readonly type = AdapterType.Remote;\n readonly name = \"WebDAVAdapter\";\n\n private service: ServiceConfig | null = null;\n\n /**\n * Set service configuration\n */\n setService(service: ServiceConfig): void {\n this.service = service;\n }\n\n /**\n * Get request headers\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (!this.service?.authentication) {\n return headers;\n }\n\n const { authentication } = this.service;\n\n switch (authentication.authType) {\n case AuthType.Token:\n if (authentication.token) {\n headers[\"Authorization\"] =\n `${authentication.token.token_type} ${authentication.token.access_token}`;\n }\n break;\n case AuthType.Bearer:\n if (authentication.bearer) {\n headers[\"Authorization\"] = `Bearer ${authentication.bearer}`;\n }\n break;\n case AuthType.Basic:\n if (authentication.username && authentication.password) {\n const credentials = btoa(\n `${authentication.username}:${authentication.password}`,\n );\n headers[\"Authorization\"] = `Basic ${credentials}`;\n }\n break;\n }\n\n return headers;\n }\n\n /**\n * Build URL\n */\n private buildUrl(storeName: string): string {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n return `${baseUrl}/${storeName}.json`;\n }\n\n /**\n * Send request\n */\n private async request<T>(\n url: string,\n options: RequestInit = {},\n {\n allowNotFound,\n }: {\n allowNotFound?: boolean;\n } = {},\n ): Promise<T | null> {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n if (allowNotFound && response.status == 404) {\n return null;\n }\n throw new Error(\n `HTTP error! status: ${response.status}, message: ${response.statusText}`,\n );\n }\n\n const text = await response.text();\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n }\n\n /**\n * Initialize store\n */\n async initStore(\n storeName: string,\n _indexes: string[] = [],\n _idKey: string = \"id\",\n ): Promise<void> {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const path = storeName.replace(/^\\/+|\\/+$/g, \"\");\n const parts = path.split(\"/\");\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n\n let currentPath = \"\";\n for (const part of parts) {\n currentPath = currentPath ? `${currentPath}/${part}` : part;\n\n try {\n await this.listDirectory(currentPath);\n } catch {\n const url = `${baseUrl}/${currentPath}`;\n\n const response = await fetch(url, {\n method: \"MKCOL\",\n headers: this.getHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create store: ${response.statusText}`);\n }\n }\n }\n }\n\n /**\n * Add data\n */\n async add<T extends Record<string, unknown>>(\n storeName: string,\n data: T,\n _idKey: string = \"id\",\n ): Promise<T> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<T[]>(url, {\n method: \"GET\",\n }, {\n allowNotFound: true,\n });\n\n const items = existing || [];\n items.push(data);\n\n await this.request(url, {\n method: \"PUT\",\n body: JSON.stringify(items),\n });\n\n return data;\n }\n\n /**\n * Update data\n */\n async update<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n data: Partial<T>,\n idKey: string = \"id\",\n ): Promise<T> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<T[]>(url, {\n method: \"GET\",\n });\n\n if (!existing) {\n throw new Error(\"Not found id:\" + id);\n }\n\n const index = existing.findIndex(item => String(item[idKey]) === id);\n if (index === -1) {\n throw new Error(\"Not found id:\" + id);\n }\n\n existing[index] = { ...existing[index], ...data } as T;\n\n await this.request(url, {\n method: \"PUT\",\n body: JSON.stringify(existing),\n });\n\n return existing[index];\n }\n\n /**\n * Delete data\n */\n async delete(\n storeName: string,\n id: string,\n idKey: string = \"id\",\n ): Promise<void> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<Record<string, unknown>[]>(url, {\n method: \"GET\",\n });\n\n if (!existing) {\n throw new Error(\"Not found id:\" + id);\n }\n\n const index = existing.findIndex(item => String(item[idKey]) === id);\n if (index === -1) {\n throw new Error(\"Not found id:\" + id);\n }\n\n existing.splice(index, 1);\n\n await this.request(url, {\n method: \"PUT\",\n body: JSON.stringify(existing),\n });\n }\n\n /**\n * Get data by ID\n */\n async getData<T extends Record<string, unknown>>(\n storeName: string,\n id: string,\n idKey: string = \"id\",\n ): Promise<T | null> {\n const url = this.buildUrl(storeName);\n\n const existing = await this.request<T[]>(url, {\n method: \"GET\",\n }, {\n allowNotFound: true,\n });\n\n if (!existing) {\n return null;\n }\n\n const item = existing.find(item => String(item[idKey]) === id);\n return item ?? null;\n }\n\n /**\n * Get list data (with pagination support)\n */\n async getList<T extends Record<string, unknown>>(\n storeName: string,\n options: QueryOptions<T> = {},\n _idKey: string = \"id\",\n ): Promise<PaginatedResult<T>> {\n const url = this.buildUrl(storeName);\n\n const allData = await this.request<T[]>(url, {\n method: \"GET\",\n }, {\n allowNotFound: true,\n }) || [];\n\n let filteredData = allData;\n\n if (options.where) {\n filteredData = allData.filter((item) => {\n for (const key in options.where) {\n const itemValue = item[key];\n const whereValue = options.where![key];\n if (itemValue !== whereValue) {\n return false;\n }\n }\n return true;\n });\n }\n\n // Sorting\n if (options.sortBy) {\n filteredData = this.sortEntries(\n filteredData,\n String(options.sortBy),\n options.sortOrder,\n );\n }\n\n const totalCount = filteredData.length;\n const page = options.page ?? 1;\n const limit = options.limit ?? totalCount;\n\n const startIndex = (page - 1) * limit;\n const endIndex = startIndex + limit;\n const paginatedData = filteredData.slice(startIndex, endIndex);\n\n return {\n data: paginatedData,\n totalCount,\n page,\n limit,\n };\n }\n\n /**\n * Sort entries by specified field\n * @param entries Array of entries to sort\n * @param key Sorting field name\n * @param sortOrder Sort order: 'asc' or 'desc' (default: 'asc')\n * @returns Sorted array of entries\n */\n private sortEntries<T extends Record<string, unknown>>(\n entries: T[],\n key: string,\n sortOrder: \"asc\" | \"desc\" = \"asc\",\n ): T[] {\n return [...entries].sort((a, b) => {\n const aValue = a[key];\n const bValue = b[key];\n\n // Handle undefined or null values\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return 1; // null/undefined at the end\n if (bValue == null) return -1; // null/undefined at the end\n\n let comparison = 0;\n\n // Number type sorting\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n }\n // String type sorting\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n comparison = aValue.localeCompare(bValue);\n }\n // Date type sorting (if string format date)\n else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n const aDate = new Date(aValue);\n const bDate = new Date(bValue);\n if (!isNaN(aDate.getTime()) && !isNaN(bDate.getTime())) {\n comparison = aDate.getTime() - bDate.getTime();\n } else {\n // Convert other types to string for comparison\n comparison = String(aValue).localeCompare(String(bValue));\n }\n }\n // Convert other types to string for comparison\n else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n // Apply sort order\n return sortOrder === \"desc\" ? -comparison : comparison;\n });\n }\n\n /**\n * Clear store\n */\n async clear(storeName: string): Promise<void> {\n const list = await this.getList(storeName);\n\n for (const item of list.data) {\n const id = String((item as Record<string, unknown>)[\"id\"]);\n await this.delete(storeName, id);\n }\n }\n\n /**\n * List directory contents\n */\n async listDirectory(path: string = \"\"): Promise<string[]> {\n if (!this.service) {\n throw new Error(\"Service not configured. Call setService() first.\");\n }\n\n const baseUrl = this.service.endpoint.replace(/\\/$/, \"\");\n const url = path ? `${baseUrl}/${path.replace(/^\\//, \"\")}` : baseUrl;\n\n const response = await fetch(url, {\n method: \"PROPFIND\",\n headers: {\n ...this.getHeaders(),\n Depth: \"1\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to list directory: ${response.statusText}`);\n }\n\n const text = await response.text();\n\n const hrefRegex = /<d:href[^>]*>([^<]+)<\\/d:href>/gi;\n const files: string[] = [];\n let match;\n\n const baseUrlObj = new URL(baseUrl);\n const basePath = baseUrlObj.pathname;\n\n while ((match = hrefRegex.exec(text)) !== null) {\n const fullPath = match[1] || \"\";\n let relativePath = \"\";\n try {\n const hrefUrl = new URL(fullPath);\n relativePath = hrefUrl.pathname;\n } catch {}\n const pathRegex = new RegExp(`^/*${path}`)\n relativePath = fullPath.replace(basePath, \"\").replace(pathRegex, '').replace(/^\\//, \"\");\n if (relativePath && relativePath !== path.replace(/^\\//, \"\")) {\n files.push(relativePath);\n }\n }\n\n return files;\n }\n\n /**\n * Test connection\n */\n async testConnection(): Promise<boolean> {\n try {\n await this.listDirectory(\"\");\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnistreamai/data-adapter-webdav",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -79,16 +79,21 @@ describe('WebDAVAdapter', () => {
79
79
  email: 'test@example.com',
80
80
  };
81
81
 
82
+ (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
83
+ ok: true,
84
+ status: 200,
85
+ text: async () => '',
86
+ } as unknown as Response);
87
+
82
88
  (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
83
89
  ok: true,
84
90
  status: 201,
85
- text: async () => JSON.stringify(data),
86
- json: async () => data,
91
+ text: async () => '',
87
92
  } as unknown as Response);
88
93
 
89
94
  const result = await adapter.add(storeName, data, 'id');
90
95
  expect(result).toEqual(data);
91
- expect(global.fetch).toHaveBeenCalled();
96
+ expect(global.fetch).toHaveBeenCalledTimes(2);
92
97
  });
93
98
  });
94
99
 
@@ -99,21 +104,22 @@ describe('WebDAVAdapter', () => {
99
104
  };
100
105
  adapter.setService(service);
101
106
 
102
- const data = {
103
- id: '1',
104
- username: 'test-user',
105
- email: 'test@example.com',
106
- };
107
+ const data = [
108
+ {
109
+ id: '1',
110
+ username: 'test-user',
111
+ email: 'test@example.com',
112
+ },
113
+ ];
107
114
 
108
115
  (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
109
116
  ok: true,
110
117
  status: 200,
111
118
  text: async () => JSON.stringify(data),
112
- json: async () => data,
113
119
  } as unknown as Response);
114
120
 
115
121
  const result = await adapter.getData(storeName, '1', 'id');
116
- expect(result).toEqual(data);
122
+ expect(result).toEqual(data[0]);
117
123
  });
118
124
 
119
125
  it('当数据不存在时应该返回 null', async () => {
@@ -140,30 +146,21 @@ describe('WebDAVAdapter', () => {
140
146
  };
141
147
  adapter.setService(service);
142
148
 
143
- const files = ['1', '2'];
144
149
  const data = [
145
150
  { id: '1', username: 'user1' },
146
151
  { id: '2', username: 'user2' },
147
152
  ];
148
153
 
149
- const listDirectorySpy = vi.spyOn(adapter, 'listDirectory').mockResolvedValue(files);
150
- (global.fetch as ReturnType<typeof vi.fn>)
151
- .mockResolvedValueOnce({
152
- ok: true,
153
- status: 200,
154
- text: async () => JSON.stringify(data[0]),
155
- } as unknown as Response)
156
- .mockResolvedValueOnce({
157
- ok: true,
158
- status: 200,
159
- text: async () => JSON.stringify(data[1]),
160
- } as unknown as Response);
154
+ (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
155
+ ok: true,
156
+ status: 200,
157
+ text: async () => JSON.stringify(data),
158
+ } as unknown as Response);
161
159
 
162
160
  const result = await adapter.getList(storeName, undefined, 'id');
163
161
  expect(result.data).toEqual(data);
164
162
  expect(result.totalCount).toBe(2);
165
163
  expect(result.page).toBe(1);
166
- expect(listDirectorySpy).toHaveBeenCalledWith(storeName);
167
164
  });
168
165
 
169
166
  it('应该支持分页查询', async () => {
@@ -172,13 +169,15 @@ describe('WebDAVAdapter', () => {
172
169
  };
173
170
  adapter.setService(service);
174
171
 
175
- const files = Array.from({ length: 100 }, (_, i) => String(i));
176
- const listDirectorySpy = vi.spyOn(adapter, 'listDirectory').mockResolvedValue(files);
172
+ const data = Array.from({ length: 100 }, (_, i) => ({
173
+ id: String(i),
174
+ username: `user${i}`,
175
+ }));
177
176
 
178
177
  (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValue({
179
178
  ok: true,
180
179
  status: 200,
181
- text: async () => JSON.stringify({ id: '0' }),
180
+ text: async () => JSON.stringify(data),
182
181
  } as unknown as Response);
183
182
 
184
183
  const result = await adapter.getList(storeName, { page: 2, limit: 10 }, 'id');
@@ -186,7 +185,6 @@ describe('WebDAVAdapter', () => {
186
185
  expect(result.limit).toBe(10);
187
186
  expect(result.totalCount).toBe(100);
188
187
  expect(result.data).toHaveLength(10);
189
- expect(listDirectorySpy).toHaveBeenCalledWith(storeName);
190
188
  });
191
189
 
192
190
  it('应该支持条件查询', async () => {
@@ -195,29 +193,20 @@ describe('WebDAVAdapter', () => {
195
193
  };
196
194
  adapter.setService(service);
197
195
 
198
- const files = ['1', '2'];
199
196
  const data = [
200
197
  { id: '1', username: 'user1' },
201
198
  { id: '2', username: 'user2' },
202
199
  ];
203
200
 
204
- const listDirectorySpy = vi.spyOn(adapter, 'listDirectory').mockResolvedValue(files);
205
- (global.fetch as ReturnType<typeof vi.fn>)
206
- .mockResolvedValueOnce({
207
- ok: true,
208
- status: 200,
209
- text: async () => JSON.stringify(data[0]),
210
- } as unknown as Response)
211
- .mockResolvedValueOnce({
212
- ok: true,
213
- status: 200,
214
- text: async () => JSON.stringify(data[1]),
215
- } as unknown as Response);
201
+ (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValue({
202
+ ok: true,
203
+ status: 200,
204
+ text: async () => JSON.stringify(data),
205
+ } as unknown as Response);
216
206
 
217
207
  const result = await adapter.getList(storeName, { where: { username: 'user1' } }, 'id');
218
208
  expect(result.data).toHaveLength(1);
219
209
  expect(result.data[0]?.username).toBe('user1');
220
- expect(listDirectorySpy).toHaveBeenCalledWith(storeName);
221
210
  });
222
211
 
223
212
  it('应该支持按字段升序排序', async () => {
@@ -226,18 +215,17 @@ describe('WebDAVAdapter', () => {
226
215
  };
227
216
  adapter.setService(service);
228
217
 
229
- const files = ['1', '2', '3'];
230
218
  const data = [
231
219
  { id: '1', username: 'charlie', age: 30 },
232
220
  { id: '2', username: 'alice', age: 25 },
233
221
  { id: '3', username: 'bob', age: 28 },
234
222
  ];
235
223
 
236
- vi.spyOn(adapter, 'listDirectory').mockResolvedValue(files);
237
- (global.fetch as ReturnType<typeof vi.fn>)
238
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[0]) } as unknown as Response)
239
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[1]) } as unknown as Response)
240
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[2]) } as unknown as Response);
224
+ (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValue({
225
+ ok: true,
226
+ status: 200,
227
+ text: async () => JSON.stringify(data),
228
+ } as unknown as Response);
241
229
 
242
230
  const result = await adapter.getList(storeName, { sortBy: 'username' as any }, 'id');
243
231
  expect(result.data).toHaveLength(3);
@@ -252,18 +240,17 @@ describe('WebDAVAdapter', () => {
252
240
  };
253
241
  adapter.setService(service);
254
242
 
255
- const files = ['1', '2', '3'];
256
243
  const data = [
257
244
  { id: '1', username: 'alice', age: 25 },
258
245
  { id: '2', username: 'charlie', age: 30 },
259
246
  { id: '3', username: 'bob', age: 28 },
260
247
  ];
261
248
 
262
- vi.spyOn(adapter, 'listDirectory').mockResolvedValue(files);
263
- (global.fetch as ReturnType<typeof vi.fn>)
264
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[0]) } as unknown as Response)
265
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[1]) } as unknown as Response)
266
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[2]) } as unknown as Response);
249
+ (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValue({
250
+ ok: true,
251
+ status: 200,
252
+ text: async () => JSON.stringify(data),
253
+ } as unknown as Response);
267
254
 
268
255
  const result = await adapter.getList(storeName, { sortBy: 'username' as any, sortOrder: 'desc' }, 'id');
269
256
  expect(result.data).toHaveLength(3);
@@ -278,18 +265,17 @@ describe('WebDAVAdapter', () => {
278
265
  };
279
266
  adapter.setService(service);
280
267
 
281
- const files = ['1', '2', '3'];
282
268
  const data = [
283
269
  { id: '1', username: 'charlie', age: 30 },
284
270
  { id: '2', username: 'alice', age: 25 },
285
271
  { id: '3', username: 'bob', age: 28 },
286
272
  ];
287
273
 
288
- vi.spyOn(adapter, 'listDirectory').mockResolvedValue(files);
289
- (global.fetch as ReturnType<typeof vi.fn>)
290
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[0]) } as unknown as Response)
291
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[1]) } as unknown as Response)
292
- .mockResolvedValueOnce({ ok: true, text: async () => JSON.stringify(data[2]) } as unknown as Response);
274
+ (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValue({
275
+ ok: true,
276
+ status: 200,
277
+ text: async () => JSON.stringify(data),
278
+ } as unknown as Response);
293
279
 
294
280
  const result = await adapter.getList(storeName, { sortBy: 'username' as any, page: 2, limit: 1 }, 'id');
295
281
  expect(result.data).toHaveLength(1);
@@ -304,30 +290,24 @@ describe('WebDAVAdapter', () => {
304
290
  };
305
291
  adapter.setService(service);
306
292
 
307
- const existingData = {
308
- id: '1',
309
- username: 'test-user',
310
- email: 'test@example.com',
311
- };
312
-
313
- const updatedData = {
314
- id: '1',
315
- username: 'test-user',
316
- email: 'updated@example.com',
317
- };
293
+ const existingData = [
294
+ {
295
+ id: '1',
296
+ username: 'test-user',
297
+ email: 'test@example.com',
298
+ },
299
+ ];
318
300
 
319
301
  (global.fetch as ReturnType<typeof vi.fn>)
320
302
  .mockResolvedValueOnce({
321
303
  ok: true,
322
304
  status: 200,
323
305
  text: async () => JSON.stringify(existingData),
324
- json: async () => existingData,
325
306
  } as unknown as Response)
326
307
  .mockResolvedValueOnce({
327
308
  ok: true,
328
309
  status: 200,
329
- text: async () => JSON.stringify(updatedData),
330
- json: async () => updatedData,
310
+ text: async () => '',
331
311
  } as unknown as Response);
332
312
 
333
313
  const result = await adapter.update(storeName, '1', { email: 'updated@example.com' }, 'id');
@@ -342,14 +322,28 @@ describe('WebDAVAdapter', () => {
342
322
  };
343
323
  adapter.setService(service);
344
324
 
345
- (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
346
- ok: true,
347
- status: 200,
348
- text: async () => '',
349
- } as unknown as Response);
325
+ const existingData = [
326
+ {
327
+ id: '1',
328
+ username: 'test-user',
329
+ email: 'test@example.com',
330
+ },
331
+ ];
332
+
333
+ (global.fetch as ReturnType<typeof vi.fn>)
334
+ .mockResolvedValueOnce({
335
+ ok: true,
336
+ status: 200,
337
+ text: async () => JSON.stringify(existingData),
338
+ } as unknown as Response)
339
+ .mockResolvedValueOnce({
340
+ ok: true,
341
+ status: 200,
342
+ text: async () => '',
343
+ } as unknown as Response);
350
344
 
351
345
  await adapter.delete(storeName, '1', 'id');
352
- expect(global.fetch).toHaveBeenCalled();
346
+ expect(global.fetch).toHaveBeenCalledTimes(2);
353
347
  });
354
348
  });
355
349
 
@@ -360,10 +354,15 @@ describe('WebDAVAdapter', () => {
360
354
  };
361
355
  adapter.setService(service);
362
356
 
363
- (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValueOnce({
357
+ const data = [
358
+ { id: '1', username: 'user1' },
359
+ { id: '2', username: 'user2' },
360
+ ];
361
+
362
+ (global.fetch as ReturnType<typeof vi.fn>).mockResolvedValue({
364
363
  ok: true,
365
364
  status: 200,
366
- text: async () => '',
365
+ text: async () => JSON.stringify(data),
367
366
  } as unknown as Response);
368
367
 
369
368
  await adapter.clear(storeName);
@@ -65,19 +65,13 @@ export class WebDAVAdapter implements RemoteAdapter {
65
65
  /**
66
66
  * Build URL
67
67
  */
68
- private buildUrl(storeName: string, id?: string): string {
68
+ private buildUrl(storeName: string): string {
69
69
  if (!this.service) {
70
70
  throw new Error("Service not configured. Call setService() first.");
71
71
  }
72
72
 
73
73
  const baseUrl = this.service.endpoint.replace(/\/$/, "");
74
- const storePath = `/${storeName}`;
75
-
76
- if (id) {
77
- return `${baseUrl}${storePath}/${id}`;
78
- }
79
-
80
- return `${baseUrl}${storePath}`;
74
+ return `${baseUrl}/${storeName}.json`;
81
75
  }
82
76
 
83
77
  /**
@@ -129,8 +123,13 @@ export class WebDAVAdapter implements RemoteAdapter {
129
123
  _indexes: string[] = [],
130
124
  _idKey: string = "id",
131
125
  ): Promise<void> {
126
+ if (!this.service) {
127
+ throw new Error("Service not configured. Call setService() first.");
128
+ }
129
+
132
130
  const path = storeName.replace(/^\/+|\/+$/g, "");
133
131
  const parts = path.split("/");
132
+ const baseUrl = this.service.endpoint.replace(/\/$/, "");
134
133
 
135
134
  let currentPath = "";
136
135
  for (const part of parts) {
@@ -139,7 +138,7 @@ export class WebDAVAdapter implements RemoteAdapter {
139
138
  try {
140
139
  await this.listDirectory(currentPath);
141
140
  } catch {
142
- const url = this.buildUrl(currentPath);
141
+ const url = `${baseUrl}/${currentPath}`;
143
142
 
144
143
  const response = await fetch(url, {
145
144
  method: "MKCOL",
@@ -159,17 +158,25 @@ export class WebDAVAdapter implements RemoteAdapter {
159
158
  async add<T extends Record<string, unknown>>(
160
159
  storeName: string,
161
160
  data: T,
162
- idKey: string = "id",
161
+ _idKey: string = "id",
163
162
  ): Promise<T> {
164
- const id = String(data[idKey]);
165
- const url = this.buildUrl(storeName, id);
163
+ const url = this.buildUrl(storeName);
164
+
165
+ const existing = await this.request<T[]>(url, {
166
+ method: "GET",
167
+ }, {
168
+ allowNotFound: true,
169
+ });
166
170
 
167
- const result = await this.request<T>(url, {
171
+ const items = existing || [];
172
+ items.push(data);
173
+
174
+ await this.request(url, {
168
175
  method: "PUT",
169
- body: JSON.stringify(data),
176
+ body: JSON.stringify(items),
170
177
  });
171
178
 
172
- return result ?? data;
179
+ return data;
173
180
  }
174
181
 
175
182
  /**
@@ -181,20 +188,29 @@ export class WebDAVAdapter implements RemoteAdapter {
181
188
  data: Partial<T>,
182
189
  idKey: string = "id",
183
190
  ): Promise<T> {
184
- const existing = await this.getData<T>(storeName, id, idKey);
191
+ const url = this.buildUrl(storeName);
192
+
193
+ const existing = await this.request<T[]>(url, {
194
+ method: "GET",
195
+ });
196
+
185
197
  if (!existing) {
186
198
  throw new Error("Not found id:" + id);
187
199
  }
188
200
 
189
- const updated = { ...existing, ...data };
190
- const url = this.buildUrl(storeName, id);
201
+ const index = existing.findIndex(item => String(item[idKey]) === id);
202
+ if (index === -1) {
203
+ throw new Error("Not found id:" + id);
204
+ }
205
+
206
+ existing[index] = { ...existing[index], ...data } as T;
191
207
 
192
- const result = await this.request<T>(url, {
208
+ await this.request(url, {
193
209
  method: "PUT",
194
- body: JSON.stringify(updated),
210
+ body: JSON.stringify(existing),
195
211
  });
196
212
 
197
- return result ?? updated;
213
+ return existing[index];
198
214
  }
199
215
 
200
216
  /**
@@ -203,12 +219,28 @@ export class WebDAVAdapter implements RemoteAdapter {
203
219
  async delete(
204
220
  storeName: string,
205
221
  id: string,
206
- _idKey: string = "id",
222
+ idKey: string = "id",
207
223
  ): Promise<void> {
208
- const url = this.buildUrl(storeName, id);
224
+ const url = this.buildUrl(storeName);
225
+
226
+ const existing = await this.request<Record<string, unknown>[]>(url, {
227
+ method: "GET",
228
+ });
229
+
230
+ if (!existing) {
231
+ throw new Error("Not found id:" + id);
232
+ }
233
+
234
+ const index = existing.findIndex(item => String(item[idKey]) === id);
235
+ if (index === -1) {
236
+ throw new Error("Not found id:" + id);
237
+ }
238
+
239
+ existing.splice(index, 1);
209
240
 
210
241
  await this.request(url, {
211
- method: "DELETE",
242
+ method: "PUT",
243
+ body: JSON.stringify(existing),
212
244
  });
213
245
  }
214
246
 
@@ -218,21 +250,22 @@ export class WebDAVAdapter implements RemoteAdapter {
218
250
  async getData<T extends Record<string, unknown>>(
219
251
  storeName: string,
220
252
  id: string,
221
- _idKey: string = "id",
253
+ idKey: string = "id",
222
254
  ): Promise<T | null> {
223
- const url = this.buildUrl(storeName, id);
255
+ const url = this.buildUrl(storeName);
224
256
 
225
- const result = await this.request<T>(
226
- url,
227
- {
228
- method: "GET",
229
- },
230
- {
231
- allowNotFound: true,
232
- },
233
- );
257
+ const existing = await this.request<T[]>(url, {
258
+ method: "GET",
259
+ }, {
260
+ allowNotFound: true,
261
+ });
262
+
263
+ if (!existing) {
264
+ return null;
265
+ }
234
266
 
235
- return result;
267
+ const item = existing.find(item => String(item[idKey]) === id);
268
+ return item ?? null;
236
269
  }
237
270
 
238
271
  /**
@@ -243,19 +276,13 @@ export class WebDAVAdapter implements RemoteAdapter {
243
276
  options: QueryOptions<T> = {},
244
277
  _idKey: string = "id",
245
278
  ): Promise<PaginatedResult<T>> {
246
- const files = await this.listDirectory(storeName);
279
+ const url = this.buildUrl(storeName);
247
280
 
248
- const allData: T[] = [];
249
- for (const file of files) {
250
- try {
251
- const data = await this.request<T>(this.buildUrl(storeName, file), {
252
- method: "GET",
253
- });
254
- if (data) {
255
- allData.push(data);
256
- }
257
- } catch {}
258
- }
281
+ const allData = await this.request<T[]>(url, {
282
+ method: "GET",
283
+ }, {
284
+ allowNotFound: true,
285
+ }) || [];
259
286
 
260
287
  let filteredData = allData;
261
288
 
@@ -1 +1 @@
1
- {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../core/dist/index.d.ts","./src/webdav-adapter.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/index.d.ts"],"fileIdsList":[[66,111,112,114,131,132],[66,113,114,131,132],[114,131,132],[66,114,119,131,132,149],[66,114,115,120,125,131,132,134,146,157],[66,114,115,116,125,131,132,134],[66,114,131,132],[61,62,63,66,114,131,132],[66,114,117,131,132,158],[66,114,118,119,126,131,132,135],[66,114,119,131,132,146,154],[66,114,120,122,125,131,132,134],[66,113,114,121,131,132],[66,114,122,123,131,132],[66,114,124,125,131,132],[66,113,114,125,131,132],[66,114,125,126,127,131,132,146,157],[66,114,125,126,127,131,132,141,146,149],[66,107,114,122,125,128,131,132,134,146,157],[66,114,125,126,128,129,131,132,134,146,154,157],[66,114,128,130,131,132,146,154,157],[64,65,66,67,68,69,70,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[66,114,125,131,132],[66,114,131,132,133,157],[66,114,122,125,131,132,134,146],[66,114,131,132,135],[66,114,131,132,136],[66,113,114,131,132,137],[66,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[66,114,131,132,139],[66,114,131,132,140],[66,114,125,131,132,141,142],[66,114,131,132,141,143,158,160],[66,114,126,131,132],[66,114,125,131,132,146,147,149],[66,114,131,132,148,149],[66,114,131,132,146,147],[66,114,131,132,149],[66,114,131,132,150],[66,111,114,131,132,146,151],[66,114,125,131,132,152,153],[66,114,131,132,152,153],[66,114,119,131,132,134,146,154],[66,114,131,132,155],[66,114,131,132,134,156],[66,114,128,131,132,140,157],[66,114,119,131,132,158],[66,114,131,132,146,159],[66,114,131,132,133,160],[66,114,131,132,161],[66,107,114,131,132],[66,107,114,125,127,131,132,137,146,149,157,159,160,162],[66,114,131,132,146,163],[66,79,83,114,131,132,157],[66,79,114,131,132,146,157],[66,74,114,131,132],[66,76,79,114,131,132,154,157],[66,114,131,132,134,154],[66,114,131,132,164],[66,74,114,131,132,164],[66,76,79,114,131,132,134,157],[66,71,72,75,78,114,125,131,132,146,157],[66,79,86,114,131,132],[66,71,77,114,131,132],[66,79,100,101,114,131,132],[66,75,79,114,131,132,149,157,164],[66,100,114,131,132,164],[66,73,74,114,131,132,164],[66,79,114,131,132],[66,73,74,75,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,114,131,132],[66,79,94,114,131,132],[66,79,86,87,114,131,132],[66,77,79,87,88,114,131,132],[66,78,114,131,132],[66,71,74,79,114,131,132],[66,79,83,87,88,114,131,132],[66,83,114,131,132],[66,77,79,82,114,131,132,157],[66,71,76,79,86,114,131,132],[66,114,131,132,146],[66,74,79,100,114,131,132,162,164],[59,66,114,131,132],[58,66,114,131,132]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},"df77f3c950382f669be8a227ef46a7c0e80cbc38186e667dbf5b1740c55f88d1",{"version":"5debb8aa705b54c64848dcbfbda16c192566ebe7b38aa7c409b4da2e5e3a9f92","signature":"666857f72603c003f3cb39c32eaf1a78ddd29a3f70ca326101c36095c3308451"},{"version":"befe9fa472895b2a88678c9509194d671b2cf62defef9e7f633232f14cbd3fd5","signature":"f78e02bd4998b55c2bed7ed3fb8e8551814a61cec2aef478f592814224dae437"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"bb45cd435da536500f1d9692a9b49d0c570b763ccbf00473248b777f5c1f353b","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac39df6dfb9e284bb0c205b15f4d9a2b260f5bab5c85bf2fb97d0cdd509c06ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"dba28a419aec76ed864ef43e5f577a5c99a010c32e5949fe4e17a4d57c58dd11","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c959a391a75be9789b43c8468f71e3fa06488b4d691d5729dde1416dcd38225b","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"5ebe6f4cc3b803cbfc962bae0d954f9c80e5078ca41eb3f1de41d92e7193ef37","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1}],"root":[59,60],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[111,1],[112,1],[113,2],[66,3],[114,4],[115,5],[116,6],[61,7],[64,8],[62,7],[63,7],[117,9],[118,10],[119,11],[120,12],[121,13],[122,14],[123,14],[124,15],[125,16],[126,17],[127,18],[67,7],[65,7],[128,19],[129,20],[130,21],[164,22],[131,23],[132,7],[133,24],[134,25],[135,26],[136,27],[137,28],[138,29],[139,30],[140,31],[141,32],[142,32],[143,33],[144,7],[145,34],[146,35],[148,36],[147,37],[149,38],[150,39],[151,40],[152,41],[153,42],[154,43],[155,44],[156,45],[157,46],[158,47],[159,48],[160,49],[161,50],[68,7],[69,7],[70,7],[108,51],[109,7],[110,7],[162,52],[163,53],[56,7],[57,7],[11,7],[10,7],[2,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[3,7],[20,7],[21,7],[4,7],[22,7],[26,7],[23,7],[24,7],[25,7],[27,7],[28,7],[29,7],[5,7],[30,7],[31,7],[32,7],[33,7],[6,7],[37,7],[34,7],[35,7],[36,7],[38,7],[7,7],[39,7],[44,7],[45,7],[40,7],[41,7],[42,7],[43,7],[8,7],[49,7],[46,7],[47,7],[48,7],[50,7],[9,7],[51,7],[52,7],[53,7],[55,7],[54,7],[1,7],[86,54],[96,55],[85,54],[106,56],[77,57],[76,58],[105,59],[99,60],[104,61],[79,62],[93,63],[78,64],[102,65],[74,66],[73,59],[103,67],[75,68],[80,69],[81,7],[84,69],[71,7],[107,70],[97,71],[88,72],[89,73],[91,74],[87,75],[90,76],[100,59],[82,77],[83,78],[92,79],[72,80],[95,71],[94,69],[98,7],[101,81],[60,82],[59,83],[58,7]],"affectedFilesPendingEmit":[[60,51],[59,51]],"emitSignatures":[59,60],"version":"5.9.3"}
1
+ {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../core/dist/index.d.ts","./src/webdav-adapter.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.3/node_modules/@types/node/index.d.ts"],"fileIdsList":[[66,111,112,114,131,132],[66,113,114,131,132],[114,131,132],[66,114,119,131,132,149],[66,114,115,120,125,131,132,134,146,157],[66,114,115,116,125,131,132,134],[66,114,131,132],[61,62,63,66,114,131,132],[66,114,117,131,132,158],[66,114,118,119,126,131,132,135],[66,114,119,131,132,146,154],[66,114,120,122,125,131,132,134],[66,113,114,121,131,132],[66,114,122,123,131,132],[66,114,124,125,131,132],[66,113,114,125,131,132],[66,114,125,126,127,131,132,146,157],[66,114,125,126,127,131,132,141,146,149],[66,107,114,122,125,128,131,132,134,146,157],[66,114,125,126,128,129,131,132,134,146,154,157],[66,114,128,130,131,132,146,154,157],[64,65,66,67,68,69,70,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[66,114,125,131,132],[66,114,131,132,133,157],[66,114,122,125,131,132,134,146],[66,114,131,132,135],[66,114,131,132,136],[66,113,114,131,132,137],[66,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[66,114,131,132,139],[66,114,131,132,140],[66,114,125,131,132,141,142],[66,114,131,132,141,143,158,160],[66,114,126,131,132],[66,114,125,131,132,146,147,149],[66,114,131,132,148,149],[66,114,131,132,146,147],[66,114,131,132,149],[66,114,131,132,150],[66,111,114,131,132,146,151],[66,114,125,131,132,152,153],[66,114,131,132,152,153],[66,114,119,131,132,134,146,154],[66,114,131,132,155],[66,114,131,132,134,156],[66,114,128,131,132,140,157],[66,114,119,131,132,158],[66,114,131,132,146,159],[66,114,131,132,133,160],[66,114,131,132,161],[66,107,114,131,132],[66,107,114,125,127,131,132,137,146,149,157,159,160,162],[66,114,131,132,146,163],[66,79,83,114,131,132,157],[66,79,114,131,132,146,157],[66,74,114,131,132],[66,76,79,114,131,132,154,157],[66,114,131,132,134,154],[66,114,131,132,164],[66,74,114,131,132,164],[66,76,79,114,131,132,134,157],[66,71,72,75,78,114,125,131,132,146,157],[66,79,86,114,131,132],[66,71,77,114,131,132],[66,79,100,101,114,131,132],[66,75,79,114,131,132,149,157,164],[66,100,114,131,132,164],[66,73,74,114,131,132,164],[66,79,114,131,132],[66,73,74,75,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,114,131,132],[66,79,94,114,131,132],[66,79,86,87,114,131,132],[66,77,79,87,88,114,131,132],[66,78,114,131,132],[66,71,74,79,114,131,132],[66,79,83,87,88,114,131,132],[66,83,114,131,132],[66,77,79,82,114,131,132,157],[66,71,76,79,86,114,131,132],[66,114,131,132,146],[66,74,79,100,114,131,132,162,164],[59,66,114,131,132],[58,66,114,131,132]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},"7b4b7017e270230d3b4d101b331419acc0aae8749a8b8352365d9222badc347e",{"version":"cdce81e6a5914bc78b6197ce391e637c478e0da2a597fed08e1d034c6c79dd76","signature":"96d3f5ee932929d3898e5e89cd165485b5f7cdd3ce0040e5f3b7da950c132f24"},{"version":"befe9fa472895b2a88678c9509194d671b2cf62defef9e7f633232f14cbd3fd5","signature":"f78e02bd4998b55c2bed7ed3fb8e8551814a61cec2aef478f592814224dae437"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"bb45cd435da536500f1d9692a9b49d0c570b763ccbf00473248b777f5c1f353b","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac39df6dfb9e284bb0c205b15f4d9a2b260f5bab5c85bf2fb97d0cdd509c06ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"dba28a419aec76ed864ef43e5f577a5c99a010c32e5949fe4e17a4d57c58dd11","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c959a391a75be9789b43c8468f71e3fa06488b4d691d5729dde1416dcd38225b","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"5ebe6f4cc3b803cbfc962bae0d954f9c80e5078ca41eb3f1de41d92e7193ef37","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1}],"root":[59,60],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[111,1],[112,1],[113,2],[66,3],[114,4],[115,5],[116,6],[61,7],[64,8],[62,7],[63,7],[117,9],[118,10],[119,11],[120,12],[121,13],[122,14],[123,14],[124,15],[125,16],[126,17],[127,18],[67,7],[65,7],[128,19],[129,20],[130,21],[164,22],[131,23],[132,7],[133,24],[134,25],[135,26],[136,27],[137,28],[138,29],[139,30],[140,31],[141,32],[142,32],[143,33],[144,7],[145,34],[146,35],[148,36],[147,37],[149,38],[150,39],[151,40],[152,41],[153,42],[154,43],[155,44],[156,45],[157,46],[158,47],[159,48],[160,49],[161,50],[68,7],[69,7],[70,7],[108,51],[109,7],[110,7],[162,52],[163,53],[56,7],[57,7],[11,7],[10,7],[2,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[3,7],[20,7],[21,7],[4,7],[22,7],[26,7],[23,7],[24,7],[25,7],[27,7],[28,7],[29,7],[5,7],[30,7],[31,7],[32,7],[33,7],[6,7],[37,7],[34,7],[35,7],[36,7],[38,7],[7,7],[39,7],[44,7],[45,7],[40,7],[41,7],[42,7],[43,7],[8,7],[49,7],[46,7],[47,7],[48,7],[50,7],[9,7],[51,7],[52,7],[53,7],[55,7],[54,7],[1,7],[86,54],[96,55],[85,54],[106,56],[77,57],[76,58],[105,59],[99,60],[104,61],[79,62],[93,63],[78,64],[102,65],[74,66],[73,59],[103,67],[75,68],[80,69],[81,7],[84,69],[71,7],[107,70],[97,71],[88,72],[89,73],[91,74],[87,75],[90,76],[100,59],[82,77],[83,78],[92,79],[72,80],[95,71],[94,69],[98,7],[101,81],[60,82],[59,83],[58,7]],"affectedFilesPendingEmit":[[60,51],[59,51]],"emitSignatures":[59,60],"version":"5.9.3"}