pushwork 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +460 -0
  2. package/dist/browser/browser-sync-engine.d.ts +64 -0
  3. package/dist/browser/browser-sync-engine.d.ts.map +1 -0
  4. package/dist/browser/browser-sync-engine.js +303 -0
  5. package/dist/browser/browser-sync-engine.js.map +1 -0
  6. package/dist/browser/filesystem-adapter.d.ts +84 -0
  7. package/dist/browser/filesystem-adapter.d.ts.map +1 -0
  8. package/dist/browser/filesystem-adapter.js +413 -0
  9. package/dist/browser/filesystem-adapter.js.map +1 -0
  10. package/dist/browser/index.d.ts +36 -0
  11. package/dist/browser/index.d.ts.map +1 -0
  12. package/dist/browser/index.js +90 -0
  13. package/dist/browser/index.js.map +1 -0
  14. package/dist/browser/types.d.ts +70 -0
  15. package/dist/browser/types.d.ts.map +1 -0
  16. package/dist/browser/types.js +6 -0
  17. package/dist/browser/types.js.map +1 -0
  18. package/dist/cli/commands.d.ts +71 -0
  19. package/dist/cli/commands.d.ts.map +1 -0
  20. package/dist/cli/commands.js +794 -0
  21. package/dist/cli/commands.js.map +1 -0
  22. package/dist/cli/index.d.ts +2 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +19 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/cli.d.ts +3 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +199 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/config/index.d.ts +71 -0
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/config/index.js +314 -0
  33. package/dist/config/index.js.map +1 -0
  34. package/dist/core/change-detection.d.ts +78 -0
  35. package/dist/core/change-detection.d.ts.map +1 -0
  36. package/dist/core/change-detection.js +370 -0
  37. package/dist/core/change-detection.js.map +1 -0
  38. package/dist/core/index.d.ts +5 -0
  39. package/dist/core/index.d.ts.map +1 -0
  40. package/dist/core/index.js +22 -0
  41. package/dist/core/index.js.map +1 -0
  42. package/dist/core/isomorphic-snapshot.d.ts +58 -0
  43. package/dist/core/isomorphic-snapshot.d.ts.map +1 -0
  44. package/dist/core/isomorphic-snapshot.js +204 -0
  45. package/dist/core/isomorphic-snapshot.js.map +1 -0
  46. package/dist/core/move-detection.d.ts +72 -0
  47. package/dist/core/move-detection.d.ts.map +1 -0
  48. package/dist/core/move-detection.js +200 -0
  49. package/dist/core/move-detection.js.map +1 -0
  50. package/dist/core/snapshot.d.ts +109 -0
  51. package/dist/core/snapshot.d.ts.map +1 -0
  52. package/dist/core/snapshot.js +263 -0
  53. package/dist/core/snapshot.js.map +1 -0
  54. package/dist/core/sync-engine.d.ts +110 -0
  55. package/dist/core/sync-engine.d.ts.map +1 -0
  56. package/dist/core/sync-engine.js +817 -0
  57. package/dist/core/sync-engine.js.map +1 -0
  58. package/dist/index.d.ts +6 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +27 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/platform/browser-filesystem.d.ts +26 -0
  63. package/dist/platform/browser-filesystem.d.ts.map +1 -0
  64. package/dist/platform/browser-filesystem.js +91 -0
  65. package/dist/platform/browser-filesystem.js.map +1 -0
  66. package/dist/platform/filesystem.d.ts +29 -0
  67. package/dist/platform/filesystem.d.ts.map +1 -0
  68. package/dist/platform/filesystem.js +65 -0
  69. package/dist/platform/filesystem.js.map +1 -0
  70. package/dist/platform/node-filesystem.d.ts +21 -0
  71. package/dist/platform/node-filesystem.d.ts.map +1 -0
  72. package/dist/platform/node-filesystem.js +93 -0
  73. package/dist/platform/node-filesystem.js.map +1 -0
  74. package/dist/types/config.d.ts +119 -0
  75. package/dist/types/config.d.ts.map +1 -0
  76. package/dist/types/config.js +3 -0
  77. package/dist/types/config.js.map +1 -0
  78. package/dist/types/documents.d.ts +70 -0
  79. package/dist/types/documents.d.ts.map +1 -0
  80. package/dist/types/documents.js +23 -0
  81. package/dist/types/documents.js.map +1 -0
  82. package/dist/types/index.d.ts +4 -0
  83. package/dist/types/index.d.ts.map +1 -0
  84. package/dist/types/index.js +23 -0
  85. package/dist/types/index.js.map +1 -0
  86. package/dist/types/snapshot.d.ts +81 -0
  87. package/dist/types/snapshot.d.ts.map +1 -0
  88. package/dist/types/snapshot.js +17 -0
  89. package/dist/types/snapshot.js.map +1 -0
  90. package/dist/utils/content-similarity.d.ts +53 -0
  91. package/dist/utils/content-similarity.d.ts.map +1 -0
  92. package/dist/utils/content-similarity.js +155 -0
  93. package/dist/utils/content-similarity.js.map +1 -0
  94. package/dist/utils/content.d.ts +5 -0
  95. package/dist/utils/content.d.ts.map +1 -0
  96. package/dist/utils/content.js +30 -0
  97. package/dist/utils/content.js.map +1 -0
  98. package/dist/utils/fs-browser.d.ts +57 -0
  99. package/dist/utils/fs-browser.d.ts.map +1 -0
  100. package/dist/utils/fs-browser.js +311 -0
  101. package/dist/utils/fs-browser.js.map +1 -0
  102. package/dist/utils/fs-node.d.ts +53 -0
  103. package/dist/utils/fs-node.d.ts.map +1 -0
  104. package/dist/utils/fs-node.js +220 -0
  105. package/dist/utils/fs-node.js.map +1 -0
  106. package/dist/utils/fs.d.ts +62 -0
  107. package/dist/utils/fs.d.ts.map +1 -0
  108. package/dist/utils/fs.js +293 -0
  109. package/dist/utils/fs.js.map +1 -0
  110. package/dist/utils/index.d.ts +4 -0
  111. package/dist/utils/index.d.ts.map +1 -0
  112. package/dist/utils/index.js +23 -0
  113. package/dist/utils/index.js.map +1 -0
  114. package/dist/utils/isomorphic.d.ts +29 -0
  115. package/dist/utils/isomorphic.d.ts.map +1 -0
  116. package/dist/utils/isomorphic.js +139 -0
  117. package/dist/utils/isomorphic.js.map +1 -0
  118. package/dist/utils/mime-types.d.ts +13 -0
  119. package/dist/utils/mime-types.d.ts.map +1 -0
  120. package/dist/utils/mime-types.js +240 -0
  121. package/dist/utils/mime-types.js.map +1 -0
  122. package/dist/utils/network-sync.d.ts +12 -0
  123. package/dist/utils/network-sync.d.ts.map +1 -0
  124. package/dist/utils/network-sync.js +149 -0
  125. package/dist/utils/network-sync.js.map +1 -0
  126. package/dist/utils/pure.d.ts +25 -0
  127. package/dist/utils/pure.d.ts.map +1 -0
  128. package/dist/utils/pure.js +112 -0
  129. package/dist/utils/pure.js.map +1 -0
  130. package/dist/utils/repo-factory.d.ts +11 -0
  131. package/dist/utils/repo-factory.d.ts.map +1 -0
  132. package/dist/utils/repo-factory.js +77 -0
  133. package/dist/utils/repo-factory.js.map +1 -0
  134. package/package.json +83 -0
  135. package/src/cli/commands.ts +1053 -0
  136. package/src/cli/index.ts +2 -0
  137. package/src/cli.ts +287 -0
  138. package/src/config/index.ts +334 -0
  139. package/src/core/change-detection.ts +484 -0
  140. package/src/core/index.ts +5 -0
  141. package/src/core/move-detection.ts +269 -0
  142. package/src/core/snapshot.ts +285 -0
  143. package/src/core/sync-engine.ts +1167 -0
  144. package/src/index.ts +14 -0
  145. package/src/types/config.ts +130 -0
  146. package/src/types/documents.ts +72 -0
  147. package/src/types/index.ts +8 -0
  148. package/src/types/snapshot.ts +88 -0
  149. package/src/utils/content-similarity.ts +194 -0
  150. package/src/utils/content.ts +28 -0
  151. package/src/utils/fs.ts +289 -0
  152. package/src/utils/index.ts +8 -0
  153. package/src/utils/mime-types.ts +236 -0
  154. package/src/utils/network-sync.ts +153 -0
  155. package/src/utils/repo-factory.ts +58 -0
  156. package/test/README-TESTING-GAPS.md +174 -0
  157. package/test/integration/README.md +328 -0
  158. package/test/integration/clone-test.sh +310 -0
  159. package/test/integration/conflict-resolution-test.sh +309 -0
  160. package/test/integration/deletion-behavior-test.sh +487 -0
  161. package/test/integration/deletion-sync-test-simple.sh +193 -0
  162. package/test/integration/deletion-sync-test.sh +297 -0
  163. package/test/integration/exclude-patterns.test.ts +152 -0
  164. package/test/integration/full-integration-test.sh +363 -0
  165. package/test/integration/sync-deletion.test.ts +339 -0
  166. package/test/integration/sync-flow.test.ts +309 -0
  167. package/test/run-tests.sh +225 -0
  168. package/test/unit/content-similarity.test.ts +236 -0
  169. package/test/unit/deletion-behavior.test.ts +260 -0
  170. package/test/unit/enhanced-mime-detection.test.ts +266 -0
  171. package/test/unit/snapshot.test.ts +431 -0
  172. package/test/unit/sync-timing.test.ts +178 -0
  173. package/test/unit/utils.test.ts +368 -0
  174. package/tools/browser-sync/README.md +116 -0
  175. package/tools/browser-sync/package.json +44 -0
  176. package/tools/browser-sync/patchwork.json +1 -0
  177. package/tools/browser-sync/pnpm-lock.yaml +4202 -0
  178. package/tools/browser-sync/src/components/BrowserSyncTool.tsx +599 -0
  179. package/tools/browser-sync/src/index.ts +20 -0
  180. package/tools/browser-sync/src/polyfills.ts +31 -0
  181. package/tools/browser-sync/src/styles.css +290 -0
  182. package/tools/browser-sync/src/types.ts +27 -0
  183. package/tools/browser-sync/vite.config.ts +25 -0
  184. package/tsconfig.json +22 -0
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ /**
3
+ * Browser-specific filesystem utilities using File System Access API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.setRootDirectoryHandle = setRootDirectoryHandle;
7
+ exports.getRootDirectoryHandle = getRootDirectoryHandle;
8
+ exports.pathExists = pathExists;
9
+ exports.getFileSystemEntry = getFileSystemEntry;
10
+ exports.isTextFile = isTextFile;
11
+ exports.readFileContent = readFileContent;
12
+ exports.writeFileContent = writeFileContent;
13
+ exports.ensureDirectoryExists = ensureDirectoryExists;
14
+ exports.removePath = removePath;
15
+ exports.listDirectory = listDirectory;
16
+ exports.copyFile = copyFile;
17
+ exports.movePath = movePath;
18
+ exports.getMimeType = getMimeType;
19
+ const types_1 = require("../types");
20
+ const pure_1 = require("./pure");
21
+ const mime_types_1 = require("./mime-types");
22
+ // Global reference to root directory handle (set by sync engine)
23
+ let rootDirectoryHandle = null;
24
+ /**
25
+ * Set the root directory handle for browser filesystem operations
26
+ */
27
+ function setRootDirectoryHandle(handle) {
28
+ rootDirectoryHandle = handle;
29
+ }
30
+ /**
31
+ * Get the root directory handle
32
+ */
33
+ function getRootDirectoryHandle() {
34
+ if (!rootDirectoryHandle) {
35
+ throw new Error("Root directory handle not set. Call setRootDirectoryHandle() first.");
36
+ }
37
+ return rootDirectoryHandle;
38
+ }
39
+ /**
40
+ * Get file or directory handle by path
41
+ */
42
+ async function getHandleByPath(path) {
43
+ const root = getRootDirectoryHandle();
44
+ const normalizedPath = (0, pure_1.normalizePath)(path);
45
+ if (normalizedPath === "." || normalizedPath === "") {
46
+ return root;
47
+ }
48
+ const parts = normalizedPath.split("/").filter((p) => p);
49
+ let currentHandle = root;
50
+ for (const part of parts) {
51
+ try {
52
+ // Try as directory first
53
+ currentHandle = await currentHandle.getDirectoryHandle(part);
54
+ }
55
+ catch {
56
+ try {
57
+ // Try as file
58
+ currentHandle = await currentHandle.getFileHandle(part);
59
+ }
60
+ catch {
61
+ throw new Error(`Path not found: ${path}`);
62
+ }
63
+ }
64
+ }
65
+ return currentHandle;
66
+ }
67
+ /**
68
+ * Check if a path exists
69
+ */
70
+ async function pathExists(filePath) {
71
+ try {
72
+ await getHandleByPath(filePath);
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ /**
80
+ * Get file system entry information
81
+ */
82
+ async function getFileSystemEntry(filePath) {
83
+ try {
84
+ const handle = await getHandleByPath(filePath);
85
+ if (handle.kind === "file") {
86
+ const file = await handle.getFile();
87
+ return {
88
+ path: filePath,
89
+ type: (await isTextFile(filePath)) ? types_1.FileType.TEXT : types_1.FileType.BINARY,
90
+ size: file.size,
91
+ mtime: new Date(file.lastModified),
92
+ permissions: 0o644, // Default permissions for browser
93
+ };
94
+ }
95
+ else {
96
+ return {
97
+ path: filePath,
98
+ type: types_1.FileType.DIRECTORY,
99
+ size: 0,
100
+ mtime: new Date(), // Directories don't have meaningful timestamps in browser
101
+ permissions: 0o755,
102
+ };
103
+ }
104
+ }
105
+ catch (error) {
106
+ throw new Error(`Failed to get file system entry for ${filePath}: ${error}`);
107
+ }
108
+ }
109
+ /**
110
+ * Check if a file is a text file
111
+ */
112
+ async function isTextFile(filePath) {
113
+ try {
114
+ return await (0, mime_types_1.isEnhancedTextFile)(filePath);
115
+ }
116
+ catch {
117
+ return false;
118
+ }
119
+ }
120
+ /**
121
+ * Read file content
122
+ */
123
+ async function readFileContent(filePath) {
124
+ try {
125
+ const handle = await getHandleByPath(filePath);
126
+ if (handle.kind !== "file") {
127
+ throw new Error(`${filePath} is not a file`);
128
+ }
129
+ const file = await handle.getFile();
130
+ if (await isTextFile(filePath)) {
131
+ return await file.text();
132
+ }
133
+ else {
134
+ return new Uint8Array(await file.arrayBuffer());
135
+ }
136
+ }
137
+ catch (error) {
138
+ throw new Error(`Failed to read file ${filePath}: ${error}`);
139
+ }
140
+ }
141
+ /**
142
+ * Write file content
143
+ */
144
+ async function writeFileContent(filePath, content) {
145
+ try {
146
+ const root = getRootDirectoryHandle();
147
+ const normalizedPath = (0, pure_1.normalizePath)(filePath);
148
+ const parts = normalizedPath.split("/").filter((p) => p);
149
+ // Ensure parent directories exist
150
+ let currentHandle = root;
151
+ for (const part of parts.slice(0, -1)) {
152
+ try {
153
+ currentHandle = await currentHandle.getDirectoryHandle(part);
154
+ }
155
+ catch {
156
+ currentHandle = await currentHandle.getDirectoryHandle(part, {
157
+ create: true,
158
+ });
159
+ }
160
+ }
161
+ // Create or get file
162
+ const fileName = parts[parts.length - 1];
163
+ const fileHandle = await currentHandle.getFileHandle(fileName, {
164
+ create: true,
165
+ });
166
+ // Write content
167
+ const writable = await fileHandle.createWritable();
168
+ await writable.write(content);
169
+ await writable.close();
170
+ }
171
+ catch (error) {
172
+ throw new Error(`Failed to write file ${filePath}: ${error}`);
173
+ }
174
+ }
175
+ /**
176
+ * Ensure directory exists
177
+ */
178
+ async function ensureDirectoryExists(dirPath) {
179
+ try {
180
+ const root = getRootDirectoryHandle();
181
+ const normalizedPath = (0, pure_1.normalizePath)(dirPath);
182
+ if (normalizedPath === "." || normalizedPath === "") {
183
+ return; // Root already exists
184
+ }
185
+ const parts = normalizedPath.split("/").filter((p) => p);
186
+ let currentHandle = root;
187
+ for (const part of parts) {
188
+ try {
189
+ currentHandle = await currentHandle.getDirectoryHandle(part);
190
+ }
191
+ catch {
192
+ currentHandle = await currentHandle.getDirectoryHandle(part, {
193
+ create: true,
194
+ });
195
+ }
196
+ }
197
+ }
198
+ catch (error) {
199
+ throw new Error(`Failed to create directory ${dirPath}: ${error}`);
200
+ }
201
+ }
202
+ /**
203
+ * Remove a file or directory
204
+ */
205
+ async function removePath(filePath) {
206
+ try {
207
+ const root = getRootDirectoryHandle();
208
+ const normalizedPath = (0, pure_1.normalizePath)(filePath);
209
+ const parts = normalizedPath.split("/").filter((p) => p);
210
+ if (parts.length === 0) {
211
+ throw new Error("Cannot remove root directory");
212
+ }
213
+ // Navigate to parent directory
214
+ let parentHandle = root;
215
+ for (const part of parts.slice(0, -1)) {
216
+ parentHandle = await parentHandle.getDirectoryHandle(part);
217
+ }
218
+ const name = parts[parts.length - 1];
219
+ // Try to remove as file first, then as directory
220
+ try {
221
+ await parentHandle.removeEntry(name);
222
+ }
223
+ catch {
224
+ await parentHandle.removeEntry(name, { recursive: true });
225
+ }
226
+ }
227
+ catch (error) {
228
+ throw new Error(`Failed to remove ${filePath}: ${error}`);
229
+ }
230
+ }
231
+ /**
232
+ * List directory contents
233
+ */
234
+ async function listDirectory(dirPath, excludePatterns = []) {
235
+ try {
236
+ const handle = await getHandleByPath(dirPath);
237
+ if (handle.kind !== "directory") {
238
+ throw new Error(`${dirPath} is not a directory`);
239
+ }
240
+ const results = [];
241
+ for await (const [name, entryHandle] of handle.entries()) {
242
+ // Skip excluded patterns
243
+ if ((0, pure_1.matchesExcludePatterns)(name, excludePatterns)) {
244
+ continue;
245
+ }
246
+ const fullPath = (0, pure_1.normalizePath)(`${dirPath}/${name}`);
247
+ if (entryHandle.kind === "file") {
248
+ const file = await entryHandle.getFile();
249
+ results.push({
250
+ path: fullPath,
251
+ type: (await isTextFile(fullPath)) ? types_1.FileType.TEXT : types_1.FileType.BINARY,
252
+ size: file.size,
253
+ mtime: new Date(file.lastModified),
254
+ permissions: 0o644,
255
+ });
256
+ }
257
+ else {
258
+ results.push({
259
+ path: fullPath,
260
+ type: types_1.FileType.DIRECTORY,
261
+ size: 0,
262
+ mtime: new Date(),
263
+ permissions: 0o755,
264
+ });
265
+ }
266
+ }
267
+ return results;
268
+ }
269
+ catch (error) {
270
+ throw new Error(`Failed to list directory ${dirPath}: ${error}`);
271
+ }
272
+ }
273
+ /**
274
+ * Copy a file (not supported in File System Access API)
275
+ */
276
+ async function copyFile(sourcePath, targetPath) {
277
+ try {
278
+ const content = await readFileContent(sourcePath);
279
+ await writeFileContent(targetPath, content);
280
+ }
281
+ catch (error) {
282
+ throw new Error(`Failed to copy ${sourcePath} to ${targetPath}: ${error}`);
283
+ }
284
+ }
285
+ /**
286
+ * Move a file or directory
287
+ */
288
+ async function movePath(sourcePath, targetPath) {
289
+ try {
290
+ // In File System Access API, we need to copy then delete
291
+ const sourceHandle = await getHandleByPath(sourcePath);
292
+ if (sourceHandle.kind === "file") {
293
+ const content = await readFileContent(sourcePath);
294
+ await writeFileContent(targetPath, content);
295
+ await removePath(sourcePath);
296
+ }
297
+ else {
298
+ throw new Error("Moving directories not yet implemented in browser");
299
+ }
300
+ }
301
+ catch (error) {
302
+ throw new Error(`Failed to move ${sourcePath} to ${targetPath}: ${error}`);
303
+ }
304
+ }
305
+ /**
306
+ * Get MIME type
307
+ */
308
+ function getMimeType(filePath) {
309
+ return (0, mime_types_1.getEnhancedMimeType)(filePath);
310
+ }
311
+ //# sourceMappingURL=fs-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-browser.js","sourceRoot":"","sources":["../../src/utils/fs-browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Node.js-specific filesystem utilities
3
+ */
4
+ import { FileSystemEntry } from "../types";
5
+ /**
6
+ * Check if a path exists
7
+ */
8
+ export declare function pathExists(filePath: string): Promise<boolean>;
9
+ /**
10
+ * Get file system entry information
11
+ */
12
+ export declare function getFileSystemEntry(filePath: string): Promise<FileSystemEntry>;
13
+ /**
14
+ * Check if a file is a text file
15
+ */
16
+ export declare function isTextFile(filePath: string): Promise<boolean>;
17
+ /**
18
+ * Read file content
19
+ */
20
+ export declare function readFileContent(filePath: string): Promise<string | Uint8Array>;
21
+ /**
22
+ * Write file content
23
+ */
24
+ export declare function writeFileContent(filePath: string, content: string | Uint8Array): Promise<void>;
25
+ /**
26
+ * Ensure directory exists
27
+ */
28
+ export declare function ensureDirectoryExists(dirPath: string): Promise<void>;
29
+ /**
30
+ * Remove a file or directory
31
+ */
32
+ export declare function removePath(filePath: string): Promise<void>;
33
+ /**
34
+ * List directory contents
35
+ */
36
+ export declare function listDirectory(dirPath: string, excludePatterns?: string[]): Promise<FileSystemEntry[]>;
37
+ /**
38
+ * Copy a file
39
+ */
40
+ export declare function copyFile(sourcePath: string, targetPath: string): Promise<void>;
41
+ /**
42
+ * Move a file or directory
43
+ */
44
+ export declare function movePath(sourcePath: string, targetPath: string): Promise<void>;
45
+ /**
46
+ * Calculate content hash using crypto
47
+ */
48
+ export declare function calculateContentHashNode(content: string | Uint8Array): string;
49
+ /**
50
+ * Get MIME type
51
+ */
52
+ export declare function getMimeType(filePath: string): string;
53
+ //# sourceMappingURL=fs-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-node.d.ts","sourceRoot":"","sources":["../../src/utils/fs-node.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAY,MAAM,UAAU,CAAC;AAIrD;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAmB1B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAU9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CA4B5B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAI7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ /**
3
+ * Node.js-specific filesystem utilities
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.pathExists = pathExists;
40
+ exports.getFileSystemEntry = getFileSystemEntry;
41
+ exports.isTextFile = isTextFile;
42
+ exports.readFileContent = readFileContent;
43
+ exports.writeFileContent = writeFileContent;
44
+ exports.ensureDirectoryExists = ensureDirectoryExists;
45
+ exports.removePath = removePath;
46
+ exports.listDirectory = listDirectory;
47
+ exports.copyFile = copyFile;
48
+ exports.movePath = movePath;
49
+ exports.calculateContentHashNode = calculateContentHashNode;
50
+ exports.getMimeType = getMimeType;
51
+ const fs = __importStar(require("fs/promises"));
52
+ const path = __importStar(require("path"));
53
+ const crypto = __importStar(require("crypto"));
54
+ const mimeTypes = __importStar(require("mime-types"));
55
+ const types_1 = require("../types");
56
+ const pure_1 = require("./pure");
57
+ const fs_1 = require("./fs");
58
+ /**
59
+ * Check if a path exists
60
+ */
61
+ async function pathExists(filePath) {
62
+ try {
63
+ await fs.access(filePath);
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ /**
71
+ * Get file system entry information
72
+ */
73
+ async function getFileSystemEntry(filePath) {
74
+ try {
75
+ const stats = await fs.stat(filePath);
76
+ return {
77
+ path: filePath,
78
+ type: stats.isDirectory()
79
+ ? types_1.FileType.DIRECTORY
80
+ : stats.isFile()
81
+ ? types_1.FileType.TEXT
82
+ : types_1.FileType.BINARY,
83
+ size: stats.size,
84
+ mtime: stats.mtime,
85
+ permissions: stats.mode & parseInt("777", 8),
86
+ };
87
+ }
88
+ catch (error) {
89
+ throw new Error(`Failed to get file system entry for ${filePath}: ${error}`);
90
+ }
91
+ }
92
+ /**
93
+ * Check if a file is a text file
94
+ */
95
+ async function isTextFile(filePath) {
96
+ return (0, fs_1.isTextFile)(filePath);
97
+ }
98
+ /**
99
+ * Read file content
100
+ */
101
+ async function readFileContent(filePath) {
102
+ try {
103
+ if (await isTextFile(filePath)) {
104
+ return await fs.readFile(filePath, "utf8");
105
+ }
106
+ else {
107
+ return new Uint8Array(await fs.readFile(filePath));
108
+ }
109
+ }
110
+ catch (error) {
111
+ throw new Error(`Failed to read file ${filePath}: ${error}`);
112
+ }
113
+ }
114
+ /**
115
+ * Write file content
116
+ */
117
+ async function writeFileContent(filePath, content) {
118
+ try {
119
+ await fs.writeFile(filePath, content);
120
+ }
121
+ catch (error) {
122
+ throw new Error(`Failed to write file ${filePath}: ${error}`);
123
+ }
124
+ }
125
+ /**
126
+ * Ensure directory exists
127
+ */
128
+ async function ensureDirectoryExists(dirPath) {
129
+ try {
130
+ await fs.mkdir(dirPath, { recursive: true });
131
+ }
132
+ catch (error) {
133
+ if (error.code !== "EEXIST") {
134
+ throw new Error(`Failed to create directory ${dirPath}: ${error}`);
135
+ }
136
+ }
137
+ }
138
+ /**
139
+ * Remove a file or directory
140
+ */
141
+ async function removePath(filePath) {
142
+ try {
143
+ const stats = await fs.stat(filePath);
144
+ if (stats.isDirectory()) {
145
+ await fs.rmdir(filePath, { recursive: true });
146
+ }
147
+ else {
148
+ await fs.unlink(filePath);
149
+ }
150
+ }
151
+ catch (error) {
152
+ throw new Error(`Failed to remove ${filePath}: ${error}`);
153
+ }
154
+ }
155
+ /**
156
+ * List directory contents
157
+ */
158
+ async function listDirectory(dirPath, excludePatterns = []) {
159
+ try {
160
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
161
+ const results = [];
162
+ for (const entry of entries) {
163
+ const fullPath = path.join(dirPath, entry.name);
164
+ const relativePath = (0, pure_1.getRelativePath)(dirPath, fullPath);
165
+ // Skip excluded patterns
166
+ if ((0, pure_1.matchesExcludePatterns)(entry.name, excludePatterns)) {
167
+ continue;
168
+ }
169
+ const stats = await fs.stat(fullPath);
170
+ results.push({
171
+ path: fullPath,
172
+ type: entry.isDirectory() ? types_1.FileType.DIRECTORY : types_1.FileType.TEXT,
173
+ size: stats.size,
174
+ mtime: stats.mtime,
175
+ permissions: stats.mode & parseInt("777", 8),
176
+ });
177
+ }
178
+ return results;
179
+ }
180
+ catch (error) {
181
+ throw new Error(`Failed to list directory ${dirPath}: ${error}`);
182
+ }
183
+ }
184
+ /**
185
+ * Copy a file
186
+ */
187
+ async function copyFile(sourcePath, targetPath) {
188
+ try {
189
+ await fs.copyFile(sourcePath, targetPath);
190
+ }
191
+ catch (error) {
192
+ throw new Error(`Failed to copy ${sourcePath} to ${targetPath}: ${error}`);
193
+ }
194
+ }
195
+ /**
196
+ * Move a file or directory
197
+ */
198
+ async function movePath(sourcePath, targetPath) {
199
+ try {
200
+ await fs.rename(sourcePath, targetPath);
201
+ }
202
+ catch (error) {
203
+ throw new Error(`Failed to move ${sourcePath} to ${targetPath}: ${error}`);
204
+ }
205
+ }
206
+ /**
207
+ * Calculate content hash using crypto
208
+ */
209
+ function calculateContentHashNode(content) {
210
+ const hash = crypto.createHash("sha256");
211
+ hash.update(content);
212
+ return hash.digest("hex");
213
+ }
214
+ /**
215
+ * Get MIME type
216
+ */
217
+ function getMimeType(filePath) {
218
+ return mimeTypes.lookup(filePath) || "application/octet-stream";
219
+ }
220
+ //# sourceMappingURL=fs-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-node.js","sourceRoot":"","sources":["../../src/utils/fs-node.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcH,gCAOC;AAKD,gDAqBC;AAKD,gCAEC;AAKD,0CAYC;AAKD,4CASC;AAKD,sDAQC;AAKD,gCAWC;AAKD,sCA+BC;AAKD,4BASC;AAKD,4BASC;AAKD,4DAIC;AAKD,kCAEC;AAhMD,gDAAkC;AAClC,2CAA6B;AAC7B,+CAAiC;AAEjC,sDAAwC;AACxC,oCAAqD;AACrD,iCAAgF;AAChF,6BAAwD;AAExD;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACtC,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE;gBACvB,CAAC,CAAC,gBAAQ,CAAC,SAAS;gBACpB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;oBAChB,CAAC,CAAC,gBAAQ,CAAC,IAAI;oBACf,CAAC,CAAC,gBAAQ,CAAC,MAAM;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SAC7C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,KAAK,KAAK,EAAE,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,OAAO,IAAA,eAAkB,EAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,QAAgB;IAEhB,IAAI,CAAC;QACH,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,OAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAAC,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,kBAA4B,EAAE;IAE9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAsB,EAAE,CAAC;QAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,IAAA,sBAAe,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAExD,yBAAyB;YACzB,IAAI,IAAA,6BAAsB,EAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;gBACxD,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,gBAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAQ,CAAC,IAAI;gBAC9D,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAC5B,UAAkB,EAClB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,OAAO,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAC5B,UAAkB,EAClB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,OAAO,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,OAA4B;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,QAAgB;IAC1C,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,0BAA0B,CAAC;AAClE,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { FileSystemEntry } from "../types";
2
+ /**
3
+ * Check if a path exists
4
+ */
5
+ export declare function pathExists(filePath: string): Promise<boolean>;
6
+ /**
7
+ * Get file system entry metadata
8
+ */
9
+ export declare function getFileSystemEntry(filePath: string): Promise<FileSystemEntry | null>;
10
+ /**
11
+ * Determine if a file is text or binary
12
+ */
13
+ export declare function isTextFile(filePath: string): Promise<boolean>;
14
+ /**
15
+ * Read file content as string or buffer
16
+ */
17
+ export declare function readFileContent(filePath: string): Promise<string | Uint8Array>;
18
+ /**
19
+ * Write file content from string or buffer
20
+ */
21
+ export declare function writeFileContent(filePath: string, content: string | Uint8Array): Promise<void>;
22
+ /**
23
+ * Ensure directory exists, creating it if necessary
24
+ */
25
+ export declare function ensureDirectoryExists(dirPath: string): Promise<void>;
26
+ /**
27
+ * Remove file or directory
28
+ */
29
+ export declare function removePath(filePath: string): Promise<void>;
30
+ /**
31
+ * List directory contents with metadata
32
+ */
33
+ export declare function listDirectory(dirPath: string, recursive?: boolean, excludePatterns?: string[]): Promise<FileSystemEntry[]>;
34
+ /**
35
+ * Copy file with metadata preservation
36
+ */
37
+ export declare function copyFile(sourcePath: string, destPath: string): Promise<void>;
38
+ /**
39
+ * Move/rename file or directory
40
+ */
41
+ export declare function movePath(sourcePath: string, destPath: string): Promise<void>;
42
+ /**
43
+ * Calculate content hash for change detection
44
+ */
45
+ export declare function calculateContentHash(content: string | Uint8Array): Promise<string>;
46
+ /**
47
+ * Get MIME type for file
48
+ */
49
+ export declare function getMimeType(filePath: string): string;
50
+ /**
51
+ * Get file extension
52
+ */
53
+ export declare function getFileExtension(filePath: string): string;
54
+ /**
55
+ * Normalize path separators for cross-platform compatibility
56
+ */
57
+ export declare function normalizePath(filePath: string): string;
58
+ /**
59
+ * Get relative path from base directory
60
+ */
61
+ export declare function getRelativePath(basePath: string, filePath: string): string;
62
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAY,MAAM,UAAU,CAAC;AAGrD;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmBjC;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBnE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAS9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAahE;AA2CD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,UAAQ,EACjB,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CAoC5B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E"}