@amalgm/live 0.2.26 → 0.2.28
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/PURPOSE.md +52 -29
- package/README.md +1 -2
- package/dist/contracts/index.d.ts +0 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +0 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/detection/record-proposal.d.ts +3 -2
- package/dist/detection/record-proposal.d.ts.map +1 -1
- package/dist/detection/record-proposal.js +9 -7
- package/dist/detection/record-proposal.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/machines/index.d.ts +0 -2
- package/dist/machines/index.d.ts.map +1 -1
- package/dist/machines/index.js +0 -2
- package/dist/machines/index.js.map +1 -1
- package/dist/records/authority.d.ts +23 -0
- package/dist/records/authority.d.ts.map +1 -0
- package/dist/records/authority.js +28 -0
- package/dist/records/authority.js.map +1 -0
- package/dist/records/codec.d.ts +6 -0
- package/dist/records/codec.d.ts.map +1 -0
- package/dist/records/codec.js +42 -0
- package/dist/records/codec.js.map +1 -0
- package/dist/records/contracts.d.ts +46 -0
- package/dist/records/contracts.d.ts.map +1 -0
- package/dist/records/contracts.js +114 -0
- package/dist/records/contracts.js.map +1 -0
- package/dist/records/inbox.d.ts +18 -0
- package/dist/records/inbox.d.ts.map +1 -0
- package/dist/records/inbox.js +34 -0
- package/dist/records/inbox.js.map +1 -0
- package/dist/records/index.d.ts +7 -0
- package/dist/records/index.d.ts.map +1 -0
- package/dist/records/index.js +7 -0
- package/dist/records/index.js.map +1 -0
- package/dist/records/outbox.d.ts +20 -0
- package/dist/records/outbox.d.ts.map +1 -0
- package/dist/records/outbox.js +44 -0
- package/dist/records/outbox.js.map +1 -0
- package/dist/registration/user-ground.d.ts +5 -2
- package/dist/registration/user-ground.d.ts.map +1 -1
- package/dist/registration/user-ground.js +14 -3
- package/dist/registration/user-ground.js.map +1 -1
- package/dist/watching/suspicion.d.ts.map +1 -1
- package/dist/watching/suspicion.js +29 -1
- package/dist/watching/suspicion.js.map +1 -1
- package/dist-cjs/contracts/binding.js +26 -0
- package/dist-cjs/contracts/binding.js.map +1 -0
- package/dist-cjs/contracts/content.js +99 -0
- package/dist-cjs/contracts/content.js.map +1 -0
- package/dist-cjs/contracts/docs.js +56 -0
- package/dist-cjs/contracts/docs.js.map +1 -0
- package/dist-cjs/contracts/events.js +44 -0
- package/dist-cjs/contracts/events.js.map +1 -0
- package/dist-cjs/contracts/frames/gateway.js +39 -0
- package/dist-cjs/contracts/frames/gateway.js.map +1 -0
- package/dist-cjs/contracts/frames/stream.js +20 -0
- package/dist-cjs/contracts/frames/stream.js.map +1 -0
- package/dist-cjs/contracts/frames/tunnel.js +60 -0
- package/dist-cjs/contracts/frames/tunnel.js.map +1 -0
- package/dist-cjs/contracts/index.js +34 -0
- package/dist-cjs/contracts/index.js.map +1 -0
- package/dist-cjs/contracts/presence.js +38 -0
- package/dist-cjs/contracts/presence.js.map +1 -0
- package/dist-cjs/contracts/resources.js +114 -0
- package/dist-cjs/contracts/resources.js.map +1 -0
- package/dist-cjs/contracts/snapshot.js +31 -0
- package/dist-cjs/contracts/snapshot.js.map +1 -0
- package/dist-cjs/contracts/validate.js +34 -0
- package/dist-cjs/contracts/validate.js.map +1 -0
- package/dist-cjs/detection/adapter-contract.js +168 -0
- package/dist-cjs/detection/adapter-contract.js.map +1 -0
- package/dist-cjs/detection/batch.js +71 -0
- package/dist-cjs/detection/batch.js.map +1 -0
- package/dist-cjs/detection/classify.js +48 -0
- package/dist-cjs/detection/classify.js.map +1 -0
- package/dist-cjs/detection/content.js +122 -0
- package/dist-cjs/detection/content.js.map +1 -0
- package/dist-cjs/detection/continuity.js +88 -0
- package/dist-cjs/detection/continuity.js.map +1 -0
- package/dist-cjs/detection/diff.js +193 -0
- package/dist-cjs/detection/diff.js.map +1 -0
- package/dist-cjs/detection/echo.js +25 -0
- package/dist-cjs/detection/echo.js.map +1 -0
- package/dist-cjs/detection/enrollment.js +189 -0
- package/dist-cjs/detection/enrollment.js.map +1 -0
- package/dist-cjs/detection/index.js +57 -0
- package/dist-cjs/detection/index.js.map +1 -0
- package/dist-cjs/detection/record-proposal.js +170 -0
- package/dist-cjs/detection/record-proposal.js.map +1 -0
- package/dist-cjs/detection/refusal.js +44 -0
- package/dist-cjs/detection/refusal.js.map +1 -0
- package/dist-cjs/detection/repository.js +67 -0
- package/dist-cjs/detection/repository.js.map +1 -0
- package/dist-cjs/detection/territory.js +82 -0
- package/dist-cjs/detection/territory.js.map +1 -0
- package/dist-cjs/detection/watch-boundary.js +51 -0
- package/dist-cjs/detection/watch-boundary.js.map +1 -0
- package/dist-cjs/entities/bytes.js +92 -0
- package/dist-cjs/entities/bytes.js.map +1 -0
- package/dist-cjs/entities/cloud.js +171 -0
- package/dist-cjs/entities/cloud.js.map +1 -0
- package/dist-cjs/entities/index.js +39 -0
- package/dist-cjs/entities/index.js.map +1 -0
- package/dist-cjs/entities/moves.js +85 -0
- package/dist-cjs/entities/moves.js.map +1 -0
- package/dist-cjs/entities/repo-states.js +256 -0
- package/dist-cjs/entities/repo-states.js.map +1 -0
- package/dist-cjs/entities/rules.js +216 -0
- package/dist-cjs/entities/rules.js.map +1 -0
- package/dist-cjs/entities/types.js +44 -0
- package/dist-cjs/entities/types.js.map +1 -0
- package/dist-cjs/files/commands.js +120 -0
- package/dist-cjs/files/commands.js.map +1 -0
- package/dist-cjs/files/index.js +19 -0
- package/dist-cjs/files/index.js.map +1 -0
- package/dist-cjs/index.js +39 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/machines/arbitration.js +41 -0
- package/dist-cjs/machines/arbitration.js.map +1 -0
- package/dist-cjs/machines/backoff.js +38 -0
- package/dist-cjs/machines/backoff.js.map +1 -0
- package/dist-cjs/machines/bootstrap.js +110 -0
- package/dist-cjs/machines/bootstrap.js.map +1 -0
- package/dist-cjs/machines/chunks.js +72 -0
- package/dist-cjs/machines/chunks.js.map +1 -0
- package/dist-cjs/machines/index.js +28 -0
- package/dist-cjs/machines/index.js.map +1 -0
- package/dist-cjs/machines/presence.js +53 -0
- package/dist-cjs/machines/presence.js.map +1 -0
- package/dist-cjs/merge/index.js +25 -0
- package/dist-cjs/merge/index.js.map +1 -0
- package/dist-cjs/merge/merge3.js +191 -0
- package/dist-cjs/merge/merge3.js.map +1 -0
- package/dist-cjs/package.json +1 -0
- package/dist-cjs/records/authority.js +31 -0
- package/dist-cjs/records/authority.js.map +1 -0
- package/dist-cjs/records/codec.js +48 -0
- package/dist-cjs/records/codec.js.map +1 -0
- package/dist-cjs/records/contracts.js +121 -0
- package/dist-cjs/records/contracts.js.map +1 -0
- package/dist-cjs/records/inbox.js +37 -0
- package/dist-cjs/records/inbox.js.map +1 -0
- package/dist-cjs/records/index.js +23 -0
- package/dist-cjs/records/index.js.map +1 -0
- package/dist-cjs/records/outbox.js +48 -0
- package/dist-cjs/records/outbox.js.map +1 -0
- package/dist-cjs/registration/index.js +19 -0
- package/dist-cjs/registration/index.js.map +1 -0
- package/dist-cjs/registration/user-ground.js +183 -0
- package/dist-cjs/registration/user-ground.js.map +1 -0
- package/dist-cjs/transfer/artifacts.js +75 -0
- package/dist-cjs/transfer/artifacts.js.map +1 -0
- package/dist-cjs/transfer/batches.js +44 -0
- package/dist-cjs/transfer/batches.js.map +1 -0
- package/dist-cjs/transfer/download.js +88 -0
- package/dist-cjs/transfer/download.js.map +1 -0
- package/dist-cjs/transfer/index.js +21 -0
- package/dist-cjs/transfer/index.js.map +1 -0
- package/dist-cjs/transfer/parallel.js +35 -0
- package/dist-cjs/transfer/parallel.js.map +1 -0
- package/dist-cjs/transfer/upload.js +161 -0
- package/dist-cjs/transfer/upload.js.map +1 -0
- package/dist-cjs/watching/coverage.js +54 -0
- package/dist-cjs/watching/coverage.js.map +1 -0
- package/dist-cjs/watching/index.js +24 -0
- package/dist-cjs/watching/index.js.map +1 -0
- package/dist-cjs/watching/suspicion.js +105 -0
- package/dist-cjs/watching/suspicion.js.map +1 -0
- package/dist-cjs/workspace/api.js +66 -0
- package/dist-cjs/workspace/api.js.map +1 -0
- package/dist-cjs/workspace/identity.js +32 -0
- package/dist-cjs/workspace/identity.js.map +1 -0
- package/dist-cjs/workspace/index.js +14 -0
- package/dist-cjs/workspace/index.js.map +1 -0
- package/dist-cjs/workspace/memory-store.js +21 -0
- package/dist-cjs/workspace/memory-store.js.map +1 -0
- package/dist-cjs/workspace/registry.js +98 -0
- package/dist-cjs/workspace/registry.js.map +1 -0
- package/dist-cjs/workspace/types.js +3 -0
- package/dist-cjs/workspace/types.js.map +1 -0
- package/package.json +30 -8
- package/dist/contracts/mutation.d.ts +0 -51
- package/dist/contracts/mutation.d.ts.map +0 -1
- package/dist/contracts/mutation.js +0 -55
- package/dist/contracts/mutation.js.map +0 -1
- package/dist/machines/journal.d.ts +0 -63
- package/dist/machines/journal.d.ts.map +0 -1
- package/dist/machines/journal.js +0 -71
- package/dist/machines/journal.js.map +0 -1
- package/dist/machines/ordering.d.ts +0 -53
- package/dist/machines/ordering.d.ts.map +0 -1
- package/dist/machines/ordering.js +0 -87
- package/dist/machines/ordering.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/transfer/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The coverage law: one OS watcher per outermost tree.
|
|
4
|
+
*
|
|
5
|
+
* A recursive watcher on a directory hears events beneath it at every depth,
|
|
6
|
+
* so a root enclosed by watched ground already has content coverage. Opening
|
|
7
|
+
* another recursive watcher over enclosed ground adds no information and, on
|
|
8
|
+
* Linux, pays for the same inotify ground again.
|
|
9
|
+
*
|
|
10
|
+
* These are pure decisions over canonical root paths. The host owns opening,
|
|
11
|
+
* sharing, and closing physical handles.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.doorbellGround = doorbellGround;
|
|
15
|
+
exports.watchOwnerOf = watchOwnerOf;
|
|
16
|
+
exports.coveredRoots = coveredRoots;
|
|
17
|
+
/** '/a/b' → '/a'; '/a' → '/'; a bare name → '.'. */
|
|
18
|
+
const parentDirOf = (path) => {
|
|
19
|
+
const cut = path.lastIndexOf('/');
|
|
20
|
+
if (cut < 0)
|
|
21
|
+
return '.';
|
|
22
|
+
return cut === 0 ? '/' : path.slice(0, cut);
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Directory roots guard themselves. A single-file root rings through its
|
|
26
|
+
* parent because watching a file inode goes deaf when an atomic save replaces
|
|
27
|
+
* that inode.
|
|
28
|
+
*/
|
|
29
|
+
function doorbellGround(root) {
|
|
30
|
+
return root.kind === 'file' ? parentDirOf(root.path) : root.path;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Return the outermost directory root whose recursive handle covers `root`,
|
|
34
|
+
* or null when `root` owns its physical coverage.
|
|
35
|
+
*/
|
|
36
|
+
function watchOwnerOf(root, roots) {
|
|
37
|
+
const ground = doorbellGround(root);
|
|
38
|
+
let owner = null;
|
|
39
|
+
for (const other of roots) {
|
|
40
|
+
if (other.rootId === root.rootId || other.kind === 'file')
|
|
41
|
+
continue;
|
|
42
|
+
if (ground !== other.path && !ground.startsWith(`${other.path}/`))
|
|
43
|
+
continue;
|
|
44
|
+
if (!owner || other.path.length < owner.path.length)
|
|
45
|
+
owner = other;
|
|
46
|
+
}
|
|
47
|
+
return owner;
|
|
48
|
+
}
|
|
49
|
+
/** Every logical root routed through an owner's physical handle. */
|
|
50
|
+
function coveredRoots(owner, roots) {
|
|
51
|
+
return roots.filter((root) => root.rootId !== owner.rootId
|
|
52
|
+
&& watchOwnerOf(root, roots)?.rootId === owner.rootId);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/watching/coverage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAwBH,wCAEC;AAMD,oCASC;AAGD,oCAGC;AAnCD,oDAAoD;AACpD,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACxB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAe;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,IAAe,EAAE,KAA2B;IACvE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,KAAK,GAAqB,IAAI,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACpE,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;YAAE,SAAS;QAC5E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;YAAE,KAAK,GAAG,KAAK,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oEAAoE;AACpE,SAAgB,YAAY,CAAC,KAAgB,EAAE,KAA2B;IACxE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;WACrD,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Watching — portable laws for minimal filesystem notification coverage and
|
|
4
|
+
* durable suspicion. OS handles belong to the host; Detect begins only after
|
|
5
|
+
* these modules have said where disk truth must be reread.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
__exportStar(require("./coverage.js"), exports);
|
|
23
|
+
__exportStar(require("./suspicion.js"), exports);
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/watching/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,gDAA8B;AAC9B,iDAA+B"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A filesystem notification is only a doorbell: its path says where truth
|
|
4
|
+
* must be reread, never what happened there. Named suspicion stays live until
|
|
5
|
+
* one settled observation proves it. Generation stamps prevent an observation
|
|
6
|
+
* from consuming a second ring that arrived while it was reading.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.pathIsSuspect = pathIsSuspect;
|
|
10
|
+
exports.createSuspicionScope = createSuspicionScope;
|
|
11
|
+
const normalizeHint = (path) => {
|
|
12
|
+
if (!path || path.startsWith('/') || path.includes('\0'))
|
|
13
|
+
return null;
|
|
14
|
+
if (path.split('/').some((segment) => !segment || segment === '.' || segment === '..'))
|
|
15
|
+
return null;
|
|
16
|
+
return path;
|
|
17
|
+
};
|
|
18
|
+
const commonDirectory = (paths) => {
|
|
19
|
+
const split = paths.map((path) => path.split('/'));
|
|
20
|
+
const shortest = Math.min(...split.map((segments) => segments.length));
|
|
21
|
+
const common = [];
|
|
22
|
+
for (let index = 0; index < shortest; index += 1) {
|
|
23
|
+
const segment = split[0]?.[index];
|
|
24
|
+
if (!segment || split.some((candidate) => candidate[index] !== segment))
|
|
25
|
+
break;
|
|
26
|
+
common.push(segment);
|
|
27
|
+
}
|
|
28
|
+
// A common leaf name is not proof that it is a directory. Widen one level.
|
|
29
|
+
if (paths.some((path) => path === common.join('/')))
|
|
30
|
+
common.pop();
|
|
31
|
+
return common.join('/');
|
|
32
|
+
};
|
|
33
|
+
/** A named directory suspects every descendant. Exact files suspect themselves. */
|
|
34
|
+
function pathIsSuspect(path, suspects) {
|
|
35
|
+
if (suspects === null)
|
|
36
|
+
return true;
|
|
37
|
+
return suspects.some((named) => path === named || path.startsWith(`${named}/`));
|
|
38
|
+
}
|
|
39
|
+
function createSuspicionScope(cap = 512) {
|
|
40
|
+
if (!Number.isSafeInteger(cap) || cap < 1)
|
|
41
|
+
throw new Error('suspicion scope cap must be positive');
|
|
42
|
+
const paths = new Map();
|
|
43
|
+
let generation = 0;
|
|
44
|
+
let allGeneration = 0;
|
|
45
|
+
const suspectEverything = () => {
|
|
46
|
+
generation += 1;
|
|
47
|
+
allGeneration = generation;
|
|
48
|
+
paths.clear();
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
ring(path) {
|
|
52
|
+
if (path === null) {
|
|
53
|
+
suspectEverything();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const normalized = normalizeHint(path);
|
|
57
|
+
if (normalized === null) {
|
|
58
|
+
suspectEverything();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
generation += 1;
|
|
62
|
+
const covering = [...paths.keys()].find((candidate) => normalized === candidate || normalized.startsWith(`${candidate}/`));
|
|
63
|
+
if (covering) {
|
|
64
|
+
paths.set(covering, generation);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
for (const candidate of paths.keys()) {
|
|
68
|
+
if (candidate.startsWith(`${normalized}/`))
|
|
69
|
+
paths.delete(candidate);
|
|
70
|
+
}
|
|
71
|
+
paths.set(normalized, generation);
|
|
72
|
+
if (paths.size > cap) {
|
|
73
|
+
const ancestor = commonDirectory([...paths.keys()]);
|
|
74
|
+
paths.clear();
|
|
75
|
+
if (ancestor)
|
|
76
|
+
paths.set(ancestor, generation);
|
|
77
|
+
else
|
|
78
|
+
allGeneration = generation;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
suspectAll: suspectEverything,
|
|
82
|
+
snapshot() {
|
|
83
|
+
return {
|
|
84
|
+
generation,
|
|
85
|
+
paths: allGeneration > 0 ? null : [...paths.keys()].sort(),
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
settle(snapshot) {
|
|
89
|
+
if (!Number.isSafeInteger(snapshot.generation)
|
|
90
|
+
|| snapshot.generation < 0 || snapshot.generation > generation) {
|
|
91
|
+
throw new Error('suspicion snapshot generation is invalid');
|
|
92
|
+
}
|
|
93
|
+
if (allGeneration > 0 && allGeneration <= snapshot.generation)
|
|
94
|
+
allGeneration = 0;
|
|
95
|
+
for (const [path, rungAt] of paths) {
|
|
96
|
+
if (rungAt <= snapshot.generation)
|
|
97
|
+
paths.delete(path);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
get size() {
|
|
101
|
+
return allGeneration > 0 ? Number.POSITIVE_INFINITY : paths.size;
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=suspicion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suspicion.js","sourceRoot":"","sources":["../../src/watching/suspicion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWorkspaceApi = createWorkspaceApi;
|
|
4
|
+
function createWorkspaceApi(registry, options) {
|
|
5
|
+
return async (request) => {
|
|
6
|
+
const url = new URL(request.url);
|
|
7
|
+
if (request.method === 'GET' && (url.pathname === '/workspace' || url.pathname === '/workspace/projects')) {
|
|
8
|
+
const projects = await Promise.all(registry.list().map(async (workspace) => ({
|
|
9
|
+
...workspace,
|
|
10
|
+
branch: options.branchForPath ? await options.branchForPath(workspace.path) : null,
|
|
11
|
+
})));
|
|
12
|
+
return json(200, { projects, workspaceRoot: options.workspaceRoot });
|
|
13
|
+
}
|
|
14
|
+
if (request.method === 'POST' && (url.pathname === '/workspace/projects' || url.pathname === '/workspace/import')) {
|
|
15
|
+
return mutate(async () => {
|
|
16
|
+
const body = await request.json();
|
|
17
|
+
const path = body.path ?? body.source_path;
|
|
18
|
+
const name = body.name ?? body.project_name;
|
|
19
|
+
const workspace = registry.register({
|
|
20
|
+
path: typeof path === 'string' ? path : '',
|
|
21
|
+
...(typeof name === 'string' ? { name } : {}),
|
|
22
|
+
source: typeof body.source === 'string' ? body.source : 'computer',
|
|
23
|
+
...(body.managed === undefined ? {} : { managed: Boolean(body.managed) }),
|
|
24
|
+
}, url.pathname.endsWith('/import') ? 'workspace:import' : 'workspace:register');
|
|
25
|
+
return { success: true, workspace, path: workspace.path, name: workspace.name, workspaceRoot: options.workspaceRoot };
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (request.method === 'PATCH' && url.pathname === '/workspace/projects') {
|
|
29
|
+
return mutate(async () => {
|
|
30
|
+
const body = await request.json();
|
|
31
|
+
const identifier = body.id ?? body.path;
|
|
32
|
+
if (typeof identifier !== 'string' || !identifier)
|
|
33
|
+
throw new Error('id or path is required');
|
|
34
|
+
const workspace = registry.rename(identifier, body.name);
|
|
35
|
+
return { success: true, workspace, path: workspace.path, name: workspace.name };
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (request.method === 'DELETE' && url.pathname === '/workspace/projects') {
|
|
39
|
+
return mutate(async () => {
|
|
40
|
+
const body = await request.json();
|
|
41
|
+
const identifier = body.id ?? body.path;
|
|
42
|
+
if (typeof identifier !== 'string' || !identifier)
|
|
43
|
+
throw new Error('id or path is required');
|
|
44
|
+
return { success: true, workspace: registry.remove(identifier) };
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return json(404, { error: 'not found' });
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function mutate(run) {
|
|
51
|
+
try {
|
|
52
|
+
return json(200, await run());
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const message = error instanceof Error ? error.message : 'Workspace request failed';
|
|
56
|
+
const status = message === 'Workspace not found' ? 404 : 400;
|
|
57
|
+
return json(status, { error: message });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function json(status, body) {
|
|
61
|
+
return new Response(JSON.stringify(body), {
|
|
62
|
+
status,
|
|
63
|
+
headers: { 'content-type': 'application/json', 'cache-control': 'no-store' },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/workspace/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isUuidV7 = isUuidV7;
|
|
4
|
+
exports.uuidV7 = uuidV7;
|
|
5
|
+
exports.workspaceUriForPath = workspaceUriForPath;
|
|
6
|
+
const UUID_V7 = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
7
|
+
/** Engine reference: runtime/scripts/amalgm-mcp/workspace/tree/identity.js. */
|
|
8
|
+
function isUuidV7(value) {
|
|
9
|
+
return typeof value === 'string' && UUID_V7.test(value);
|
|
10
|
+
}
|
|
11
|
+
function uuidV7(now, randomBytes) {
|
|
12
|
+
if (!Number.isSafeInteger(now) || now < 0 || now > 0xffffffffffff) {
|
|
13
|
+
throw new TypeError('UUIDv7 timestamp must be an integer between 0 and 2^48 - 1');
|
|
14
|
+
}
|
|
15
|
+
const bytes = Uint8Array.from(randomBytes(16));
|
|
16
|
+
if (bytes.length !== 16)
|
|
17
|
+
throw new TypeError('UUIDv7 random source must return 16 bytes');
|
|
18
|
+
let timestamp = BigInt(now);
|
|
19
|
+
for (let index = 5; index >= 0; index -= 1) {
|
|
20
|
+
bytes[index] = Number(timestamp & 0xffn);
|
|
21
|
+
timestamp >>= 8n;
|
|
22
|
+
}
|
|
23
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x70;
|
|
24
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
25
|
+
const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
26
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
27
|
+
}
|
|
28
|
+
function workspaceUriForPath(localPath, computerId) {
|
|
29
|
+
const encodedPath = localPath.split(/[\\/]/).map(encodeURIComponent).join('/');
|
|
30
|
+
return `computer://${encodeURIComponent(computerId || 'local-computer')}${encodedPath.startsWith('/') ? '' : '/'}${encodedPath}`;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/workspace/identity.ts"],"names":[],"mappings":";;AAGA,4BAEC;AAED,wBAeC;AAED,kDAGC;AA3BD,MAAM,OAAO,GAAG,wEAAwE,CAAC;AAEzF,+EAA+E;AAC/E,SAAgB,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,MAAM,CAAC,GAAW,EAAE,WAA2C;IAC7E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,cAAc,EAAE,CAAC;QAClE,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IAC1F,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;QACzC,SAAS,KAAK,EAAE,CAAC;IACnB,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,SAAgB,mBAAmB,CAAC,SAAiB,EAAE,UAAkB;IACvE,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/E,OAAO,cAAc,kBAAkB,CAAC,UAAU,IAAI,gBAAgB,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,EAAE,CAAC;AACnI,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkspaceRegistry = exports.MemoryWorkspaceStore = exports.workspaceUriForPath = exports.uuidV7 = exports.isUuidV7 = exports.createWorkspaceApi = void 0;
|
|
4
|
+
var api_js_1 = require("./api.js");
|
|
5
|
+
Object.defineProperty(exports, "createWorkspaceApi", { enumerable: true, get: function () { return api_js_1.createWorkspaceApi; } });
|
|
6
|
+
var identity_js_1 = require("./identity.js");
|
|
7
|
+
Object.defineProperty(exports, "isUuidV7", { enumerable: true, get: function () { return identity_js_1.isUuidV7; } });
|
|
8
|
+
Object.defineProperty(exports, "uuidV7", { enumerable: true, get: function () { return identity_js_1.uuidV7; } });
|
|
9
|
+
Object.defineProperty(exports, "workspaceUriForPath", { enumerable: true, get: function () { return identity_js_1.workspaceUriForPath; } });
|
|
10
|
+
var memory_store_js_1 = require("./memory-store.js");
|
|
11
|
+
Object.defineProperty(exports, "MemoryWorkspaceStore", { enumerable: true, get: function () { return memory_store_js_1.MemoryWorkspaceStore; } });
|
|
12
|
+
var registry_js_1 = require("./registry.js");
|
|
13
|
+
Object.defineProperty(exports, "WorkspaceRegistry", { enumerable: true, get: function () { return registry_js_1.WorkspaceRegistry; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAE3B,6CAAsE;AAA7D,uGAAA,QAAQ,OAAA;AAAE,qGAAA,MAAM,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAC9C,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,6CAAkD;AAAzC,gHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryWorkspaceStore = void 0;
|
|
4
|
+
class MemoryWorkspaceStore {
|
|
5
|
+
#records = new Map();
|
|
6
|
+
list() {
|
|
7
|
+
return [...this.#records.values()]
|
|
8
|
+
.sort((left, right) => left.name.localeCompare(right.name) || left.path.localeCompare(right.path));
|
|
9
|
+
}
|
|
10
|
+
find(identifier) {
|
|
11
|
+
return [...this.#records.values()].find((record) => record.id === identifier || record.path === identifier || record.uri === identifier) ?? null;
|
|
12
|
+
}
|
|
13
|
+
put(workspace) {
|
|
14
|
+
this.#records.set(workspace.id, workspace);
|
|
15
|
+
}
|
|
16
|
+
delete(id) {
|
|
17
|
+
this.#records.delete(id);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.MemoryWorkspaceStore = MemoryWorkspaceStore;
|
|
21
|
+
//# sourceMappingURL=memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/workspace/memory-store.ts"],"names":[],"mappings":";;;AAEA,MAAa,oBAAoB;IACtB,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEvD,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC/B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,IAAI,CAAC,UAAkB;QACrB,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACjD,MAAM,CAAC,EAAE,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,GAAG,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC;IACjG,CAAC;IAED,GAAG,CAAC,SAA0B;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;CACF;AApBD,oDAoBC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkspaceRegistry = void 0;
|
|
4
|
+
const identity_js_1 = require("./identity.js");
|
|
5
|
+
/** Engine reference: runtime/scripts/amalgm-mcp/workspace/store.js. */
|
|
6
|
+
class WorkspaceRegistry {
|
|
7
|
+
#options;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.#options = options;
|
|
10
|
+
}
|
|
11
|
+
list() {
|
|
12
|
+
return this.#options.store.list();
|
|
13
|
+
}
|
|
14
|
+
register(input, source = 'workspace:register') {
|
|
15
|
+
const path = clean(input.path);
|
|
16
|
+
if (!path)
|
|
17
|
+
throw new Error('path is required');
|
|
18
|
+
if (!this.#options.paths.isAbsolute(path))
|
|
19
|
+
throw new Error('path must be absolute');
|
|
20
|
+
const resolved = this.#options.paths.resolve(path);
|
|
21
|
+
if (!this.#options.paths.exists(resolved) || !this.#options.paths.isDirectory(resolved)) {
|
|
22
|
+
throw new Error('path must be a folder');
|
|
23
|
+
}
|
|
24
|
+
return this.#upsert({ ...input, path: resolved }, source);
|
|
25
|
+
}
|
|
26
|
+
import(input, source = 'workspace:import') {
|
|
27
|
+
const resolved = this.register(input, source);
|
|
28
|
+
return resolved;
|
|
29
|
+
}
|
|
30
|
+
rename(identifier, nameInput, source = 'workspace:update') {
|
|
31
|
+
const name = clean(nameInput);
|
|
32
|
+
if (!name)
|
|
33
|
+
throw new Error('Workspace name is required');
|
|
34
|
+
const existing = this.#options.store.find(identifier);
|
|
35
|
+
if (!existing)
|
|
36
|
+
throw new Error('Workspace not found');
|
|
37
|
+
const workspace = { ...existing, name, updatedAt: this.#nowIso() };
|
|
38
|
+
this.#options.store.put(workspace);
|
|
39
|
+
this.#publish('update', workspace, source);
|
|
40
|
+
return workspace;
|
|
41
|
+
}
|
|
42
|
+
remove(identifier, source = 'workspace:delete') {
|
|
43
|
+
const existing = this.#options.store.find(identifier);
|
|
44
|
+
if (!existing)
|
|
45
|
+
return null;
|
|
46
|
+
this.#options.store.delete(existing.id);
|
|
47
|
+
this.#publish('delete', existing, source);
|
|
48
|
+
return existing;
|
|
49
|
+
}
|
|
50
|
+
#upsert(input, source) {
|
|
51
|
+
const now = this.#nowIso();
|
|
52
|
+
const computerId = clean(input.computerId) || clean(this.#options.computerId) || 'local-computer';
|
|
53
|
+
const uri = clean(input.uri) || (0, identity_js_1.workspaceUriForPath)(input.path, computerId);
|
|
54
|
+
const existing = this.#options.store.find(input.path) || this.#options.store.find(uri)
|
|
55
|
+
|| ((0, identity_js_1.isUuidV7)(input.id) ? this.#options.store.find(input.id) : null);
|
|
56
|
+
const managed = input.managed !== undefined
|
|
57
|
+
? Boolean(input.managed)
|
|
58
|
+
: Boolean(this.#options.workspaceRoot && this.#options.paths.isWithin(this.#options.workspaceRoot, input.path));
|
|
59
|
+
const id = existing?.id ?? ((0, identity_js_1.isUuidV7)(input.id)
|
|
60
|
+
? input.id.toLowerCase()
|
|
61
|
+
: (0, identity_js_1.uuidV7)(this.#options.now().getTime(), this.#options.randomBytes));
|
|
62
|
+
const workspace = {
|
|
63
|
+
id,
|
|
64
|
+
name: clean(input.name) || this.#options.paths.basename(input.path) || 'workspace',
|
|
65
|
+
uri: existing?.uri || uri,
|
|
66
|
+
path: input.path,
|
|
67
|
+
localPath: input.path,
|
|
68
|
+
locationType: 'computer',
|
|
69
|
+
computerId,
|
|
70
|
+
source: clean(input.source) || (managed ? 'managed' : 'computer'),
|
|
71
|
+
managed,
|
|
72
|
+
status: clean(input.status) || 'ready',
|
|
73
|
+
createdAt: existing?.createdAt || now,
|
|
74
|
+
updatedAt: now,
|
|
75
|
+
location: { type: 'computer', computerId, path: input.path },
|
|
76
|
+
};
|
|
77
|
+
this.#options.store.put(workspace);
|
|
78
|
+
this.#publish(existing ? 'update' : 'insert', workspace, source);
|
|
79
|
+
return workspace;
|
|
80
|
+
}
|
|
81
|
+
#publish(op, workspace, source) {
|
|
82
|
+
for (const resource of ['workspaces', 'projects']) {
|
|
83
|
+
this.#options.onEvent?.({
|
|
84
|
+
resource, op, id: workspace.id,
|
|
85
|
+
...(op === 'delete' ? {} : { value: workspace }),
|
|
86
|
+
source,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
#nowIso() {
|
|
91
|
+
return this.#options.now().toISOString();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.WorkspaceRegistry = WorkspaceRegistry;
|
|
95
|
+
function clean(value) {
|
|
96
|
+
return typeof value === 'string' && value.trim() ? value.trim() : '';
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/workspace/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workspace/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amalgm/live",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.28",
|
|
4
4
|
"description": "Portable realtime SDK for Amalgm — wire contracts, mutation discipline, and delivery state machines behind host-injected adapters.",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"main": "./dist-cjs/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
6
8
|
"license": "UNLICENSED",
|
|
7
9
|
"repository": {
|
|
8
10
|
"type": "git",
|
|
@@ -14,57 +16,77 @@
|
|
|
14
16
|
"exports": {
|
|
15
17
|
".": {
|
|
16
18
|
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js",
|
|
20
|
+
"require": "./dist-cjs/index.js",
|
|
17
21
|
"default": "./dist/index.js"
|
|
18
22
|
},
|
|
19
23
|
"./contracts": {
|
|
20
24
|
"types": "./dist/contracts/index.d.ts",
|
|
25
|
+
"import": "./dist/contracts/index.js",
|
|
26
|
+
"require": "./dist-cjs/contracts/index.js",
|
|
21
27
|
"default": "./dist/contracts/index.js"
|
|
22
28
|
},
|
|
23
29
|
"./machines": {
|
|
24
30
|
"types": "./dist/machines/index.d.ts",
|
|
31
|
+
"import": "./dist/machines/index.js",
|
|
32
|
+
"require": "./dist-cjs/machines/index.js",
|
|
25
33
|
"default": "./dist/machines/index.js"
|
|
26
34
|
},
|
|
27
|
-
"./adapters": {
|
|
28
|
-
"types": "./dist/adapters/index.d.ts",
|
|
29
|
-
"default": "./dist/adapters/index.js"
|
|
30
|
-
},
|
|
31
35
|
"./workspace": {
|
|
32
36
|
"types": "./dist/workspace/index.d.ts",
|
|
37
|
+
"import": "./dist/workspace/index.js",
|
|
38
|
+
"require": "./dist-cjs/workspace/index.js",
|
|
33
39
|
"default": "./dist/workspace/index.js"
|
|
34
40
|
},
|
|
35
41
|
"./registration": {
|
|
36
42
|
"types": "./dist/registration/index.d.ts",
|
|
43
|
+
"import": "./dist/registration/index.js",
|
|
44
|
+
"require": "./dist-cjs/registration/index.js",
|
|
37
45
|
"default": "./dist/registration/index.js"
|
|
38
46
|
},
|
|
39
47
|
"./watching": {
|
|
40
48
|
"types": "./dist/watching/index.d.ts",
|
|
49
|
+
"import": "./dist/watching/index.js",
|
|
50
|
+
"require": "./dist-cjs/watching/index.js",
|
|
41
51
|
"default": "./dist/watching/index.js"
|
|
42
52
|
},
|
|
43
53
|
"./detection": {
|
|
44
54
|
"types": "./dist/detection/index.d.ts",
|
|
55
|
+
"import": "./dist/detection/index.js",
|
|
56
|
+
"require": "./dist-cjs/detection/index.js",
|
|
45
57
|
"default": "./dist/detection/index.js"
|
|
46
58
|
},
|
|
59
|
+
"./records": {
|
|
60
|
+
"types": "./dist/records/index.d.ts",
|
|
61
|
+
"import": "./dist/records/index.js",
|
|
62
|
+
"require": "./dist-cjs/records/index.js",
|
|
63
|
+
"default": "./dist/records/index.js"
|
|
64
|
+
},
|
|
47
65
|
"./files": {
|
|
48
66
|
"types": "./dist/files/index.d.ts",
|
|
67
|
+
"import": "./dist/files/index.js",
|
|
68
|
+
"require": "./dist-cjs/files/index.js",
|
|
49
69
|
"default": "./dist/files/index.js"
|
|
50
70
|
},
|
|
51
71
|
"./transfer": {
|
|
52
72
|
"types": "./dist/transfer/index.d.ts",
|
|
73
|
+
"import": "./dist/transfer/index.js",
|
|
74
|
+
"require": "./dist-cjs/transfer/index.js",
|
|
53
75
|
"default": "./dist/transfer/index.js"
|
|
54
76
|
}
|
|
55
77
|
},
|
|
56
78
|
"files": [
|
|
57
79
|
"dist",
|
|
80
|
+
"dist-cjs",
|
|
58
81
|
"PURPOSE.md"
|
|
59
82
|
],
|
|
60
83
|
"engines": {
|
|
61
84
|
"node": ">=18"
|
|
62
85
|
},
|
|
63
86
|
"scripts": {
|
|
64
|
-
"build": "node --input-type=module -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.json",
|
|
87
|
+
"build": "node --input-type=module -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true }); rmSync('dist-cjs', { recursive: true, force: true })\" && tsc -p tsconfig.json && tsc -p tsconfig.cjs.json && node --input-type=module -e \"import { writeFileSync } from 'node:fs'; writeFileSync('dist-cjs/package.json', JSON.stringify({ type: 'commonjs' }) + '\\n')\"",
|
|
65
88
|
"test": "npm run build && node --test tests/",
|
|
66
|
-
"test:parity": "npm run build && node --test tests/parity/"
|
|
67
|
-
"test:conformance": "npm run build && node --test tests/conformance/"
|
|
89
|
+
"test:parity": "npm run build && node --test tests/parity/"
|
|
68
90
|
},
|
|
69
91
|
"devDependencies": {
|
|
70
92
|
"typescript": "^5.7.3"
|