pushwork 1.2.2 → 1.2.4

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 (147) hide show
  1. package/dist/browser/browser-sync-engine.d.ts +64 -0
  2. package/dist/browser/browser-sync-engine.d.ts.map +1 -0
  3. package/dist/browser/browser-sync-engine.js +303 -0
  4. package/dist/browser/browser-sync-engine.js.map +1 -0
  5. package/dist/browser/filesystem-adapter.d.ts +84 -0
  6. package/dist/browser/filesystem-adapter.d.ts.map +1 -0
  7. package/dist/browser/filesystem-adapter.js +413 -0
  8. package/dist/browser/filesystem-adapter.js.map +1 -0
  9. package/dist/browser/index.d.ts +36 -0
  10. package/dist/browser/index.d.ts.map +1 -0
  11. package/dist/browser/index.js +90 -0
  12. package/dist/browser/index.js.map +1 -0
  13. package/dist/browser/types.d.ts +70 -0
  14. package/dist/browser/types.d.ts.map +1 -0
  15. package/dist/browser/types.js +6 -0
  16. package/dist/browser/types.js.map +1 -0
  17. package/dist/cli/commands.d.ts +77 -0
  18. package/dist/cli/commands.d.ts.map +1 -0
  19. package/dist/cli/commands.js +904 -0
  20. package/dist/cli/commands.js.map +1 -0
  21. package/dist/cli/index.d.ts +2 -0
  22. package/dist/cli/index.d.ts.map +1 -0
  23. package/dist/cli/index.js +19 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/cli/output.d.ts +75 -0
  26. package/dist/cli/output.d.ts.map +1 -0
  27. package/dist/cli/output.js +182 -0
  28. package/dist/cli/output.js.map +1 -0
  29. package/dist/cli.js +0 -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/config/remote-manager.d.ts +65 -0
  35. package/dist/config/remote-manager.d.ts.map +1 -0
  36. package/dist/config/remote-manager.js +243 -0
  37. package/dist/config/remote-manager.js.map +1 -0
  38. package/dist/config.d.ts +16 -0
  39. package/dist/config.d.ts.map +1 -0
  40. package/dist/config.js +83 -0
  41. package/dist/config.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/fs-tree.d.ts +6 -0
  47. package/dist/fs-tree.d.ts.map +1 -0
  48. package/dist/fs-tree.js +99 -0
  49. package/dist/fs-tree.js.map +1 -0
  50. package/dist/ignore.d.ts +6 -0
  51. package/dist/ignore.d.ts.map +1 -0
  52. package/dist/ignore.js +74 -0
  53. package/dist/ignore.js.map +1 -0
  54. package/dist/log.d.ts +3 -0
  55. package/dist/log.d.ts.map +1 -0
  56. package/dist/log.js +14 -0
  57. package/dist/log.js.map +1 -0
  58. package/dist/platform/browser-filesystem.d.ts +26 -0
  59. package/dist/platform/browser-filesystem.d.ts.map +1 -0
  60. package/dist/platform/browser-filesystem.js +91 -0
  61. package/dist/platform/browser-filesystem.js.map +1 -0
  62. package/dist/platform/filesystem.d.ts +29 -0
  63. package/dist/platform/filesystem.d.ts.map +1 -0
  64. package/dist/platform/filesystem.js +65 -0
  65. package/dist/platform/filesystem.js.map +1 -0
  66. package/dist/platform/node-filesystem.d.ts +21 -0
  67. package/dist/platform/node-filesystem.d.ts.map +1 -0
  68. package/dist/platform/node-filesystem.js +93 -0
  69. package/dist/platform/node-filesystem.js.map +1 -0
  70. package/dist/polyfill-node-window.d.ts +13 -0
  71. package/dist/polyfill-node-window.d.ts.map +1 -0
  72. package/dist/polyfill-node-window.js +17 -0
  73. package/dist/polyfill-node-window.js.map +1 -0
  74. package/dist/pushwork.d.ts +97 -0
  75. package/dist/pushwork.d.ts.map +1 -0
  76. package/dist/pushwork.js +726 -0
  77. package/dist/pushwork.js.map +1 -0
  78. package/dist/repo.d.ts +14 -0
  79. package/dist/repo.d.ts.map +1 -0
  80. package/dist/repo.js +60 -0
  81. package/dist/repo.js.map +1 -0
  82. package/dist/shapes/custom.d.ts +3 -0
  83. package/dist/shapes/custom.d.ts.map +1 -0
  84. package/dist/shapes/custom.js +57 -0
  85. package/dist/shapes/custom.js.map +1 -0
  86. package/dist/shapes/file.d.ts +20 -0
  87. package/dist/shapes/file.d.ts.map +1 -0
  88. package/dist/shapes/file.js +140 -0
  89. package/dist/shapes/file.js.map +1 -0
  90. package/dist/shapes/index.d.ts +10 -0
  91. package/dist/shapes/index.d.ts.map +1 -0
  92. package/dist/shapes/index.js +35 -0
  93. package/dist/shapes/index.js.map +1 -0
  94. package/dist/shapes/patchwork-folder.d.ts +3 -0
  95. package/dist/shapes/patchwork-folder.d.ts.map +1 -0
  96. package/dist/shapes/patchwork-folder.js +160 -0
  97. package/dist/shapes/patchwork-folder.js.map +1 -0
  98. package/dist/shapes/types.d.ts +38 -0
  99. package/dist/shapes/types.d.ts.map +1 -0
  100. package/dist/shapes/types.js +52 -0
  101. package/dist/shapes/types.js.map +1 -0
  102. package/dist/shapes/vfs.d.ts +3 -0
  103. package/dist/shapes/vfs.d.ts.map +1 -0
  104. package/dist/shapes/vfs.js +92 -0
  105. package/dist/shapes/vfs.js.map +1 -0
  106. package/dist/snarf.d.ts +21 -0
  107. package/dist/snarf.d.ts.map +1 -0
  108. package/dist/snarf.js +117 -0
  109. package/dist/snarf.js.map +1 -0
  110. package/dist/utils/content-similarity.d.ts +53 -0
  111. package/dist/utils/content-similarity.d.ts.map +1 -0
  112. package/dist/utils/content-similarity.js +155 -0
  113. package/dist/utils/content-similarity.js.map +1 -0
  114. package/dist/utils/fs-browser.d.ts +57 -0
  115. package/dist/utils/fs-browser.d.ts.map +1 -0
  116. package/dist/utils/fs-browser.js +311 -0
  117. package/dist/utils/fs-browser.js.map +1 -0
  118. package/dist/utils/fs-node.d.ts +53 -0
  119. package/dist/utils/fs-node.d.ts.map +1 -0
  120. package/dist/utils/fs-node.js +220 -0
  121. package/dist/utils/fs-node.js.map +1 -0
  122. package/dist/utils/isomorphic.d.ts +29 -0
  123. package/dist/utils/isomorphic.d.ts.map +1 -0
  124. package/dist/utils/isomorphic.js +139 -0
  125. package/dist/utils/isomorphic.js.map +1 -0
  126. package/dist/utils/node-polyfills.d.ts +9 -0
  127. package/dist/utils/node-polyfills.d.ts.map +1 -0
  128. package/dist/utils/node-polyfills.js +9 -0
  129. package/dist/utils/node-polyfills.js.map +1 -0
  130. package/dist/utils/pure.d.ts +25 -0
  131. package/dist/utils/pure.d.ts.map +1 -0
  132. package/dist/utils/pure.js +112 -0
  133. package/dist/utils/pure.js.map +1 -0
  134. package/dist/version.d.ts +11 -0
  135. package/dist/version.d.ts.map +1 -0
  136. package/dist/version.js +93 -0
  137. package/dist/version.js.map +1 -0
  138. package/package.json +96 -98
  139. package/scripts/roundtrip-test.sh +0 -0
  140. package/test/integration/clone-test.sh +0 -0
  141. package/test/integration/conflict-resolution-test.sh +0 -0
  142. package/test/integration/deletion-behavior-test.sh +0 -0
  143. package/test/integration/deletion-sync-test-simple.sh +0 -0
  144. package/test/integration/deletion-sync-test.sh +0 -0
  145. package/test/integration/full-integration-test.sh +0 -0
  146. package/test/integration/manual-sync-test.sh +0 -0
  147. package/test/run-tests.sh +0 -0
