@effect-vfs/core 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -149
- package/dist/BytePath.d.ts +2 -1
- package/dist/BytePath.d.ts.map +1 -1
- package/dist/LiveVolume.d.ts +101 -0
- package/dist/LiveVolume.d.ts.map +1 -0
- package/dist/LiveVolume.js +72 -0
- package/dist/Snapshot.d.ts +4 -2
- package/dist/Snapshot.d.ts.map +1 -1
- package/dist/Snapshot.js +4 -2
- package/dist/VirtualFileSystem.d.ts +333 -108
- package/dist/VirtualFileSystem.d.ts.map +1 -1
- package/dist/VirtualFileSystem.js +119 -29
- package/dist/VirtualFileSystemError.d.ts +54 -0
- package/dist/VirtualFileSystemError.d.ts.map +1 -0
- package/dist/VirtualFileSystemError.js +49 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/internal/liveImage.d.ts +286 -0
- package/dist/internal/liveImage.d.ts.map +1 -0
- package/dist/internal/liveImage.js +176 -0
- package/dist/internal/virtualFileSystem/errors.d.ts +4 -23
- package/dist/internal/virtualFileSystem/errors.d.ts.map +1 -1
- package/dist/internal/virtualFileSystem/errors.js +11 -15
- package/dist/internal/virtualFileSystem/fixture.d.ts +4 -1
- package/dist/internal/virtualFileSystem/fixture.d.ts.map +1 -1
- package/dist/internal/virtualFileSystem/fixture.js +8 -2
- package/dist/internal/virtualFileSystem/stagedState.d.ts +22 -0
- package/dist/internal/virtualFileSystem/stagedState.d.ts.map +1 -0
- package/dist/internal/virtualFileSystem/stagedState.js +62 -0
- package/dist/internal/virtualFileSystem/watchHub.d.ts +3 -3
- package/dist/internal/virtualFileSystem/watchHub.d.ts.map +1 -1
- package/dist/internal/virtualFileSystem/watchHub.js +42 -21
- package/dist/internal/virtualFileSystem.d.ts +223 -15
- package/dist/internal/virtualFileSystem.d.ts.map +1 -1
- package/dist/internal/virtualFileSystem.js +1288 -153
- package/package.json +9 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Exit from "effect/Exit";
|
|
3
|
+
import * as Semaphore from "effect/Semaphore";
|
|
4
|
+
import { FsError } from "./errors.js";
|
|
5
|
+
/** @internal */
|
|
6
|
+
export const makeStagedState = (initial,
|
|
7
|
+
// The copy must detach every mutable value that change can reach.
|
|
8
|
+
copy, rawProvider, publish) => {
|
|
9
|
+
const gate = Semaphore.makeUnsafe(1);
|
|
10
|
+
const provider = {
|
|
11
|
+
...rawProvider,
|
|
12
|
+
commit: (candidate) => Effect.suspend(() => rawProvider.commit(candidate))
|
|
13
|
+
};
|
|
14
|
+
let current = initial;
|
|
15
|
+
let available = true;
|
|
16
|
+
const checkAvailable = (operation) => Effect.suspend(() => available
|
|
17
|
+
? Effect.void
|
|
18
|
+
: Effect.fail(new FsError({ code: "VolumeUnavailable", operation })));
|
|
19
|
+
const coordinate = (effect) => gate.withPermit(effect);
|
|
20
|
+
const shutdown = coordinate(Effect.sync(() => {
|
|
21
|
+
available = false;
|
|
22
|
+
}));
|
|
23
|
+
const read = (operation, inspect) => coordinate(Effect.gen(function* () {
|
|
24
|
+
yield* checkAvailable(operation);
|
|
25
|
+
return yield* inspect(current);
|
|
26
|
+
}));
|
|
27
|
+
const mutate = (operation, change, onStorageFailure) => coordinate(Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
|
|
28
|
+
yield* checkAvailable(operation);
|
|
29
|
+
const candidate = yield* restore(copy(current));
|
|
30
|
+
const events = [];
|
|
31
|
+
const value = yield* restore(change(candidate, (event) => events.push(event)));
|
|
32
|
+
if (provider.prepare !== undefined)
|
|
33
|
+
yield* restore(provider.prepare(candidate));
|
|
34
|
+
const committed = yield* Effect.exit(Effect.suspend(() => provider.commit(candidate)));
|
|
35
|
+
if (Exit.isFailure(committed)) {
|
|
36
|
+
available = false;
|
|
37
|
+
onStorageFailure?.();
|
|
38
|
+
return yield* new FsError({ code: "OutcomeUnknown", operation });
|
|
39
|
+
}
|
|
40
|
+
const outcome = committed.value;
|
|
41
|
+
if (outcome === "rejected") {
|
|
42
|
+
if (onStorageFailure !== undefined) {
|
|
43
|
+
available = false;
|
|
44
|
+
onStorageFailure();
|
|
45
|
+
}
|
|
46
|
+
return yield* new FsError({ code: "StorageRejected", operation });
|
|
47
|
+
}
|
|
48
|
+
if (outcome === "unknown") {
|
|
49
|
+
available = false;
|
|
50
|
+
onStorageFailure?.();
|
|
51
|
+
return yield* new FsError({ code: "OutcomeUnknown", operation });
|
|
52
|
+
}
|
|
53
|
+
current = candidate;
|
|
54
|
+
const published = yield* Effect.exit(Effect.sync(() => publish?.(candidate, events)));
|
|
55
|
+
if (Exit.isFailure(published)) {
|
|
56
|
+
available = false;
|
|
57
|
+
return yield* new FsError({ code: "OutcomeUnknown", operation });
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
})));
|
|
61
|
+
return { read, mutate, coordinate, checkAvailable, shutdown };
|
|
62
|
+
};
|
|
@@ -6,11 +6,11 @@ export interface Coordinator {
|
|
|
6
6
|
<A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R>;
|
|
7
7
|
}
|
|
8
8
|
/** @internal */
|
|
9
|
-
export interface WatchHub<A> {
|
|
9
|
+
export interface WatchHub<A, E = never> {
|
|
10
10
|
readonly publishUnsafe: (event: () => A) => void;
|
|
11
11
|
readonly publishManyUnsafe: (events: () => Iterable<A>) => void;
|
|
12
|
-
readonly subscribe: (afterSubscribe?: Effect.Effect<void>) => Effect.Effect<Stream.Stream<A>,
|
|
12
|
+
readonly subscribe: (afterSubscribe?: Effect.Effect<void>) => Effect.Effect<Stream.Stream<A>, E, Scope.Scope>;
|
|
13
13
|
}
|
|
14
14
|
/** @internal */
|
|
15
|
-
export declare const make: <A>(coordinate: Coordinator) => Effect.Effect<WatchHub<A>, never, never>;
|
|
15
|
+
export declare const make: <A, E = never>(coordinate: Coordinator, capacity: number, rescan: () => A, checkAvailable?: Effect.Effect<void, E, never> | undefined) => Effect.Effect<WatchHub<A, E>, never, never>;
|
|
16
16
|
//# sourceMappingURL=watchHub.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watchHub.d.ts","sourceRoot":"","sources":["../../../src/internal/virtualFileSystem/watchHub.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watchHub.d.ts","sourceRoot":"","sources":["../../../src/internal/virtualFileSystem/watchHub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,gBAAgB;AAChB,MAAM,WAAW,WAAW;IAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAClE;AAED,gBAAgB;AAChB,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK;IACpC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC/D,QAAQ,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;CAC9G;AAQD,gBAAgB;AAChB,eAAO,MAAM,IAAI,GAA+B,CAAC,EAAE,CAAC,mEAGpC,CAAC,4GAiEf,CAAA"}
|
|
@@ -1,33 +1,54 @@
|
|
|
1
|
-
// Change broadcasting for Volume.watch: one PubSub per volume, published to only while someone listens.
|
|
2
1
|
import * as Effect from "effect/Effect";
|
|
3
|
-
import * as
|
|
2
|
+
import * as Queue from "effect/Queue";
|
|
4
3
|
import * as Stream from "effect/Stream";
|
|
5
4
|
/** @internal */
|
|
6
|
-
export const make = Effect.fnUntraced(function* (coordinate) {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
export const make = Effect.fnUntraced(function* (coordinate, capacity, rescan, checkAvailable) {
|
|
6
|
+
const subscribers = new Set();
|
|
7
|
+
const publish = (event) => {
|
|
8
|
+
for (const subscriber of subscribers) {
|
|
9
|
+
if (subscriber.overflowed)
|
|
10
|
+
continue;
|
|
11
|
+
if (Queue.sizeUnsafe(subscriber.queue) < capacity - 1) {
|
|
12
|
+
Queue.offerUnsafe(subscriber.queue, event);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
subscriber.overflowed = true;
|
|
16
|
+
subscriber.marker = rescan();
|
|
17
|
+
Queue.offerUnsafe(subscriber.queue, subscriber.marker);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
10
21
|
const publishUnsafe = (event) => {
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
PubSub.publishUnsafe(pubsub, event());
|
|
22
|
+
if (subscribers.size > 0)
|
|
23
|
+
publish(event());
|
|
14
24
|
};
|
|
15
25
|
const publishManyUnsafe = (events) => {
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
if (subscribers.size > 0) {
|
|
27
|
+
for (const event of events())
|
|
28
|
+
publish(event);
|
|
29
|
+
}
|
|
20
30
|
};
|
|
21
|
-
// Registration is uninterruptible end to end, including the permit wait, so a watcher is never
|
|
22
|
-
// half-registered. This deliberately tightens the engine's "permit waits stay interruptible" rule.
|
|
23
31
|
const subscribe = (afterSubscribe) => Effect.acquireRelease(coordinate(Effect.gen(function* () {
|
|
24
|
-
|
|
32
|
+
if (checkAvailable !== undefined)
|
|
33
|
+
yield* checkAvailable;
|
|
34
|
+
const queue = yield* Queue.bounded(capacity);
|
|
35
|
+
const subscriber = {
|
|
36
|
+
queue,
|
|
37
|
+
overflowed: false,
|
|
38
|
+
marker: undefined
|
|
39
|
+
};
|
|
25
40
|
if (afterSubscribe !== undefined)
|
|
26
41
|
yield* afterSubscribe;
|
|
27
|
-
|
|
28
|
-
return
|
|
29
|
-
})), () => coordinate(Effect.sync(() => {
|
|
30
|
-
|
|
31
|
-
}))).pipe(Effect.map(Stream.
|
|
42
|
+
subscribers.add(subscriber);
|
|
43
|
+
return subscriber;
|
|
44
|
+
})), (subscriber) => coordinate(Effect.sync(() => {
|
|
45
|
+
subscribers.delete(subscriber);
|
|
46
|
+
})).pipe(Effect.andThen(Queue.shutdown(subscriber.queue))), { interruptible: true }).pipe(Effect.map((subscriber) => Stream.fromEffectRepeat(Queue.take(subscriber.queue)).pipe(Stream.map((event) => {
|
|
47
|
+
if (subscriber.overflowed && event === subscriber.marker) {
|
|
48
|
+
subscriber.overflowed = false;
|
|
49
|
+
subscriber.marker = undefined;
|
|
50
|
+
}
|
|
51
|
+
return event;
|
|
52
|
+
}))));
|
|
32
53
|
return { publishUnsafe, publishManyUnsafe, subscribe };
|
|
33
54
|
});
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import * as ByteSize from "effect/ByteSize";
|
|
2
|
-
import * as
|
|
2
|
+
import * as Crypto from "effect/Crypto";
|
|
3
3
|
import * as Data from "effect/Data";
|
|
4
4
|
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Order from "effect/Order";
|
|
5
6
|
import * as Schema from "effect/Schema";
|
|
6
7
|
import { BytePath } from "../BytePath.js";
|
|
7
8
|
import { ImageError, type Snapshot } from "../Snapshot.js";
|
|
8
|
-
import type {
|
|
9
|
+
import type { ObjectReference, OverlayVolume, RelativeOptions, Volume, VolumeLimits } from "../VirtualFileSystem.js";
|
|
9
10
|
import * as Image from "./image.js";
|
|
11
|
+
import * as LiveImage from "./liveImage.js";
|
|
10
12
|
import { ConfigurationError, FsCode as FsCodeSchema, FsError } from "./virtualFileSystem/errors.js";
|
|
13
|
+
import * as Content from "./virtualFileSystem/overlayContent.js";
|
|
14
|
+
import { type CommitProvider } from "./virtualFileSystem/stagedState.js";
|
|
11
15
|
/** @internal */
|
|
12
16
|
export declare const VolumeId: unique symbol;
|
|
13
17
|
/** @internal */
|
|
@@ -42,8 +46,27 @@ export declare const RootCallerOptions: Schema.Struct<{
|
|
|
42
46
|
/** @internal */
|
|
43
47
|
export type RootCallerOptions = typeof RootCallerOptions.Type;
|
|
44
48
|
/** @internal */
|
|
49
|
+
export declare const VolumeDurability: Schema.Literals<readonly ["memory-only", "survives-process-crash", "survives-operating-system-crash", "survives-power-loss"]>;
|
|
50
|
+
/** @internal */
|
|
51
|
+
export type VolumeDurability = typeof VolumeDurability.Type;
|
|
52
|
+
/** @internal */
|
|
53
|
+
export declare const VolumeDurabilityOrder: Order.Order<VolumeDurability>;
|
|
54
|
+
/** @internal */
|
|
55
|
+
export declare const isVolumeDurabilityAtLeast: (actual: VolumeDurability, required: VolumeDurability) => boolean;
|
|
56
|
+
/** @internal */
|
|
57
|
+
export declare const VolumeIdentity: Schema.brand<Schema.String, "@effect-vfs/core/VolumeIdentity">;
|
|
58
|
+
/** @internal */
|
|
59
|
+
export type VolumeIdentity = typeof VolumeIdentity.Type;
|
|
60
|
+
/** @internal */
|
|
61
|
+
export declare const VolumeIncarnation: Schema.brand<Schema.String, "@effect-vfs/core/VolumeIncarnation">;
|
|
62
|
+
/** @internal */
|
|
63
|
+
export type VolumeIncarnation = typeof VolumeIncarnation.Type;
|
|
64
|
+
/** @internal */
|
|
45
65
|
export declare const VolumeOptions: Schema.Struct<{
|
|
66
|
+
readonly identity: Schema.optionalKey<Schema.brand<Schema.String, "@effect-vfs/core/VolumeIdentity">>;
|
|
46
67
|
readonly maxEntries: Schema.optionalKey<Schema.Natural>;
|
|
68
|
+
readonly maxPendingOperations: Schema.optionalKey<Schema.Int>;
|
|
69
|
+
readonly maxWatchEvents: Schema.optionalKey<Schema.Int>;
|
|
47
70
|
readonly maxBytes: Schema.optionalKey<Schema.ByteSize>;
|
|
48
71
|
readonly maxFileBytes: Schema.optionalKey<Schema.ByteSize>;
|
|
49
72
|
readonly maxPathBytes: Schema.optionalKey<Schema.ByteSize>;
|
|
@@ -118,6 +141,119 @@ export declare const OpenSettings: Schema.Struct<{
|
|
|
118
141
|
}>;
|
|
119
142
|
/** @internal */
|
|
120
143
|
export type OpenOptions = typeof OpenSettings.Type & RelativeOptions;
|
|
144
|
+
/** @internal */
|
|
145
|
+
export declare const DirectoryChange: Schema.Struct<{
|
|
146
|
+
readonly before: Schema.BigInt;
|
|
147
|
+
readonly after: Schema.BigInt;
|
|
148
|
+
}>;
|
|
149
|
+
/** @internal */
|
|
150
|
+
export declare const RenameReferenceResult: Schema.TaggedUnion<{
|
|
151
|
+
readonly DifferentDirectories: Schema.TaggedStruct<"DifferentDirectories", {
|
|
152
|
+
readonly sourceDirectory: Schema.Struct<{
|
|
153
|
+
readonly before: Schema.BigInt;
|
|
154
|
+
readonly after: Schema.BigInt;
|
|
155
|
+
}>;
|
|
156
|
+
readonly destinationDirectory: Schema.Struct<{
|
|
157
|
+
readonly before: Schema.BigInt;
|
|
158
|
+
readonly after: Schema.BigInt;
|
|
159
|
+
}>;
|
|
160
|
+
}>;
|
|
161
|
+
readonly SameDirectory: Schema.TaggedStruct<"SameDirectory", {
|
|
162
|
+
readonly directory: Schema.Struct<{
|
|
163
|
+
readonly before: Schema.BigInt;
|
|
164
|
+
readonly after: Schema.BigInt;
|
|
165
|
+
}>;
|
|
166
|
+
}>;
|
|
167
|
+
}>;
|
|
168
|
+
/** @internal */
|
|
169
|
+
export declare const MkdirReferenceSettings: Schema.Struct<{
|
|
170
|
+
readonly mode: Schema.optionalKey<Schema.Natural>;
|
|
171
|
+
readonly exactMode: Schema.optionalKey<Schema.Boolean>;
|
|
172
|
+
readonly times: Schema.optionalKey<Schema.Struct<{
|
|
173
|
+
readonly access: Schema.Union<readonly [Schema.Struct<{
|
|
174
|
+
readonly kind: Schema.Literal<"now">;
|
|
175
|
+
}>, Schema.Struct<{
|
|
176
|
+
readonly kind: Schema.Literal<"omit">;
|
|
177
|
+
}>, Schema.Struct<{
|
|
178
|
+
readonly kind: Schema.Literal<"value">;
|
|
179
|
+
readonly nanoseconds: Schema.BigInt;
|
|
180
|
+
}>]>;
|
|
181
|
+
readonly modification: Schema.Union<readonly [Schema.Struct<{
|
|
182
|
+
readonly kind: Schema.Literal<"now">;
|
|
183
|
+
}>, Schema.Struct<{
|
|
184
|
+
readonly kind: Schema.Literal<"omit">;
|
|
185
|
+
}>, Schema.Struct<{
|
|
186
|
+
readonly kind: Schema.Literal<"value">;
|
|
187
|
+
readonly nanoseconds: Schema.BigInt;
|
|
188
|
+
}>]>;
|
|
189
|
+
}>>;
|
|
190
|
+
}>;
|
|
191
|
+
/** @internal */
|
|
192
|
+
export declare const SymlinkReferenceSettings: Schema.Struct<{
|
|
193
|
+
readonly times: Schema.optionalKey<Schema.Struct<{
|
|
194
|
+
readonly access: Schema.Union<readonly [Schema.Struct<{
|
|
195
|
+
readonly kind: Schema.Literal<"now">;
|
|
196
|
+
}>, Schema.Struct<{
|
|
197
|
+
readonly kind: Schema.Literal<"omit">;
|
|
198
|
+
}>, Schema.Struct<{
|
|
199
|
+
readonly kind: Schema.Literal<"value">;
|
|
200
|
+
readonly nanoseconds: Schema.BigInt;
|
|
201
|
+
}>]>;
|
|
202
|
+
readonly modification: Schema.Union<readonly [Schema.Struct<{
|
|
203
|
+
readonly kind: Schema.Literal<"now">;
|
|
204
|
+
}>, Schema.Struct<{
|
|
205
|
+
readonly kind: Schema.Literal<"omit">;
|
|
206
|
+
}>, Schema.Struct<{
|
|
207
|
+
readonly kind: Schema.Literal<"value">;
|
|
208
|
+
readonly nanoseconds: Schema.BigInt;
|
|
209
|
+
}>]>;
|
|
210
|
+
}>>;
|
|
211
|
+
}>;
|
|
212
|
+
/** @internal */
|
|
213
|
+
export declare const OpenReferenceSettings: Schema.Struct<{
|
|
214
|
+
readonly access: Schema.Literals<readonly ["read", "write", "readWrite"]>;
|
|
215
|
+
readonly append: Schema.optionalKey<Schema.Boolean>;
|
|
216
|
+
readonly truncate: Schema.optionalKey<Schema.Boolean>;
|
|
217
|
+
}>;
|
|
218
|
+
/** @internal */
|
|
219
|
+
export declare const OpenChildReferenceSettings: Schema.Struct<{
|
|
220
|
+
readonly access: Schema.Literals<readonly ["read", "write", "readWrite"]>;
|
|
221
|
+
readonly create: Schema.optionalKey<Schema.Literals<readonly ["never", "ifMissing", "exclusive"]>>;
|
|
222
|
+
readonly mode: Schema.optionalKey<Schema.Natural>;
|
|
223
|
+
readonly append: Schema.optionalKey<Schema.Boolean>;
|
|
224
|
+
readonly truncate: Schema.optionalKey<Schema.Boolean>;
|
|
225
|
+
readonly followFinalSymlink: Schema.optionalKey<Schema.Boolean>;
|
|
226
|
+
readonly times: Schema.optionalKey<Schema.Struct<{
|
|
227
|
+
readonly access: Schema.Union<readonly [Schema.Struct<{
|
|
228
|
+
readonly kind: Schema.Literal<"now">;
|
|
229
|
+
}>, Schema.Struct<{
|
|
230
|
+
readonly kind: Schema.Literal<"omit">;
|
|
231
|
+
}>, Schema.Struct<{
|
|
232
|
+
readonly kind: Schema.Literal<"value">;
|
|
233
|
+
readonly nanoseconds: Schema.BigInt;
|
|
234
|
+
}>]>;
|
|
235
|
+
readonly modification: Schema.Union<readonly [Schema.Struct<{
|
|
236
|
+
readonly kind: Schema.Literal<"now">;
|
|
237
|
+
}>, Schema.Struct<{
|
|
238
|
+
readonly kind: Schema.Literal<"omit">;
|
|
239
|
+
}>, Schema.Struct<{
|
|
240
|
+
readonly kind: Schema.Literal<"value">;
|
|
241
|
+
readonly nanoseconds: Schema.BigInt;
|
|
242
|
+
}>]>;
|
|
243
|
+
}>>;
|
|
244
|
+
readonly initialSize: Schema.optionalKey<Schema.BigInt>;
|
|
245
|
+
readonly exactMode: Schema.optionalKey<Schema.Boolean>;
|
|
246
|
+
readonly owner: Schema.optionalKey<Schema.Struct<{
|
|
247
|
+
readonly uid: Schema.optionalKey<Schema.Natural>;
|
|
248
|
+
readonly gid: Schema.optionalKey<Schema.Natural>;
|
|
249
|
+
}>>;
|
|
250
|
+
readonly expectedChild: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
251
|
+
readonly reference: Schema.declare<ObjectReference, ObjectReference>;
|
|
252
|
+
readonly revision: Schema.BigInt;
|
|
253
|
+
readonly atimeNs: Schema.BigInt;
|
|
254
|
+
readonly mtimeNs: Schema.BigInt;
|
|
255
|
+
}>>>;
|
|
256
|
+
}>;
|
|
121
257
|
declare const WriteFileSettings: Schema.Struct<{
|
|
122
258
|
readonly access: Schema.Literals<readonly ["read", "write", "readWrite"]>;
|
|
123
259
|
readonly create: Schema.optionalKey<Schema.Literals<readonly ["never", "ifMissing", "exclusive"]>>;
|
|
@@ -168,10 +304,6 @@ export declare const OverlayChangesOptions: Schema.Struct<{
|
|
|
168
304
|
}>;
|
|
169
305
|
/** @internal */
|
|
170
306
|
export type OverlayChangesOptions = typeof OverlayChangesOptions.Type;
|
|
171
|
-
declare const CurrentFileSystem_base: Context.ServiceClass<CurrentFileSystem, "@effect-vfs/core/CurrentFileSystem", Caller>;
|
|
172
|
-
/** @internal */
|
|
173
|
-
export declare class CurrentFileSystem extends CurrentFileSystem_base {
|
|
174
|
-
}
|
|
175
307
|
/** @internal */
|
|
176
308
|
export declare const FixtureMetadata: Schema.Struct<{
|
|
177
309
|
readonly uid: Schema.optionalKey<Schema.Natural>;
|
|
@@ -283,11 +415,51 @@ export declare const Fixture: Schema.Struct<{
|
|
|
283
415
|
}>;
|
|
284
416
|
/** @internal */
|
|
285
417
|
export type Fixture = typeof Fixture.Type;
|
|
418
|
+
interface Directory {
|
|
419
|
+
readonly kind: "directory";
|
|
420
|
+
readonly lineage: string | undefined;
|
|
421
|
+
parent: Directory | undefined;
|
|
422
|
+
readonly entries: Map<string, Node>;
|
|
423
|
+
metadata: Metadata;
|
|
424
|
+
revision: bigint;
|
|
425
|
+
objectReference: ObjectReference | undefined;
|
|
426
|
+
}
|
|
427
|
+
interface RegularFile {
|
|
428
|
+
readonly kind: "file";
|
|
429
|
+
readonly lineage: string | undefined;
|
|
430
|
+
data: Content.Content;
|
|
431
|
+
openCount: number;
|
|
432
|
+
metadata: Metadata;
|
|
433
|
+
revision: bigint;
|
|
434
|
+
objectReference: ObjectReference | undefined;
|
|
435
|
+
}
|
|
436
|
+
interface SymbolicLink {
|
|
437
|
+
readonly kind: "symlink";
|
|
438
|
+
readonly lineage: string | undefined;
|
|
439
|
+
readonly target: Uint8Array;
|
|
440
|
+
metadata: Metadata;
|
|
441
|
+
revision: bigint;
|
|
442
|
+
objectReference: ObjectReference | undefined;
|
|
443
|
+
}
|
|
444
|
+
type Node = Directory | RegularFile | SymbolicLink;
|
|
445
|
+
interface EngineState {
|
|
446
|
+
root: Directory;
|
|
447
|
+
retainedFiles: Map<bigint, RegularFile>;
|
|
448
|
+
revisionCounter: bigint;
|
|
449
|
+
nextInode: bigint;
|
|
450
|
+
entries: number;
|
|
451
|
+
usedBytes: bigint;
|
|
452
|
+
}
|
|
453
|
+
/** @internal */
|
|
454
|
+
export declare const captureLiveImage: (state: EngineState, identity: string & import("effect/Brand").Brand<"@effect-vfs/core/VolumeIdentity">, limits: VolumeLimits) => Effect.Effect<Uint8Array<ArrayBuffer>, ImageError, never>;
|
|
286
455
|
type VolumeSource = {
|
|
287
456
|
readonly _tag: "Empty";
|
|
288
457
|
} | {
|
|
289
458
|
readonly _tag: "Snapshot";
|
|
290
459
|
readonly image: Image.Document;
|
|
460
|
+
} | {
|
|
461
|
+
readonly _tag: "Live";
|
|
462
|
+
readonly document: LiveImage.Document;
|
|
291
463
|
} | {
|
|
292
464
|
readonly _tag: "Overlay";
|
|
293
465
|
readonly base: Snapshot;
|
|
@@ -295,7 +467,7 @@ type VolumeSource = {
|
|
|
295
467
|
};
|
|
296
468
|
/** @internal */
|
|
297
469
|
export declare const VolumeSource: {
|
|
298
|
-
readonly $is: <Tag extends "Empty" | "Overlay" | "Snapshot">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
470
|
+
readonly $is: <Tag extends "Empty" | "Live" | "Overlay" | "Snapshot">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
299
471
|
readonly _tag: "Empty";
|
|
300
472
|
}, {
|
|
301
473
|
readonly _tag: Tag;
|
|
@@ -304,6 +476,11 @@ export declare const VolumeSource: {
|
|
|
304
476
|
readonly image: Image.Document;
|
|
305
477
|
}, {
|
|
306
478
|
readonly _tag: Tag;
|
|
479
|
+
}> | Extract<{
|
|
480
|
+
readonly _tag: "Live";
|
|
481
|
+
readonly document: LiveImage.Document;
|
|
482
|
+
}, {
|
|
483
|
+
readonly _tag: Tag;
|
|
307
484
|
}> | Extract<{
|
|
308
485
|
readonly _tag: "Overlay";
|
|
309
486
|
readonly base: Snapshot;
|
|
@@ -312,16 +489,20 @@ export declare const VolumeSource: {
|
|
|
312
489
|
readonly _tag: Tag;
|
|
313
490
|
}>;
|
|
314
491
|
readonly $match: {
|
|
315
|
-
<Cases extends { readonly [Tag in "Empty" | "Overlay" | "Snapshot"]: (args: Extract<VolumeSource, {
|
|
492
|
+
<Cases extends { readonly [Tag in "Empty" | "Live" | "Overlay" | "Snapshot"]: (args: Extract<VolumeSource, {
|
|
316
493
|
readonly _tag: Tag;
|
|
317
|
-
}>) => any; }>(cases: Cases): (value: VolumeSource) => import("effect/Unify").Unify<ReturnType<Cases["Empty" | "Overlay" | "Snapshot"]>>;
|
|
318
|
-
<Cases extends { readonly [Tag in "Empty" | "Overlay" | "Snapshot"]: (args: Extract<VolumeSource, {
|
|
494
|
+
}>) => any; }>(cases: Cases): (value: VolumeSource) => import("effect/Unify").Unify<ReturnType<Cases["Empty" | "Live" | "Overlay" | "Snapshot"]>>;
|
|
495
|
+
<Cases extends { readonly [Tag in "Empty" | "Live" | "Overlay" | "Snapshot"]: (args: Extract<VolumeSource, {
|
|
319
496
|
readonly _tag: Tag;
|
|
320
|
-
}>) => any; }>(value: VolumeSource, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Empty" | "Overlay" | "Snapshot"]>>;
|
|
497
|
+
}>) => any; }>(value: VolumeSource, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Empty" | "Live" | "Overlay" | "Snapshot"]>>;
|
|
321
498
|
};
|
|
322
499
|
readonly Empty: Data.TaggedEnum.ConstructorFrom<{
|
|
323
500
|
readonly _tag: "Empty";
|
|
324
501
|
}, "_tag">;
|
|
502
|
+
readonly Live: Data.TaggedEnum.ConstructorFrom<{
|
|
503
|
+
readonly _tag: "Live";
|
|
504
|
+
readonly document: LiveImage.Document;
|
|
505
|
+
}, "_tag">;
|
|
325
506
|
readonly Overlay: Data.TaggedEnum.ConstructorFrom<{
|
|
326
507
|
readonly _tag: "Overlay";
|
|
327
508
|
readonly base: Snapshot;
|
|
@@ -337,30 +518,57 @@ type VolumeFor<S extends VolumeSource> = S extends {
|
|
|
337
518
|
} ? OverlayVolume : Volume;
|
|
338
519
|
/** @internal */
|
|
339
520
|
export declare const makeVolume: <S extends VolumeSource>(source: S, options?: {
|
|
521
|
+
readonly identity?: string & import("effect/Brand").Brand<"@effect-vfs/core/VolumeIdentity">;
|
|
340
522
|
readonly maxEntries?: number;
|
|
523
|
+
readonly maxPendingOperations?: number;
|
|
524
|
+
readonly maxWatchEvents?: number;
|
|
341
525
|
readonly maxBytes?: ByteSize.ByteSize;
|
|
342
526
|
readonly maxFileBytes?: ByteSize.ByteSize;
|
|
343
527
|
readonly maxPathBytes?: ByteSize.ByteSize;
|
|
344
|
-
} | undefined) => Effect.Effect<VolumeFor<S>, ConfigurationError | ImageError,
|
|
528
|
+
} | undefined, commitProvider?: CommitProvider<EngineState> | undefined, captureInitial?: ((state: EngineState, identity: VolumeIdentity, limits: VolumeLimits) => Effect.Effect<void, ImageError>) | undefined) => Effect.Effect<VolumeFor<S>, ConfigurationError | ImageError | import("effect/PlatformError").PlatformError, Crypto.Crypto>;
|
|
345
529
|
/** @internal */
|
|
346
530
|
export declare const make: (options?: {
|
|
531
|
+
readonly identity?: string & import("effect/Brand").Brand<"@effect-vfs/core/VolumeIdentity">;
|
|
347
532
|
readonly maxEntries?: number;
|
|
533
|
+
readonly maxPendingOperations?: number;
|
|
534
|
+
readonly maxWatchEvents?: number;
|
|
348
535
|
readonly maxBytes?: ByteSize.ByteSize;
|
|
349
536
|
readonly maxFileBytes?: ByteSize.ByteSize;
|
|
350
537
|
readonly maxPathBytes?: ByteSize.ByteSize;
|
|
351
|
-
} | undefined) => Effect.Effect<Volume, ConfigurationError,
|
|
538
|
+
} | undefined) => Effect.Effect<Volume, ConfigurationError | import("effect/PlatformError").PlatformError, Crypto.Crypto>;
|
|
539
|
+
/** @internal */
|
|
540
|
+
export declare const prepareEmptyLiveImage: (options?: {
|
|
541
|
+
readonly identity?: string & import("effect/Brand").Brand<"@effect-vfs/core/VolumeIdentity">;
|
|
542
|
+
readonly maxEntries?: number;
|
|
543
|
+
readonly maxPendingOperations?: number;
|
|
544
|
+
readonly maxWatchEvents?: number;
|
|
545
|
+
readonly maxBytes?: ByteSize.ByteSize;
|
|
546
|
+
readonly maxFileBytes?: ByteSize.ByteSize;
|
|
547
|
+
readonly maxPathBytes?: ByteSize.ByteSize;
|
|
548
|
+
} | undefined) => Effect.Effect<Uint8Array<ArrayBufferLike>, ConfigurationError | ImageError | import("effect/PlatformError").PlatformError, Crypto.Crypto>;
|
|
549
|
+
/** @internal */
|
|
550
|
+
export declare const openImageVolume: (image: Uint8Array<ArrayBufferLike>, maxImageBytes: ByteSize.ByteSize, commit: (image: Uint8Array) => Effect.Effect<"committed" | "rejected" | "unknown">) => Effect.Effect<Readonly<{
|
|
551
|
+
volume: Volume;
|
|
552
|
+
shutdown: Effect.Effect<void, never, never>;
|
|
553
|
+
}>, ConfigurationError | ImageError | import("effect/PlatformError").PlatformError, Crypto.Crypto>;
|
|
352
554
|
/** @internal */
|
|
353
555
|
export declare const fromSnapshot: (snapshot: Snapshot, options?: {
|
|
556
|
+
readonly identity?: string & import("effect/Brand").Brand<"@effect-vfs/core/VolumeIdentity">;
|
|
354
557
|
readonly maxEntries?: number;
|
|
558
|
+
readonly maxPendingOperations?: number;
|
|
559
|
+
readonly maxWatchEvents?: number;
|
|
355
560
|
readonly maxBytes?: ByteSize.ByteSize;
|
|
356
561
|
readonly maxFileBytes?: ByteSize.ByteSize;
|
|
357
562
|
readonly maxPathBytes?: ByteSize.ByteSize;
|
|
358
|
-
} | undefined) => Effect.Effect<Volume, ConfigurationError | ImageError,
|
|
563
|
+
} | undefined) => Effect.Effect<Volume, ConfigurationError | ImageError | import("effect/PlatformError").PlatformError, Crypto.Crypto>;
|
|
359
564
|
/** @internal */
|
|
360
565
|
export declare const makeOverlay: (base: Snapshot, options?: {
|
|
566
|
+
readonly identity?: string & import("effect/Brand").Brand<"@effect-vfs/core/VolumeIdentity">;
|
|
361
567
|
readonly maxEntries?: number;
|
|
568
|
+
readonly maxPendingOperations?: number;
|
|
569
|
+
readonly maxWatchEvents?: number;
|
|
362
570
|
readonly maxBytes?: ByteSize.ByteSize;
|
|
363
571
|
readonly maxFileBytes?: ByteSize.ByteSize;
|
|
364
572
|
readonly maxPathBytes?: ByteSize.ByteSize;
|
|
365
|
-
} | undefined) => Effect.Effect<OverlayVolume, ConfigurationError | ImageError,
|
|
573
|
+
} | undefined) => Effect.Effect<OverlayVolume, ConfigurationError | ImageError | import("effect/PlatformError").PlatformError, Crypto.Crypto>;
|
|
366
574
|
//# sourceMappingURL=virtualFileSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualFileSystem.d.ts","sourceRoot":"","sources":["../../src/internal/virtualFileSystem.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAE3C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"virtualFileSystem.d.ts","sourceRoot":"","sources":["../../src/internal/virtualFileSystem.ts"],"names":[],"mappings":"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"}
|