trellis 3.2.0 → 3.2.3
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/CHANGELOG.md +7 -0
- package/README.md +61 -171
- package/dist/browser/index.d.ts +18 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +95 -0
- package/dist/{chunk-3ETIIPPB.js → chunk-2AACZRII.js} +312 -30
- package/dist/{chunk-3GDRZTAW.js → chunk-5KSGGKET.js} +1 -1
- package/dist/{chunk-MBNBTJCR.js → chunk-6GEZ6DN5.js} +2 -2
- package/dist/chunk-6RWGFC3N.js +403 -0
- package/dist/{chunk-X762XWVC.js → chunk-7DUMWO5L.js} +1 -1
- package/dist/chunk-CAG4FULI.js +121 -0
- package/dist/{chunk-GD5QJXSS.js → chunk-FWRS4CSC.js} +2 -2
- package/dist/{chunk-36VSSTL7.js → chunk-GU374KWZ.js} +1 -1
- package/dist/{chunk-BJ7EZ7FP.js → chunk-JHHEXEDM.js} +17 -0
- package/dist/{chunk-7WQGTFVJ.js → chunk-L5N5PR2S.js} +130 -75
- package/dist/{chunk-BXSTJVE3.js → chunk-N6MYZT4O.js} +2 -1
- package/dist/chunk-NWSW5YNS.js +225 -0
- package/dist/{chunk-HO4TURXW.js → chunk-S3XLFZ27.js} +28 -11
- package/dist/{chunk-BQBUVMRN.js → chunk-S6GBJ2ZB.js} +25 -14
- package/dist/{chunk-B3ZIFA2O.js → chunk-VBYUTRXX.js} +1 -1
- package/dist/cli/deploy-cli.d.ts +18 -0
- package/dist/cli/deploy-cli.d.ts.map +1 -0
- package/dist/cli/deploy-cli.js +67 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +153 -100
- package/dist/client/index.browser.d.ts +29 -0
- package/dist/client/index.browser.d.ts.map +1 -0
- package/dist/client/index.browser.js +64 -0
- package/dist/client/index.js +10 -10
- package/dist/client/sdk.browser.d.ts +131 -0
- package/dist/client/sdk.browser.d.ts.map +1 -0
- package/dist/{sdk-LZ7W3EEY.js → client/sdk.browser.js} +2 -2
- package/dist/client/sdk.js +1 -1
- package/dist/db/index.js +16 -16
- package/dist/db/inspector.js +6 -6
- package/dist/decisions/index.js +2 -2
- package/dist/embeddings/auto-embed.d.ts.map +1 -1
- package/dist/embeddings/index.js +1 -1
- package/dist/embeddings/store.d.ts.map +1 -1
- package/dist/engine.d.ts +27 -7
- package/dist/engine.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/react/index.js +2 -2
- package/dist/react/schema-hooks.js +7 -7
- package/dist/{remote-manager-SG545WNY.js → remote-manager-ODE3T2KR.js} +5 -5
- package/dist/scaffold/seed.d.ts.map +1 -1
- package/dist/scaffold/write.d.ts +1 -1
- package/dist/scaffold/write.d.ts.map +1 -1
- package/dist/schema/index.js +4 -3
- package/dist/server/cors.d.ts +13 -0
- package/dist/server/cors.d.ts.map +1 -0
- package/dist/server/deploy-meta.d.ts +25 -0
- package/dist/server/deploy-meta.d.ts.map +1 -0
- package/dist/server/deploy.d.ts +8 -3
- package/dist/server/deploy.d.ts.map +1 -1
- package/dist/server/deploy.js +9 -0
- package/dist/server/index.d.ts +5 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +51 -17
- package/dist/server/realtime.d.ts +4 -1
- package/dist/server/realtime.d.ts.map +1 -1
- package/dist/server/server.d.ts +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/sprites.d.ts +18 -1
- package/dist/server/sprites.d.ts.map +1 -1
- package/dist/server/tenancy.d.ts +4 -0
- package/dist/server/tenancy.d.ts.map +1 -1
- package/dist/server/usage-meter.d.ts +53 -0
- package/dist/server/usage-meter.d.ts.map +1 -0
- package/dist/{server-IGBIIJSF.js → server-OGVWNDNK.js} +6 -1
- package/dist/sprites-KQGTGM6W.js +27 -0
- package/dist/{tenancy-OP34NFFS.js → tenancy-POMWQP6M.js} +5 -3
- package/dist/vcs/index.js +3 -3
- package/dist/vcs/types.d.ts +2 -0
- package/dist/vcs/types.d.ts.map +1 -1
- package/package.json +17 -6
- package/dist/better-sqlite-backend-PII64VE6.js +0 -159
- package/dist/better-sqlite-backend-VUBVQ7SN.js +0 -209
- package/dist/better-sqlite-backend-Y3AQN65E.js +0 -159
- package/dist/better-sqlite-backend-Y3M7DXOX.js +0 -159
- package/dist/boot-middleware-FJDGVUM4.js +0 -9
- package/dist/boot-middleware-MLJUTLUM.js +0 -9
- package/dist/boot-middleware-ZZPDZNYR.js +0 -9
- package/dist/chunk-276LKLZR.js +0 -359
- package/dist/chunk-2CX5UCRV.js +0 -111
- package/dist/chunk-2ESYSVXG.js +0 -48
- package/dist/chunk-2I5JU73Y.js +0 -340
- package/dist/chunk-2UNSRRNB.js +0 -171
- package/dist/chunk-335UEHQR.js +0 -907
- package/dist/chunk-4CF2L46N.js +0 -29
- package/dist/chunk-5CINODKT.js +0 -41
- package/dist/chunk-5ESGWJ5L.js +0 -45
- package/dist/chunk-5FGLQGMF.js +0 -1676
- package/dist/chunk-5IQZFITY.js +0 -357
- package/dist/chunk-5JWFAQDW.js +0 -150
- package/dist/chunk-62UHTVU3.js +0 -141
- package/dist/chunk-66UJQT2I.js +0 -35
- package/dist/chunk-6RNNVOAS.js +0 -355
- package/dist/chunk-6X23PZ6H.js +0 -969
- package/dist/chunk-7C7LL6MB.js +0 -315
- package/dist/chunk-7F4HM3JG.js +0 -394
- package/dist/chunk-7KJ7T4D3.js +0 -910
- package/dist/chunk-7QQQNUB5.js +0 -92
- package/dist/chunk-7QWJBS72.js +0 -946
- package/dist/chunk-7R36OZK3.js +0 -957
- package/dist/chunk-7UPKCOHE.js +0 -946
- package/dist/chunk-A3BONW34.js +0 -35
- package/dist/chunk-AHMDVHBL.js +0 -141
- package/dist/chunk-AW6A4OZY.js +0 -171
- package/dist/chunk-BJ5EKCJ5.js +0 -458
- package/dist/chunk-BRGYDO7D.js +0 -223
- package/dist/chunk-C5KPSEDN.js +0 -359
- package/dist/chunk-CCTNYTUC.js +0 -940
- package/dist/chunk-CYQ2OVD2.js +0 -35
- package/dist/chunk-DDAK7YOE.js +0 -299
- package/dist/chunk-DRILKBY6.js +0 -965
- package/dist/chunk-DXE24HNN.js +0 -45
- package/dist/chunk-E7ICUNW7.js +0 -945
- package/dist/chunk-EAL2PUOE.js +0 -10022
- package/dist/chunk-ELT7MLZB.js +0 -109
- package/dist/chunk-EWEIRF6G.js +0 -171
- package/dist/chunk-F5VDGQJC.js +0 -120
- package/dist/chunk-FCPL3IEQ.js +0 -98
- package/dist/chunk-FDPKYSV7.js +0 -96
- package/dist/chunk-FES3TC24.js +0 -171
- package/dist/chunk-FF36CQHZ.js +0 -61
- package/dist/chunk-FOWKR5TW.js +0 -129
- package/dist/chunk-FZVCXDYW.js +0 -150
- package/dist/chunk-G3XIHPSQ.js +0 -361
- package/dist/chunk-GKJLYLVU.js +0 -359
- package/dist/chunk-GNXHXNVQ.js +0 -113
- package/dist/chunk-GSR6ILTM.js +0 -277
- package/dist/chunk-GWRIMRSX.js +0 -45
- package/dist/chunk-H72UW2HJ.js +0 -45
- package/dist/chunk-HGI74PXB.js +0 -7417
- package/dist/chunk-HGRA37LO.js +0 -145
- package/dist/chunk-HXSRQO3L.js +0 -145
- package/dist/chunk-IG2X2BVO.js +0 -373
- package/dist/chunk-IIJVDD54.js +0 -373
- package/dist/chunk-IUWVEEOX.js +0 -145
- package/dist/chunk-IX4BBOIT.js +0 -394
- package/dist/chunk-IXU4RMQM.js +0 -349
- package/dist/chunk-J6OUIION.js +0 -857
- package/dist/chunk-K46RNFDE.js +0 -171
- package/dist/chunk-KAGU2XMY.js +0 -359
- package/dist/chunk-KCVYJNVX.js +0 -394
- package/dist/chunk-KKDRMIV6.js +0 -419
- package/dist/chunk-KYLIQ3YI.js +0 -399
- package/dist/chunk-KZYJJIRN.js +0 -946
- package/dist/chunk-LFOX744K.js +0 -96
- package/dist/chunk-LHOVJEWR.js +0 -7403
- package/dist/chunk-LOPXTPF3.js +0 -120
- package/dist/chunk-LZR3VIFU.js +0 -907
- package/dist/chunk-MCKGQKYU.js +0 -15
- package/dist/chunk-MU6EOS6F.js +0 -0
- package/dist/chunk-MWRQ2TXT.js +0 -357
- package/dist/chunk-NO73OK2I.js +0 -102
- package/dist/chunk-NPE2YJHK.js +0 -394
- package/dist/chunk-NSDXU6QX.js +0 -2213
- package/dist/chunk-NXIRDSZ6.js +0 -145
- package/dist/chunk-NZWFNHCS.js +0 -407
- package/dist/chunk-OB4CMMX6.js +0 -260
- package/dist/chunk-OBKU74FU.js +0 -7411
- package/dist/chunk-OQNDWRDE.js +0 -145
- package/dist/chunk-OVWAJMB6.js +0 -394
- package/dist/chunk-PDHLBTTD.js +0 -45
- package/dist/chunk-PEQNRKLG.js +0 -210
- package/dist/chunk-QERIS7QY.js +0 -7403
- package/dist/chunk-QHA2DM3C.js +0 -373
- package/dist/chunk-QLM4HSYC.js +0 -45
- package/dist/chunk-S2OT3TQJ.js +0 -283
- package/dist/chunk-S5PHSN5K.js +0 -907
- package/dist/chunk-SIAA4J6H.js +0 -21
- package/dist/chunk-SQBNLUIA.js +0 -171
- package/dist/chunk-STLN6A6B.js +0 -355
- package/dist/chunk-U7HV7GU2.js +0 -17
- package/dist/chunk-UGZHOGRA.js +0 -39
- package/dist/chunk-UICF66FS.js +0 -359
- package/dist/chunk-UK3EQREE.js +0 -1078
- package/dist/chunk-UPKPURVY.js +0 -394
- package/dist/chunk-URC74VCN.js +0 -959
- package/dist/chunk-V3G7Q3QQ.js +0 -102
- package/dist/chunk-VUJ6SA55.js +0 -303
- package/dist/chunk-VUJQLIML.js +0 -141
- package/dist/chunk-VWKLKLYB.js +0 -267
- package/dist/chunk-VYC3RZMK.js +0 -277
- package/dist/chunk-WMERMSWI.js +0 -154
- package/dist/chunk-WMR777PO.js +0 -2213
- package/dist/chunk-X46IECAC.js +0 -517
- package/dist/chunk-XEN3OEYY.js +0 -2234
- package/dist/chunk-XZQ66K7A.js +0 -124
- package/dist/chunk-YY3GF7DH.js +0 -7411
- package/dist/chunk-ZE5R3H4C.js +0 -907
- package/dist/chunk-ZHVI7BQN.js +0 -1077
- package/dist/chunk-ZMN5LUB7.js +0 -7411
- package/dist/chunk-ZUV4MD5U.js +0 -94
- package/dist/config-KMY6RRK3.js +0 -19
- package/dist/config-VDMK2DUJ.js +0 -19
- package/dist/db/trellis.css +0 -1
- package/dist/deploy-66EC752W.js +0 -9
- package/dist/deploy-SO7AFK6L.js +0 -9
- package/dist/engine-7GXBM4IT.js +0 -7
- package/dist/engine-NSR6BIF7.js +0 -7
- package/dist/factory-2P64OC7M.js +0 -34
- package/dist/factory-YP4ZZK5K.js +0 -34
- package/dist/import-AJLYHFIA.js +0 -10
- package/dist/launch-explorer-AI6L2AWJ.js +0 -91
- package/dist/query-GJL3CVGN.js +0 -31
- package/dist/query-MBJSK3EB.js +0 -31
- package/dist/query-TJHEVSKL.js +0 -31
- package/dist/query-WUIKOHPE.js +0 -524
- package/dist/remote-manager-BLJZ6KF6.js +0 -224
- package/dist/remote-manager-BPYE46SI.js +0 -223
- package/dist/remote-manager-FMESEAFA.js +0 -224
- package/dist/remote-manager-K2WZ5RHY.js +0 -223
- package/dist/remote-manager-SG5PQKCH.js +0 -224
- package/dist/remote-manager-WGP6MIQZ.js +0 -224
- package/dist/sdk-3KBB3E6V.js +0 -16
- package/dist/sdk-4ZQO6UTU.js +0 -16
- package/dist/sdk-6JA6GV3G.js +0 -16
- package/dist/sdk-6VTP5UTZ.js +0 -16
- package/dist/sdk-7VS6TYCD.js +0 -16
- package/dist/sdk-HQ3FTLRT.js +0 -16
- package/dist/sdk-HZ7NU3XE.js +0 -15
- package/dist/sdk-KBQE2OXT.js +0 -16
- package/dist/sdk-MSCDZ7JU.js +0 -15
- package/dist/sdk-WNZOGO3S.js +0 -15
- package/dist/sdk-YLV33ZCW.js +0 -9
- package/dist/sdk-ZSUD2LLJ.js +0 -16
- package/dist/server-AFXFFBWA.js +0 -11
- package/dist/server-AGHC4VUL.js +0 -11
- package/dist/server-BOH7M4TT.js +0 -13
- package/dist/server-DBUY2KY5.js +0 -11
- package/dist/server-GWBQJPRG.js +0 -11
- package/dist/server-JZZFULVU.js +0 -11
- package/dist/server-L5XAF4M5.js +0 -11
- package/dist/server-NYFUHANA.js +0 -12
- package/dist/server-OABUB2LO.js +0 -12
- package/dist/server-P2CKZWWV.js +0 -12
- package/dist/sprites-RU3E4XQN.js +0 -15
- package/dist/sprites-XVSMQLSI.js +0 -15
- package/dist/sql-wasm-FORCZFHZ.js +0 -2148
- package/dist/sql-wasm-JZH76RLO.js +0 -2148
- package/dist/sqljs-backend-CJQOIQYE.js +0 -266
- package/dist/sqljs-backend-KWXBUDUO.js +0 -266
- package/dist/state-demo.bundle.js +0 -1033
- package/dist/tenancy-CBWYEVUB.js +0 -11
- package/dist/tenancy-FO6WVYFN.js +0 -13
- package/dist/tenancy-FWDBESMX.js +0 -14
- package/dist/tenancy-HGPIS5QA.js +0 -13
- package/dist/tenancy-HXFALA37.js +0 -14
- package/dist/tenancy-S676GLID.js +0 -14
- package/dist/tenancy-V7ARWNNV.js +0 -14
- package/dist/tenancy-ZDN4GXK5.js +0 -13
- package/dist/tenancy-ZT5VMY7B.js +0 -14
- package/dist/vm-config-YZRJ3KUB.js +0 -21
- /package/dist/{chunk-2BRTCEHB.js → chunk-PZ4XYZ4J.js} +0 -0
- /package/dist/{chunk-EO3J7GRP.js → chunk-WXSWA3MV.js} +0 -0
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TrellisVcsEngine,
|
|
3
|
-
init_engine
|
|
4
|
-
} from "./chunk-OBKU74FU.js";
|
|
5
|
-
import "./chunk-4XIVMVHC.js";
|
|
6
|
-
import "./chunk-XEN3OEYY.js";
|
|
7
|
-
import "./chunk-36VSSTL7.js";
|
|
8
|
-
import "./chunk-BXSTJVE3.js";
|
|
9
|
-
import "./chunk-GLM4HGN4.js";
|
|
10
|
-
import "./chunk-KFQGP6VL.js";
|
|
11
|
-
|
|
12
|
-
// src/federation/remote-manager.ts
|
|
13
|
-
init_engine();
|
|
14
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
15
|
-
import { join, resolve } from "path";
|
|
16
|
-
var RemoteManager = class {
|
|
17
|
-
trellisPath;
|
|
18
|
-
remotesPath;
|
|
19
|
-
constructor(trellisPath) {
|
|
20
|
-
this.trellisPath = trellisPath;
|
|
21
|
-
this.remotesPath = join(trellisPath, "remotes.json");
|
|
22
|
-
}
|
|
23
|
-
/** Load remotes configuration */
|
|
24
|
-
loadRemotes() {
|
|
25
|
-
if (!existsSync(this.remotesPath)) {
|
|
26
|
-
return { remotes: {} };
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
const content = readFileSync(this.remotesPath, "utf8");
|
|
30
|
-
return JSON.parse(content);
|
|
31
|
-
} catch (error) {
|
|
32
|
-
throw new Error(`Failed to load remotes config: ${error}`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/** Save remotes configuration */
|
|
36
|
-
saveRemotes(config) {
|
|
37
|
-
try {
|
|
38
|
-
if (!existsSync(this.trellisPath)) {
|
|
39
|
-
mkdirSync(this.trellisPath, { recursive: true });
|
|
40
|
-
}
|
|
41
|
-
writeFileSync(this.remotesPath, JSON.stringify(config, null, 2), "utf8");
|
|
42
|
-
} catch (error) {
|
|
43
|
-
throw new Error(`Failed to save remotes config: ${error}`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/** Add a new remote */
|
|
47
|
-
addRemote(name, path) {
|
|
48
|
-
const config = this.loadRemotes();
|
|
49
|
-
if (config.remotes[name]) {
|
|
50
|
-
throw new Error(`Remote '${name}' already exists`);
|
|
51
|
-
}
|
|
52
|
-
const resolvedPath = resolve(path);
|
|
53
|
-
if (!TrellisVcsEngine.isRepo(resolvedPath)) {
|
|
54
|
-
throw new Error(`Not a TrellisVCS repository: ${resolvedPath}`);
|
|
55
|
-
}
|
|
56
|
-
config.remotes[name] = {
|
|
57
|
-
name,
|
|
58
|
-
path: resolvedPath
|
|
59
|
-
};
|
|
60
|
-
this.saveRemotes(config);
|
|
61
|
-
}
|
|
62
|
-
/** Remove a remote */
|
|
63
|
-
removeRemote(name) {
|
|
64
|
-
const config = this.loadRemotes();
|
|
65
|
-
if (!config.remotes[name]) {
|
|
66
|
-
throw new Error(`Remote '${name}' not found`);
|
|
67
|
-
}
|
|
68
|
-
delete config.remotes[name];
|
|
69
|
-
this.saveRemotes(config);
|
|
70
|
-
}
|
|
71
|
-
/** List all remotes */
|
|
72
|
-
listRemotes() {
|
|
73
|
-
const config = this.loadRemotes();
|
|
74
|
-
return Object.values(config.remotes);
|
|
75
|
-
}
|
|
76
|
-
/** Pull new ops from a specific remote */
|
|
77
|
-
async pullRemote(remoteName, localEngine) {
|
|
78
|
-
const startTime = Date.now();
|
|
79
|
-
const config = this.loadRemotes();
|
|
80
|
-
const remote = config.remotes[remoteName];
|
|
81
|
-
if (!remote) {
|
|
82
|
-
throw new Error(`Remote '${remoteName}' not found`);
|
|
83
|
-
}
|
|
84
|
-
const errors = [];
|
|
85
|
-
let newOps = 0;
|
|
86
|
-
let latestOpId = remote.lastOpId || "";
|
|
87
|
-
try {
|
|
88
|
-
const remoteEngine = new TrellisVcsEngine({ rootPath: remote.path });
|
|
89
|
-
remoteEngine.open();
|
|
90
|
-
const remoteOps = remoteEngine.getOps();
|
|
91
|
-
if (remoteOps.length === 0) {
|
|
92
|
-
return {
|
|
93
|
-
remote: remoteName,
|
|
94
|
-
newOps: 0,
|
|
95
|
-
latestOpId: "",
|
|
96
|
-
durationMs: Date.now() - startTime,
|
|
97
|
-
errors: []
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
const lastOpHash = remote.lastOpId;
|
|
101
|
-
let startIndex = 0;
|
|
102
|
-
if (lastOpHash) {
|
|
103
|
-
startIndex = remoteOps.findIndex((op) => op.hash === lastOpHash);
|
|
104
|
-
if (startIndex === -1) {
|
|
105
|
-
startIndex = 0;
|
|
106
|
-
errors.push(
|
|
107
|
-
`Last op hash ${lastOpHash} not found in remote, pulling all ops`
|
|
108
|
-
);
|
|
109
|
-
} else {
|
|
110
|
-
startIndex++;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const opsToPull = remoteOps.slice(startIndex);
|
|
114
|
-
if (opsToPull.length > 0) {
|
|
115
|
-
const prefixedOps = opsToPull.map(
|
|
116
|
-
(op) => this.prefixOpEntities(op, remoteName)
|
|
117
|
-
);
|
|
118
|
-
for (const op of prefixedOps) {
|
|
119
|
-
localEngine.opLog.append(op);
|
|
120
|
-
newOps++;
|
|
121
|
-
}
|
|
122
|
-
latestOpId = remoteOps[remoteOps.length - 1].hash;
|
|
123
|
-
}
|
|
124
|
-
remote.lastOpId = latestOpId;
|
|
125
|
-
remote.pulledAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
126
|
-
this.saveRemotes(config);
|
|
127
|
-
} catch (error) {
|
|
128
|
-
errors.push(`Failed to pull from remote: ${error}`);
|
|
129
|
-
}
|
|
130
|
-
return {
|
|
131
|
-
remote: remoteName,
|
|
132
|
-
newOps,
|
|
133
|
-
latestOpId,
|
|
134
|
-
durationMs: Date.now() - startTime,
|
|
135
|
-
errors
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
/** Pull from all configured remotes */
|
|
139
|
-
async pullAll(localEngine) {
|
|
140
|
-
const config = this.loadRemotes();
|
|
141
|
-
const remoteNames = Object.keys(config.remotes);
|
|
142
|
-
if (remoteNames.length === 0) {
|
|
143
|
-
return {
|
|
144
|
-
results: [],
|
|
145
|
-
totalNewOps: 0,
|
|
146
|
-
totalDurationMs: 0
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
const startTime = Date.now();
|
|
150
|
-
const results = [];
|
|
151
|
-
let totalNewOps = 0;
|
|
152
|
-
for (const remoteName of remoteNames) {
|
|
153
|
-
try {
|
|
154
|
-
const result = await this.pullRemote(remoteName, localEngine);
|
|
155
|
-
results.push(result);
|
|
156
|
-
totalNewOps += result.newOps;
|
|
157
|
-
} catch (error) {
|
|
158
|
-
results.push({
|
|
159
|
-
remote: remoteName,
|
|
160
|
-
newOps: 0,
|
|
161
|
-
latestOpId: "",
|
|
162
|
-
durationMs: 0,
|
|
163
|
-
errors: [`Failed to pull: ${error}`]
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
results,
|
|
169
|
-
totalNewOps,
|
|
170
|
-
totalDurationMs: Date.now() - startTime
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
/** Prefix entity IDs in operations with remote name */
|
|
174
|
-
prefixOpEntities(op, remoteName) {
|
|
175
|
-
const prefixed = { ...op };
|
|
176
|
-
if (op.vcs) {
|
|
177
|
-
const vcs = { ...op.vcs };
|
|
178
|
-
if (vcs.issueId && !vcs.issueId.includes(":")) {
|
|
179
|
-
vcs.issueId = `${remoteName}:${vcs.issueId}`;
|
|
180
|
-
}
|
|
181
|
-
if (vcs.parentIssueId && !vcs.parentIssueId.includes(":")) {
|
|
182
|
-
vcs.parentIssueId = `${remoteName}:${vcs.parentIssueId}`;
|
|
183
|
-
}
|
|
184
|
-
if (vcs.blockedByIssueId && !vcs.blockedByIssueId.includes(":")) {
|
|
185
|
-
vcs.blockedByIssueId = `${remoteName}:${vcs.blockedByIssueId}`;
|
|
186
|
-
}
|
|
187
|
-
if (vcs.decisionId && !vcs.decisionId.includes(":")) {
|
|
188
|
-
vcs.decisionId = `${remoteName}:${vcs.decisionId}`;
|
|
189
|
-
}
|
|
190
|
-
prefixed.vcs = vcs;
|
|
191
|
-
}
|
|
192
|
-
if (op.facts) {
|
|
193
|
-
prefixed.facts = op.facts.map((fact) => {
|
|
194
|
-
if (fact.e === "entity" && fact.a === "id" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
195
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
196
|
-
}
|
|
197
|
-
if (fact.e === "entity" && fact.a === "from" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
198
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
199
|
-
}
|
|
200
|
-
if (fact.e === "entity" && fact.a === "to" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
201
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
202
|
-
}
|
|
203
|
-
return fact;
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
if (op.links) {
|
|
207
|
-
prefixed.links = op.links.map((link) => ({
|
|
208
|
-
...link,
|
|
209
|
-
e1: link.e1.includes(":") ? link.e1 : `${remoteName}:${link.e1}`,
|
|
210
|
-
e2: link.e2.includes(":") ? link.e2 : `${remoteName}:${link.e2}`
|
|
211
|
-
}));
|
|
212
|
-
}
|
|
213
|
-
if (!prefixed.facts) prefixed.facts = [];
|
|
214
|
-
prefixed.facts.push({
|
|
215
|
-
e: "op",
|
|
216
|
-
a: "remote",
|
|
217
|
-
v: remoteName
|
|
218
|
-
});
|
|
219
|
-
return prefixed;
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
export {
|
|
223
|
-
RemoteManager
|
|
224
|
-
};
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TrellisVcsEngine,
|
|
3
|
-
init_engine
|
|
4
|
-
} from "./chunk-QERIS7QY.js";
|
|
5
|
-
import "./chunk-WMR777PO.js";
|
|
6
|
-
import "./chunk-STLN6A6B.js";
|
|
7
|
-
import "./chunk-NO73OK2I.js";
|
|
8
|
-
import "./chunk-4XIVMVHC.js";
|
|
9
|
-
import "./chunk-KFQGP6VL.js";
|
|
10
|
-
|
|
11
|
-
// src/federation/remote-manager.ts
|
|
12
|
-
init_engine();
|
|
13
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
14
|
-
import { join, resolve } from "path";
|
|
15
|
-
var RemoteManager = class {
|
|
16
|
-
trellisPath;
|
|
17
|
-
remotesPath;
|
|
18
|
-
constructor(trellisPath) {
|
|
19
|
-
this.trellisPath = trellisPath;
|
|
20
|
-
this.remotesPath = join(trellisPath, "remotes.json");
|
|
21
|
-
}
|
|
22
|
-
/** Load remotes configuration */
|
|
23
|
-
loadRemotes() {
|
|
24
|
-
if (!existsSync(this.remotesPath)) {
|
|
25
|
-
return { remotes: {} };
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
const content = readFileSync(this.remotesPath, "utf8");
|
|
29
|
-
return JSON.parse(content);
|
|
30
|
-
} catch (error) {
|
|
31
|
-
throw new Error(`Failed to load remotes config: ${error}`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/** Save remotes configuration */
|
|
35
|
-
saveRemotes(config) {
|
|
36
|
-
try {
|
|
37
|
-
if (!existsSync(this.trellisPath)) {
|
|
38
|
-
mkdirSync(this.trellisPath, { recursive: true });
|
|
39
|
-
}
|
|
40
|
-
writeFileSync(this.remotesPath, JSON.stringify(config, null, 2), "utf8");
|
|
41
|
-
} catch (error) {
|
|
42
|
-
throw new Error(`Failed to save remotes config: ${error}`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/** Add a new remote */
|
|
46
|
-
addRemote(name, path) {
|
|
47
|
-
const config = this.loadRemotes();
|
|
48
|
-
if (config.remotes[name]) {
|
|
49
|
-
throw new Error(`Remote '${name}' already exists`);
|
|
50
|
-
}
|
|
51
|
-
const resolvedPath = resolve(path);
|
|
52
|
-
if (!TrellisVcsEngine.isRepo(resolvedPath)) {
|
|
53
|
-
throw new Error(`Not a TrellisVCS repository: ${resolvedPath}`);
|
|
54
|
-
}
|
|
55
|
-
config.remotes[name] = {
|
|
56
|
-
name,
|
|
57
|
-
path: resolvedPath
|
|
58
|
-
};
|
|
59
|
-
this.saveRemotes(config);
|
|
60
|
-
}
|
|
61
|
-
/** Remove a remote */
|
|
62
|
-
removeRemote(name) {
|
|
63
|
-
const config = this.loadRemotes();
|
|
64
|
-
if (!config.remotes[name]) {
|
|
65
|
-
throw new Error(`Remote '${name}' not found`);
|
|
66
|
-
}
|
|
67
|
-
delete config.remotes[name];
|
|
68
|
-
this.saveRemotes(config);
|
|
69
|
-
}
|
|
70
|
-
/** List all remotes */
|
|
71
|
-
listRemotes() {
|
|
72
|
-
const config = this.loadRemotes();
|
|
73
|
-
return Object.values(config.remotes);
|
|
74
|
-
}
|
|
75
|
-
/** Pull new ops from a specific remote */
|
|
76
|
-
async pullRemote(remoteName, localEngine) {
|
|
77
|
-
const startTime = Date.now();
|
|
78
|
-
const config = this.loadRemotes();
|
|
79
|
-
const remote = config.remotes[remoteName];
|
|
80
|
-
if (!remote) {
|
|
81
|
-
throw new Error(`Remote '${remoteName}' not found`);
|
|
82
|
-
}
|
|
83
|
-
const errors = [];
|
|
84
|
-
let newOps = 0;
|
|
85
|
-
let latestOpId = remote.lastOpId || "";
|
|
86
|
-
try {
|
|
87
|
-
const remoteEngine = new TrellisVcsEngine({ rootPath: remote.path });
|
|
88
|
-
remoteEngine.open();
|
|
89
|
-
const remoteOps = remoteEngine.getOps();
|
|
90
|
-
if (remoteOps.length === 0) {
|
|
91
|
-
return {
|
|
92
|
-
remote: remoteName,
|
|
93
|
-
newOps: 0,
|
|
94
|
-
latestOpId: "",
|
|
95
|
-
durationMs: Date.now() - startTime,
|
|
96
|
-
errors: []
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
const lastOpHash = remote.lastOpId;
|
|
100
|
-
let startIndex = 0;
|
|
101
|
-
if (lastOpHash) {
|
|
102
|
-
startIndex = remoteOps.findIndex((op) => op.hash === lastOpHash);
|
|
103
|
-
if (startIndex === -1) {
|
|
104
|
-
startIndex = 0;
|
|
105
|
-
errors.push(
|
|
106
|
-
`Last op hash ${lastOpHash} not found in remote, pulling all ops`
|
|
107
|
-
);
|
|
108
|
-
} else {
|
|
109
|
-
startIndex++;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
const opsToPull = remoteOps.slice(startIndex);
|
|
113
|
-
if (opsToPull.length > 0) {
|
|
114
|
-
const prefixedOps = opsToPull.map(
|
|
115
|
-
(op) => this.prefixOpEntities(op, remoteName)
|
|
116
|
-
);
|
|
117
|
-
for (const op of prefixedOps) {
|
|
118
|
-
localEngine.opLog.append(op);
|
|
119
|
-
newOps++;
|
|
120
|
-
}
|
|
121
|
-
latestOpId = remoteOps[remoteOps.length - 1].hash;
|
|
122
|
-
}
|
|
123
|
-
remote.lastOpId = latestOpId;
|
|
124
|
-
remote.pulledAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
125
|
-
this.saveRemotes(config);
|
|
126
|
-
} catch (error) {
|
|
127
|
-
errors.push(`Failed to pull from remote: ${error}`);
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
remote: remoteName,
|
|
131
|
-
newOps,
|
|
132
|
-
latestOpId,
|
|
133
|
-
durationMs: Date.now() - startTime,
|
|
134
|
-
errors
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
/** Pull from all configured remotes */
|
|
138
|
-
async pullAll(localEngine) {
|
|
139
|
-
const config = this.loadRemotes();
|
|
140
|
-
const remoteNames = Object.keys(config.remotes);
|
|
141
|
-
if (remoteNames.length === 0) {
|
|
142
|
-
return {
|
|
143
|
-
results: [],
|
|
144
|
-
totalNewOps: 0,
|
|
145
|
-
totalDurationMs: 0
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
const startTime = Date.now();
|
|
149
|
-
const results = [];
|
|
150
|
-
let totalNewOps = 0;
|
|
151
|
-
for (const remoteName of remoteNames) {
|
|
152
|
-
try {
|
|
153
|
-
const result = await this.pullRemote(remoteName, localEngine);
|
|
154
|
-
results.push(result);
|
|
155
|
-
totalNewOps += result.newOps;
|
|
156
|
-
} catch (error) {
|
|
157
|
-
results.push({
|
|
158
|
-
remote: remoteName,
|
|
159
|
-
newOps: 0,
|
|
160
|
-
latestOpId: "",
|
|
161
|
-
durationMs: 0,
|
|
162
|
-
errors: [`Failed to pull: ${error}`]
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return {
|
|
167
|
-
results,
|
|
168
|
-
totalNewOps,
|
|
169
|
-
totalDurationMs: Date.now() - startTime
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
/** Prefix entity IDs in operations with remote name */
|
|
173
|
-
prefixOpEntities(op, remoteName) {
|
|
174
|
-
const prefixed = { ...op };
|
|
175
|
-
if (op.vcs) {
|
|
176
|
-
const vcs = { ...op.vcs };
|
|
177
|
-
if (vcs.issueId && !vcs.issueId.includes(":")) {
|
|
178
|
-
vcs.issueId = `${remoteName}:${vcs.issueId}`;
|
|
179
|
-
}
|
|
180
|
-
if (vcs.parentIssueId && !vcs.parentIssueId.includes(":")) {
|
|
181
|
-
vcs.parentIssueId = `${remoteName}:${vcs.parentIssueId}`;
|
|
182
|
-
}
|
|
183
|
-
if (vcs.blockedByIssueId && !vcs.blockedByIssueId.includes(":")) {
|
|
184
|
-
vcs.blockedByIssueId = `${remoteName}:${vcs.blockedByIssueId}`;
|
|
185
|
-
}
|
|
186
|
-
if (vcs.decisionId && !vcs.decisionId.includes(":")) {
|
|
187
|
-
vcs.decisionId = `${remoteName}:${vcs.decisionId}`;
|
|
188
|
-
}
|
|
189
|
-
prefixed.vcs = vcs;
|
|
190
|
-
}
|
|
191
|
-
if (op.facts) {
|
|
192
|
-
prefixed.facts = op.facts.map((fact) => {
|
|
193
|
-
if (fact.e === "entity" && fact.a === "id" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
194
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
195
|
-
}
|
|
196
|
-
if (fact.e === "entity" && fact.a === "from" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
197
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
198
|
-
}
|
|
199
|
-
if (fact.e === "entity" && fact.a === "to" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
200
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
201
|
-
}
|
|
202
|
-
return fact;
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
if (op.links) {
|
|
206
|
-
prefixed.links = op.links.map((link) => ({
|
|
207
|
-
...link,
|
|
208
|
-
e1: link.e1.includes(":") ? link.e1 : `${remoteName}:${link.e1}`,
|
|
209
|
-
e2: link.e2.includes(":") ? link.e2 : `${remoteName}:${link.e2}`
|
|
210
|
-
}));
|
|
211
|
-
}
|
|
212
|
-
if (!prefixed.facts) prefixed.facts = [];
|
|
213
|
-
prefixed.facts.push({
|
|
214
|
-
e: "op",
|
|
215
|
-
a: "remote",
|
|
216
|
-
v: remoteName
|
|
217
|
-
});
|
|
218
|
-
return prefixed;
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
|
-
export {
|
|
222
|
-
RemoteManager
|
|
223
|
-
};
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TrellisVcsEngine,
|
|
3
|
-
init_engine
|
|
4
|
-
} from "./chunk-HGI74PXB.js";
|
|
5
|
-
import "./chunk-4XIVMVHC.js";
|
|
6
|
-
import "./chunk-B3ZIFA2O.js";
|
|
7
|
-
import "./chunk-36VSSTL7.js";
|
|
8
|
-
import "./chunk-BXSTJVE3.js";
|
|
9
|
-
import "./chunk-GLM4HGN4.js";
|
|
10
|
-
import "./chunk-KFQGP6VL.js";
|
|
11
|
-
|
|
12
|
-
// src/federation/remote-manager.ts
|
|
13
|
-
init_engine();
|
|
14
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
15
|
-
import { join, resolve } from "path";
|
|
16
|
-
var RemoteManager = class {
|
|
17
|
-
trellisPath;
|
|
18
|
-
remotesPath;
|
|
19
|
-
constructor(trellisPath) {
|
|
20
|
-
this.trellisPath = trellisPath;
|
|
21
|
-
this.remotesPath = join(trellisPath, "remotes.json");
|
|
22
|
-
}
|
|
23
|
-
/** Load remotes configuration */
|
|
24
|
-
loadRemotes() {
|
|
25
|
-
if (!existsSync(this.remotesPath)) {
|
|
26
|
-
return { remotes: {} };
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
const content = readFileSync(this.remotesPath, "utf8");
|
|
30
|
-
return JSON.parse(content);
|
|
31
|
-
} catch (error) {
|
|
32
|
-
throw new Error(`Failed to load remotes config: ${error}`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/** Save remotes configuration */
|
|
36
|
-
saveRemotes(config) {
|
|
37
|
-
try {
|
|
38
|
-
if (!existsSync(this.trellisPath)) {
|
|
39
|
-
mkdirSync(this.trellisPath, { recursive: true });
|
|
40
|
-
}
|
|
41
|
-
writeFileSync(this.remotesPath, JSON.stringify(config, null, 2), "utf8");
|
|
42
|
-
} catch (error) {
|
|
43
|
-
throw new Error(`Failed to save remotes config: ${error}`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/** Add a new remote */
|
|
47
|
-
addRemote(name, path) {
|
|
48
|
-
const config = this.loadRemotes();
|
|
49
|
-
if (config.remotes[name]) {
|
|
50
|
-
throw new Error(`Remote '${name}' already exists`);
|
|
51
|
-
}
|
|
52
|
-
const resolvedPath = resolve(path);
|
|
53
|
-
if (!TrellisVcsEngine.isRepo(resolvedPath)) {
|
|
54
|
-
throw new Error(`Not a TrellisVCS repository: ${resolvedPath}`);
|
|
55
|
-
}
|
|
56
|
-
config.remotes[name] = {
|
|
57
|
-
name,
|
|
58
|
-
path: resolvedPath
|
|
59
|
-
};
|
|
60
|
-
this.saveRemotes(config);
|
|
61
|
-
}
|
|
62
|
-
/** Remove a remote */
|
|
63
|
-
removeRemote(name) {
|
|
64
|
-
const config = this.loadRemotes();
|
|
65
|
-
if (!config.remotes[name]) {
|
|
66
|
-
throw new Error(`Remote '${name}' not found`);
|
|
67
|
-
}
|
|
68
|
-
delete config.remotes[name];
|
|
69
|
-
this.saveRemotes(config);
|
|
70
|
-
}
|
|
71
|
-
/** List all remotes */
|
|
72
|
-
listRemotes() {
|
|
73
|
-
const config = this.loadRemotes();
|
|
74
|
-
return Object.values(config.remotes);
|
|
75
|
-
}
|
|
76
|
-
/** Pull new ops from a specific remote */
|
|
77
|
-
async pullRemote(remoteName, localEngine) {
|
|
78
|
-
const startTime = Date.now();
|
|
79
|
-
const config = this.loadRemotes();
|
|
80
|
-
const remote = config.remotes[remoteName];
|
|
81
|
-
if (!remote) {
|
|
82
|
-
throw new Error(`Remote '${remoteName}' not found`);
|
|
83
|
-
}
|
|
84
|
-
const errors = [];
|
|
85
|
-
let newOps = 0;
|
|
86
|
-
let latestOpId = remote.lastOpId || "";
|
|
87
|
-
try {
|
|
88
|
-
const remoteEngine = new TrellisVcsEngine({ rootPath: remote.path });
|
|
89
|
-
remoteEngine.open();
|
|
90
|
-
const remoteOps = remoteEngine.getOps();
|
|
91
|
-
if (remoteOps.length === 0) {
|
|
92
|
-
return {
|
|
93
|
-
remote: remoteName,
|
|
94
|
-
newOps: 0,
|
|
95
|
-
latestOpId: "",
|
|
96
|
-
durationMs: Date.now() - startTime,
|
|
97
|
-
errors: []
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
const lastOpHash = remote.lastOpId;
|
|
101
|
-
let startIndex = 0;
|
|
102
|
-
if (lastOpHash) {
|
|
103
|
-
startIndex = remoteOps.findIndex((op) => op.hash === lastOpHash);
|
|
104
|
-
if (startIndex === -1) {
|
|
105
|
-
startIndex = 0;
|
|
106
|
-
errors.push(
|
|
107
|
-
`Last op hash ${lastOpHash} not found in remote, pulling all ops`
|
|
108
|
-
);
|
|
109
|
-
} else {
|
|
110
|
-
startIndex++;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const opsToPull = remoteOps.slice(startIndex);
|
|
114
|
-
if (opsToPull.length > 0) {
|
|
115
|
-
const prefixedOps = opsToPull.map(
|
|
116
|
-
(op) => this.prefixOpEntities(op, remoteName)
|
|
117
|
-
);
|
|
118
|
-
for (const op of prefixedOps) {
|
|
119
|
-
localEngine.opLog.append(op);
|
|
120
|
-
newOps++;
|
|
121
|
-
}
|
|
122
|
-
latestOpId = remoteOps[remoteOps.length - 1].hash;
|
|
123
|
-
}
|
|
124
|
-
remote.lastOpId = latestOpId;
|
|
125
|
-
remote.pulledAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
126
|
-
this.saveRemotes(config);
|
|
127
|
-
} catch (error) {
|
|
128
|
-
errors.push(`Failed to pull from remote: ${error}`);
|
|
129
|
-
}
|
|
130
|
-
return {
|
|
131
|
-
remote: remoteName,
|
|
132
|
-
newOps,
|
|
133
|
-
latestOpId,
|
|
134
|
-
durationMs: Date.now() - startTime,
|
|
135
|
-
errors
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
/** Pull from all configured remotes */
|
|
139
|
-
async pullAll(localEngine) {
|
|
140
|
-
const config = this.loadRemotes();
|
|
141
|
-
const remoteNames = Object.keys(config.remotes);
|
|
142
|
-
if (remoteNames.length === 0) {
|
|
143
|
-
return {
|
|
144
|
-
results: [],
|
|
145
|
-
totalNewOps: 0,
|
|
146
|
-
totalDurationMs: 0
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
const startTime = Date.now();
|
|
150
|
-
const results = [];
|
|
151
|
-
let totalNewOps = 0;
|
|
152
|
-
for (const remoteName of remoteNames) {
|
|
153
|
-
try {
|
|
154
|
-
const result = await this.pullRemote(remoteName, localEngine);
|
|
155
|
-
results.push(result);
|
|
156
|
-
totalNewOps += result.newOps;
|
|
157
|
-
} catch (error) {
|
|
158
|
-
results.push({
|
|
159
|
-
remote: remoteName,
|
|
160
|
-
newOps: 0,
|
|
161
|
-
latestOpId: "",
|
|
162
|
-
durationMs: 0,
|
|
163
|
-
errors: [`Failed to pull: ${error}`]
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
results,
|
|
169
|
-
totalNewOps,
|
|
170
|
-
totalDurationMs: Date.now() - startTime
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
/** Prefix entity IDs in operations with remote name */
|
|
174
|
-
prefixOpEntities(op, remoteName) {
|
|
175
|
-
const prefixed = { ...op };
|
|
176
|
-
if (op.vcs) {
|
|
177
|
-
const vcs = { ...op.vcs };
|
|
178
|
-
if (vcs.issueId && !vcs.issueId.includes(":")) {
|
|
179
|
-
vcs.issueId = `${remoteName}:${vcs.issueId}`;
|
|
180
|
-
}
|
|
181
|
-
if (vcs.parentIssueId && !vcs.parentIssueId.includes(":")) {
|
|
182
|
-
vcs.parentIssueId = `${remoteName}:${vcs.parentIssueId}`;
|
|
183
|
-
}
|
|
184
|
-
if (vcs.blockedByIssueId && !vcs.blockedByIssueId.includes(":")) {
|
|
185
|
-
vcs.blockedByIssueId = `${remoteName}:${vcs.blockedByIssueId}`;
|
|
186
|
-
}
|
|
187
|
-
if (vcs.decisionId && !vcs.decisionId.includes(":")) {
|
|
188
|
-
vcs.decisionId = `${remoteName}:${vcs.decisionId}`;
|
|
189
|
-
}
|
|
190
|
-
prefixed.vcs = vcs;
|
|
191
|
-
}
|
|
192
|
-
if (op.facts) {
|
|
193
|
-
prefixed.facts = op.facts.map((fact) => {
|
|
194
|
-
if (fact.e === "entity" && fact.a === "id" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
195
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
196
|
-
}
|
|
197
|
-
if (fact.e === "entity" && fact.a === "from" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
198
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
199
|
-
}
|
|
200
|
-
if (fact.e === "entity" && fact.a === "to" && typeof fact.v === "string" && !fact.v.includes(":")) {
|
|
201
|
-
return { ...fact, v: `${remoteName}:${fact.v}` };
|
|
202
|
-
}
|
|
203
|
-
return fact;
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
if (op.links) {
|
|
207
|
-
prefixed.links = op.links.map((link) => ({
|
|
208
|
-
...link,
|
|
209
|
-
e1: link.e1.includes(":") ? link.e1 : `${remoteName}:${link.e1}`,
|
|
210
|
-
e2: link.e2.includes(":") ? link.e2 : `${remoteName}:${link.e2}`
|
|
211
|
-
}));
|
|
212
|
-
}
|
|
213
|
-
if (!prefixed.facts) prefixed.facts = [];
|
|
214
|
-
prefixed.facts.push({
|
|
215
|
-
e: "op",
|
|
216
|
-
a: "remote",
|
|
217
|
-
v: remoteName
|
|
218
|
-
});
|
|
219
|
-
return prefixed;
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
export {
|
|
223
|
-
RemoteManager
|
|
224
|
-
};
|