@luzzle/core 0.0.58 → 0.0.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/dist/src/database/NodeSqliteDialect.js.map +1 -1
  3. package/dist/src/database/NodeSqliteDialect.test.js +104 -0
  4. package/dist/src/database/NodeSqliteDialect.test.js.map +1 -0
  5. package/dist/src/database/client.js +5 -1
  6. package/dist/src/database/client.js.map +1 -1
  7. package/dist/src/database/client.test.js.map +1 -1
  8. package/dist/src/database/migrations/2023-05-26T15:04:19.094Z.js.map +1 -1
  9. package/dist/src/database/migrations/2023-10-30T23:24:40Z.js.map +1 -1
  10. package/dist/src/database/migrations/2023-11-22T14:55:18Z.js.map +1 -1
  11. package/dist/src/database/migrations/2023-11-27T04:32:07Z.js.map +1 -1
  12. package/dist/src/database/migrations/2024-01-01T23:30:29Z.js.map +1 -1
  13. package/dist/src/database/migrations/2024-01-06T15:52:43Z.js.map +1 -1
  14. package/dist/src/database/migrations/2024-02-09T16:33:10Z.js.map +1 -1
  15. package/dist/src/database/migrations/2024-02-13T05:56:43Z.js.map +1 -1
  16. package/dist/src/database/migrations/2024-02-24T03:05:47Z-add-texts-table.js.map +1 -1
  17. package/dist/src/database/migrations/2024-02-26T05:37:37Z-add-cache-table.js.map +1 -1
  18. package/dist/src/database/migrations/2024-03-01T01:01:47Z-fix-trigger-bugs.js.map +1 -1
  19. package/dist/src/database/migrations/2024-06-15T17:17:51Z-add-games-table.js.map +1 -1
  20. package/dist/src/database/migrations/2024-06-24T20:16:48Z-remove-book-open-library-fields.js.map +1 -1
  21. package/dist/src/database/migrations/2024-06-29T16:31:33Z-add-piece-manager-table.js.map +1 -1
  22. package/dist/src/database/migrations/2024-07-14T06:59:07Z-remove-pieces.js.map +1 -1
  23. package/dist/src/database/migrations/2024-11-06T15:27:05Z-remove-tags.js.map +1 -1
  24. package/dist/src/database/migrations/2024-11-08T05:59:37Z-remove-pieces-items-unique-tables.js.map +1 -1
  25. package/dist/src/database/migrations/2024-11-13T14:51:17Z-track-file-paths-on-piece.js.map +1 -1
  26. package/dist/src/database/migrations/2024-12-15T06:35:24Z-track-assets-on-piece.js.map +1 -1
  27. package/dist/src/database/migrations/2026-02-11T23:03:45Z-clear-pieces-cache.js.map +1 -1
  28. package/dist/src/database/migrations.js.map +1 -1
  29. package/dist/src/database/migrations.test.js.map +1 -1
  30. package/dist/src/database/tables/index.js.map +1 -1
  31. package/dist/src/database/tables/pieces_cache.schema.js.map +1 -1
  32. package/dist/src/database/tables/pieces_items.schema.js.map +1 -1
  33. package/dist/src/database/tables/pieces_manager.schema.js.map +1 -1
  34. package/dist/src/database/utils.js.map +1 -1
  35. package/dist/src/database/utils.test.js.map +1 -1
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/index.test.js.map +1 -1
  38. package/dist/src/lib/ajv.js.map +1 -1
  39. package/dist/src/lib/ajv.test.js.map +1 -1
  40. package/dist/src/lib/frontmatter.js.map +1 -1
  41. package/dist/src/lib/frontmatter.test.js.map +1 -1
  42. package/dist/src/lib/markdown.js.map +1 -1
  43. package/dist/src/lib/markdown.test.js.map +1 -1
  44. package/dist/src/llm/google.js.map +1 -1
  45. package/dist/src/llm/google.test.js.map +1 -1
  46. package/dist/src/pieces/Piece.fixtures.js.map +1 -1
  47. package/dist/src/pieces/Piece.js +3 -0
  48. package/dist/src/pieces/Piece.js.map +1 -1
  49. package/dist/src/pieces/Piece.test.js +20 -1
  50. package/dist/src/pieces/Piece.test.js.map +1 -1
  51. package/dist/src/pieces/Pieces.js.map +1 -1
  52. package/dist/src/pieces/Pieces.test.js.map +1 -1
  53. package/dist/src/pieces/assets.js.map +1 -1
  54. package/dist/src/pieces/cache.fixtures.js.map +1 -1
  55. package/dist/src/pieces/cache.js.map +1 -1
  56. package/dist/src/pieces/cache.test.js.map +1 -1
  57. package/dist/src/pieces/index.js.map +1 -1
  58. package/dist/src/pieces/item.js.map +1 -1
  59. package/dist/src/pieces/item.test.js.map +1 -1
  60. package/dist/src/pieces/items.js.map +1 -1
  61. package/dist/src/pieces/items.test.js.map +1 -1
  62. package/dist/src/pieces/json.schema.js.map +1 -1
  63. package/dist/src/pieces/json.schema.test.js.map +1 -1
  64. package/dist/src/pieces/manager.js.map +1 -1
  65. package/dist/src/pieces/manager.test.js.map +1 -1
  66. package/dist/src/pieces/utils/frontmatter.js.map +1 -1
  67. package/dist/src/pieces/utils/frontmatter.path.js.map +1 -1
  68. package/dist/src/pieces/utils/frontmatter.path.test.js.map +1 -1
  69. package/dist/src/pieces/utils/frontmatter.test.js.map +1 -1
  70. package/dist/src/pieces/utils/markdown.js.map +1 -1
  71. package/dist/src/pieces/utils/markdown.test.js.map +1 -1
  72. package/dist/src/pieces/utils/piece.js.map +1 -1
  73. package/dist/src/pieces/utils/piece.test.js.map +1 -1
  74. package/dist/src/storage/abstract.js.map +1 -1
  75. package/dist/src/storage/fs.js.map +1 -1
  76. package/dist/src/storage/fs.test.js.map +1 -1
  77. package/dist/src/storage/index.d.ts +3 -4
  78. package/dist/src/storage/index.js +2 -2
  79. package/dist/src/storage/index.js.map +1 -1
  80. package/dist/src/storage/storage.mock.js.map +1 -1
  81. package/dist/src/storage/types.d.ts +1 -1
  82. package/dist/src/storage/types.js.map +1 -1
  83. package/dist/test/db.js.map +1 -1
  84. package/dist/tsconfig.tsbuildinfo +1 -1
  85. package/dist/vite.config.js.map +1 -1
  86. package/package.json +1 -2
  87. package/dist/src/storage/webdav.d.ts +0 -23
  88. package/dist/src/storage/webdav.js +0 -72
  89. package/dist/src/storage/webdav.js.map +0 -1
  90. package/dist/src/storage/webdav.test.js +0 -203
  91. package/dist/src/storage/webdav.test.js.map +0 -1
  92. /package/dist/src/{storage/webdav.test.d.ts → database/NodeSqliteDialect.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"vite.config.js","sourceRoot":"","sources":["../vite.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,eAAe,YAAY,CAAC;IAC3B,IAAI,EAAE;QACL,OAAO,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAC;QACnE,QAAQ,EAAE;YACT,UAAU,EAAE;gBACX,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,EAAE;aACb;YACD,OAAO,EAAE;gBACR,kBAAkB;gBAClB,4BAA4B;gBAC5B,cAAc;gBACd,SAAS;gBACT,UAAU;gBACV,iBAAiB;gBACjB,2CAA2C;gBAC3C,aAAa;gBACb,wBAAwB;gBACxB,WAAW;gBACX,cAAc;gBACd,gBAAgB;gBAChB,YAAY;gBACZ,aAAa;gBACb,mCAAmC;gBACnC,uCAAuC;gBACvC,iBAAiB;gBACjB,iFAAiF;gBACjF,4CAA4C;aAC5C;SACD;KACD;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"vite.config.js","sourceRoot":"","sources":["../vite.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,eAAe,YAAY,CAAC;IAC3B,IAAI,EAAE;QACL,OAAO,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAC;QACnE,QAAQ,EAAE;YACT,UAAU,EAAE;gBACX,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,EAAE;aACb;YACD,OAAO,EAAE;gBACR,kBAAkB;gBAClB,4BAA4B;gBAC5B,cAAc;gBACd,SAAS;gBACT,UAAU;gBACV,iBAAiB;gBACjB,2CAA2C;gBAC3C,aAAa;gBACb,wBAAwB;gBACxB,WAAW;gBACX,cAAc;gBACd,gBAAgB;gBAChB,YAAY;gBACZ,aAAa;gBACb,mCAAmC;gBACnC,uCAAuC;gBACvC,iBAAiB;gBACjB,iFAAiF;gBACjF,4CAA4C;aAC5C;SACD;KACD;CACD,CAAC,CAAA","sourcesContent":["import { defineConfig } from 'vitest/config'\n\nexport default defineConfig({\n\ttest: {\n\t\texclude: ['generated/**', 'dist/**', 'build/**', 'node_modules/**'],\n\t\tcoverage: {\n\t\t\tthresholds: {\n\t\t\t\tlines: 92,\n\t\t\t\tbranches: 92,\n\t\t\t\tstatements: 92,\n\t\t\t\tfunctions: 92,\n\t\t\t},\n\t\t\texclude: [\n\t\t\t\t'eslint.config.js',\n\t\t\t\t'src/database/migrations/**',\n\t\t\t\t'generated/**',\n\t\t\t\t'dist/**',\n\t\t\t\t'build/**',\n\t\t\t\t'node_modules/**',\n\t\t\t\t'**/*{.,-}fixtures.{js,cjs,mjs,ts,tsx,jsx}',\n\t\t\t\t'coverage/**',\n\t\t\t\t'packages/*/test{,s}/**',\n\t\t\t\t'**/*.d.ts',\n\t\t\t\t'**/*.mock.ts',\n\t\t\t\t'**/*.schema.ts',\n\t\t\t\t'cypress/**',\n\t\t\t\t'test{,s}/**',\n\t\t\t\t'test{,-*}.{js,cjs,mjs,ts,tsx,jsx}',\n\t\t\t\t'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}',\n\t\t\t\t'**/__tests__/**',\n\t\t\t\t'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc}.config.{js,cjs,mjs,ts}',\n\t\t\t\t'**/.{eslint,mocha,prettier}rc.{js,cjs,yml}',\n\t\t\t],\n\t\t},\n\t},\n})\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luzzle/core",
3
- "version": "0.0.58",
3
+ "version": "0.0.60",
4
4
  "author": "eleith",
5
5
  "scripts": {
6
6
  "lint": "eslint src",
@@ -52,7 +52,6 @@
52
52
  "remark": "15.0.1",
53
53
  "remark-frontmatter": "5.0.0",
54
54
  "unist-util-visit": "5.0.0",
55
- "webdav": "5.10.0",
56
55
  "yaml": "2.7.0"
57
56
  },
58
57
  "type": "module"
@@ -1,23 +0,0 @@
1
- import { Readable } from 'stream';
2
- import type { StorageStat, StorageType } from './types.js';
3
- import { WebDAVClientOptions, GetDirectoryContentsOptionsWithoutDetails } from 'webdav';
4
- import { ReadStream, WriteStream } from 'fs';
5
- import LuzzleStorage from './abstract.js';
6
- declare class StorageWebDAV extends LuzzleStorage {
7
- private _webdavClient;
8
- type: StorageType;
9
- root: string;
10
- constructor(url: string, root: string, options: WebDAVClientOptions);
11
- private buildPath;
12
- parseArgPath(argPath: string): string;
13
- readFile(path: string, format?: 'text' | 'binary'): Promise<string>;
14
- writeFile(path: string, contents: string | Buffer | Readable): Promise<void>;
15
- getFilesIn(dir: string, options?: GetDirectoryContentsOptionsWithoutDetails): Promise<string[]>;
16
- exists(path: string): Promise<boolean>;
17
- delete(path: string): Promise<void>;
18
- stat(path: string): Promise<StorageStat>;
19
- createReadStream(path: string): ReadStream;
20
- createWriteStream(path: string): WriteStream;
21
- makeDirectory(path: string): Promise<void>;
22
- }
23
- export default StorageWebDAV;
@@ -1,72 +0,0 @@
1
- import { createClient, } from 'webdav';
2
- import path from 'path';
3
- import LuzzleStorage from './abstract.js';
4
- class StorageWebDAV extends LuzzleStorage {
5
- _webdavClient;
6
- type = 'webdav';
7
- root;
8
- constructor(url, root, options) {
9
- super();
10
- this.root = root;
11
- this._webdavClient = createClient(url, options);
12
- }
13
- buildPath(_path) {
14
- const fullPath = path.join(this.root, _path);
15
- const relativePath = path.relative(this.root, fullPath);
16
- if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
17
- throw new Error(`Path traversal attempt detected: ${_path}`);
18
- }
19
- return fullPath;
20
- }
21
- parseArgPath(argPath) {
22
- return argPath;
23
- }
24
- async readFile(path, format = 'binary') {
25
- const fullPath = this.buildPath(path);
26
- return this._webdavClient.getFileContents(fullPath, { format });
27
- }
28
- async writeFile(path, contents) {
29
- const fullPath = this.buildPath(path);
30
- await this._webdavClient.putFileContents(fullPath, contents);
31
- }
32
- async getFilesIn(dir, options) {
33
- const fullPath = this.buildPath(dir);
34
- const client = this._webdavClient;
35
- const getDirectoryContents = options
36
- ? client.getDirectoryContents(fullPath, options)
37
- : client.getDirectoryContents(fullPath);
38
- return getDirectoryContents.then((contents) => contents.map((content) => `${path.relative(fullPath, content.filename)}${content.type === 'file' ? '' : '/'}`));
39
- }
40
- async exists(path) {
41
- const fullPath = this.buildPath(path);
42
- return this._webdavClient.exists(fullPath);
43
- }
44
- async delete(path) {
45
- const fullPath = this.buildPath(path);
46
- await this._webdavClient.deleteFile(fullPath);
47
- }
48
- async stat(path) {
49
- const fullPath = this.buildPath(path);
50
- const stats = (await this._webdavClient.stat(fullPath));
51
- const storageStat = {
52
- size: stats.size,
53
- last_modified: new Date(stats.lastmod),
54
- type: stats.type,
55
- };
56
- return storageStat;
57
- }
58
- createReadStream(path) {
59
- const fullPath = this.buildPath(path);
60
- return this._webdavClient.createReadStream(fullPath);
61
- }
62
- createWriteStream(path) {
63
- const fullPath = this.buildPath(path);
64
- return this._webdavClient.createWriteStream(fullPath);
65
- }
66
- async makeDirectory(path) {
67
- const fullPath = this.buildPath(path);
68
- await this._webdavClient.createDirectory(fullPath, { recursive: true });
69
- }
70
- }
71
- export default StorageWebDAV;
72
- //# sourceMappingURL=webdav.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webdav.js","sourceRoot":"","sources":["../../../src/storage/webdav.ts"],"names":[],"mappings":"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"}
@@ -1,203 +0,0 @@
1
- import { describe, expect, test, vi, afterEach } from 'vitest';
2
- import { createClient } from 'webdav';
3
- import StorageWebDAV from './webdav.js';
4
- import { PassThrough } from 'stream';
5
- vi.mock('stream');
6
- vi.mock('webdav');
7
- const spies = {};
8
- const mocks = {
9
- createClient: vi.mocked(createClient),
10
- };
11
- const mockDavClient = {
12
- getFileContents: vi.fn(),
13
- putFileContents: vi.fn(),
14
- getDirectoryContents: vi.fn(),
15
- exists: vi.fn(),
16
- deleteFile: vi.fn(),
17
- stat: vi.fn(),
18
- copyFile: vi.fn(),
19
- moveFile: vi.fn(),
20
- createDirectory: vi.fn(),
21
- unlock: vi.fn(),
22
- search: vi.fn(),
23
- createReadStream: vi.fn(),
24
- createWriteStream: vi.fn(),
25
- customRequest: vi.fn(),
26
- partialUpdateFileContents: vi.fn(),
27
- getDAVCompliance: vi.fn(),
28
- getFileDownloadLink: vi.fn(),
29
- getFileUploadLink: vi.fn(),
30
- getHeaders: vi.fn(),
31
- getQuota: vi.fn(),
32
- setHeaders: vi.fn(),
33
- lock: vi.fn(),
34
- registerAttributeParser: vi.fn(),
35
- registerTagParser: vi.fn(),
36
- };
37
- describe('lib/storage/webdav.ts', () => {
38
- afterEach(() => {
39
- Object.values(mocks).forEach((mock) => {
40
- mock.mockReset();
41
- });
42
- Object.keys(spies).forEach((key) => {
43
- spies[key].mockRestore();
44
- delete spies[key];
45
- });
46
- });
47
- test('constructor', async () => {
48
- const root = 'rooot';
49
- const client = mockDavClient;
50
- const options = {};
51
- const url = 'url';
52
- mocks.createClient.mockReturnValueOnce(client);
53
- const storage = new StorageWebDAV('url', root, options);
54
- expect(storage.root).toEqual(root);
55
- expect(mocks.createClient).toHaveBeenCalledWith(url, options);
56
- });
57
- test('parseArgPath', async () => {
58
- const root = '/root/dir';
59
- const argPath = './path';
60
- const storage = new StorageWebDAV('url', root, {});
61
- const parsedPath = storage.parseArgPath(argPath);
62
- expect(parsedPath).toEqual(argPath);
63
- });
64
- test('readFile', async () => {
65
- const filePath = './path';
66
- const client = mockDavClient;
67
- const fileContents = 'file contents';
68
- mocks.createClient.mockReturnValueOnce(client);
69
- spies.getFileContents = vi.spyOn(client, 'getFileContents').mockResolvedValueOnce(fileContents);
70
- const storage = new StorageWebDAV('url', 'root', {});
71
- const contents = await storage.readFile(filePath);
72
- expect(contents).toEqual(fileContents);
73
- expect(spies.getFileContents).toHaveBeenCalledWith(expect.any(String), { format: 'binary' });
74
- });
75
- test('writeFile', async () => {
76
- const filePath = './path';
77
- const client = mockDavClient;
78
- const fileContents = 'file contents';
79
- mocks.createClient.mockReturnValueOnce(client);
80
- spies.putFileContents = vi.spyOn(client, 'putFileContents').mockResolvedValueOnce(true);
81
- const storage = new StorageWebDAV('url', 'root', {});
82
- await storage.writeFile(filePath, fileContents);
83
- expect(spies.putFileContents).toHaveBeenCalledWith(expect.any(String), fileContents);
84
- });
85
- test('writeFile', async () => {
86
- const filePath = './path';
87
- const client = mockDavClient;
88
- const fileContents = 'file contents';
89
- mocks.createClient.mockReturnValueOnce(client);
90
- spies.putFileContents = vi.spyOn(client, 'putFileContents').mockResolvedValueOnce(true);
91
- const storage = new StorageWebDAV('url', 'root', {});
92
- await storage.writeFile(filePath, fileContents);
93
- expect(spies.putFileContents).toHaveBeenCalledWith(expect.any(String), fileContents);
94
- });
95
- test('getFilesIn recursive', async () => {
96
- const filePath = './path';
97
- const client = mockDavClient;
98
- const directoryContents = [
99
- { filename: './home/path/file', type: 'file' },
100
- { filename: './home/path/dir', type: 'directory' },
101
- ];
102
- mocks.createClient.mockReturnValueOnce(client);
103
- spies.getDirectoryContents = vi
104
- .spyOn(client, 'getDirectoryContents')
105
- .mockResolvedValueOnce(directoryContents);
106
- const storage = new StorageWebDAV('url', 'home', {});
107
- const contents = await storage.getFilesIn(filePath, { deep: true });
108
- expect(spies.getDirectoryContents).toHaveBeenCalledWith('home/path', { deep: true });
109
- expect(contents).toEqual(['file', 'dir/']);
110
- });
111
- test('getFilesIn', async () => {
112
- const filePath = './path';
113
- const client = mockDavClient;
114
- const directoryContents = [
115
- { filename: './home/path/file', type: 'file' },
116
- { filename: './home/path/dir', type: 'directory' },
117
- ];
118
- mocks.createClient.mockReturnValueOnce(client);
119
- spies.getDirectoryContents = vi
120
- .spyOn(client, 'getDirectoryContents')
121
- .mockResolvedValueOnce(directoryContents);
122
- const storage = new StorageWebDAV('url', 'home', {});
123
- const contents = await storage.getFilesIn(filePath);
124
- expect(spies.getDirectoryContents).toHaveBeenCalledWith('home/path');
125
- expect(contents).toEqual(['file', 'dir/']);
126
- });
127
- test('exists', async () => {
128
- const filePath = './path';
129
- const client = mockDavClient;
130
- mocks.createClient.mockReturnValueOnce(client);
131
- spies.exists = vi.spyOn(client, 'exists').mockResolvedValueOnce(true);
132
- const storage = new StorageWebDAV('url', 'root', {});
133
- const test = await storage.exists(filePath);
134
- expect(test).toEqual(true);
135
- });
136
- test('delete', async () => {
137
- const filePath = './path';
138
- const client = mockDavClient;
139
- mocks.createClient.mockReturnValueOnce(client);
140
- spies.delete = vi.spyOn(client, 'deleteFile').mockResolvedValueOnce();
141
- const storage = new StorageWebDAV('url', 'root', {});
142
- await storage.delete(filePath);
143
- expect(spies.delete).toHaveBeenCalled();
144
- });
145
- test('stat', async () => {
146
- const filePath = './path';
147
- const client = mockDavClient;
148
- const storageStat = {
149
- size: 12,
150
- lastmod: new Date().getTime().toString(),
151
- type: 'file',
152
- etag: '',
153
- basename: filePath,
154
- filename: filePath,
155
- };
156
- mocks.createClient.mockReturnValueOnce(client);
157
- spies.stat = vi.spyOn(client, 'stat').mockResolvedValueOnce(storageStat);
158
- const storage = new StorageWebDAV('url', 'root', {});
159
- const stat = await storage.stat(filePath);
160
- expect(stat).toEqual({
161
- size: storageStat.size,
162
- last_modified: new Date(storageStat.lastmod),
163
- type: storageStat.type,
164
- });
165
- });
166
- test('createReadStream', async () => {
167
- const filePath = './path';
168
- const client = mockDavClient;
169
- const readStream = new PassThrough();
170
- mocks.createClient.mockReturnValueOnce(client);
171
- spies.createReadStream = vi.spyOn(client, 'createReadStream').mockReturnValueOnce(readStream);
172
- const storage = new StorageWebDAV('url', 'root', {});
173
- const stream = storage.createReadStream(filePath);
174
- expect(stream).toEqual(readStream);
175
- });
176
- test('createWriteStream', async () => {
177
- const filePath = './path';
178
- const client = mockDavClient;
179
- const writeStream = new PassThrough();
180
- mocks.createClient.mockReturnValueOnce(client);
181
- spies.createReadStream = vi.spyOn(client, 'createWriteStream').mockReturnValueOnce(writeStream);
182
- const storage = new StorageWebDAV('url', 'root', {});
183
- const stream = storage.createWriteStream(filePath);
184
- expect(stream).toEqual(writeStream);
185
- });
186
- test('makeDirectory', async () => {
187
- const filePath = './path';
188
- const client = mockDavClient;
189
- mocks.createClient.mockReturnValueOnce(client);
190
- spies.createDirectory = vi.spyOn(client, 'createDirectory').mockResolvedValueOnce();
191
- const storage = new StorageWebDAV('url', 'root', {});
192
- await storage.makeDirectory(filePath);
193
- expect(spies.createDirectory).toHaveBeenCalled();
194
- });
195
- test('prevents traversal', async () => {
196
- const root = '/root/dir';
197
- const client = mockDavClient;
198
- mocks.createClient.mockReturnValueOnce(client);
199
- const storage = new StorageWebDAV('url', root, {});
200
- await expect(() => storage.readFile('../outside')).rejects.toThrow('Path traversal attempt detected');
201
- });
202
- });
203
- //# sourceMappingURL=webdav.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webdav.test.js","sourceRoot":"","sources":["../../../src/storage/webdav.test.ts"],"names":[],"mappings":"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"}