@fabiofiorita/porcelain 0.79.0 → 0.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/server/src/bootstrap/watch-host.mjs +115 -0
- package/server/src/cli/main.mjs +3433 -2860
- package/web/dist/assets/_-BshWuX2r.js +1 -0
- package/web/dist/assets/_layerId-B2Mhwdgd.js +1 -0
- package/web/dist/assets/_paired-BsiX749W.js +1 -0
- package/web/dist/assets/{_paired-CBm2MtkG.js → _paired-ByXCZfON.js} +1 -1
- package/web/dist/assets/_paired-Qv7e73Az.js +1 -0
- package/web/dist/assets/_paired-RaEpohFx.js +1 -0
- package/web/dist/assets/_projectId-K3HYfGmC.js +1 -0
- package/web/dist/assets/_reviewId-BgaLSHh-.js +1 -0
- package/web/dist/assets/{_revision-8PDQVDma.js → _revision-CEkztxVf.js} +1 -1
- package/web/dist/assets/_section-eV0dGQ8T.js +1 -0
- package/web/dist/assets/_worktreeId-BsiX749W.js +1 -0
- package/web/dist/assets/_worktreeId-C634iX0I.js +1 -0
- package/web/dist/assets/_worktreeId-Dp2IijNU.js +1 -0
- package/web/dist/assets/_worktreeId-RaEpohFx.js +1 -0
- package/web/dist/assets/access-CgdAbsDB.js +19 -0
- package/web/dist/assets/connected-workspace-73Vq_-Pm.js +1 -0
- package/web/dist/assets/desktop-actions-DbUXvsow.js +1 -0
- package/web/dist/assets/{edit-file-DZdgw3o0.js → edit-file-NoqbTKtz.js} +20 -20
- package/web/dist/assets/{file-editor-rIz6iew9.js → file-editor-BcKWP6Pq.js} +2 -2
- package/web/dist/assets/index-CEW83Kj-.css +2 -0
- package/web/dist/assets/index-iGH92IrA.js +10 -0
- package/web/dist/assets/{lazyRouteComponent-C9UGVZ8K.js → lazyRouteComponent-DGmhBXYn.js} +1 -1
- package/web/dist/assets/pair-Cs-YnRFF.js +1 -0
- package/web/dist/assets/pair-RaEpohFx.js +1 -0
- package/web/dist/assets/review-route-C2awZrL6.js +1 -0
- package/web/dist/assets/reviews-BkUaPv4P.js +1413 -0
- package/web/dist/assets/reviews-DLioOiRN.css +1 -0
- package/web/dist/assets/useMatch-DNkNC5QD.js +1 -0
- package/web/dist/assets/useRouterState-7m7hAzAG.js +1 -0
- package/web/dist/assets/workspace-error-DZyPmDw9.js +1 -0
- package/web/dist/assets/{workspace-pending-dViXllQf.js → workspace-pending-D8mUCjic.js} +1 -1
- package/web/dist/index.html +9 -8
- package/web/dist/assets/_-CM-4wlBy.js +0 -1
- package/web/dist/assets/_layerId-DjtekDj2.js +0 -1
- package/web/dist/assets/_paired-C2SWHQl4.js +0 -1
- package/web/dist/assets/_paired-DYH4LSdK.js +0 -1
- package/web/dist/assets/_paired-Dl_-1y7f.js +0 -1
- package/web/dist/assets/_reviewId-CZ8KLgSQ.js +0 -1
- package/web/dist/assets/_section-BM-gB9-A.js +0 -1
- package/web/dist/assets/_worktreeId-C7Hl3HqX.js +0 -1
- package/web/dist/assets/_worktreeId-DMvqT50n.js +0 -1
- package/web/dist/assets/_worktreeId-DYH4LSdK.js +0 -1
- package/web/dist/assets/_worktreeId-Dl_-1y7f.js +0 -1
- package/web/dist/assets/access-CdrSsWC7.js +0 -19
- package/web/dist/assets/connected-workspace-CfilrSRL.js +0 -1
- package/web/dist/assets/desktop-actions-OZdmeAnL.js +0 -1
- package/web/dist/assets/index-Bg-CecA5.css +0 -2
- package/web/dist/assets/index-DvQ8vt2r.js +0 -10
- package/web/dist/assets/pair-DTr7Piog.js +0 -1
- package/web/dist/assets/pair-Dl_-1y7f.js +0 -1
- package/web/dist/assets/review-route-DmS-9i7N.js +0 -1
- package/web/dist/assets/reviews-yGaQ3xF5.js +0 -1404
- package/web/dist/assets/useMatch-CmCox52T.js +0 -1
- package/web/dist/assets/useRouterState-B27q7C5L.js +0 -1
- package/web/dist/assets/workspace-error-BH8VQBuM.js +0 -1
package/README.md
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// apps/server/src/bootstrap/watch-host.ts
|
|
2
|
+
import { createInterface } from "node:readline";
|
|
3
|
+
|
|
4
|
+
// apps/server/src/adapters/events/watch-host-protocol.ts
|
|
5
|
+
import { Schema } from "effect";
|
|
6
|
+
var watchHostRequest = Schema.Union([
|
|
7
|
+
Schema.Struct({
|
|
8
|
+
kind: Schema.Literal("subscribe"),
|
|
9
|
+
request: Schema.Int,
|
|
10
|
+
subscription: Schema.Int,
|
|
11
|
+
directory: Schema.String,
|
|
12
|
+
ignore: Schema.Array(Schema.String)
|
|
13
|
+
}),
|
|
14
|
+
Schema.Struct({
|
|
15
|
+
kind: Schema.Literal("unsubscribe"),
|
|
16
|
+
request: Schema.Int,
|
|
17
|
+
subscription: Schema.Int
|
|
18
|
+
}),
|
|
19
|
+
Schema.Struct({
|
|
20
|
+
kind: Schema.Literal("ping"),
|
|
21
|
+
request: Schema.Int
|
|
22
|
+
})
|
|
23
|
+
]);
|
|
24
|
+
var watchHostEvent = Schema.Struct({
|
|
25
|
+
path: Schema.String,
|
|
26
|
+
type: Schema.Literals(["create", "update", "delete"])
|
|
27
|
+
});
|
|
28
|
+
var watchHostMessage = Schema.Union([
|
|
29
|
+
Schema.Struct({
|
|
30
|
+
kind: Schema.Literal("answer"),
|
|
31
|
+
request: Schema.Int,
|
|
32
|
+
failure: Schema.optional(Schema.String)
|
|
33
|
+
}),
|
|
34
|
+
Schema.Struct({
|
|
35
|
+
kind: Schema.Literal("events"),
|
|
36
|
+
subscription: Schema.Int,
|
|
37
|
+
failure: Schema.optional(Schema.String),
|
|
38
|
+
events: Schema.Array(watchHostEvent)
|
|
39
|
+
})
|
|
40
|
+
]);
|
|
41
|
+
var decodeWatchHostRequest = Schema.decodeUnknownOption(
|
|
42
|
+
Schema.fromJsonString(watchHostRequest)
|
|
43
|
+
);
|
|
44
|
+
var decodeWatchHostMessage = Schema.decodeUnknownOption(
|
|
45
|
+
Schema.fromJsonString(watchHostMessage)
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
// apps/server/src/bootstrap/watch-host.ts
|
|
49
|
+
var parcelWatcher = await import("@parcel/watcher");
|
|
50
|
+
var subscriptions = /* @__PURE__ */ new Map();
|
|
51
|
+
var turns = /* @__PURE__ */ new Map();
|
|
52
|
+
function send(message) {
|
|
53
|
+
process.stdout.write(`${JSON.stringify(message)}
|
|
54
|
+
`);
|
|
55
|
+
}
|
|
56
|
+
function reason(error) {
|
|
57
|
+
return error instanceof Error ? error.message : String(error);
|
|
58
|
+
}
|
|
59
|
+
function options(ignore) {
|
|
60
|
+
return process.platform === "linux" ? { backend: "inotify", ignore: [...ignore] } : { ignore: [...ignore] };
|
|
61
|
+
}
|
|
62
|
+
async function release(subscription) {
|
|
63
|
+
const current = subscriptions.get(subscription);
|
|
64
|
+
subscriptions.delete(subscription);
|
|
65
|
+
await current?.unsubscribe();
|
|
66
|
+
}
|
|
67
|
+
async function watch(request) {
|
|
68
|
+
await release(request.subscription);
|
|
69
|
+
subscriptions.set(
|
|
70
|
+
request.subscription,
|
|
71
|
+
await parcelWatcher.subscribe(
|
|
72
|
+
request.directory,
|
|
73
|
+
(error, events) => send({
|
|
74
|
+
kind: "events",
|
|
75
|
+
subscription: request.subscription,
|
|
76
|
+
...error ? { failure: reason(error) } : {},
|
|
77
|
+
events: events.map((event) => ({
|
|
78
|
+
path: event.path,
|
|
79
|
+
type: event.type
|
|
80
|
+
}))
|
|
81
|
+
}),
|
|
82
|
+
options(request.ignore)
|
|
83
|
+
)
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
function inTurn(subscription, work) {
|
|
87
|
+
const done = (turns.get(subscription) ?? Promise.resolve()).then(work, work);
|
|
88
|
+
const settled = done.then(
|
|
89
|
+
() => void 0,
|
|
90
|
+
() => void 0
|
|
91
|
+
);
|
|
92
|
+
turns.set(subscription, settled);
|
|
93
|
+
void settled.then(() => {
|
|
94
|
+
if (turns.get(subscription) === settled) turns.delete(subscription);
|
|
95
|
+
});
|
|
96
|
+
return done;
|
|
97
|
+
}
|
|
98
|
+
function handle(request) {
|
|
99
|
+
if (request.kind === "ping") return Promise.resolve();
|
|
100
|
+
if (request.kind === "subscribe")
|
|
101
|
+
return inTurn(request.subscription, () => watch(request));
|
|
102
|
+
return inTurn(request.subscription, () => release(request.subscription));
|
|
103
|
+
}
|
|
104
|
+
createInterface({ input: process.stdin, crlfDelay: Number.POSITIVE_INFINITY }).on("line", (line) => {
|
|
105
|
+
const request = decodeWatchHostRequest(line);
|
|
106
|
+
if (request._tag === "None") return;
|
|
107
|
+
handle(request.value).then(
|
|
108
|
+
() => send({ kind: "answer", request: request.value.request }),
|
|
109
|
+
(error) => send({
|
|
110
|
+
kind: "answer",
|
|
111
|
+
request: request.value.request,
|
|
112
|
+
failure: reason(error)
|
|
113
|
+
})
|
|
114
|
+
);
|
|
115
|
+
}).on("close", () => process.exit(0));
|