@effect-vfs/core 0.9.0 → 0.10.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/dist/BytePath.d.ts +4 -1
- package/dist/BytePath.d.ts.map +1 -1
- package/dist/BytePath.js +6 -4
- package/dist/Caller.d.ts +105 -66
- package/dist/Caller.d.ts.map +1 -1
- package/dist/Caller.js +15 -87
- package/dist/LiveVolume.d.ts +6 -1
- package/dist/LiveVolume.d.ts.map +1 -1
- package/dist/LiveVolume.js +8 -1
- package/dist/Search.d.ts +32 -8
- package/dist/Search.d.ts.map +1 -1
- package/dist/Search.js +14 -13
- package/dist/SynchronousAdapter.d.ts +58 -0
- package/dist/SynchronousAdapter.d.ts.map +1 -0
- package/dist/SynchronousAdapter.js +116 -0
- package/dist/Target.d.ts +7 -91
- package/dist/Target.d.ts.map +1 -1
- package/dist/Target.js +7 -47
- package/dist/Testing.d.ts +5 -2
- package/dist/Testing.d.ts.map +1 -1
- package/dist/Testing.js +2 -1
- package/dist/VfsError.d.ts +1 -1
- package/dist/VfsError.d.ts.map +1 -1
- package/dist/VirtualFileSystem.d.ts +126 -43
- package/dist/VirtualFileSystem.d.ts.map +1 -1
- package/dist/VirtualFileSystem.js +25 -21
- package/dist/Volume.d.ts +6 -1
- package/dist/Volume.d.ts.map +1 -1
- package/dist/Volume.js +6 -2
- package/dist/internal/adapterBinding.d.ts +13 -0
- package/dist/internal/adapterBinding.d.ts.map +1 -0
- package/dist/internal/adapterBinding.js +13 -0
- package/dist/internal/bytePath.d.ts +6 -1
- package/dist/internal/bytePath.d.ts.map +1 -1
- package/dist/internal/callerWatch.d.ts +5 -1
- package/dist/internal/callerWatch.d.ts.map +1 -1
- package/dist/internal/callerWatch.js +4 -3
- package/dist/internal/engine.d.ts +1305 -0
- package/dist/internal/engine.d.ts.map +1 -0
- package/dist/internal/engine.js +3458 -0
- package/dist/internal/errors.d.ts +1 -33
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +1 -45
- package/dist/internal/fixture.d.ts +2 -1
- package/dist/internal/fixture.d.ts.map +1 -1
- package/dist/internal/fixture.js +7 -3
- package/dist/internal/image.d.ts +4 -1
- package/dist/internal/image.d.ts.map +1 -1
- package/dist/internal/image.js +6 -3
- package/dist/internal/lines.d.ts.map +1 -1
- package/dist/internal/lines.js +3 -2
- package/dist/internal/liveImage.d.ts +4 -2
- package/dist/internal/liveImage.d.ts.map +1 -1
- package/dist/internal/liveImage.js +3 -1
- package/dist/internal/merkle.d.ts +7 -4
- package/dist/internal/merkle.d.ts.map +1 -1
- package/dist/internal/merkle.js +6 -4
- package/dist/internal/search.d.ts +3 -1
- package/dist/internal/search.d.ts.map +1 -1
- package/dist/internal/search.js +4 -3
- package/dist/internal/snapshotDelta.d.ts +11 -7
- package/dist/internal/snapshotDelta.d.ts.map +1 -1
- package/dist/internal/snapshotDelta.js +15 -9
- package/dist/internal/snapshotMerge.d.ts +1 -1
- package/dist/internal/snapshotMerge.d.ts.map +1 -1
- package/dist/internal/snapshotMerge.js +5 -2
- package/dist/internal/tree.d.ts +4 -2
- package/dist/internal/tree.d.ts.map +1 -1
- package/dist/internal/tree.js +4 -2
- package/dist/internal/virtualFileSystem.d.ts +20 -49
- package/dist/internal/virtualFileSystem.d.ts.map +1 -1
- package/dist/internal/virtualFileSystem.js +75 -2082
- package/dist/internal/volumeLimits.d.ts +1 -0
- package/dist/internal/volumeLimits.d.ts.map +1 -1
- package/dist/internal/volumeLimits.js +3 -2
- package/dist/internal/volumeState.d.ts +10 -79
- package/dist/internal/volumeState.d.ts.map +1 -1
- package/dist/internal/volumeState.js +9 -79
- package/dist/internal/watchHub.d.ts +3 -3
- package/dist/internal/watchHub.d.ts.map +1 -1
- package/dist/internal/watchHub.js +4 -2
- package/package.json +14 -9
- package/dist/internal/confinement.d.ts +0 -16
- package/dist/internal/confinement.d.ts.map +0 -1
- package/dist/internal/confinement.js +0 -79
- package/dist/internal/directoryEntries.d.ts +0 -6
- package/dist/internal/directoryEntries.d.ts.map +0 -1
- package/dist/internal/directoryEntries.js +0 -79
- package/dist/internal/inodeTable.d.ts +0 -20
- package/dist/internal/inodeTable.d.ts.map +0 -1
- package/dist/internal/inodeTable.js +0 -48
- package/dist/internal/path.d.ts +0 -56
- package/dist/internal/path.d.ts.map +0 -1
- package/dist/internal/path.js +0 -141
- package/dist/internal/resolution.d.ts +0 -139
- package/dist/internal/resolution.d.ts.map +0 -1
- package/dist/internal/resolution.js +0 -332
- package/dist/internal/testSeams.d.ts +0 -17
- package/dist/internal/testSeams.d.ts.map +0 -1
- package/dist/internal/testSeams.js +0 -20
- package/dist/internal/tokenRegistry.d.ts +0 -83
- package/dist/internal/tokenRegistry.d.ts.map +0 -1
- package/dist/internal/tokenRegistry.js +0 -146
- package/dist/internal/turnstile.d.ts +0 -8
- package/dist/internal/turnstile.d.ts.map +0 -1
- package/dist/internal/turnstile.js +0 -43
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as Context from "effect/Context";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
|
+
import { dual } from "effect/Function";
|
|
3
4
|
import * as Layer from "effect/Layer";
|
|
5
|
+
import * as Predicate from "effect/Predicate";
|
|
4
6
|
import * as Result from "effect/Result";
|
|
5
7
|
import * as Schema from "effect/Schema";
|
|
6
8
|
import * as SchemaIssue from "effect/SchemaIssue";
|
|
@@ -16,17 +18,19 @@ import * as VolumeModule from "./Volume.js";
|
|
|
16
18
|
import * as WatchModule from "./Watch.js";
|
|
17
19
|
export { Entry, isEntry, isTarget, Name, Target } from "./Target.js";
|
|
18
20
|
export { BytePath } from "./BytePath.js";
|
|
21
|
+
import { SnapshotTypeId } from "./Snapshot.js";
|
|
19
22
|
export { DecodeLimits, SnapshotTypeId } from "./Snapshot.js";
|
|
20
23
|
import { BudgetFromDecodeLimits, DeltaBudgetFromLimits } from "./internal/budget.js";
|
|
21
|
-
import {
|
|
24
|
+
import { retargetFailure } from "./internal/errors.js";
|
|
22
25
|
import * as FixtureInternal from "./internal/fixture.js";
|
|
23
26
|
import * as Image from "./internal/image.js";
|
|
24
|
-
import
|
|
27
|
+
import { Errors, Paths as Path } from "./internal/engine.js";
|
|
25
28
|
import * as SnapshotDeltaInternal from "./internal/snapshotDelta.js";
|
|
26
29
|
import * as SnapshotMergeInternal from "./internal/snapshotMerge.js";
|
|
27
30
|
import * as VfsModel from "./internal/virtualFileSystem.js";
|
|
28
31
|
import { open as openLiveVolume } from "./LiveVolume.js";
|
|
29
32
|
import * as SnapshotDeltaModel from "./SnapshotDelta.js";
|
|
33
|
+
const decodeConfiguration = Errors.decodeConfiguration;
|
|
30
34
|
export { MergeConflict, MergeConflictReason, MergeOptions, MergeResolution, MergeResult, MergeSideChange, MergeTake, SnapshotChange, SnapshotChangesOptions, SnapshotDeltaLimits, SnapshotDeltaTypeId, SnapshotDifference, SnapshotNodeKind } from "./SnapshotDelta.js";
|
|
31
35
|
/**
|
|
32
36
|
* Schema for portable virtual filesystem error codes.
|
|
@@ -663,9 +667,9 @@ export const OverlayChangesOptions = VolumeModule.OverlayChangesOptions;
|
|
|
663
667
|
*/
|
|
664
668
|
export const Volume = Object.assign(Context.Service("@effect-vfs/core/Volume"), {
|
|
665
669
|
layer: (options) => Layer.effect(Volume, VfsModel.make(options)),
|
|
666
|
-
layerFromSnapshot: (snapshot, options) => Layer.effect(Volume, VfsModel.fromSnapshot(snapshot, options)),
|
|
667
|
-
layerFromFixture: (fixture, options) => Layer.effect(Volume, FixtureInternal.fromFixture(fixture, options)),
|
|
668
|
-
layerOverlay: (base, options) => Layer.effect(Volume, VfsModel.makeOverlay(base, options)),
|
|
670
|
+
layerFromSnapshot: dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], SnapshotTypeId), (snapshot, options) => Layer.effect(Volume, VfsModel.fromSnapshot(snapshot, options))),
|
|
671
|
+
layerFromFixture: dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], "entries"), (fixture, options) => Layer.effect(Volume, FixtureInternal.fromFixture(fixture, options))),
|
|
672
|
+
layerOverlay: dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], SnapshotTypeId), (base, options) => Layer.effect(Volume, VfsModel.makeOverlay(base, options))),
|
|
669
673
|
layerLive: (options) => Layer.effect(Volume, openLiveVolume(options))
|
|
670
674
|
});
|
|
671
675
|
/**
|
|
@@ -727,7 +731,7 @@ const optionalBudget = (operation, limits) => limits === undefined ? Effect.unde
|
|
|
727
731
|
* @category serialization
|
|
728
732
|
* @since 0.6.0
|
|
729
733
|
*/
|
|
730
|
-
export const encodeSnapshotStream = (snapshot, limits) => Stream.unwrap(Effect.map(optionalBudget("encodeSnapshotStream", limits), (budget) => Image.encodeSnapshotStream(snapshot, budget))).pipe(Stream.mapError((error) => retargetFailure("encodeSnapshotStream", error)));
|
|
734
|
+
export const encodeSnapshotStream = dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], SnapshotTypeId), (snapshot, limits) => Stream.unwrap(Effect.map(optionalBudget("encodeSnapshotStream", limits), (budget) => Image.encodeSnapshotStream(snapshot, budget))).pipe(Stream.mapError((error) => retargetFailure("encodeSnapshotStream", error))));
|
|
731
735
|
/**
|
|
732
736
|
* Encodes a snapshot as owned UTF-8 bytes in the version 1 snapshot format.
|
|
733
737
|
*
|
|
@@ -768,7 +772,7 @@ export const encodeSnapshotStream = (snapshot, limits) => Stream.unwrap(Effect.m
|
|
|
768
772
|
* @category serialization
|
|
769
773
|
* @since 0.1.0
|
|
770
774
|
*/
|
|
771
|
-
export const encodeSnapshot = (snapshot, limits) => Effect.flatMap(optionalBudget("encodeSnapshot", limits), (budget) => Image.encodeSnapshot(snapshot, budget)).pipe(Effect.mapError((error) => retargetFailure("encodeSnapshot", error)));
|
|
775
|
+
export const encodeSnapshot = dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], SnapshotTypeId), (snapshot, limits) => Effect.flatMap(optionalBudget("encodeSnapshot", limits), (budget) => Image.encodeSnapshot(snapshot, budget)).pipe(Effect.mapError((error) => retargetFailure("encodeSnapshot", error))));
|
|
772
776
|
/**
|
|
773
777
|
* A sink that decodes a stream of version 1 snapshot chunks while enforcing
|
|
774
778
|
* explicit input and payload limits.
|
|
@@ -862,7 +866,7 @@ export const decodeSnapshotSink = (limits) => Sink.unwrap(Effect.map(snapshotBud
|
|
|
862
866
|
* @category serialization
|
|
863
867
|
* @since 0.1.0
|
|
864
868
|
*/
|
|
865
|
-
export const decodeSnapshot = (input, limits) => Stream.run(Stream.succeed(input), decodeSnapshotSink(limits));
|
|
869
|
+
export const decodeSnapshot = dual(2, (input, limits) => Stream.run(Stream.succeed(input), decodeSnapshotSink(limits)));
|
|
866
870
|
const deltaLimits = (operation, limits) => Effect.fromResult(decodeConfiguration(DeltaBudgetFromLimits, limits ?? SnapshotDeltaModel.SnapshotDeltaLimits.default, operation));
|
|
867
871
|
/**
|
|
868
872
|
* Computes an exact portable delta between two immutable snapshots.
|
|
@@ -902,10 +906,10 @@ const deltaLimits = (operation, limits) => Effect.fromResult(decodeConfiguration
|
|
|
902
906
|
* @category snapshots
|
|
903
907
|
* @since 0.1.0
|
|
904
908
|
*/
|
|
905
|
-
export const diffSnapshots = Effect.fnUntraced(function* (base, target, limits) {
|
|
909
|
+
export const diffSnapshots = dual((args) => args.length >= 3 || Predicate.hasProperty(args[1], SnapshotTypeId), Effect.fnUntraced(function* (base, target, limits) {
|
|
906
910
|
// The delta codec fails under its own name; the public entry point names itself.
|
|
907
911
|
return yield* SnapshotDeltaInternal.diffSnapshots(base, target, yield* deltaLimits("diffSnapshots", limits)).pipe(Effect.mapError((error) => retargetFailure("diffSnapshots", error)));
|
|
908
|
-
});
|
|
912
|
+
}));
|
|
909
913
|
/**
|
|
910
914
|
* Verifies an exact snapshot delta against its base and derives an owned path-oriented summary.
|
|
911
915
|
* Requires the platform-neutral `Crypto.Crypto` service for base identity. Provide
|
|
@@ -941,10 +945,10 @@ export const diffSnapshots = Effect.fnUntraced(function* (base, target, limits)
|
|
|
941
945
|
* @category snapshots
|
|
942
946
|
* @since 0.1.0
|
|
943
947
|
*/
|
|
944
|
-
export const inspectSnapshotDelta = Effect.fnUntraced(function* (base, delta, options, limits) {
|
|
948
|
+
export const inspectSnapshotDelta = dual((args) => args.length >= 4 || Predicate.hasProperty(args[0], SnapshotTypeId), Effect.fnUntraced(function* (base, delta, options, limits) {
|
|
945
949
|
const decoded = yield* Effect.fromResult(decodeConfiguration(SnapshotDeltaModel.SnapshotChangesOptions, options ?? {}, "inspectSnapshotDelta"));
|
|
946
950
|
return yield* SnapshotDeltaInternal.inspectSnapshotDelta(base, delta, decoded, yield* deltaLimits("inspectSnapshotDelta", limits)).pipe(Effect.mapError((error) => retargetFailure("inspectSnapshotDelta", error)));
|
|
947
|
-
});
|
|
951
|
+
}));
|
|
948
952
|
/**
|
|
949
953
|
* Applies an exact delta to its semantically matching base and returns a new snapshot.
|
|
950
954
|
* Requires the platform-neutral `Crypto.Crypto` service for base identity. Provide
|
|
@@ -985,9 +989,9 @@ export const inspectSnapshotDelta = Effect.fnUntraced(function* (base, delta, op
|
|
|
985
989
|
* @category snapshots
|
|
986
990
|
* @since 0.1.0
|
|
987
991
|
*/
|
|
988
|
-
export const applySnapshotDelta = Effect.fnUntraced(function* (base, delta, limits) {
|
|
992
|
+
export const applySnapshotDelta = dual((args) => args.length >= 3 || Predicate.hasProperty(args[0], SnapshotTypeId), Effect.fnUntraced(function* (base, delta, limits) {
|
|
989
993
|
return yield* SnapshotDeltaInternal.applySnapshotDelta(base, delta, yield* deltaLimits("applySnapshotDelta", limits)).pipe(Effect.mapError((error) => retargetFailure("applySnapshotDelta", error)));
|
|
990
|
-
});
|
|
994
|
+
}));
|
|
991
995
|
/**
|
|
992
996
|
* Merges two snapshot deltas that share one base into a single delta, reporting path-level conflicts as data.
|
|
993
997
|
*
|
|
@@ -1025,7 +1029,7 @@ export const applySnapshotDelta = Effect.fnUntraced(function* (base, delta, limi
|
|
|
1025
1029
|
* )
|
|
1026
1030
|
*
|
|
1027
1031
|
* // Disjoint changes merge without conflicts; the delta applies to the shared base.
|
|
1028
|
-
* const merged = yield* Vfs.
|
|
1032
|
+
* const merged = yield* Vfs.applySnapshotDelta(base, result.delta).pipe(Effect.flatMap(Vfs.fromSnapshot()))
|
|
1029
1033
|
* const reader = yield* merged.caller()
|
|
1030
1034
|
*
|
|
1031
1035
|
* return [result.conflicts.length, new TextDecoder().decode(yield* reader.readFile("/shared.txt"))]
|
|
@@ -1039,12 +1043,12 @@ export const applySnapshotDelta = Effect.fnUntraced(function* (base, delta, limi
|
|
|
1039
1043
|
* @category snapshots
|
|
1040
1044
|
* @since 0.8.0
|
|
1041
1045
|
*/
|
|
1042
|
-
export const mergeSnapshotDeltas = Effect.fnUntraced(function* (base, ours, theirs, options) {
|
|
1046
|
+
export const mergeSnapshotDeltas = dual((args) => args.length >= 4 || Predicate.hasProperty(args[0], SnapshotTypeId), Effect.fnUntraced(function* (base, ours, theirs, options) {
|
|
1043
1047
|
// Limits decode first so a bad limit names its own field; the rest of the options decode as one.
|
|
1044
1048
|
const limits = yield* deltaLimits("mergeSnapshotDeltas", options?.limits);
|
|
1045
1049
|
const decoded = yield* Effect.fromResult(decodeConfiguration(SnapshotDeltaModel.MergeOptions, options ?? {}, "mergeSnapshotDeltas"));
|
|
1046
1050
|
return yield* SnapshotMergeInternal.mergeSnapshotDeltas(base, ours, theirs, decoded.resolutions ?? [], limits).pipe(Effect.mapError((error) => retargetFailure("mergeSnapshotDeltas", error)));
|
|
1047
|
-
});
|
|
1051
|
+
}));
|
|
1048
1052
|
const deltaSchemaIssue = (cause, input, options) => new SchemaIssue.InvalidValue({ message: `Snapshot delta ${cause.code}${cause.field === undefined ? "" : ` at ${cause.field}`}` }, input, options);
|
|
1049
1053
|
/**
|
|
1050
1054
|
* Creates an Effect Schema codec between owned bytes and opaque snapshot deltas.
|
|
@@ -1246,7 +1250,7 @@ export const make = VfsModel.make;
|
|
|
1246
1250
|
* @category snapshots
|
|
1247
1251
|
* @since 0.6.0
|
|
1248
1252
|
*/
|
|
1249
|
-
export const snapshotEntries = Image.snapshotEntries;
|
|
1253
|
+
export const snapshotEntries = dual(2, Image.snapshotEntries);
|
|
1250
1254
|
/**
|
|
1251
1255
|
* Restores a fresh volume from an opaque snapshot under the supplied destination limits.
|
|
1252
1256
|
*
|
|
@@ -1289,7 +1293,7 @@ export const snapshotEntries = Image.snapshotEntries;
|
|
|
1289
1293
|
* @category constructors
|
|
1290
1294
|
* @since 0.1.0
|
|
1291
1295
|
*/
|
|
1292
|
-
export const fromSnapshot = VfsModel.fromSnapshot;
|
|
1296
|
+
export const fromSnapshot = dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], SnapshotTypeId), VfsModel.fromSnapshot);
|
|
1293
1297
|
/**
|
|
1294
1298
|
* Creates an isolated writable volume relative to one immutable snapshot base.
|
|
1295
1299
|
*
|
|
@@ -1341,7 +1345,7 @@ export const fromSnapshot = VfsModel.fromSnapshot;
|
|
|
1341
1345
|
* @category constructors
|
|
1342
1346
|
* @since 0.1.0
|
|
1343
1347
|
*/
|
|
1344
|
-
export const makeOverlay = VfsModel.makeOverlay;
|
|
1348
|
+
export const makeOverlay = dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], SnapshotTypeId), VfsModel.makeOverlay);
|
|
1345
1349
|
/**
|
|
1346
1350
|
* Builds a fresh volume from a validated final-state fixture.
|
|
1347
1351
|
*
|
|
@@ -1382,4 +1386,4 @@ export const makeOverlay = VfsModel.makeOverlay;
|
|
|
1382
1386
|
* @category constructors
|
|
1383
1387
|
* @since 0.1.0
|
|
1384
1388
|
*/
|
|
1385
|
-
export const fromFixture = FixtureInternal.fromFixture;
|
|
1389
|
+
export const fromFixture = dual((args) => args.length >= 2 || Predicate.hasProperty(args[0], "entries"), FixtureInternal.fromFixture);
|
package/dist/Volume.d.ts
CHANGED
|
@@ -42,7 +42,10 @@ export declare const VolumeDurabilityOrder: Order.Order<VolumeDurability>;
|
|
|
42
42
|
* @category predicates
|
|
43
43
|
* @since 0.6.0
|
|
44
44
|
*/
|
|
45
|
-
export declare const isVolumeDurabilityAtLeast:
|
|
45
|
+
export declare const isVolumeDurabilityAtLeast: {
|
|
46
|
+
(required: VolumeDurability): (actual: VolumeDurability) => boolean;
|
|
47
|
+
(actual: VolumeDurability, required: VolumeDurability): boolean;
|
|
48
|
+
};
|
|
46
49
|
/**
|
|
47
50
|
* Schema for a volume identity: 128 bits as lowercase hexadecimal, stable
|
|
48
51
|
* across restarts of a durable volume.
|
|
@@ -115,6 +118,8 @@ export type ReferenceKey = typeof ReferenceKey.Type;
|
|
|
115
118
|
* @since 0.6.0
|
|
116
119
|
*/
|
|
117
120
|
export declare const VolumeOptions: Schema.Struct<{
|
|
121
|
+
/** Selects live-volume scheduling; omitted means cooperative. Never stored in images. */
|
|
122
|
+
readonly execution: Schema.optionalKey<Schema.Literals<readonly ["cooperative", "sync"]>>;
|
|
118
123
|
readonly identity: Schema.optionalKey<Schema.brand<Schema.String, "@effect-vfs/core/VolumeIdentity">>;
|
|
119
124
|
readonly maxEntries: Schema.optionalKey<Schema.Natural>;
|
|
120
125
|
readonly maxPendingOperations: Schema.optionalKey<Schema.Int>;
|
package/dist/Volume.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Volume.d.ts","sourceRoot":"","sources":["../src/Volume.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Volume.d.ts","sourceRoot":"","sources":["../src/Volume.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAMxC;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,OAAO,MAA8C,CAAA;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAA;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,+HAK3B,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAS3D;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAG/D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE;IACtC,CAAC,QAAQ,EAAE,gBAAgB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAA;IACnE,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAA;CAIhE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,gEAA+D,CAAA;AAE1F;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,mEAAkE,CAAA;AAEhG;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAO7D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,YAAY;;;;;EAKvB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,aAAa;IACxB,yFAAyF;;;;;;;;;EAuBzF,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,4DAAoD,CAAA;AAEhF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,6GAS5B,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAM7D;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;IAgBxB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;EAEhC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA"}
|
package/dist/Volume.js
CHANGED
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
* @since 0.6.0
|
|
7
7
|
*/
|
|
8
8
|
import * as ByteSize from "effect/ByteSize";
|
|
9
|
+
import { dual } from "effect/Function";
|
|
9
10
|
import * as Order from "effect/Order";
|
|
10
11
|
import * as Schema from "effect/Schema";
|
|
11
12
|
import { BytePath } from "./BytePath.js";
|
|
13
|
+
import { State } from "./internal/engine.js";
|
|
12
14
|
import { Hex128 } from "./internal/hex128.js";
|
|
13
|
-
|
|
15
|
+
const { MAX_FILE_BYTES, MAX_INO, ROOT_INO } = State;
|
|
14
16
|
/**
|
|
15
17
|
* Brand key that marks a volume.
|
|
16
18
|
*
|
|
@@ -49,7 +51,7 @@ export const VolumeDurabilityOrder = Order.mapInput(Order.Number, (durability) =
|
|
|
49
51
|
* @category predicates
|
|
50
52
|
* @since 0.6.0
|
|
51
53
|
*/
|
|
52
|
-
export const isVolumeDurabilityAtLeast = (actual, required) => VolumeDurabilityOrder(actual, required) >= 0;
|
|
54
|
+
export const isVolumeDurabilityAtLeast = dual(2, (actual, required) => VolumeDurabilityOrder(actual, required) >= 0);
|
|
53
55
|
/**
|
|
54
56
|
* Schema for a volume identity: 128 bits as lowercase hexadecimal, stable
|
|
55
57
|
* across restarts of a durable volume.
|
|
@@ -103,6 +105,8 @@ export const ReferenceKey = Schema.Struct({
|
|
|
103
105
|
* @since 0.6.0
|
|
104
106
|
*/
|
|
105
107
|
export const VolumeOptions = Schema.Struct({
|
|
108
|
+
/** Selects live-volume scheduling; omitted means cooperative. Never stored in images. */
|
|
109
|
+
execution: Schema.optionalKey(Schema.Literals(["cooperative", "sync"])),
|
|
106
110
|
identity: Schema.optionalKey(VolumeIdentity),
|
|
107
111
|
maxEntries: Schema.optionalKey(Schema.Natural),
|
|
108
112
|
maxPendingOperations: Schema.optionalKey(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Core-owned identity shared by volume construction and native adapters. @internal */
|
|
2
|
+
import type * as Effect from "effect/Effect";
|
|
3
|
+
import type { Volume } from "../VirtualFileSystem.js";
|
|
4
|
+
import type { makeEngine } from "./engine.js";
|
|
5
|
+
type Engine = Effect.Success<ReturnType<typeof makeEngine>>;
|
|
6
|
+
/** @internal */
|
|
7
|
+
export declare const register: (volume: Volume, engine: Engine) => void;
|
|
8
|
+
/** @internal */
|
|
9
|
+
export declare const engineOf: (volume: Volume) => Engine | undefined;
|
|
10
|
+
/** @internal */
|
|
11
|
+
export declare const alias: (volume: Volume, original: Volume) => void;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=adapterBinding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapterBinding.d.ts","sourceRoot":"","sources":["../../src/internal/adapterBinding.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,KAAK,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAA;AAI3D,gBAAgB;AAChB,eAAO,MAAM,QAAQ,WAAY,MAAM,UAAU,MAAM,KAAG,IAEzD,CAAA;AAED,gBAAgB;AAChB,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,MAAM,GAAG,SAAgC,CAAA;AAEnF,gBAAgB;AAChB,eAAO,MAAM,KAAK,WAAY,MAAM,YAAY,MAAM,KAAG,IAIxD,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const engines = new WeakMap();
|
|
2
|
+
/** @internal */
|
|
3
|
+
export const register = (volume, engine) => {
|
|
4
|
+
engines.set(volume, engine);
|
|
5
|
+
};
|
|
6
|
+
/** @internal */
|
|
7
|
+
export const engineOf = (volume) => engines.get(volume);
|
|
8
|
+
/** @internal */
|
|
9
|
+
export const alias = (volume, original) => {
|
|
10
|
+
const engine = engines.get(original);
|
|
11
|
+
if (engine !== undefined)
|
|
12
|
+
engines.set(volume, engine);
|
|
13
|
+
};
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Equal from "effect/Equal";
|
|
2
|
+
import { type Pipeable } from "effect/Pipeable";
|
|
2
3
|
/** @internal */
|
|
3
4
|
export declare const BytePathId: "@effect-vfs/core/BytePath";
|
|
4
5
|
/** @internal */
|
|
6
|
+
export interface BytePath extends Equal.Equal, Pipeable {
|
|
7
|
+
readonly [BytePathId]: typeof BytePathId;
|
|
8
|
+
}
|
|
9
|
+
/** @internal */
|
|
5
10
|
export declare const isBytePath: (value: unknown) => value is BytePath;
|
|
6
11
|
/** @internal */
|
|
7
12
|
export declare const isPathBytes: (bytes: Uint8Array) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytePath.d.ts","sourceRoot":"","sources":["../../src/internal/bytePath.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bytePath.d.ts","sourceRoot":"","sources":["../../src/internal/bytePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,iBAAiB,CAAA;AAI9D,gBAAgB;AAChB,eAAO,MAAM,UAAU,EAAG,2BAAoC,CAAA;AAE9D,gBAAgB;AAChB,MAAM,WAAW,QAAS,SAAQ,KAAK,CAAC,KAAK,EAAE,QAAQ;IACrD,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAA;CACzC;AA6BD,gBAAgB;AAChB,eAAO,MAAM,UAAU,UAAW,OAAO,KAAG,KAAK,IAAI,QAA6D,CAAA;AAElH,gBAAgB;AAChB,eAAO,MAAM,WAAW,UAAW,UAAU,KAAG,OAAiD,CAAA;AAEjG,gBAAgB;AAChB,eAAO,MAAM,IAAI,UAAW,UAAU,KAAG,QAMxC,CAAA;AAED,gBAAgB;AAChB,eAAO,MAAM,QAAQ,SAAU,QAAQ,KAAG,UAAU,GAAG,SAAgC,CAAA"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { FsFailure } from "../VfsError.js";
|
|
2
2
|
import { Change } from "../Watch.js";
|
|
3
|
-
import {
|
|
3
|
+
import { State } from "./engine.js";
|
|
4
4
|
import type { Selection } from "./watchHub.js";
|
|
5
|
+
type Ino = State.Ino;
|
|
6
|
+
type Link = State.Link;
|
|
7
|
+
type VolumeState = State.VolumeState;
|
|
5
8
|
/** @internal */
|
|
6
9
|
export interface WatchEvent {
|
|
7
10
|
readonly change: Change;
|
|
@@ -29,4 +32,5 @@ export declare const make: (options: {
|
|
|
29
32
|
readonly recursive: boolean;
|
|
30
33
|
readonly selected?: Link;
|
|
31
34
|
}) => Selection<WatchEvent, Installation, FsFailure>;
|
|
35
|
+
export {};
|
|
32
36
|
//# sourceMappingURL=callerWatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callerWatch.d.ts","sourceRoot":"","sources":["../../src/internal/callerWatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"callerWatch.d.ts","sourceRoot":"","sources":["../../src/internal/callerWatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EAAiB,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAQ9C,KAAK,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;AAEpB,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;AAEtB,KAAK,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;AAEpC,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,gBAAgB;AAChB,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAClB;AAED,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACzC;AA6ED,iGAAiG;AACjG,eAAO,MAAM,IAAI,YAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5D,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CACzB,KAAG,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,CA6IhD,CAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as Predicate from "effect/Predicate";
|
|
2
2
|
import { Change } from "../Watch.js";
|
|
3
3
|
import { getBytes } from "./bytePath.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
import { Errors, Paths, State } from "./engine.js";
|
|
5
|
+
const fsFailure = Errors.fsFailure;
|
|
6
|
+
const { nameBytes, ownedPath, SLASH_HEX } = Paths;
|
|
7
|
+
const { getNode, ROOT_INO } = State;
|
|
7
8
|
const directoryPath = (state, ino) => {
|
|
8
9
|
const names = [];
|
|
9
10
|
const visited = new Set();
|