pushwork 2.0.0-a.sub.1 → 2.0.0-preview.2
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/dist/branches.d.ts +20 -0
- package/dist/branches.d.ts.map +1 -0
- package/dist/branches.js +111 -0
- package/dist/branches.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +245 -270
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +84 -0
- package/dist/config.js.map +1 -0
- package/dist/fs-tree.d.ts +6 -0
- package/dist/fs-tree.d.ts.map +1 -0
- package/dist/fs-tree.js +99 -0
- package/dist/fs-tree.js.map +1 -0
- package/dist/ignore.d.ts +6 -0
- package/dist/ignore.d.ts.map +1 -0
- package/dist/ignore.js +74 -0
- package/dist/ignore.js.map +1 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +3 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +14 -0
- package/dist/log.js.map +1 -0
- package/dist/pushwork.d.ts +129 -0
- package/dist/pushwork.d.ts.map +1 -0
- package/dist/pushwork.js +1062 -0
- package/dist/pushwork.js.map +1 -0
- package/dist/repo.d.ts +14 -0
- package/dist/repo.d.ts.map +1 -0
- package/dist/repo.js +60 -0
- package/dist/repo.js.map +1 -0
- package/dist/shapes/custom.d.ts +3 -0
- package/dist/shapes/custom.d.ts.map +1 -0
- package/dist/shapes/custom.js +57 -0
- package/dist/shapes/custom.js.map +1 -0
- package/dist/shapes/file.d.ts +20 -0
- package/dist/shapes/file.d.ts.map +1 -0
- package/dist/shapes/file.js +140 -0
- package/dist/shapes/file.js.map +1 -0
- package/dist/shapes/index.d.ts +10 -0
- package/dist/shapes/index.d.ts.map +1 -0
- package/dist/shapes/index.js +35 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/patchwork-folder.d.ts +3 -0
- package/dist/shapes/patchwork-folder.d.ts.map +1 -0
- package/dist/shapes/patchwork-folder.js +160 -0
- package/dist/shapes/patchwork-folder.js.map +1 -0
- package/dist/shapes/types.d.ts +38 -0
- package/dist/shapes/types.d.ts.map +1 -0
- package/dist/shapes/types.js +52 -0
- package/dist/shapes/types.js.map +1 -0
- package/dist/shapes/vfs.d.ts +3 -0
- package/dist/shapes/vfs.d.ts.map +1 -0
- package/dist/shapes/vfs.js +92 -0
- package/dist/shapes/vfs.js.map +1 -0
- package/dist/stash.d.ts +23 -0
- package/dist/stash.d.ts.map +1 -0
- package/dist/stash.js +118 -0
- package/dist/stash.js.map +1 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +93 -0
- package/dist/version.js.map +1 -0
- package/package.json +19 -48
- package/patches/@automerge__automerge-repo@2.6.0-subduction.15.patch +26 -0
- package/.prettierrc +0 -9
- package/ARCHITECTURE-ACCORDING-TO-CLAUDE.md +0 -248
- package/CLAUDE.md +0 -141
- package/README.md +0 -221
- package/babel.config.js +0 -5
- package/dist/cli/commands.d.ts +0 -71
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -794
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -19
- package/dist/cli/index.js.map +0 -1
- package/dist/commands.d.ts +0 -61
- package/dist/commands.d.ts.map +0 -1
- package/dist/commands.js +0 -861
- package/dist/commands.js.map +0 -1
- package/dist/config/index.d.ts +0 -71
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -314
- package/dist/config/index.js.map +0 -1
- package/dist/core/change-detection.d.ts +0 -80
- package/dist/core/change-detection.d.ts.map +0 -1
- package/dist/core/change-detection.js +0 -523
- package/dist/core/change-detection.js.map +0 -1
- package/dist/core/config.d.ts +0 -81
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -258
- package/dist/core/config.js.map +0 -1
- package/dist/core/index.d.ts +0 -6
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -6
- package/dist/core/index.js.map +0 -1
- package/dist/core/move-detection.d.ts +0 -34
- package/dist/core/move-detection.d.ts.map +0 -1
- package/dist/core/move-detection.js +0 -121
- package/dist/core/move-detection.js.map +0 -1
- package/dist/core/snapshot.d.ts +0 -105
- package/dist/core/snapshot.d.ts.map +0 -1
- package/dist/core/snapshot.js +0 -217
- package/dist/core/snapshot.js.map +0 -1
- package/dist/core/sync-engine.d.ts +0 -157
- package/dist/core/sync-engine.d.ts.map +0 -1
- package/dist/core/sync-engine.js +0 -1379
- package/dist/core/sync-engine.js.map +0 -1
- package/dist/types/config.d.ts +0 -99
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -5
- package/dist/types/config.js.map +0 -1
- package/dist/types/documents.d.ts +0 -88
- package/dist/types/documents.d.ts.map +0 -1
- package/dist/types/documents.js +0 -20
- package/dist/types/documents.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -4
- package/dist/types/index.js.map +0 -1
- package/dist/types/snapshot.d.ts +0 -64
- package/dist/types/snapshot.d.ts.map +0 -1
- package/dist/types/snapshot.js +0 -2
- package/dist/types/snapshot.js.map +0 -1
- package/dist/utils/content-similarity.d.ts +0 -53
- package/dist/utils/content-similarity.d.ts.map +0 -1
- package/dist/utils/content-similarity.js +0 -155
- package/dist/utils/content-similarity.js.map +0 -1
- package/dist/utils/content.d.ts +0 -10
- package/dist/utils/content.d.ts.map +0 -1
- package/dist/utils/content.js +0 -31
- package/dist/utils/content.js.map +0 -1
- package/dist/utils/directory.d.ts +0 -24
- package/dist/utils/directory.d.ts.map +0 -1
- package/dist/utils/directory.js +0 -52
- package/dist/utils/directory.js.map +0 -1
- package/dist/utils/fs.d.ts +0 -74
- package/dist/utils/fs.d.ts.map +0 -1
- package/dist/utils/fs.js +0 -248
- package/dist/utils/fs.js.map +0 -1
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -5
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/mime-types.d.ts +0 -13
- package/dist/utils/mime-types.d.ts.map +0 -1
- package/dist/utils/mime-types.js +0 -209
- package/dist/utils/mime-types.js.map +0 -1
- package/dist/utils/network-sync.d.ts +0 -36
- package/dist/utils/network-sync.d.ts.map +0 -1
- package/dist/utils/network-sync.js +0 -250
- package/dist/utils/network-sync.js.map +0 -1
- package/dist/utils/node-polyfills.d.ts +0 -9
- package/dist/utils/node-polyfills.d.ts.map +0 -1
- package/dist/utils/node-polyfills.js +0 -9
- package/dist/utils/node-polyfills.js.map +0 -1
- package/dist/utils/output.d.ts +0 -129
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/output.js +0 -368
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/repo-factory.d.ts +0 -13
- package/dist/utils/repo-factory.d.ts.map +0 -1
- package/dist/utils/repo-factory.js +0 -46
- package/dist/utils/repo-factory.js.map +0 -1
- package/dist/utils/string-similarity.d.ts +0 -14
- package/dist/utils/string-similarity.d.ts.map +0 -1
- package/dist/utils/string-similarity.js +0 -39
- package/dist/utils/string-similarity.js.map +0 -1
- package/dist/utils/text-diff.d.ts +0 -37
- package/dist/utils/text-diff.d.ts.map +0 -1
- package/dist/utils/text-diff.js +0 -93
- package/dist/utils/text-diff.js.map +0 -1
- package/dist/utils/trace.d.ts +0 -19
- package/dist/utils/trace.d.ts.map +0 -1
- package/dist/utils/trace.js +0 -63
- package/dist/utils/trace.js.map +0 -1
- package/src/cli.ts +0 -442
- package/src/commands.ts +0 -1134
- package/src/core/change-detection.ts +0 -712
- package/src/core/config.ts +0 -313
- package/src/core/index.ts +0 -5
- package/src/core/move-detection.ts +0 -169
- package/src/core/snapshot.ts +0 -275
- package/src/core/sync-engine.ts +0 -1795
- package/src/index.ts +0 -4
- package/src/types/config.ts +0 -111
- package/src/types/documents.ts +0 -91
- package/src/types/index.ts +0 -3
- package/src/types/snapshot.ts +0 -67
- package/src/utils/content.ts +0 -34
- package/src/utils/directory.ts +0 -73
- package/src/utils/fs.ts +0 -297
- package/src/utils/index.ts +0 -4
- package/src/utils/mime-types.ts +0 -244
- package/src/utils/network-sync.ts +0 -319
- package/src/utils/node-polyfills.ts +0 -8
- package/src/utils/output.ts +0 -450
- package/src/utils/repo-factory.ts +0 -73
- package/src/utils/string-similarity.ts +0 -54
- package/src/utils/text-diff.ts +0 -101
- package/src/utils/trace.ts +0 -70
- package/test/integration/README.md +0 -328
- package/test/integration/clone-test.sh +0 -310
- package/test/integration/conflict-resolution-test.sh +0 -309
- package/test/integration/debug-both-nested.sh +0 -74
- package/test/integration/debug-concurrent-nested.sh +0 -87
- package/test/integration/debug-nested.sh +0 -73
- package/test/integration/deletion-behavior-test.sh +0 -487
- package/test/integration/deletion-sync-test-simple.sh +0 -193
- package/test/integration/deletion-sync-test.sh +0 -297
- package/test/integration/exclude-patterns.test.ts +0 -144
- package/test/integration/full-integration-test.sh +0 -363
- package/test/integration/fuzzer.test.ts +0 -818
- package/test/integration/in-memory-sync.test.ts +0 -830
- package/test/integration/init-sync.test.ts +0 -89
- package/test/integration/manual-sync-test.sh +0 -84
- package/test/integration/sync-deletion.test.ts +0 -280
- package/test/integration/sync-flow.test.ts +0 -291
- package/test/jest.setup.ts +0 -34
- package/test/run-tests.sh +0 -225
- package/test/unit/deletion-behavior.test.ts +0 -249
- package/test/unit/enhanced-mime-detection.test.ts +0 -244
- package/test/unit/snapshot.test.ts +0 -404
- package/test/unit/sync-convergence.test.ts +0 -298
- package/test/unit/sync-timing.test.ts +0 -134
- package/test/unit/utils.test.ts +0 -366
- package/tsconfig.json +0 -23
|
@@ -0,0 +1,160 @@
|
|
|
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.patchworkFolderShape = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const automerge_repo_1 = require("@automerge/automerge-repo");
|
|
39
|
+
const log_js_1 = require("../log.js");
|
|
40
|
+
const types_js_1 = require("./types.js");
|
|
41
|
+
const dlog = (0, log_js_1.log)("shapes:folder");
|
|
42
|
+
const META = "@patchwork";
|
|
43
|
+
const isFolderDoc = (doc) => {
|
|
44
|
+
if (!doc || typeof doc !== "object")
|
|
45
|
+
return false;
|
|
46
|
+
const meta = doc[META];
|
|
47
|
+
return (!!meta &&
|
|
48
|
+
typeof meta === "object" &&
|
|
49
|
+
meta.type === "folder");
|
|
50
|
+
};
|
|
51
|
+
const linkFileType = (filename) => {
|
|
52
|
+
const ext = path.posix.extname(filename).replace(/^\./, "");
|
|
53
|
+
return ext || "file";
|
|
54
|
+
};
|
|
55
|
+
exports.patchworkFolderShape = {
|
|
56
|
+
async encode({ repo, tree, previousRoot }) {
|
|
57
|
+
if (tree.kind !== "dir")
|
|
58
|
+
throw new Error("folder: root must be a dir");
|
|
59
|
+
if (previousRoot) {
|
|
60
|
+
dlog("encode reusing root=%s", previousRoot.url);
|
|
61
|
+
const handle = previousRoot;
|
|
62
|
+
await syncFolder(repo, handle, tree);
|
|
63
|
+
return handle.url;
|
|
64
|
+
}
|
|
65
|
+
dlog("encode creating new root");
|
|
66
|
+
const handle = await createFolder(repo, tree, "pushwork");
|
|
67
|
+
dlog("encode new root=%s", handle.url);
|
|
68
|
+
return handle.url;
|
|
69
|
+
},
|
|
70
|
+
async decode({ repo, root }) {
|
|
71
|
+
const doc = root.doc();
|
|
72
|
+
if (!isFolderDoc(doc)) {
|
|
73
|
+
throw new Error(`expected folder doc at ${root.url}`);
|
|
74
|
+
}
|
|
75
|
+
dlog("decode root=%s", root.url);
|
|
76
|
+
return readFolder(repo, root);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
async function createFolder(repo, tree, title) {
|
|
80
|
+
if (tree.kind !== "dir")
|
|
81
|
+
throw new Error("createFolder: not a dir");
|
|
82
|
+
const links = [];
|
|
83
|
+
for (const [name, child] of tree.entries) {
|
|
84
|
+
if (child.kind === "file") {
|
|
85
|
+
links.push({ name, type: linkFileType(name), url: child.url });
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const sub = await createFolder(repo, child, name);
|
|
89
|
+
links.push({ name, type: "folder", url: sub.url });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const handle = repo.create({
|
|
93
|
+
"@patchwork": { type: "folder" },
|
|
94
|
+
title,
|
|
95
|
+
docs: links,
|
|
96
|
+
});
|
|
97
|
+
dlog("createFolder title=%s docs=%d url=%s", title, links.length, handle.url);
|
|
98
|
+
return handle;
|
|
99
|
+
}
|
|
100
|
+
async function syncFolder(repo, handle, tree) {
|
|
101
|
+
if (tree.kind !== "dir")
|
|
102
|
+
throw new Error("syncFolder: not a dir");
|
|
103
|
+
const desired = new Map(tree.entries);
|
|
104
|
+
const existingLinks = new Map();
|
|
105
|
+
for (const link of handle.doc().docs)
|
|
106
|
+
existingLinks.set(link.name, link);
|
|
107
|
+
const nextLinks = [];
|
|
108
|
+
for (const [name, child] of desired) {
|
|
109
|
+
const existing = existingLinks.get(name);
|
|
110
|
+
if (child.kind === "file") {
|
|
111
|
+
nextLinks.push({ name, type: linkFileType(name), url: child.url });
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// child is a dir
|
|
115
|
+
if (existing && existing.type === "folder") {
|
|
116
|
+
const subHandle = await repo.find(existing.url);
|
|
117
|
+
if (isFolderDoc(subHandle.doc())) {
|
|
118
|
+
await syncFolder(repo, subHandle, child);
|
|
119
|
+
nextLinks.push({ name, type: "folder", url: subHandle.url });
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const sub = await createFolder(repo, child, name);
|
|
124
|
+
nextLinks.push({ name, type: "folder", url: sub.url });
|
|
125
|
+
}
|
|
126
|
+
handle.change((d) => {
|
|
127
|
+
if (!d["@patchwork"])
|
|
128
|
+
d["@patchwork"] = { type: "folder" };
|
|
129
|
+
if (typeof d.title !== "string")
|
|
130
|
+
d.title = "pushwork";
|
|
131
|
+
d.docs = nextLinks;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
async function readFolder(repo, handle) {
|
|
135
|
+
const doc = handle.doc();
|
|
136
|
+
const tree = (0, types_js_1.newDir)();
|
|
137
|
+
if (!doc?.docs)
|
|
138
|
+
return tree;
|
|
139
|
+
for (const link of doc.docs) {
|
|
140
|
+
if (!link?.name)
|
|
141
|
+
continue;
|
|
142
|
+
if (!(0, automerge_repo_1.isValidAutomergeUrl)(link.url))
|
|
143
|
+
continue;
|
|
144
|
+
if (link.type === "folder") {
|
|
145
|
+
const sub = await repo.find(link.url);
|
|
146
|
+
if (isFolderDoc(sub.doc())) {
|
|
147
|
+
const subTree = await readFolder(repo, sub);
|
|
148
|
+
if (tree.kind === "dir")
|
|
149
|
+
tree.entries.set(link.name, subTree);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
if (tree.kind === "dir") {
|
|
154
|
+
tree.entries.set(link.name, { kind: "file", url: link.url });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return tree;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=patchwork-folder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchwork-folder.js","sourceRoot":"","sources":["../../src/shapes/patchwork-folder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AutomergeUrl, DocHandle, ImmutableString, Repo } from "@automerge/automerge-repo";
|
|
2
|
+
export type VfsNode = {
|
|
3
|
+
kind: "dir";
|
|
4
|
+
entries: Map<string, VfsNode>;
|
|
5
|
+
} | {
|
|
6
|
+
kind: "file";
|
|
7
|
+
url: AutomergeUrl;
|
|
8
|
+
};
|
|
9
|
+
export type UnixFileEntry = {
|
|
10
|
+
"@patchwork": {
|
|
11
|
+
type: "file";
|
|
12
|
+
};
|
|
13
|
+
content: string | Uint8Array | ImmutableString;
|
|
14
|
+
extension: string;
|
|
15
|
+
mimeType: string;
|
|
16
|
+
name: string;
|
|
17
|
+
};
|
|
18
|
+
export interface Shape {
|
|
19
|
+
encode(args: {
|
|
20
|
+
repo: Repo;
|
|
21
|
+
tree: VfsNode;
|
|
22
|
+
previousRoot?: DocHandle<unknown>;
|
|
23
|
+
title?: string;
|
|
24
|
+
}): Promise<AutomergeUrl>;
|
|
25
|
+
decode(args: {
|
|
26
|
+
repo: Repo;
|
|
27
|
+
root: DocHandle<unknown>;
|
|
28
|
+
}): Promise<VfsNode>;
|
|
29
|
+
}
|
|
30
|
+
export declare const newDir: () => VfsNode;
|
|
31
|
+
export declare function walkLeaves(node: VfsNode, prefix?: string[]): Generator<{
|
|
32
|
+
path: string[];
|
|
33
|
+
url: AutomergeUrl;
|
|
34
|
+
}>;
|
|
35
|
+
export declare function flattenLeaves(node: VfsNode): Map<string, AutomergeUrl>;
|
|
36
|
+
export declare function ensureDirAt(root: VfsNode, segments: string[]): VfsNode;
|
|
37
|
+
export declare function setFileAt(root: VfsNode, path: string[], url: AutomergeUrl): void;
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shapes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,IAAI,EACJ,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,OAAO,GAChB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,WAAW,KAAK;IACrB,MAAM,CAAC,IAAI,EAAE;QACZ,IAAI,EAAE,IAAI,CAAC;QACX,IAAI,EAAE,OAAO,CAAC;QACd,YAAY,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE;QACZ,IAAI,EAAE,IAAI,CAAC;QACX,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;KACzB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,QAAO,OAAgD,CAAC;AAE3E,wBAAiB,UAAU,CAC1B,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,MAAM,EAAO,GACnB,SAAS,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,CAAC,CAQlD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAItE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAetE;AAED,wBAAgB,SAAS,CACxB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,YAAY,GACf,IAAI,CAKN"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.newDir = void 0;
|
|
4
|
+
exports.walkLeaves = walkLeaves;
|
|
5
|
+
exports.flattenLeaves = flattenLeaves;
|
|
6
|
+
exports.ensureDirAt = ensureDirAt;
|
|
7
|
+
exports.setFileAt = setFileAt;
|
|
8
|
+
const newDir = () => ({ kind: "dir", entries: new Map() });
|
|
9
|
+
exports.newDir = newDir;
|
|
10
|
+
function* walkLeaves(node, prefix = []) {
|
|
11
|
+
if (node.kind === "file") {
|
|
12
|
+
yield { path: prefix, url: node.url };
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
for (const [name, child] of node.entries) {
|
|
16
|
+
yield* walkLeaves(child, [...prefix, name]);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function flattenLeaves(node) {
|
|
20
|
+
const out = new Map();
|
|
21
|
+
for (const { path, url } of walkLeaves(node))
|
|
22
|
+
out.set(path.join("/"), url);
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
function ensureDirAt(root, segments) {
|
|
26
|
+
if (root.kind !== "dir")
|
|
27
|
+
throw new Error("ensureDirAt: root must be a dir");
|
|
28
|
+
let current = root;
|
|
29
|
+
for (const seg of segments) {
|
|
30
|
+
if (current.kind !== "dir")
|
|
31
|
+
throw new Error(`not a dir: ${seg}`);
|
|
32
|
+
const existing = current.entries.get(seg);
|
|
33
|
+
if (existing && existing.kind === "dir") {
|
|
34
|
+
current = existing;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const fresh = (0, exports.newDir)();
|
|
38
|
+
current.entries.set(seg, fresh);
|
|
39
|
+
current = fresh;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return current;
|
|
43
|
+
}
|
|
44
|
+
function setFileAt(root, path, url) {
|
|
45
|
+
if (path.length === 0)
|
|
46
|
+
throw new Error("setFileAt: empty path");
|
|
47
|
+
const parent = ensureDirAt(root, path.slice(0, -1));
|
|
48
|
+
if (parent.kind !== "dir")
|
|
49
|
+
throw new Error("setFileAt: parent not a dir");
|
|
50
|
+
parent.entries.set(path[path.length - 1], { kind: "file", url });
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shapes/types.ts"],"names":[],"mappings":";;;AAkCA,gCAWC;AAED,sCAIC;AAED,kCAeC;AAED,8BASC;AA/CM,MAAM,MAAM,GAAG,GAAY,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AAA9D,QAAA,MAAM,UAAwD;AAE3E,QAAe,CAAC,CAAC,UAAU,CAC1B,IAAa,EACb,SAAmB,EAAE;IAErB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACtC,OAAO;IACR,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;AACF,CAAC;AAED,SAAgB,aAAa,CAAC,IAAa;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5C,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3E,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAgB,WAAW,CAAC,IAAa,EAAE,QAAkB;IAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC5E,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzC,OAAO,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,GAAG,IAAA,cAAM,GAAE,CAAC;YACvB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,GAAG,KAAK,CAAC;QACjB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAgB,SAAS,CACxB,IAAa,EACb,IAAc,EACd,GAAiB;IAEjB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC1E,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vfs.d.ts","sourceRoot":"","sources":["../../src/shapes/vfs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAyB,KAAK,KAAK,EAAgB,MAAM,YAAY,CAAC;AAwB7E,eAAO,MAAM,QAAQ,EAAE,KA+CtB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.vfsShape = void 0;
|
|
4
|
+
const automerge_repo_1 = require("@automerge/automerge-repo");
|
|
5
|
+
const log_js_1 = require("../log.js");
|
|
6
|
+
const types_js_1 = require("./types.js");
|
|
7
|
+
const dlog = (0, log_js_1.log)("shapes:vfs");
|
|
8
|
+
const META = "@patchwork";
|
|
9
|
+
const isDirectoryDoc = (doc) => {
|
|
10
|
+
if (!doc || typeof doc !== "object")
|
|
11
|
+
return false;
|
|
12
|
+
const meta = doc[META];
|
|
13
|
+
return (!!meta &&
|
|
14
|
+
typeof meta === "object" &&
|
|
15
|
+
meta.type === "directory");
|
|
16
|
+
};
|
|
17
|
+
const RESERVED = new Set([META, "lastSyncAt"]);
|
|
18
|
+
exports.vfsShape = {
|
|
19
|
+
async encode({ repo, tree, previousRoot, title }) {
|
|
20
|
+
if (tree.kind !== "dir")
|
|
21
|
+
throw new Error("vfs: root must be a dir");
|
|
22
|
+
const flat = (0, types_js_1.flattenLeaves)(tree);
|
|
23
|
+
dlog("encode keys=%d previousRoot=%s", flat.size, previousRoot?.url ?? "<new>");
|
|
24
|
+
const handle = previousRoot ??
|
|
25
|
+
repo.create({
|
|
26
|
+
"@patchwork": { type: "directory", ...(title ? { title } : {}) },
|
|
27
|
+
});
|
|
28
|
+
handle.change((d) => {
|
|
29
|
+
if (!d["@patchwork"])
|
|
30
|
+
d["@patchwork"] = { type: "directory" };
|
|
31
|
+
if (title && d["@patchwork"].title !== title)
|
|
32
|
+
d["@patchwork"].title = title;
|
|
33
|
+
for (const k of Object.keys(d)) {
|
|
34
|
+
if (RESERVED.has(k))
|
|
35
|
+
continue;
|
|
36
|
+
if (!flat.has(k))
|
|
37
|
+
delete d[k];
|
|
38
|
+
}
|
|
39
|
+
for (const [k, url] of flat) {
|
|
40
|
+
d[k] = url;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
dlog("encode complete url=%s", handle.url);
|
|
44
|
+
return handle.url;
|
|
45
|
+
},
|
|
46
|
+
async decode({ root }) {
|
|
47
|
+
const doc = root.doc();
|
|
48
|
+
if (!isDirectoryDoc(doc)) {
|
|
49
|
+
throw new Error(`expected directory doc at ${root.url}`);
|
|
50
|
+
}
|
|
51
|
+
const tree = (0, types_js_1.newDir)();
|
|
52
|
+
let count = 0;
|
|
53
|
+
for (const [key, value] of Object.entries(doc)) {
|
|
54
|
+
if (RESERVED.has(key))
|
|
55
|
+
continue;
|
|
56
|
+
if (typeof value !== "string")
|
|
57
|
+
continue;
|
|
58
|
+
if (!(0, automerge_repo_1.isValidAutomergeUrl)(value))
|
|
59
|
+
continue;
|
|
60
|
+
const segments = key.split("/").filter(Boolean);
|
|
61
|
+
if (segments.length === 0)
|
|
62
|
+
continue;
|
|
63
|
+
setLeaf(tree, segments, value);
|
|
64
|
+
count++;
|
|
65
|
+
}
|
|
66
|
+
dlog("decode url=%s leaves=%d", root.url, count);
|
|
67
|
+
return tree;
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
function setLeaf(root, segments, url) {
|
|
71
|
+
if (root.kind !== "dir")
|
|
72
|
+
throw new Error("setLeaf: root must be a dir");
|
|
73
|
+
let cur = root;
|
|
74
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
75
|
+
if (cur.kind !== "dir")
|
|
76
|
+
return;
|
|
77
|
+
const name = segments[i];
|
|
78
|
+
const existing = cur.entries.get(name);
|
|
79
|
+
if (existing && existing.kind === "dir") {
|
|
80
|
+
cur = existing;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const fresh = (0, types_js_1.newDir)();
|
|
84
|
+
cur.entries.set(name, fresh);
|
|
85
|
+
cur = fresh;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (cur.kind !== "dir")
|
|
89
|
+
return;
|
|
90
|
+
cur.entries.set(segments[segments.length - 1], { kind: "file", url });
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=vfs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../src/shapes/vfs.ts"],"names":[],"mappings":"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"}
|
package/dist/stash.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type StashKind = "modified" | "added" | "deleted";
|
|
2
|
+
export interface StashEntry {
|
|
3
|
+
path: string;
|
|
4
|
+
kind: StashKind;
|
|
5
|
+
contentBase64?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Stash {
|
|
8
|
+
id: number;
|
|
9
|
+
name?: string;
|
|
10
|
+
branch: string | null;
|
|
11
|
+
createdAt: number;
|
|
12
|
+
entries: StashEntry[];
|
|
13
|
+
}
|
|
14
|
+
export declare function listStashes(root: string): Promise<Stash[]>;
|
|
15
|
+
export declare function appendStash(root: string, args: {
|
|
16
|
+
name?: string;
|
|
17
|
+
branch: string | null;
|
|
18
|
+
entries: StashEntry[];
|
|
19
|
+
}): Promise<Stash>;
|
|
20
|
+
export declare function takeStash(root: string, selector?: string): Promise<Stash | null>;
|
|
21
|
+
export declare function encodeBytes(bytes: Uint8Array): string;
|
|
22
|
+
export declare function decodeBytes(b64: string): Uint8Array;
|
|
23
|
+
//# sourceMappingURL=stash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stash.d.ts","sourceRoot":"","sources":["../src/stash.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;CACtB;AA+BD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAIhE;AAED,wBAAsB,WAAW,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,GACnE,OAAO,CAAC,KAAK,CAAC,CAchB;AAED,wBAAsB,SAAS,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAkBvB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAEnD"}
|
package/dist/stash.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
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.listStashes = listStashes;
|
|
37
|
+
exports.appendStash = appendStash;
|
|
38
|
+
exports.takeStash = takeStash;
|
|
39
|
+
exports.encodeBytes = encodeBytes;
|
|
40
|
+
exports.decodeBytes = decodeBytes;
|
|
41
|
+
const fs = __importStar(require("fs/promises"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const log_js_1 = require("./log.js");
|
|
44
|
+
const dlog = (0, log_js_1.log)("stash");
|
|
45
|
+
const SNARF_DIR = path.join(".pushwork", "snarf");
|
|
46
|
+
const SNARF_INDEX = path.join(SNARF_DIR, "index.json");
|
|
47
|
+
async function readStashes(root) {
|
|
48
|
+
try {
|
|
49
|
+
const text = await fs.readFile(path.join(root, SNARF_INDEX), "utf8");
|
|
50
|
+
const parsed = JSON.parse(text);
|
|
51
|
+
if (!Array.isArray(parsed))
|
|
52
|
+
return [];
|
|
53
|
+
return parsed;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (err.code === "ENOENT")
|
|
57
|
+
return [];
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function writeStashes(root, stashes) {
|
|
62
|
+
await fs.mkdir(path.join(root, SNARF_DIR), { recursive: true });
|
|
63
|
+
await fs.writeFile(path.join(root, SNARF_INDEX), JSON.stringify(stashes, null, 2) + "\n");
|
|
64
|
+
}
|
|
65
|
+
function nextId(stashes) {
|
|
66
|
+
let max = 0;
|
|
67
|
+
for (const s of stashes)
|
|
68
|
+
if (s.id > max)
|
|
69
|
+
max = s.id;
|
|
70
|
+
return max + 1;
|
|
71
|
+
}
|
|
72
|
+
async function listStashes(root) {
|
|
73
|
+
const stashes = await readStashes(root);
|
|
74
|
+
stashes.sort((a, b) => b.id - a.id); // newest first
|
|
75
|
+
return stashes;
|
|
76
|
+
}
|
|
77
|
+
async function appendStash(root, args) {
|
|
78
|
+
const stashes = await readStashes(root);
|
|
79
|
+
const id = nextId(stashes);
|
|
80
|
+
const stash = {
|
|
81
|
+
id,
|
|
82
|
+
name: args.name,
|
|
83
|
+
branch: args.branch,
|
|
84
|
+
createdAt: Date.now(),
|
|
85
|
+
entries: args.entries,
|
|
86
|
+
};
|
|
87
|
+
stashes.push(stash);
|
|
88
|
+
await writeStashes(root, stashes);
|
|
89
|
+
dlog("appendStash id=%d name=%s entries=%d", id, args.name ?? "(unnamed)", args.entries.length);
|
|
90
|
+
return stash;
|
|
91
|
+
}
|
|
92
|
+
async function takeStash(root, selector) {
|
|
93
|
+
const stashes = await readStashes(root);
|
|
94
|
+
if (stashes.length === 0)
|
|
95
|
+
return null;
|
|
96
|
+
let idx;
|
|
97
|
+
if (!selector) {
|
|
98
|
+
// most recent
|
|
99
|
+
idx = stashes.reduce((best, s, i) => (s.id > stashes[best].id ? i : best), 0);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const asInt = Number(selector);
|
|
103
|
+
idx = stashes.findIndex((s) => (!Number.isNaN(asInt) && s.id === asInt) || s.name === selector);
|
|
104
|
+
if (idx < 0)
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const [taken] = stashes.splice(idx, 1);
|
|
108
|
+
await writeStashes(root, stashes);
|
|
109
|
+
dlog("takeStash id=%d name=%s", taken.id, taken.name ?? "(unnamed)");
|
|
110
|
+
return taken;
|
|
111
|
+
}
|
|
112
|
+
function encodeBytes(bytes) {
|
|
113
|
+
return Buffer.from(bytes).toString("base64");
|
|
114
|
+
}
|
|
115
|
+
function decodeBytes(b64) {
|
|
116
|
+
return new Uint8Array(Buffer.from(b64, "base64"));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=stash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stash.js","sourceRoot":"","sources":["../src/stash.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,kCAIC;AAED,kCAiBC;AAED,8BAqBC;AAED,kCAEC;AAED,kCAEC;AAzGD,gDAAkC;AAClC,2CAA6B;AAC7B,qCAA+B;AAE/B,MAAM,IAAI,GAAG,IAAA,YAAG,EAAC,OAAO,CAAC,CAAC;AAkB1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEvD,KAAK,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAChE,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,OAAgB;IACzD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACvC,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,OAAgB;IAC/B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG;YAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,GAAG,GAAG,CAAC,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;IACpD,OAAO,OAAO,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,WAAW,CAChC,IAAY,EACZ,IAAqE;IAErE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAU;QACpB,EAAE;QACF,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;KACrB,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,sCAAsC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChG,OAAO,KAAK,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,SAAS,CAC9B,IAAY,EACZ,QAAiB;IAEjB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,cAAc;QACd,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACP,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAC/D,CAAC;QACF,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1B,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAgB,WAAW,CAAC,KAAiB;IAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,WAAW,CAAC,GAAW;IACtC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const versions: {
|
|
2
|
+
readonly pushwork: string;
|
|
3
|
+
readonly automerge: string;
|
|
4
|
+
readonly "automerge-repo": string;
|
|
5
|
+
readonly "automerge-subduction": string;
|
|
6
|
+
readonly "automerge-repo-network-websocket": string;
|
|
7
|
+
readonly "automerge-repo-storage-nodefs": string;
|
|
8
|
+
readonly node: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function formatVersions(): string;
|
|
11
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,QAAQ;;;;;;;;CAYX,CAAC;AAEX,wBAAgB,cAAc,IAAI,MAAM,CAOvC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
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.versions = void 0;
|
|
37
|
+
exports.formatVersions = formatVersions;
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
40
|
+
const node_module_1 = require("node:module");
|
|
41
|
+
const requireHere = (0, node_module_1.createRequire)(__filename);
|
|
42
|
+
function readVersionFromExports(spec) {
|
|
43
|
+
try {
|
|
44
|
+
const pkg = requireHere(`${spec}/package.json`);
|
|
45
|
+
return pkg.version;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function readVersionFromNodeModules(spec) {
|
|
52
|
+
let dir = __dirname;
|
|
53
|
+
for (let i = 0; i < 10; i++) {
|
|
54
|
+
const candidate = path.join(dir, "node_modules", spec, "package.json");
|
|
55
|
+
try {
|
|
56
|
+
const pkg = JSON.parse(fs.readFileSync(candidate, "utf8"));
|
|
57
|
+
if (pkg.version)
|
|
58
|
+
return pkg.version;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// keep walking
|
|
62
|
+
}
|
|
63
|
+
const parent = path.dirname(dir);
|
|
64
|
+
if (parent === dir)
|
|
65
|
+
break;
|
|
66
|
+
dir = parent;
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
function readVersion(spec) {
|
|
71
|
+
return (readVersionFromExports(spec) ??
|
|
72
|
+
readVersionFromNodeModules(spec) ??
|
|
73
|
+
"(missing)");
|
|
74
|
+
}
|
|
75
|
+
const ownPkg = requireHere("../package.json");
|
|
76
|
+
exports.versions = {
|
|
77
|
+
pushwork: ownPkg.version ?? "(unknown)",
|
|
78
|
+
automerge: readVersion("@automerge/automerge"),
|
|
79
|
+
"automerge-repo": readVersion("@automerge/automerge-repo"),
|
|
80
|
+
"automerge-subduction": readVersion("@automerge/automerge-subduction"),
|
|
81
|
+
"automerge-repo-network-websocket": readVersion("@automerge/automerge-repo-network-websocket"),
|
|
82
|
+
"automerge-repo-storage-nodefs": readVersion("@automerge/automerge-repo-storage-nodefs"),
|
|
83
|
+
node: process.version.replace(/^v/, ""),
|
|
84
|
+
};
|
|
85
|
+
function formatVersions() {
|
|
86
|
+
const max = Math.max(...Object.keys(exports.versions).map((k) => k.length));
|
|
87
|
+
const lines = [];
|
|
88
|
+
for (const [k, v] of Object.entries(exports.versions)) {
|
|
89
|
+
lines.push(`${k.padEnd(max)} ${v}`);
|
|
90
|
+
}
|
|
91
|
+
return lines.join("\n");
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,wCAOC;AAjED,4CAA8B;AAC9B,gDAAkC;AAClC,6CAA4C;AAE5C,MAAM,WAAW,GAAG,IAAA,2BAAa,EAAC,UAAU,CAAC,CAAC;AAE9C,SAAS,sBAAsB,CAAC,IAAY;IAC3C,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,eAAe,CAAyB,CAAC;QACxE,OAAO,GAAG,CAAC,OAAO,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC/C,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAExD,CAAC;YACF,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACR,eAAe;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAChC,OAAO,CACN,sBAAsB,CAAC,IAAI,CAAC;QAC5B,0BAA0B,CAAC,IAAI,CAAC;QAChC,WAAW,CACX,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAyB,CAAC;AAEzD,QAAA,QAAQ,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC,OAAO,IAAI,WAAW;IACvC,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC;IAC9C,gBAAgB,EAAE,WAAW,CAAC,2BAA2B,CAAC;IAC1D,sBAAsB,EAAE,WAAW,CAAC,iCAAiC,CAAC;IACtE,kCAAkC,EAAE,WAAW,CAC9C,6CAA6C,CAC7C;IACD,+BAA+B,EAAE,WAAW,CAC3C,0CAA0C,CAC1C;IACD,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;CAC9B,CAAC;AAEX,SAAgB,cAAc;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAQ,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|