pushwork 2.0.0-preview → 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 +1 -0
- package/dist/branches.d.ts.map +1 -1
- package/dist/cli.js +16 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/pushwork.d.ts +15 -1
- package/dist/pushwork.d.ts.map +1 -1
- package/dist/pushwork.js +151 -7
- package/dist/pushwork.js.map +1 -1
- package/dist/shapes/types.d.ts +1 -0
- package/dist/shapes/types.d.ts.map +1 -1
- package/dist/shapes/types.js.map +1 -1
- package/dist/shapes/vfs.d.ts.map +1 -1
- package/dist/shapes/vfs.js +6 -2
- package/dist/shapes/vfs.js.map +1 -1
- 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 +5 -1
- package/.prettierrc +0 -9
- package/flake.lock +0 -128
- package/flake.nix +0 -66
- package/pnpm-workspace.yaml +0 -5
- package/src/branches.ts +0 -93
- package/src/cli.ts +0 -292
- package/src/config.ts +0 -64
- package/src/fs-tree.ts +0 -70
- package/src/ignore.ts +0 -33
- package/src/index.ts +0 -38
- package/src/log.ts +0 -8
- package/src/pushwork.ts +0 -1055
- package/src/repo.ts +0 -76
- package/src/shapes/custom.ts +0 -29
- package/src/shapes/file.ts +0 -115
- package/src/shapes/index.ts +0 -19
- package/src/shapes/patchwork-folder.ts +0 -156
- package/src/shapes/types.ts +0 -79
- package/src/shapes/vfs.ts +0 -93
- package/src/stash.ts +0 -106
- package/test/integration/branches.test.ts +0 -389
- package/test/integration/pushwork.test.ts +0 -547
- package/test/setup.ts +0 -29
- package/test/unit/doc-shape.test.ts +0 -612
- package/tsconfig.json +0 -22
- package/vitest.config.ts +0 -14
|
@@ -1 +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;
|
|
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"}
|
package/dist/shapes/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shapes/types.ts"],"names":[],"mappings":";;;
|
|
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"}
|
package/dist/shapes/vfs.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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"}
|
package/dist/shapes/vfs.js
CHANGED
|
@@ -16,16 +16,20 @@ const isDirectoryDoc = (doc) => {
|
|
|
16
16
|
};
|
|
17
17
|
const RESERVED = new Set([META, "lastSyncAt"]);
|
|
18
18
|
exports.vfsShape = {
|
|
19
|
-
async encode({ repo, tree, previousRoot }) {
|
|
19
|
+
async encode({ repo, tree, previousRoot, title }) {
|
|
20
20
|
if (tree.kind !== "dir")
|
|
21
21
|
throw new Error("vfs: root must be a dir");
|
|
22
22
|
const flat = (0, types_js_1.flattenLeaves)(tree);
|
|
23
23
|
dlog("encode keys=%d previousRoot=%s", flat.size, previousRoot?.url ?? "<new>");
|
|
24
24
|
const handle = previousRoot ??
|
|
25
|
-
repo.create({
|
|
25
|
+
repo.create({
|
|
26
|
+
"@patchwork": { type: "directory", ...(title ? { title } : {}) },
|
|
27
|
+
});
|
|
26
28
|
handle.change((d) => {
|
|
27
29
|
if (!d["@patchwork"])
|
|
28
30
|
d["@patchwork"] = { type: "directory" };
|
|
31
|
+
if (title && d["@patchwork"].title !== title)
|
|
32
|
+
d["@patchwork"].title = title;
|
|
29
33
|
for (const k of Object.keys(d)) {
|
|
30
34
|
if (RESERVED.has(k))
|
|
31
35
|
continue;
|
package/dist/shapes/vfs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../src/shapes/vfs.ts"],"names":[],"mappings":";;;AAAA,8DAImC;AACnC,sCAAgC;AAChC,yCAA6E;AAE7E,MAAM,IAAI,GAAG,IAAA,YAAG,EAAC,YAAY,CAAC,CAAC;AAE/B,MAAM,IAAI,GAAG,YAAY,CAAC;AAQ1B,MAAM,cAAc,GAAG,CAAC,GAAY,EAAuB,EAAE;IAC5D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,IAAI,GAAI,GAA+B,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,CACN,CAAC,CAAC,IAAI;QACN,OAAO,IAAI,KAAK,QAAQ;QACvB,IAAgC,CAAC,IAAI,KAAK,WAAW,CACtD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AAElC,QAAA,QAAQ,GAAU;IAC9B,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../src/shapes/vfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pushwork",
|
|
3
|
-
"version": "2.0.0-preview",
|
|
3
|
+
"version": "2.0.0-preview.2",
|
|
4
4
|
"description": "Bidirectional directory synchronization using Automerge CRDTs",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -22,6 +22,10 @@
|
|
|
22
22
|
],
|
|
23
23
|
"author": "Peter van Hardenberg",
|
|
24
24
|
"license": "MIT",
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"patches"
|
|
28
|
+
],
|
|
25
29
|
"dependencies": {
|
|
26
30
|
"@automerge/automerge": "^3.2.6",
|
|
27
31
|
"@automerge/automerge-repo": "2.6.0-subduction.15",
|
package/.prettierrc
DELETED
package/flake.lock
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"nodes": {
|
|
3
|
-
"command-utils": {
|
|
4
|
-
"inputs": {
|
|
5
|
-
"flake-utils": "flake-utils",
|
|
6
|
-
"nixpkgs": "nixpkgs"
|
|
7
|
-
},
|
|
8
|
-
"locked": {
|
|
9
|
-
"lastModified": 1769220798,
|
|
10
|
-
"narHash": "sha256-ulD8bbh5eV4rUH61JC4gS8Ik0R2hBEEyCom3f8w2vXE=",
|
|
11
|
-
"ref": "refs/heads/main",
|
|
12
|
-
"rev": "6c72a70e0241a5af26ba664ab63f3e2d89c45cd0",
|
|
13
|
-
"revCount": 5,
|
|
14
|
-
"type": "git",
|
|
15
|
-
"url": "https://codeberg.org/expede/nix-command-utils"
|
|
16
|
-
},
|
|
17
|
-
"original": {
|
|
18
|
-
"type": "git",
|
|
19
|
-
"url": "https://codeberg.org/expede/nix-command-utils"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"flake-utils": {
|
|
23
|
-
"inputs": {
|
|
24
|
-
"systems": "systems"
|
|
25
|
-
},
|
|
26
|
-
"locked": {
|
|
27
|
-
"lastModified": 1709126324,
|
|
28
|
-
"narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=",
|
|
29
|
-
"owner": "numtide",
|
|
30
|
-
"repo": "flake-utils",
|
|
31
|
-
"rev": "d465f4819400de7c8d874d50b982301f28a84605",
|
|
32
|
-
"type": "github"
|
|
33
|
-
},
|
|
34
|
-
"original": {
|
|
35
|
-
"id": "flake-utils",
|
|
36
|
-
"type": "indirect"
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
"flake-utils_2": {
|
|
40
|
-
"inputs": {
|
|
41
|
-
"systems": "systems_2"
|
|
42
|
-
},
|
|
43
|
-
"locked": {
|
|
44
|
-
"lastModified": 1731533236,
|
|
45
|
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
|
46
|
-
"owner": "numtide",
|
|
47
|
-
"repo": "flake-utils",
|
|
48
|
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
|
49
|
-
"type": "github"
|
|
50
|
-
},
|
|
51
|
-
"original": {
|
|
52
|
-
"owner": "numtide",
|
|
53
|
-
"repo": "flake-utils",
|
|
54
|
-
"type": "github"
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
"nixpkgs": {
|
|
58
|
-
"locked": {
|
|
59
|
-
"lastModified": 1769089682,
|
|
60
|
-
"narHash": "sha256-9yA/LIuAVQq0lXelrZPjLuLVuZdm03p8tfmHhnDIkms=",
|
|
61
|
-
"owner": "NixOS",
|
|
62
|
-
"repo": "nixpkgs",
|
|
63
|
-
"rev": "078d69f03934859a181e81ba987c2bb033eebfc5",
|
|
64
|
-
"type": "github"
|
|
65
|
-
},
|
|
66
|
-
"original": {
|
|
67
|
-
"id": "nixpkgs",
|
|
68
|
-
"ref": "nixos-25.11",
|
|
69
|
-
"type": "indirect"
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
"nixpkgs_2": {
|
|
73
|
-
"locked": {
|
|
74
|
-
"lastModified": 1775002709,
|
|
75
|
-
"narHash": "sha256-d3Yx83vSrN+2z/loBh4mJpyRqr9aAJqlke4TkpFmRJA=",
|
|
76
|
-
"owner": "nixos",
|
|
77
|
-
"repo": "nixpkgs",
|
|
78
|
-
"rev": "bcd464ccd2a1a7cd09aa2f8d4ffba83b761b1d0e",
|
|
79
|
-
"type": "github"
|
|
80
|
-
},
|
|
81
|
-
"original": {
|
|
82
|
-
"owner": "nixos",
|
|
83
|
-
"ref": "nixos-25.11",
|
|
84
|
-
"repo": "nixpkgs",
|
|
85
|
-
"type": "github"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
"root": {
|
|
89
|
-
"inputs": {
|
|
90
|
-
"command-utils": "command-utils",
|
|
91
|
-
"flake-utils": "flake-utils_2",
|
|
92
|
-
"nixpkgs": "nixpkgs_2"
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
"systems": {
|
|
96
|
-
"locked": {
|
|
97
|
-
"lastModified": 1681028828,
|
|
98
|
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
99
|
-
"owner": "nix-systems",
|
|
100
|
-
"repo": "default",
|
|
101
|
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
102
|
-
"type": "github"
|
|
103
|
-
},
|
|
104
|
-
"original": {
|
|
105
|
-
"owner": "nix-systems",
|
|
106
|
-
"repo": "default",
|
|
107
|
-
"type": "github"
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
"systems_2": {
|
|
111
|
-
"locked": {
|
|
112
|
-
"lastModified": 1681028828,
|
|
113
|
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
114
|
-
"owner": "nix-systems",
|
|
115
|
-
"repo": "default",
|
|
116
|
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
117
|
-
"type": "github"
|
|
118
|
-
},
|
|
119
|
-
"original": {
|
|
120
|
-
"owner": "nix-systems",
|
|
121
|
-
"repo": "default",
|
|
122
|
-
"type": "github"
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
"root": "root",
|
|
127
|
-
"version": 7
|
|
128
|
-
}
|
package/flake.nix
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
description = "Pushwork: Bidirectional directory synchronization using Automerge CRDTs";
|
|
3
|
-
|
|
4
|
-
inputs = {
|
|
5
|
-
command-utils.url = "git+https://codeberg.org/expede/nix-command-utils";
|
|
6
|
-
flake-utils.url = "github:numtide/flake-utils";
|
|
7
|
-
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
outputs = {
|
|
11
|
-
self,
|
|
12
|
-
command-utils,
|
|
13
|
-
flake-utils,
|
|
14
|
-
nixpkgs,
|
|
15
|
-
}:
|
|
16
|
-
flake-utils.lib.eachDefaultSystem (system: let
|
|
17
|
-
pkgs = import nixpkgs {inherit system;};
|
|
18
|
-
|
|
19
|
-
nodejs = pkgs.nodejs_24;
|
|
20
|
-
pnpm-pkg = pkgs.pnpm;
|
|
21
|
-
pnpm' = "${pnpm-pkg}/bin/pnpm";
|
|
22
|
-
|
|
23
|
-
asModule = command-utils.asModule.${system};
|
|
24
|
-
cmd = command-utils.cmd.${system};
|
|
25
|
-
pnpm = command-utils.pnpm.${system};
|
|
26
|
-
|
|
27
|
-
pnpm-cfg = {pnpm = pnpm';};
|
|
28
|
-
|
|
29
|
-
menu =
|
|
30
|
-
command-utils.commands.${system}
|
|
31
|
-
[
|
|
32
|
-
(pnpm.build pnpm-cfg)
|
|
33
|
-
(pnpm.dev pnpm-cfg)
|
|
34
|
-
(pnpm.install pnpm-cfg)
|
|
35
|
-
(pnpm.lint pnpm-cfg)
|
|
36
|
-
(pnpm.test pnpm-cfg)
|
|
37
|
-
(pnpm.typecheck pnpm-cfg)
|
|
38
|
-
(asModule {
|
|
39
|
-
"clean" = cmd "Remove dist and node_modules" "rm -rf dist node_modules";
|
|
40
|
-
"start" = cmd "Run pushwork CLI" "node dist/cli.js \"$@\"";
|
|
41
|
-
"sync" = cmd "Build and run sync" "${pnpm'} build && node dist/cli.js sync \"$@\"";
|
|
42
|
-
"watch" = cmd "Watch, build, and sync loop" "node dist/cli.js watch \"$@\"";
|
|
43
|
-
})
|
|
44
|
-
];
|
|
45
|
-
in {
|
|
46
|
-
devShells.default = pkgs.mkShell {
|
|
47
|
-
name = "Pushwork Dev Shell";
|
|
48
|
-
|
|
49
|
-
nativeBuildInputs =
|
|
50
|
-
[
|
|
51
|
-
nodejs
|
|
52
|
-
pkgs.nodePackages.vscode-langservers-extracted
|
|
53
|
-
pkgs.typescript
|
|
54
|
-
pkgs.typescript-language-server
|
|
55
|
-
pnpm-pkg
|
|
56
|
-
]
|
|
57
|
-
++ menu;
|
|
58
|
-
|
|
59
|
-
shellHook = ''
|
|
60
|
-
menu
|
|
61
|
-
'';
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
formatter = pkgs.alejandra;
|
|
65
|
-
});
|
|
66
|
-
}
|
package/pnpm-workspace.yaml
DELETED
package/src/branches.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs/promises";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import {
|
|
4
|
-
type AutomergeUrl,
|
|
5
|
-
type DocHandle,
|
|
6
|
-
type Repo,
|
|
7
|
-
} from "@automerge/automerge-repo";
|
|
8
|
-
import { log } from "./log.js";
|
|
9
|
-
|
|
10
|
-
const dlog = log("branches");
|
|
11
|
-
|
|
12
|
-
export const META = "@patchwork";
|
|
13
|
-
export const DEFAULT_BRANCH = "default";
|
|
14
|
-
|
|
15
|
-
export type BranchesDoc = {
|
|
16
|
-
"@patchwork": { type: "branches" };
|
|
17
|
-
branches: { [name: string]: AutomergeUrl };
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const isBranchesDoc = (doc: unknown): doc is BranchesDoc => {
|
|
21
|
-
if (!doc || typeof doc !== "object") return false;
|
|
22
|
-
const meta = (doc as Record<string, unknown>)[META];
|
|
23
|
-
return (
|
|
24
|
-
!!meta &&
|
|
25
|
-
typeof meta === "object" &&
|
|
26
|
-
(meta as Record<string, unknown>).type === "branches"
|
|
27
|
-
);
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export function detectDocType(
|
|
31
|
-
doc: unknown,
|
|
32
|
-
): "branches" | "folder" | "directory" | "unknown" {
|
|
33
|
-
if (!doc || typeof doc !== "object") return "unknown";
|
|
34
|
-
const meta = (doc as Record<string, unknown>)[META];
|
|
35
|
-
if (!meta || typeof meta !== "object") return "unknown";
|
|
36
|
-
const t = (meta as Record<string, unknown>).type;
|
|
37
|
-
if (t === "branches" || t === "folder" || t === "directory") return t;
|
|
38
|
-
return "unknown";
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export async function resolveEffectiveRoot(
|
|
42
|
-
repo: Repo,
|
|
43
|
-
rootHandle: DocHandle<unknown>,
|
|
44
|
-
branchName: string | null,
|
|
45
|
-
): Promise<DocHandle<unknown>> {
|
|
46
|
-
const doc = rootHandle.doc();
|
|
47
|
-
if (!isBranchesDoc(doc)) return rootHandle;
|
|
48
|
-
if (!branchName) {
|
|
49
|
-
throw new Error(
|
|
50
|
-
"pushwork repo uses branches but no branch name is set",
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
const url = doc.branches?.[branchName];
|
|
54
|
-
if (!url) {
|
|
55
|
-
throw new Error(
|
|
56
|
-
`branch "${branchName}" not found in branches doc ${rootHandle.url}`,
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
dlog("resolveEffectiveRoot branch=%s → %s", branchName, url);
|
|
60
|
-
return repo.find<unknown>(url);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export function listBranchNames(branchesDoc: BranchesDoc): string[] {
|
|
64
|
-
return Object.keys(branchesDoc.branches ?? {}).sort();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const BRANCH_FILE = path.join(".pushwork", "branch");
|
|
68
|
-
|
|
69
|
-
export async function readBranchFile(root: string): Promise<string | null> {
|
|
70
|
-
try {
|
|
71
|
-
const text = await fs.readFile(path.join(root, BRANCH_FILE), "utf8");
|
|
72
|
-
return text.trim() || null;
|
|
73
|
-
} catch (err) {
|
|
74
|
-
if ((err as NodeJS.ErrnoException).code === "ENOENT") return null;
|
|
75
|
-
throw err;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export async function writeBranchFile(
|
|
80
|
-
root: string,
|
|
81
|
-
branchName: string,
|
|
82
|
-
): Promise<void> {
|
|
83
|
-
await fs.mkdir(path.join(root, ".pushwork"), { recursive: true });
|
|
84
|
-
await fs.writeFile(path.join(root, BRANCH_FILE), branchName + "\n");
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export async function deleteBranchFile(root: string): Promise<void> {
|
|
88
|
-
try {
|
|
89
|
-
await fs.unlink(path.join(root, BRANCH_FILE));
|
|
90
|
-
} catch (err) {
|
|
91
|
-
if ((err as NodeJS.ErrnoException).code !== "ENOENT") throw err;
|
|
92
|
-
}
|
|
93
|
-
}
|