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.
- package/README.md +460 -0
- package/dist/browser/browser-sync-engine.d.ts +64 -0
- package/dist/browser/browser-sync-engine.d.ts.map +1 -0
- package/dist/browser/browser-sync-engine.js +303 -0
- package/dist/browser/browser-sync-engine.js.map +1 -0
- package/dist/browser/filesystem-adapter.d.ts +84 -0
- package/dist/browser/filesystem-adapter.d.ts.map +1 -0
- package/dist/browser/filesystem-adapter.js +413 -0
- package/dist/browser/filesystem-adapter.js.map +1 -0
- package/dist/browser/index.d.ts +36 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +90 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/types.d.ts +70 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +6 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/cli/commands.d.ts +71 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +794 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +19 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +199 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +71 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +314 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/change-detection.d.ts +78 -0
- package/dist/core/change-detection.d.ts.map +1 -0
- package/dist/core/change-detection.js +370 -0
- package/dist/core/change-detection.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +22 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/isomorphic-snapshot.d.ts +58 -0
- package/dist/core/isomorphic-snapshot.d.ts.map +1 -0
- package/dist/core/isomorphic-snapshot.js +204 -0
- package/dist/core/isomorphic-snapshot.js.map +1 -0
- package/dist/core/move-detection.d.ts +72 -0
- package/dist/core/move-detection.d.ts.map +1 -0
- package/dist/core/move-detection.js +200 -0
- package/dist/core/move-detection.js.map +1 -0
- package/dist/core/snapshot.d.ts +109 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/core/snapshot.js +263 -0
- package/dist/core/snapshot.js.map +1 -0
- package/dist/core/sync-engine.d.ts +110 -0
- package/dist/core/sync-engine.d.ts.map +1 -0
- package/dist/core/sync-engine.js +817 -0
- package/dist/core/sync-engine.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/browser-filesystem.d.ts +26 -0
- package/dist/platform/browser-filesystem.d.ts.map +1 -0
- package/dist/platform/browser-filesystem.js +91 -0
- package/dist/platform/browser-filesystem.js.map +1 -0
- package/dist/platform/filesystem.d.ts +29 -0
- package/dist/platform/filesystem.d.ts.map +1 -0
- package/dist/platform/filesystem.js +65 -0
- package/dist/platform/filesystem.js.map +1 -0
- package/dist/platform/node-filesystem.d.ts +21 -0
- package/dist/platform/node-filesystem.d.ts.map +1 -0
- package/dist/platform/node-filesystem.js +93 -0
- package/dist/platform/node-filesystem.js.map +1 -0
- package/dist/types/config.d.ts +119 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/documents.d.ts +70 -0
- package/dist/types/documents.d.ts.map +1 -0
- package/dist/types/documents.js +23 -0
- package/dist/types/documents.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/snapshot.d.ts +81 -0
- package/dist/types/snapshot.d.ts.map +1 -0
- package/dist/types/snapshot.js +17 -0
- package/dist/types/snapshot.js.map +1 -0
- package/dist/utils/content-similarity.d.ts +53 -0
- package/dist/utils/content-similarity.d.ts.map +1 -0
- package/dist/utils/content-similarity.js +155 -0
- package/dist/utils/content-similarity.js.map +1 -0
- package/dist/utils/content.d.ts +5 -0
- package/dist/utils/content.d.ts.map +1 -0
- package/dist/utils/content.js +30 -0
- package/dist/utils/content.js.map +1 -0
- package/dist/utils/fs-browser.d.ts +57 -0
- package/dist/utils/fs-browser.d.ts.map +1 -0
- package/dist/utils/fs-browser.js +311 -0
- package/dist/utils/fs-browser.js.map +1 -0
- package/dist/utils/fs-node.d.ts +53 -0
- package/dist/utils/fs-node.d.ts.map +1 -0
- package/dist/utils/fs-node.js +220 -0
- package/dist/utils/fs-node.js.map +1 -0
- package/dist/utils/fs.d.ts +62 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +293 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/isomorphic.d.ts +29 -0
- package/dist/utils/isomorphic.d.ts.map +1 -0
- package/dist/utils/isomorphic.js +139 -0
- package/dist/utils/isomorphic.js.map +1 -0
- package/dist/utils/mime-types.d.ts +13 -0
- package/dist/utils/mime-types.d.ts.map +1 -0
- package/dist/utils/mime-types.js +240 -0
- package/dist/utils/mime-types.js.map +1 -0
- package/dist/utils/network-sync.d.ts +12 -0
- package/dist/utils/network-sync.d.ts.map +1 -0
- package/dist/utils/network-sync.js +149 -0
- package/dist/utils/network-sync.js.map +1 -0
- package/dist/utils/pure.d.ts +25 -0
- package/dist/utils/pure.d.ts.map +1 -0
- package/dist/utils/pure.js +112 -0
- package/dist/utils/pure.js.map +1 -0
- package/dist/utils/repo-factory.d.ts +11 -0
- package/dist/utils/repo-factory.d.ts.map +1 -0
- package/dist/utils/repo-factory.js +77 -0
- package/dist/utils/repo-factory.js.map +1 -0
- package/package.json +83 -0
- package/src/cli/commands.ts +1053 -0
- package/src/cli/index.ts +2 -0
- package/src/cli.ts +287 -0
- package/src/config/index.ts +334 -0
- package/src/core/change-detection.ts +484 -0
- package/src/core/index.ts +5 -0
- package/src/core/move-detection.ts +269 -0
- package/src/core/snapshot.ts +285 -0
- package/src/core/sync-engine.ts +1167 -0
- package/src/index.ts +14 -0
- package/src/types/config.ts +130 -0
- package/src/types/documents.ts +72 -0
- package/src/types/index.ts +8 -0
- package/src/types/snapshot.ts +88 -0
- package/src/utils/content-similarity.ts +194 -0
- package/src/utils/content.ts +28 -0
- package/src/utils/fs.ts +289 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/mime-types.ts +236 -0
- package/src/utils/network-sync.ts +153 -0
- package/src/utils/repo-factory.ts +58 -0
- package/test/README-TESTING-GAPS.md +174 -0
- package/test/integration/README.md +328 -0
- package/test/integration/clone-test.sh +310 -0
- package/test/integration/conflict-resolution-test.sh +309 -0
- package/test/integration/deletion-behavior-test.sh +487 -0
- package/test/integration/deletion-sync-test-simple.sh +193 -0
- package/test/integration/deletion-sync-test.sh +297 -0
- package/test/integration/exclude-patterns.test.ts +152 -0
- package/test/integration/full-integration-test.sh +363 -0
- package/test/integration/sync-deletion.test.ts +339 -0
- package/test/integration/sync-flow.test.ts +309 -0
- package/test/run-tests.sh +225 -0
- package/test/unit/content-similarity.test.ts +236 -0
- package/test/unit/deletion-behavior.test.ts +260 -0
- package/test/unit/enhanced-mime-detection.test.ts +266 -0
- package/test/unit/snapshot.test.ts +431 -0
- package/test/unit/sync-timing.test.ts +178 -0
- package/test/unit/utils.test.ts +368 -0
- package/tools/browser-sync/README.md +116 -0
- package/tools/browser-sync/package.json +44 -0
- package/tools/browser-sync/patchwork.json +1 -0
- package/tools/browser-sync/pnpm-lock.yaml +4202 -0
- package/tools/browser-sync/src/components/BrowserSyncTool.tsx +599 -0
- package/tools/browser-sync/src/index.ts +20 -0
- package/tools/browser-sync/src/polyfills.ts +31 -0
- package/tools/browser-sync/src/styles.css +290 -0
- package/tools/browser-sync/src/types.ts +27 -0
- package/tools/browser-sync/vite.config.ts +25 -0
- 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":"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"}
|
|
@@ -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"}
|