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,293 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.pathExists = pathExists;
37
+ exports.getFileSystemEntry = getFileSystemEntry;
38
+ exports.isTextFile = isTextFile;
39
+ exports.readFileContent = readFileContent;
40
+ exports.writeFileContent = writeFileContent;
41
+ exports.ensureDirectoryExists = ensureDirectoryExists;
42
+ exports.removePath = removePath;
43
+ exports.listDirectory = listDirectory;
44
+ exports.copyFile = copyFile;
45
+ exports.movePath = movePath;
46
+ exports.calculateContentHash = calculateContentHash;
47
+ exports.getMimeType = getMimeType;
48
+ exports.getFileExtension = getFileExtension;
49
+ exports.normalizePath = normalizePath;
50
+ exports.getRelativePath = getRelativePath;
51
+ const fs = __importStar(require("fs/promises"));
52
+ const path = __importStar(require("path"));
53
+ const crypto = __importStar(require("crypto"));
54
+ const glob_1 = require("glob");
55
+ const mimeTypes = __importStar(require("mime-types"));
56
+ const types_1 = require("../types");
57
+ const mime_types_1 = require("./mime-types");
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 metadata
72
+ */
73
+ async function getFileSystemEntry(filePath) {
74
+ try {
75
+ const stats = await fs.stat(filePath);
76
+ const type = stats.isDirectory()
77
+ ? types_1.FileType.DIRECTORY
78
+ : (await (0, mime_types_1.isEnhancedTextFile)(filePath))
79
+ ? types_1.FileType.TEXT
80
+ : types_1.FileType.BINARY;
81
+ return {
82
+ path: filePath,
83
+ type,
84
+ size: stats.size,
85
+ mtime: stats.mtime,
86
+ permissions: stats.mode & parseInt("777", 8),
87
+ };
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ }
93
+ /**
94
+ * Determine if a file is text or binary
95
+ */
96
+ async function isTextFile(filePath) {
97
+ try {
98
+ const mimeType = mimeTypes.lookup(filePath);
99
+ if (mimeType) {
100
+ return (mimeType.startsWith("text/") ||
101
+ mimeType === "application/json" ||
102
+ mimeType === "application/xml" ||
103
+ mimeType.includes("javascript") ||
104
+ mimeType.includes("typescript"));
105
+ }
106
+ // Sample first 8KB to detect binary content
107
+ const handle = await fs.open(filePath, "r");
108
+ const buffer = Buffer.alloc(Math.min(8192, (await handle.stat()).size));
109
+ await handle.read(buffer, 0, buffer.length, 0);
110
+ await handle.close();
111
+ // Check for null bytes which indicate binary content
112
+ return !buffer.includes(0);
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ /**
119
+ * Read file content as string or buffer
120
+ */
121
+ async function readFileContent(filePath) {
122
+ const isText = await (0, mime_types_1.isEnhancedTextFile)(filePath);
123
+ if (isText) {
124
+ return await fs.readFile(filePath, "utf8");
125
+ }
126
+ else {
127
+ const buffer = await fs.readFile(filePath);
128
+ return new Uint8Array(buffer);
129
+ }
130
+ }
131
+ /**
132
+ * Write file content from string or buffer
133
+ */
134
+ async function writeFileContent(filePath, content) {
135
+ await ensureDirectoryExists(path.dirname(filePath));
136
+ if (typeof content === "string") {
137
+ await fs.writeFile(filePath, content, "utf8");
138
+ }
139
+ else {
140
+ await fs.writeFile(filePath, content);
141
+ }
142
+ }
143
+ /**
144
+ * Ensure directory exists, creating it if necessary
145
+ */
146
+ async function ensureDirectoryExists(dirPath) {
147
+ try {
148
+ await fs.mkdir(dirPath, { recursive: true });
149
+ }
150
+ catch (error) {
151
+ if (error.code !== "EEXIST") {
152
+ throw error;
153
+ }
154
+ }
155
+ }
156
+ /**
157
+ * Remove file or directory
158
+ */
159
+ async function removePath(filePath) {
160
+ try {
161
+ const stats = await fs.stat(filePath);
162
+ if (stats.isDirectory()) {
163
+ await fs.rmdir(filePath, { recursive: true });
164
+ }
165
+ else {
166
+ await fs.unlink(filePath);
167
+ }
168
+ }
169
+ catch (error) {
170
+ if (error.code !== "ENOENT") {
171
+ throw error;
172
+ }
173
+ }
174
+ }
175
+ /**
176
+ * Check if a path matches any of the exclude patterns
177
+ */
178
+ function isExcluded(filePath, basePath, excludePatterns) {
179
+ const relativePath = path.relative(basePath, filePath);
180
+ for (const pattern of excludePatterns) {
181
+ // Handle different pattern types
182
+ if (pattern.startsWith(".") && !pattern.includes("*")) {
183
+ // Directory pattern like ".pushwork" or ".git"
184
+ if (relativePath.startsWith(pattern) ||
185
+ relativePath.includes(`/${pattern}/`) ||
186
+ relativePath.includes(`\\${pattern}\\`)) {
187
+ return true;
188
+ }
189
+ }
190
+ else if (pattern.includes("*")) {
191
+ // Glob pattern like "*.tmp"
192
+ const regex = new RegExp(pattern.replace(/\*/g, ".*").replace(/\?/g, "."));
193
+ if (regex.test(relativePath)) {
194
+ return true;
195
+ }
196
+ }
197
+ else {
198
+ // Exact directory name like "node_modules"
199
+ const parts = relativePath.split(/[/\\]/);
200
+ if (parts.includes(pattern)) {
201
+ return true;
202
+ }
203
+ }
204
+ }
205
+ return false;
206
+ }
207
+ /**
208
+ * List directory contents with metadata
209
+ */
210
+ async function listDirectory(dirPath, recursive = false, excludePatterns = []) {
211
+ const entries = [];
212
+ try {
213
+ const pattern = recursive
214
+ ? path.join(dirPath, "**/*")
215
+ : path.join(dirPath, "*");
216
+ // Convert exclude patterns to glob ignore patterns
217
+ const ignorePatterns = excludePatterns.map((pattern) => {
218
+ if (pattern.startsWith(".") && !pattern.includes("*")) {
219
+ // Directory patterns
220
+ return `${pattern}/**`;
221
+ }
222
+ return pattern;
223
+ });
224
+ const paths = await (0, glob_1.glob)(pattern, {
225
+ dot: true,
226
+ ignore: ignorePatterns,
227
+ });
228
+ for (const filePath of paths) {
229
+ // Additional filtering for safety
230
+ if (!isExcluded(filePath, dirPath, excludePatterns)) {
231
+ const entry = await getFileSystemEntry(filePath);
232
+ if (entry) {
233
+ entries.push(entry);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ catch {
239
+ // Return empty array if directory doesn't exist or can't be read
240
+ }
241
+ return entries;
242
+ }
243
+ /**
244
+ * Copy file with metadata preservation
245
+ */
246
+ async function copyFile(sourcePath, destPath) {
247
+ await ensureDirectoryExists(path.dirname(destPath));
248
+ await fs.copyFile(sourcePath, destPath);
249
+ // Preserve file permissions
250
+ const stats = await fs.stat(sourcePath);
251
+ await fs.chmod(destPath, stats.mode);
252
+ }
253
+ /**
254
+ * Move/rename file or directory
255
+ */
256
+ async function movePath(sourcePath, destPath) {
257
+ await ensureDirectoryExists(path.dirname(destPath));
258
+ await fs.rename(sourcePath, destPath);
259
+ }
260
+ /**
261
+ * Calculate content hash for change detection
262
+ */
263
+ async function calculateContentHash(content) {
264
+ const hash = crypto.createHash("sha256");
265
+ hash.update(content);
266
+ return hash.digest("hex");
267
+ }
268
+ /**
269
+ * Get MIME type for file
270
+ */
271
+ function getMimeType(filePath) {
272
+ return mimeTypes.lookup(filePath) || "application/octet-stream";
273
+ }
274
+ /**
275
+ * Get file extension
276
+ */
277
+ function getFileExtension(filePath) {
278
+ const ext = path.extname(filePath);
279
+ return ext.startsWith(".") ? ext.slice(1) : ext;
280
+ }
281
+ /**
282
+ * Normalize path separators for cross-platform compatibility
283
+ */
284
+ function normalizePath(filePath) {
285
+ return path.posix.normalize(filePath.replace(/\\/g, "/"));
286
+ }
287
+ /**
288
+ * Get relative path from base directory
289
+ */
290
+ function getRelativePath(basePath, filePath) {
291
+ return normalizePath(path.relative(basePath, filePath));
292
+ }
293
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./fs";
2
+ export * from "./content-similarity";
3
+ export * from "./mime-types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,sBAAsB,CAAC;AAGrC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // File system utilities
18
+ __exportStar(require("./fs"), exports);
19
+ // Content similarity utilities
20
+ __exportStar(require("./content-similarity"), exports);
21
+ // Enhanced MIME type detection
22
+ __exportStar(require("./mime-types"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAAwB;AACxB,uCAAqB;AAErB,+BAA+B;AAC/B,uDAAqC;AAErC,+BAA+B;AAC/B,+CAA6B"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Isomorphic utilities that work in both Node.js and browser environments
3
+ */
4
+ import { FileSystemInterface } from "../platform/filesystem";
5
+ export declare function getFileExtension(filePath: string): string;
6
+ export declare function normalizePath(filePath: string): string;
7
+ export declare function getRelativePath(basePath: string, filePath: string): string;
8
+ export declare function calculateContentHash(content: string | Uint8Array): string;
9
+ export declare function getMimeType(filePath: string): string;
10
+ export declare function isTextFile(filePath: string): boolean;
11
+ export declare function readFileContent(filePath: string): Promise<string | Uint8Array>;
12
+ export declare function writeFileContent(filePath: string, content: string | Uint8Array): Promise<void>;
13
+ export declare function removePath(filePath: string): Promise<void>;
14
+ export declare function movePath(sourcePath: string, targetPath: string): Promise<void>;
15
+ export declare function ensureDirectoryExists(dirPath: string): Promise<void>;
16
+ export declare function pathExists(filePath: string): Promise<boolean>;
17
+ export declare function listDirectory(dirPath: string, excludePatterns?: string[]): Promise<Array<{
18
+ name: string;
19
+ type: "file" | "directory";
20
+ }>>;
21
+ export declare function getFileSystemEntry(filePath: string): Promise<{
22
+ path: string;
23
+ type: "file";
24
+ size: number;
25
+ mtime: Date;
26
+ permissions: number;
27
+ }>;
28
+ export declare function setFilesystemInstance(fs: FileSystemInterface): void;
29
+ //# sourceMappingURL=isomorphic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic.d.ts","sourceRoot":"","sources":["../../src/utils/isomorphic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAiB,MAAM,wBAAwB,CAAC;AAI5E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyB1E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAazE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAYD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAG9B;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAED,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnE;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC,CAAC,CAkB9D;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM;;;;;;GAexD;AAGD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI,CAEnE"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * Isomorphic utilities that work in both Node.js and browser environments
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getFileExtension = getFileExtension;
7
+ exports.normalizePath = normalizePath;
8
+ exports.getRelativePath = getRelativePath;
9
+ exports.calculateContentHash = calculateContentHash;
10
+ exports.getMimeType = getMimeType;
11
+ exports.isTextFile = isTextFile;
12
+ exports.readFileContent = readFileContent;
13
+ exports.writeFileContent = writeFileContent;
14
+ exports.removePath = removePath;
15
+ exports.movePath = movePath;
16
+ exports.ensureDirectoryExists = ensureDirectoryExists;
17
+ exports.pathExists = pathExists;
18
+ exports.listDirectory = listDirectory;
19
+ exports.getFileSystemEntry = getFileSystemEntry;
20
+ exports.setFilesystemInstance = setFilesystemInstance;
21
+ const filesystem_1 = require("../platform/filesystem");
22
+ const mime_types_1 = require("./mime-types");
23
+ // Pure functions that work in both environments
24
+ function getFileExtension(filePath) {
25
+ const ext = filePath.split(".").pop() || "";
26
+ return ext.startsWith(".") ? ext : `.${ext}`;
27
+ }
28
+ function normalizePath(filePath) {
29
+ // Simple path normalization that works in browser
30
+ return filePath.replace(/\\/g, "/").replace(/\/+/g, "/");
31
+ }
32
+ function getRelativePath(basePath, filePath) {
33
+ // Simple relative path calculation for browser compatibility
34
+ const base = normalizePath(basePath)
35
+ .split("/")
36
+ .filter((p) => p);
37
+ const file = normalizePath(filePath)
38
+ .split("/")
39
+ .filter((p) => p);
40
+ // Find common prefix
41
+ let commonLength = 0;
42
+ for (let i = 0; i < Math.min(base.length, file.length); i++) {
43
+ if (base[i] === file[i]) {
44
+ commonLength++;
45
+ }
46
+ else {
47
+ break;
48
+ }
49
+ }
50
+ // Build relative path
51
+ const upCount = base.length - commonLength;
52
+ const downPath = file.slice(commonLength);
53
+ const result = ["..".repeat(upCount), ...downPath].filter((p) => p).join("/");
54
+ return result || ".";
55
+ }
56
+ function calculateContentHash(content) {
57
+ // Simple hash function for browser compatibility
58
+ let hash = 0;
59
+ const str = typeof content === "string" ? content : new TextDecoder().decode(content);
60
+ for (let i = 0; i < str.length; i++) {
61
+ const char = str.charCodeAt(i);
62
+ hash = (hash << 5) - hash + char;
63
+ hash = hash & hash; // Convert to 32-bit integer
64
+ }
65
+ return Math.abs(hash).toString(16);
66
+ }
67
+ function getMimeType(filePath) {
68
+ return (0, mime_types_1.getEnhancedMimeType)(filePath);
69
+ }
70
+ function isTextFile(filePath) {
71
+ return (0, mime_types_1.isEnhancedTextFile)(filePath);
72
+ }
73
+ // Filesystem-dependent functions that use the platform interface
74
+ let _filesystem = null;
75
+ async function getFs() {
76
+ if (!_filesystem) {
77
+ _filesystem = await (0, filesystem_1.getFilesystem)();
78
+ }
79
+ return _filesystem;
80
+ }
81
+ async function readFileContent(filePath) {
82
+ const fs = await getFs();
83
+ return fs.readFileContent(filePath);
84
+ }
85
+ async function writeFileContent(filePath, content) {
86
+ const fs = await getFs();
87
+ return fs.writeFileContent(filePath, content);
88
+ }
89
+ async function removePath(filePath) {
90
+ const fs = await getFs();
91
+ return fs.removePath(filePath);
92
+ }
93
+ async function movePath(sourcePath, targetPath) {
94
+ const fs = await getFs();
95
+ return fs.movePath(sourcePath, targetPath);
96
+ }
97
+ async function ensureDirectoryExists(dirPath) {
98
+ const fs = await getFs();
99
+ return fs.ensureDirectoryExists(dirPath);
100
+ }
101
+ async function pathExists(filePath) {
102
+ const fs = await getFs();
103
+ return fs.exists(filePath);
104
+ }
105
+ async function listDirectory(dirPath, excludePatterns = []) {
106
+ const fs = await getFs();
107
+ const entries = await fs.listDirectory(dirPath);
108
+ // Apply exclude patterns
109
+ if (excludePatterns.length > 0) {
110
+ return entries.filter((entry) => {
111
+ return !excludePatterns.some((pattern) => {
112
+ // Simple glob pattern matching
113
+ const regex = new RegExp(pattern.replace(/\*/g, ".*").replace(/\?/g, "."));
114
+ return regex.test(entry.name);
115
+ });
116
+ });
117
+ }
118
+ return entries;
119
+ }
120
+ async function getFileSystemEntry(filePath) {
121
+ const fs = await getFs();
122
+ const exists = await fs.exists(filePath);
123
+ if (!exists) {
124
+ throw new Error(`Path does not exist: ${filePath}`);
125
+ }
126
+ const stats = await fs.getFileStats(filePath);
127
+ return {
128
+ path: filePath,
129
+ type: "file", // Simplified - in real implementation would check if directory
130
+ size: stats.size,
131
+ mtime: stats.mtime,
132
+ permissions: 0o644, // Default permissions
133
+ };
134
+ }
135
+ // Set filesystem instance (useful for browser where we need to inject the root handle)
136
+ function setFilesystemInstance(fs) {
137
+ _filesystem = fs;
138
+ }
139
+ //# sourceMappingURL=isomorphic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic.js","sourceRoot":"","sources":["../../src/utils/isomorphic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Get enhanced MIME type for file with custom dev file support
3
+ */
4
+ export declare function getEnhancedMimeType(filePath: string): string;
5
+ /**
6
+ * Check if file extension should be forced to text type
7
+ */
8
+ export declare function shouldForceAsText(filePath: string): boolean;
9
+ /**
10
+ * Enhanced text file detection with developer file support
11
+ */
12
+ export declare function isEnhancedTextFile(filePath: string): Promise<boolean>;
13
+ //# sourceMappingURL=mime-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime-types.d.ts","sourceRoot":"","sources":["../../src/utils/mime-types.ts"],"names":[],"mappings":"AA2GA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsB5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG3D;AAUD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB3E"}