package/dist/config.js ADDED
@@ -0,0 +1,83 @@
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.storageDir = exports.pushworkDir = exports.CONFIG_VERSION = void 0;
37
+ exports.readConfig = readConfig;
38
+ exports.writeConfig = writeConfig;
39
+ exports.configExists = configExists;
40
+ const fs = __importStar(require("fs/promises"));
41
+ const path = __importStar(require("path"));
42
+ exports.CONFIG_VERSION = 4;
43
+ const DIR = ".pushwork";
44
+ const CONFIG = "config.json";
45
+ const STORAGE = "storage";
46
+ const pushworkDir = (root) => path.join(root, DIR);
47
+ exports.pushworkDir = pushworkDir;
48
+ const storageDir = (root) => path.join(root, DIR, STORAGE);
49
+ exports.storageDir = storageDir;
50
+ async function readConfig(root) {
51
+ const text = await fs.readFile(path.join(root, DIR, CONFIG), "utf8");
52
+ const parsed = JSON.parse(text);
53
+ if (parsed.version !== exports.CONFIG_VERSION) {
54
+ throw new Error(`pushwork config version mismatch: expected ${exports.CONFIG_VERSION}, got ${parsed.version ?? "(missing)"}`);
55
+ }
56
+ if (!parsed.rootUrl)
57
+ throw new Error("pushwork config missing rootUrl");
58
+ if (!parsed.backend)
59
+ throw new Error("pushwork config missing backend");
60
+ if (!parsed.shape)
61
+ throw new Error("pushwork config missing shape");
62
+ return {
63
+ version: exports.CONFIG_VERSION,
64
+ rootUrl: parsed.rootUrl,
65
+ backend: parsed.backend,
66
+ shape: parsed.shape,
67
+ artifactDirectories: parsed.artifactDirectories ?? [],
68
+ };
69
+ }
70
+ async function writeConfig(root, config) {
71
+ await fs.mkdir(path.join(root, DIR), { recursive: true });
72
+ await fs.writeFile(path.join(root, DIR, CONFIG), JSON.stringify(config, null, 2) + "\n");
73
+ }
74
+ async function configExists(root) {
75
+ try {
76
+ await fs.access(path.join(root, DIR, CONFIG));
77
+ return true;
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,gCAkBC;AAED,kCASC;AAED,oCAOC;AA7DD,gDAAkC;AAClC,2CAA6B;AAKhB,QAAA,cAAc,GAAG,CAAC,CAAC;AAUhC,MAAM,GAAG,GAAG,WAAW,CAAC;AACxB,MAAM,MAAM,GAAG,aAAa,CAAC;AAC7B,MAAM,OAAO,GAAG,SAAS,CAAC;AAEnB,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAArD,QAAA,WAAW,eAA0C;AAC3D,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAA7D,QAAA,UAAU,cAAmD;AAEnE,KAAK,UAAU,UAAU,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IAC3D,IAAI,MAAM,CAAC,OAAO,KAAK,sBAAc,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACd,8CAA8C,sBAAc,SAAS,MAAM,CAAC,OAAO,IAAI,WAAW,EAAE,CACpG,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACpE,OAAO;QACN,OAAO,EAAE,sBAAc;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE;KACrD,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAChC,IAAY,EACZ,MAAsB;IAEtB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACtC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAY;IAC9C,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Isomorphic snapshot manager that works in both Node.js and browser
3
+ */
4
+ import { SyncSnapshot, SnapshotFileEntry, SnapshotDirectoryEntry } from "../types";
5
+ /**
6
+ * Platform-agnostic snapshot storage interface
7
+ */
8
+ export interface SnapshotStorage {
9
+ save(snapshot: SyncSnapshot, key?: string): Promise<void>;
10
+ load(key?: string): Promise<SyncSnapshot | null>;
11
+ backup(key?: string): Promise<void>;
12
+ }
13
+ /**
14
+ * File-based snapshot storage (for Node.js and browser with file system access)
15
+ */
16
+ export declare class FileSnapshotStorage implements SnapshotStorage {
17
+ private rootPath;
18
+ private static readonly SNAPSHOT_FILENAME;
19
+ private static readonly SYNC_TOOL_DIR;
20
+ constructor(rootPath: string);
21
+ private getSnapshotPath;
22
+ private getSyncToolDir;
23
+ save(snapshot: SyncSnapshot, key?: string): Promise<void>;
24
+ load(key?: string): Promise<SyncSnapshot | null>;
25
+ backup(key?: string): Promise<void>;
26
+ private toSerializable;
27
+ private fromSerializable;
28
+ }
29
+ /**
30
+ * IndexedDB-based snapshot storage (for browser environments)
31
+ */
32
+ export declare class IndexedDBSnapshotStorage implements SnapshotStorage {
33
+ private dbName;
34
+ private storeName;
35
+ private version;
36
+ save(snapshot: SyncSnapshot, key?: string): Promise<void>;
37
+ load(key?: string): Promise<SyncSnapshot | null>;
38
+ backup(key?: string): Promise<void>;
39
+ private openDB;
40
+ private toSerializable;
41
+ private fromSerializable;
42
+ }
43
+ /**
44
+ * Isomorphic snapshot manager that uses appropriate storage for the platform
45
+ */
46
+ export declare class IsomorphicSnapshotManager {
47
+ private storage;
48
+ constructor(rootPath: string, useIndexedDB?: boolean);
49
+ save(snapshot: SyncSnapshot): Promise<void>;
50
+ load(): Promise<SyncSnapshot | null>;
51
+ backup(): Promise<void>;
52
+ createEmptySnapshot(rootPath: string): Promise<SyncSnapshot>;
53
+ updateFileEntry(snapshot: SyncSnapshot, relativePath: string, entry: SnapshotFileEntry): void;
54
+ updateDirectoryEntry(snapshot: SyncSnapshot, relativePath: string, entry: SnapshotDirectoryEntry): void;
55
+ removeFileEntry(snapshot: SyncSnapshot, relativePath: string): void;
56
+ createEmpty(): SyncSnapshot;
57
+ }
58
+ //# sourceMappingURL=isomorphic-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic-snapshot.d.ts","sourceRoot":"","sources":["../../src/core/isomorphic-snapshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,YAAY,EAEZ,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAQlB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IAI7C,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAEhC,QAAQ,EAAE,MAAM;IAEpC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;IAIhB,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,IAAI,CAAC,GAAG,SAAY,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoBnD,MAAM,CAAC,GAAG,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5C,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;CAUzB;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,OAAO,CAAK;IAEd,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB5D,IAAI,CAAC,GAAG,SAAY,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA0BnD,MAAM,CAAC,GAAG,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAO9B,MAAM;IAgBpB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;CAUzB;AAED;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,OAAO,CAAkB;gBAErB,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAQ;IAW5C,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,IAAI,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIpC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IASlE,eAAe,CACb,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,iBAAiB,GACvB,IAAI;IAIP,oBAAoB,CAClB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,sBAAsB,GAC5B,IAAI;IAIP,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAInE,WAAW,IAAI,YAAY;CAQ5B"}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ /**
3
+ * Isomorphic snapshot manager that works in both Node.js and browser
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IsomorphicSnapshotManager = exports.IndexedDBSnapshotStorage = exports.FileSnapshotStorage = void 0;
7
+ const isomorphic_1 = require("../utils/isomorphic");
8
+ /**
9
+ * File-based snapshot storage (for Node.js and browser with file system access)
10
+ */
11
+ class FileSnapshotStorage {
12
+ constructor(rootPath) {
13
+ this.rootPath = rootPath;
14
+ }
15
+ getSnapshotPath(key = "current") {
16
+ return `${this.rootPath}/${FileSnapshotStorage.SYNC_TOOL_DIR}/${key}-${FileSnapshotStorage.SNAPSHOT_FILENAME}`;
17
+ }
18
+ getSyncToolDir() {
19
+ return `${this.rootPath}/${FileSnapshotStorage.SYNC_TOOL_DIR}`;
20
+ }
21
+ async save(snapshot, key = "current") {
22
+ await (0, isomorphic_1.ensureDirectoryExists)(this.getSyncToolDir());
23
+ const serializable = this.toSerializable(snapshot);
24
+ const content = JSON.stringify(serializable, null, 2);
25
+ await (0, isomorphic_1.writeFileContent)(this.getSnapshotPath(key), content);
26
+ }
27
+ async load(key = "current") {
28
+ const snapshotPath = this.getSnapshotPath(key);
29
+ if (!(await (0, isomorphic_1.pathExists)(snapshotPath))) {
30
+ return null;
31
+ }
32
+ try {
33
+ const content = await (0, isomorphic_1.readFileContent)(snapshotPath);
34
+ const contentStr = typeof content === "string"
35
+ ? content
36
+ : new TextDecoder().decode(content);
37
+ const serializable = JSON.parse(contentStr);
38
+ return this.fromSerializable(serializable);
39
+ }
40
+ catch (error) {
41
+ throw new Error(`Failed to load snapshot from ${snapshotPath}: ${error}`);
42
+ }
43
+ }
44
+ async backup(key = "current") {
45
+ const snapshot = await this.load(key);
46
+ if (snapshot) {
47
+ const backupKey = `${key}-backup-${Date.now()}`;
48
+ await this.save(snapshot, backupKey);
49
+ }
50
+ }
51
+ toSerializable(snapshot) {
52
+ return {
53
+ rootPath: snapshot.rootPath,
54
+ timestamp: new Date(snapshot.timestamp).toISOString(),
55
+ files: Array.from(snapshot.files.entries()),
56
+ directories: Array.from(snapshot.directories.entries()),
57
+ };
58
+ }
59
+ fromSerializable(serializable) {
60
+ return {
61
+ rootPath: serializable.rootPath,
62
+ timestamp: new Date(serializable.timestamp).getTime(),
63
+ files: new Map(serializable.files),
64
+ directories: new Map(serializable.directories),
65
+ };
66
+ }
67
+ }
68
+ exports.FileSnapshotStorage = FileSnapshotStorage;
69
+ FileSnapshotStorage.SNAPSHOT_FILENAME = "snapshot.json";
70
+ FileSnapshotStorage.SYNC_TOOL_DIR = ".pushwork";
71
+ /**
72
+ * IndexedDB-based snapshot storage (for browser environments)
73
+ */
74
+ class IndexedDBSnapshotStorage {
75
+ constructor() {
76
+ this.dbName = "pushwork-snapshots";
77
+ this.storeName = "snapshots";
78
+ this.version = 1;
79
+ }
80
+ async save(snapshot, key = "current") {
81
+ const db = await this.openDB();
82
+ const transaction = db.transaction([this.storeName], "readwrite");
83
+ const store = transaction.objectStore(this.storeName);
84
+ const serializable = this.toSerializable(snapshot);
85
+ const putRequest = store.put({
86
+ key,
87
+ snapshot: JSON.stringify(serializable),
88
+ timestamp: Date.now(),
89
+ });
90
+ await new Promise((resolve, reject) => {
91
+ putRequest.onsuccess = () => resolve(undefined);
92
+ putRequest.onerror = () => reject(putRequest.error);
93
+ });
94
+ db.close();
95
+ }
96
+ async load(key = "current") {
97
+ try {
98
+ const db = await this.openDB();
99
+ const transaction = db.transaction([this.storeName], "readonly");
100
+ const store = transaction.objectStore(this.storeName);
101
+ const request = store.get(key);
102
+ const result = await new Promise((resolve, reject) => {
103
+ request.onsuccess = () => resolve(request.result);
104
+ request.onerror = () => reject(request.error);
105
+ });
106
+ db.close();
107
+ if (result) {
108
+ const serializable = JSON.parse(result.snapshot);
109
+ return this.fromSerializable(serializable);
110
+ }
111
+ return null;
112
+ }
113
+ catch (error) {
114
+ console.warn("Failed to load snapshot from IndexedDB:", error);
115
+ return null;
116
+ }
117
+ }
118
+ async backup(key = "current") {
119
+ const snapshot = await this.load(key);
120
+ if (snapshot) {
121
+ await this.save(snapshot, `${key}-backup-${Date.now()}`);
122
+ }
123
+ }
124
+ async openDB() {
125
+ return new Promise((resolve, reject) => {
126
+ const request = indexedDB.open(this.dbName, this.version);
127
+ request.onerror = () => reject(request.error);
128
+ request.onsuccess = () => resolve(request.result);
129
+ request.onupgradeneeded = (event) => {
130
+ const db = event.target.result;
131
+ if (!db.objectStoreNames.contains(this.storeName)) {
132
+ db.createObjectStore(this.storeName, { keyPath: "key" });
133
+ }
134
+ };
135
+ });
136
+ }
137
+ toSerializable(snapshot) {
138
+ return {
139
+ rootPath: snapshot.rootPath,
140
+ timestamp: new Date(snapshot.timestamp).toISOString(),
141
+ files: Array.from(snapshot.files.entries()),
142
+ directories: Array.from(snapshot.directories.entries()),
143
+ };
144
+ }
145
+ fromSerializable(serializable) {
146
+ return {
147
+ rootPath: serializable.rootPath,
148
+ timestamp: new Date(serializable.timestamp).getTime(),
149
+ files: new Map(serializable.files),
150
+ directories: new Map(serializable.directories),
151
+ };
152
+ }
153
+ }
154
+ exports.IndexedDBSnapshotStorage = IndexedDBSnapshotStorage;
155
+ /**
156
+ * Isomorphic snapshot manager that uses appropriate storage for the platform
157
+ */
158
+ class IsomorphicSnapshotManager {
159
+ constructor(rootPath, useIndexedDB = false) {
160
+ if (useIndexedDB ||
161
+ (typeof window !== "undefined" && typeof indexedDB !== "undefined")) {
162
+ this.storage = new IndexedDBSnapshotStorage();
163
+ }
164
+ else {
165
+ this.storage = new FileSnapshotStorage(rootPath);
166
+ }
167
+ }
168
+ async save(snapshot) {
169
+ return this.storage.save(snapshot);
170
+ }
171
+ async load() {
172
+ return this.storage.load();
173
+ }
174
+ async backup() {
175
+ return this.storage.backup();
176
+ }
177
+ async createEmptySnapshot(rootPath) {
178
+ return {
179
+ rootPath,
180
+ timestamp: Date.now(),
181
+ files: new Map(),
182
+ directories: new Map(),
183
+ };
184
+ }
185
+ updateFileEntry(snapshot, relativePath, entry) {
186
+ snapshot.files.set(relativePath, entry);
187
+ }
188
+ updateDirectoryEntry(snapshot, relativePath, entry) {
189
+ snapshot.directories.set(relativePath, entry);
190
+ }
191
+ removeFileEntry(snapshot, relativePath) {
192
+ snapshot.files.delete(relativePath);
193
+ }
194
+ createEmpty() {
195
+ return {
196
+ rootPath: "",
197
+ timestamp: Date.now(),
198
+ files: new Map(),
199
+ directories: new Map(),
200
+ };
201
+ }
202
+ }
203
+ exports.IsomorphicSnapshotManager = IsomorphicSnapshotManager;
204
+ //# sourceMappingURL=isomorphic-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic-snapshot.js","sourceRoot":"","sources":["../../src/core/isomorphic-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Ignore } from "ignore";
2
+ export type FileTree = Map<string, Uint8Array>;
3
+ export declare function walkDir(root: string, ig: Ignore): Promise<FileTree>;
4
+ export declare function byteEq(a: Uint8Array | undefined, b: Uint8Array): boolean;
5
+ export declare function writeFileAtomic(target: string, bytes: Uint8Array): Promise<void>;
6
+ //# sourceMappingURL=fs-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-tree.d.ts","sourceRoot":"","sources":["../src/fs-tree.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMrC,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAI/C,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAMzE;AAqCD,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAKxE;AAED,wBAAsB,eAAe,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,99 @@
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.walkDir = walkDir;
37
+ exports.byteEq = byteEq;
38
+ exports.writeFileAtomic = writeFileAtomic;
39
+ const fs = __importStar(require("fs/promises"));
40
+ const path = __importStar(require("path"));
41
+ const ignore_js_1 = require("./ignore.js");
42
+ const log_js_1 = require("./log.js");
43
+ const dlog = (0, log_js_1.log)("fs-tree");
44
+ const toPosix = (p) => p.split(path.sep).join("/");
45
+ async function walkDir(root, ig) {
46
+ dlog("walkDir root=%s", root);
47
+ const tree = new Map();
48
+ await walk(root, root, ig, tree);
49
+ dlog("walkDir done: %d files", tree.size);
50
+ return tree;
51
+ }
52
+ async function walk(root, current, ig, tree) {
53
+ let names;
54
+ try {
55
+ names = await fs.readdir(current);
56
+ }
57
+ catch {
58
+ return;
59
+ }
60
+ for (const name of names) {
61
+ const full = path.join(current, name);
62
+ const rel = toPosix(path.relative(root, full));
63
+ if ((0, ignore_js_1.isIgnored)(ig, rel)) {
64
+ dlog("skip ignored: %s", rel);
65
+ continue;
66
+ }
67
+ let stat;
68
+ try {
69
+ stat = await fs.lstat(full);
70
+ }
71
+ catch {
72
+ continue;
73
+ }
74
+ if (stat.isSymbolicLink())
75
+ continue;
76
+ if (stat.isDirectory()) {
77
+ await walk(root, full, ig, tree);
78
+ }
79
+ else if (stat.isFile()) {
80
+ const bytes = await fs.readFile(full);
81
+ tree.set(rel, new Uint8Array(bytes));
82
+ }
83
+ }
84
+ }
85
+ function byteEq(a, b) {
86
+ if (!a)
87
+ return false;
88
+ if (a.length !== b.length)
89
+ return false;
90
+ for (let i = 0; i < a.length; i++)
91
+ if (a[i] !== b[i])
92
+ return false;
93
+ return true;
94
+ }
95
+ async function writeFileAtomic(target, bytes) {
96
+ await fs.mkdir(path.dirname(target), { recursive: true });
97
+ await fs.writeFile(target, bytes);
98
+ }
99
+ //# sourceMappingURL=fs-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-tree.js","sourceRoot":"","sources":["../src/fs-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type Ignore } from "ignore";
2
+ export declare const ALWAYS_IGNORE: string[];
3
+ export declare const IGNORE_FILE = ".pushworkignore";
4
+ export declare function loadIgnore(root: string): Promise<Ignore>;
5
+ export declare function isIgnored(ig: Ignore, relativePath: string): boolean;
6
+ //# sourceMappingURL=ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../src/ignore.ts"],"names":[],"mappings":"AAEA,OAAe,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAK7C,eAAO,MAAM,aAAa,UAAwC,CAAC;AACnE,eAAO,MAAM,WAAW,oBAAoB,CAAC;AAE7C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB9D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAGnE"}
package/dist/ignore.js ADDED
@@ -0,0 +1,74 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.IGNORE_FILE = exports.ALWAYS_IGNORE = void 0;
40
+ exports.loadIgnore = loadIgnore;
41
+ exports.isIgnored = isIgnored;
42
+ const fs = __importStar(require("fs/promises"));
43
+ const path = __importStar(require("path"));
44
+ const ignore_1 = __importDefault(require("ignore"));
45
+ const log_js_1 = require("./log.js");
46
+ const dlog = (0, log_js_1.log)("ignore");
47
+ exports.ALWAYS_IGNORE = [".pushwork", ".git", "node_modules"];
48
+ exports.IGNORE_FILE = ".pushworkignore";
49
+ async function loadIgnore(root) {
50
+ const ig = (0, ignore_1.default)().add(exports.ALWAYS_IGNORE);
51
+ dlog("always-ignored: %o", exports.ALWAYS_IGNORE);
52
+ try {
53
+ const text = await fs.readFile(path.join(root, exports.IGNORE_FILE), "utf8");
54
+ const patterns = text
55
+ .split(/\r?\n/)
56
+ .map((l) => l.trim())
57
+ .filter((l) => l && !l.startsWith("#"));
58
+ ig.add(patterns);
59
+ dlog("loaded %d patterns from %s", patterns.length, exports.IGNORE_FILE);
60
+ }
61
+ catch (err) {
62
+ const e = err;
63
+ if (e.code !== "ENOENT")
64
+ throw err;
65
+ dlog("no %s in %s", exports.IGNORE_FILE, root);
66
+ }
67
+ return ig;
68
+ }
69
+ function isIgnored(ig, relativePath) {
70
+ if (relativePath === "" || relativePath === ".")
71
+ return false;
72
+ return ig.ignores(relativePath);
73
+ }
74
+ //# sourceMappingURL=ignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.js","sourceRoot":"","sources":["../src/ignore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,gCAiBC;AAED,8BAGC;AAhCD,gDAAkC;AAClC,2CAA6B;AAC7B,oDAA6C;AAC7C,qCAA+B;AAE/B,MAAM,IAAI,GAAG,IAAA,YAAG,EAAC,QAAQ,CAAC,CAAC;AAEd,QAAA,aAAa,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AACtD,QAAA,WAAW,GAAG,iBAAiB,CAAC;AAEtC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC5C,MAAM,EAAE,GAAG,IAAA,gBAAM,GAAE,CAAC,GAAG,CAAC,qBAAa,CAAC,CAAC;IACvC,IAAI,CAAC,oBAAoB,EAAE,qBAAa,CAAC,CAAC;IAC1C,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,IAAI;aACnB,KAAK,CAAC,OAAO,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjB,IAAI,CAAC,4BAA4B,EAAE,QAAQ,CAAC,MAAM,EAAE,mBAAW,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,mBAAW,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAgB,SAAS,CAAC,EAAU,EAAE,YAAoB;IACzD,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACjC,CAAC"}
package/dist/log.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import debug from "debug";
2
+ export declare const log: (ns: string) => debug.Debugger;
3
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,eAAO,MAAM,GAAG,GAAI,IAAI,MAAM,mBAA4B,CAAC"}
package/dist/log.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.log = void 0;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ if (process.env.DEBUG === "true") {
9
+ process.env.DEBUG = "*";
10
+ debug_1.default.enable("*");
11
+ }
12
+ const log = (ns) => (0, debug_1.default)(`pushwork:${ns}`);
13
+ exports.log = log;
14
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;IACxB,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAEM,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAA,eAAK,EAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAA9C,QAAA,GAAG,OAA2C"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Browser filesystem implementation using File System Access API
3
+ */
4
+ import { FileSystemInterface } from "./filesystem";
5
+ export declare class BrowserFilesystem implements FileSystemInterface {
6
+ private adapter;
7
+ private rootHandle;
8
+ constructor();
9
+ setRootDirectory(handle: any): Promise<void>;
10
+ private ensureRootHandle;
11
+ readFileContent(path: string): Promise<string | Uint8Array>;
12
+ writeFileContent(path: string, content: string | Uint8Array): Promise<void>;
13
+ removePath(path: string): Promise<void>;
14
+ movePath(fromPath: string, toPath: string): Promise<void>;
15
+ ensureDirectoryExists(path: string): Promise<void>;
16
+ listDirectory(path: string): Promise<Array<{
17
+ name: string;
18
+ type: "file" | "directory";
19
+ }>>;
20
+ getFileStats(path: string): Promise<{
21
+ size: number;
22
+ mtime: Date;
23
+ }>;
24
+ exists(path: string): Promise<boolean>;
25
+ }
26
+ //# sourceMappingURL=browser-filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-filesystem.d.ts","sourceRoot":"","sources":["../../src/platform/browser-filesystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,qBAAa,iBAAkB,YAAW,mBAAmB;IAC3D,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAAa;;IAMzB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,OAAO,CAAC,gBAAgB;IAQlB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAM3D,gBAAgB,CACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC;IAQV,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlD,aAAa,CACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAC,CAAC;IASzD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IAUlE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAc7C"}