@effect-vfs/core 0.4.0 → 0.6.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.
Files changed (143) hide show
  1. package/README.md +39 -32
  2. package/dist/BytePath.d.ts +114 -4
  3. package/dist/BytePath.d.ts.map +1 -1
  4. package/dist/BytePath.js +155 -0
  5. package/dist/Caller.d.ts +391 -0
  6. package/dist/Caller.d.ts.map +1 -0
  7. package/dist/Caller.js +199 -0
  8. package/dist/FileHandle.d.ts +50 -0
  9. package/dist/FileHandle.d.ts.map +1 -0
  10. package/dist/FileHandle.js +28 -0
  11. package/dist/Fixture.d.ts +155 -0
  12. package/dist/Fixture.d.ts.map +1 -0
  13. package/dist/Fixture.js +65 -0
  14. package/dist/LiveVolume.d.ts +15 -22
  15. package/dist/LiveVolume.d.ts.map +1 -1
  16. package/dist/LiveVolume.js +19 -15
  17. package/dist/Metadata.d.ts +186 -0
  18. package/dist/Metadata.d.ts.map +1 -0
  19. package/dist/Metadata.js +125 -0
  20. package/dist/Snapshot.d.ts +31 -53
  21. package/dist/Snapshot.d.ts.map +1 -1
  22. package/dist/Snapshot.js +26 -49
  23. package/dist/SnapshotDelta.d.ts +24 -39
  24. package/dist/SnapshotDelta.d.ts.map +1 -1
  25. package/dist/SnapshotDelta.js +14 -35
  26. package/dist/Target.d.ts +225 -0
  27. package/dist/Target.d.ts.map +1 -0
  28. package/dist/Target.js +92 -0
  29. package/dist/Testing.d.ts +128 -0
  30. package/dist/Testing.d.ts.map +1 -0
  31. package/dist/Testing.js +111 -0
  32. package/dist/VfsError.d.ts +199 -0
  33. package/dist/VfsError.d.ts.map +1 -0
  34. package/dist/VfsError.js +164 -0
  35. package/dist/VirtualFileSystem.d.ts +628 -347
  36. package/dist/VirtualFileSystem.d.ts.map +1 -1
  37. package/dist/VirtualFileSystem.js +450 -117
  38. package/dist/Volume.d.ts +211 -0
  39. package/dist/Volume.d.ts.map +1 -0
  40. package/dist/Volume.js +172 -0
  41. package/dist/Watch.d.ts +68 -0
  42. package/dist/Watch.d.ts.map +1 -0
  43. package/dist/Watch.js +46 -0
  44. package/dist/index.d.ts +56 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +56 -1
  47. package/dist/internal/budget.d.ts +90 -0
  48. package/dist/internal/budget.d.ts.map +1 -0
  49. package/dist/internal/budget.js +70 -0
  50. package/dist/internal/bytePath.d.ts +2 -0
  51. package/dist/internal/bytePath.d.ts.map +1 -1
  52. package/dist/internal/bytePath.js +3 -2
  53. package/dist/internal/bytes.d.ts +3 -0
  54. package/dist/internal/bytes.d.ts.map +1 -1
  55. package/dist/internal/bytes.js +4 -2
  56. package/dist/internal/canonicalBase64.d.ts +1 -4
  57. package/dist/internal/canonicalBase64.d.ts.map +1 -1
  58. package/dist/internal/canonicalBase64.js +9 -13
  59. package/dist/internal/errors.d.ts +54 -0
  60. package/dist/internal/errors.d.ts.map +1 -0
  61. package/dist/internal/errors.js +91 -0
  62. package/dist/internal/{virtualFileSystem/fixture.d.ts → fixture.d.ts} +8 -8
  63. package/dist/internal/fixture.d.ts.map +1 -0
  64. package/dist/internal/fixture.js +133 -0
  65. package/dist/internal/hex128.d.ts +12 -0
  66. package/dist/internal/hex128.d.ts.map +1 -0
  67. package/dist/internal/hex128.js +7 -0
  68. package/dist/internal/hmac.d.ts +5 -0
  69. package/dist/internal/hmac.d.ts.map +1 -0
  70. package/dist/internal/hmac.js +150 -0
  71. package/dist/internal/image.d.ts +14 -117
  72. package/dist/internal/image.d.ts.map +1 -1
  73. package/dist/internal/image.js +137 -167
  74. package/dist/internal/inodeTable.d.ts +20 -0
  75. package/dist/internal/inodeTable.d.ts.map +1 -0
  76. package/dist/internal/inodeTable.js +48 -0
  77. package/dist/internal/lines.d.ts +36 -0
  78. package/dist/internal/lines.d.ts.map +1 -0
  79. package/dist/internal/lines.js +115 -0
  80. package/dist/internal/liveImage.d.ts +19 -278
  81. package/dist/internal/liveImage.d.ts.map +1 -1
  82. package/dist/internal/liveImage.js +75 -166
  83. package/dist/internal/merkle.d.ts +45 -0
  84. package/dist/internal/merkle.d.ts.map +1 -0
  85. package/dist/internal/merkle.js +179 -0
  86. package/dist/internal/metadata.d.ts +2 -13
  87. package/dist/internal/metadata.d.ts.map +1 -1
  88. package/dist/internal/metadata.js +5 -15
  89. package/dist/internal/{virtualFileSystem/overlayDiff.d.ts → overlayDiff.d.ts} +3 -3
  90. package/dist/internal/overlayDiff.d.ts.map +1 -0
  91. package/dist/internal/{virtualFileSystem/overlayDiff.js → overlayDiff.js} +1 -4
  92. package/dist/internal/{virtualFileSystem/path.d.ts → path.d.ts} +19 -7
  93. package/dist/internal/path.d.ts.map +1 -0
  94. package/dist/internal/{virtualFileSystem/path.js → path.js} +39 -25
  95. package/dist/internal/snapshotDelta.d.ts +61 -60
  96. package/dist/internal/snapshotDelta.d.ts.map +1 -1
  97. package/dist/internal/snapshotDelta.js +612 -504
  98. package/dist/internal/snapshotDeltaModel.d.ts.map +1 -1
  99. package/dist/internal/snapshotDeltaModel.js +0 -1
  100. package/dist/internal/stagedState.d.ts +18 -0
  101. package/dist/internal/stagedState.d.ts.map +1 -0
  102. package/dist/internal/stagedState.js +18 -0
  103. package/dist/internal/testSeams.d.ts +17 -0
  104. package/dist/internal/testSeams.d.ts.map +1 -0
  105. package/dist/internal/testSeams.js +20 -0
  106. package/dist/internal/tree.d.ts +225 -0
  107. package/dist/internal/tree.d.ts.map +1 -0
  108. package/dist/internal/tree.js +385 -0
  109. package/dist/internal/turnstile.d.ts +8 -0
  110. package/dist/internal/turnstile.d.ts.map +1 -0
  111. package/dist/internal/turnstile.js +43 -0
  112. package/dist/internal/virtualFileSystem.d.ts +41 -491
  113. package/dist/internal/virtualFileSystem.d.ts.map +1 -1
  114. package/dist/internal/virtualFileSystem.js +2118 -2471
  115. package/dist/internal/volumeState.d.ts +110 -0
  116. package/dist/internal/volumeState.d.ts.map +1 -0
  117. package/dist/internal/volumeState.js +204 -0
  118. package/dist/internal/watchHub.d.ts +25 -0
  119. package/dist/internal/watchHub.d.ts.map +1 -0
  120. package/dist/internal/watchHub.js +68 -0
  121. package/package.json +53 -9
  122. package/dist/VirtualFileSystemError.d.ts +0 -54
  123. package/dist/VirtualFileSystemError.d.ts.map +0 -1
  124. package/dist/VirtualFileSystemError.js +0 -49
  125. package/dist/internal/virtualFileSystem/errors.d.ts +0 -12
  126. package/dist/internal/virtualFileSystem/errors.d.ts.map +0 -1
  127. package/dist/internal/virtualFileSystem/errors.js +0 -47
  128. package/dist/internal/virtualFileSystem/fixture.d.ts.map +0 -1
  129. package/dist/internal/virtualFileSystem/fixture.js +0 -150
  130. package/dist/internal/virtualFileSystem/overlayContent.d.ts +0 -15
  131. package/dist/internal/virtualFileSystem/overlayContent.d.ts.map +0 -1
  132. package/dist/internal/virtualFileSystem/overlayContent.js +0 -29
  133. package/dist/internal/virtualFileSystem/overlayDiff.d.ts.map +0 -1
  134. package/dist/internal/virtualFileSystem/path.d.ts.map +0 -1
  135. package/dist/internal/virtualFileSystem/stagedState.d.ts +0 -22
  136. package/dist/internal/virtualFileSystem/stagedState.d.ts.map +0 -1
  137. package/dist/internal/virtualFileSystem/stagedState.js +0 -62
  138. package/dist/internal/virtualFileSystem/testHooks.d.ts +0 -20
  139. package/dist/internal/virtualFileSystem/testHooks.d.ts.map +0 -1
  140. package/dist/internal/virtualFileSystem/testHooks.js +0 -23
  141. package/dist/internal/virtualFileSystem/watchHub.d.ts +0 -16
  142. package/dist/internal/virtualFileSystem/watchHub.d.ts.map +0 -1
  143. package/dist/internal/virtualFileSystem/watchHub.js +0 -54
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Fixture schemas: a declarative final state from which a volume is built.
3
+ *
4
+ * @since 0.6.0
5
+ */
6
+ import * as Schema from "effect/Schema";
7
+ import { BytePath } from "./BytePath.js";
8
+ /**
9
+ * Schema for the metadata a fixture entry may pin; omitted fields take the
10
+ * volume's defaults.
11
+ *
12
+ * @category schemas
13
+ * @since 0.6.0
14
+ */
15
+ export declare const FixtureMetadata: Schema.Struct<{
16
+ readonly uid: Schema.optionalKey<Schema.Natural>;
17
+ readonly gid: Schema.optionalKey<Schema.Natural>;
18
+ readonly mode: Schema.optionalKey<Schema.Natural>;
19
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
20
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
21
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
22
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
23
+ }>;
24
+ /**
25
+ * Metadata a fixture entry pins.
26
+ *
27
+ * @category models
28
+ * @since 0.6.0
29
+ */
30
+ export type FixtureMetadata = typeof FixtureMetadata.Type;
31
+ /**
32
+ * Schema for one fixture entry: a directory, a file with bytes, a symbolic
33
+ * link, or a hard link to an earlier file entry.
34
+ *
35
+ * @category schemas
36
+ * @since 0.6.0
37
+ */
38
+ export declare const FixtureEntry: Schema.toTaggedUnion<"kind", readonly [Schema.Struct<{
39
+ readonly kind: Schema.Literal<"directory">;
40
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
41
+ readonly metadata: Schema.optionalKey<Schema.Struct<{
42
+ readonly uid: Schema.optionalKey<Schema.Natural>;
43
+ readonly gid: Schema.optionalKey<Schema.Natural>;
44
+ readonly mode: Schema.optionalKey<Schema.Natural>;
45
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
46
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
47
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
48
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
49
+ }>>;
50
+ }>, Schema.Struct<{
51
+ readonly kind: Schema.Literal<"file">;
52
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
53
+ readonly bytes: Schema.Uint8Array;
54
+ readonly metadata: Schema.optionalKey<Schema.Struct<{
55
+ readonly uid: Schema.optionalKey<Schema.Natural>;
56
+ readonly gid: Schema.optionalKey<Schema.Natural>;
57
+ readonly mode: Schema.optionalKey<Schema.Natural>;
58
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
59
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
60
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
61
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
62
+ }>>;
63
+ }>, Schema.Struct<{
64
+ readonly kind: Schema.Literal<"symlink">;
65
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
66
+ readonly target: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
67
+ readonly metadata: Schema.optionalKey<Schema.Struct<{
68
+ readonly uid: Schema.optionalKey<Schema.Natural>;
69
+ readonly gid: Schema.optionalKey<Schema.Natural>;
70
+ readonly mode: Schema.optionalKey<Schema.Natural>;
71
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
72
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
73
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
74
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
75
+ }>>;
76
+ }>, Schema.Struct<{
77
+ readonly kind: Schema.Literal<"hardLink">;
78
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
79
+ readonly target: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
80
+ }>]>;
81
+ /**
82
+ * One fixture entry.
83
+ *
84
+ * @category models
85
+ * @since 0.6.0
86
+ */
87
+ export type FixtureEntry = typeof FixtureEntry.Type;
88
+ /**
89
+ * Schema for a whole fixture: optional root metadata and its entries in order.
90
+ *
91
+ * @category schemas
92
+ * @since 0.6.0
93
+ */
94
+ export declare const Fixture: Schema.Struct<{
95
+ readonly rootMetadata: Schema.optionalKey<Schema.Struct<{
96
+ readonly uid: Schema.optionalKey<Schema.Natural>;
97
+ readonly gid: Schema.optionalKey<Schema.Natural>;
98
+ readonly mode: Schema.optionalKey<Schema.Natural>;
99
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
100
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
101
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
102
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
103
+ }>>;
104
+ readonly entries: Schema.$Array<Schema.toTaggedUnion<"kind", readonly [Schema.Struct<{
105
+ readonly kind: Schema.Literal<"directory">;
106
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
107
+ readonly metadata: Schema.optionalKey<Schema.Struct<{
108
+ readonly uid: Schema.optionalKey<Schema.Natural>;
109
+ readonly gid: Schema.optionalKey<Schema.Natural>;
110
+ readonly mode: Schema.optionalKey<Schema.Natural>;
111
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
112
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
113
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
114
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
115
+ }>>;
116
+ }>, Schema.Struct<{
117
+ readonly kind: Schema.Literal<"file">;
118
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
119
+ readonly bytes: Schema.Uint8Array;
120
+ readonly metadata: Schema.optionalKey<Schema.Struct<{
121
+ readonly uid: Schema.optionalKey<Schema.Natural>;
122
+ readonly gid: Schema.optionalKey<Schema.Natural>;
123
+ readonly mode: Schema.optionalKey<Schema.Natural>;
124
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
125
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
126
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
127
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
128
+ }>>;
129
+ }>, Schema.Struct<{
130
+ readonly kind: Schema.Literal<"symlink">;
131
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
132
+ readonly target: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
133
+ readonly metadata: Schema.optionalKey<Schema.Struct<{
134
+ readonly uid: Schema.optionalKey<Schema.Natural>;
135
+ readonly gid: Schema.optionalKey<Schema.Natural>;
136
+ readonly mode: Schema.optionalKey<Schema.Natural>;
137
+ readonly atimeNs: Schema.optionalKey<Schema.BigInt>;
138
+ readonly mtimeNs: Schema.optionalKey<Schema.BigInt>;
139
+ readonly ctimeNs: Schema.optionalKey<Schema.BigInt>;
140
+ readonly birthtimeNs: Schema.optionalKey<Schema.BigInt>;
141
+ }>>;
142
+ }>, Schema.Struct<{
143
+ readonly kind: Schema.Literal<"hardLink">;
144
+ readonly path: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
145
+ readonly target: Schema.Union<readonly [Schema.String, Schema.declare<BytePath, BytePath>]>;
146
+ }>]>>;
147
+ }>;
148
+ /**
149
+ * A whole fixture.
150
+ *
151
+ * @category models
152
+ * @since 0.6.0
153
+ */
154
+ export type Fixture = typeof Fixture.Type;
155
+ //# sourceMappingURL=Fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fixture.d.ts","sourceRoot":"","sources":["../src/Fixture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;;;;;;;;EAQ1B,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAOzD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmBY,CAAA;AAErC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGlB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Fixture schemas: a declarative final state from which a volume is built.
3
+ *
4
+ * @since 0.6.0
5
+ */
6
+ import * as Schema from "effect/Schema";
7
+ import { BytePath } from "./BytePath.js";
8
+ import { Mode, Timestamp } from "./Metadata.js";
9
+ /**
10
+ * Schema for the metadata a fixture entry may pin; omitted fields take the
11
+ * volume's defaults.
12
+ *
13
+ * @category schemas
14
+ * @since 0.6.0
15
+ */
16
+ export const FixtureMetadata = Schema.Struct({
17
+ uid: Schema.optionalKey(Schema.Natural),
18
+ gid: Schema.optionalKey(Schema.Natural),
19
+ mode: Schema.optionalKey(Mode),
20
+ atimeNs: Schema.optionalKey(Timestamp),
21
+ mtimeNs: Schema.optionalKey(Timestamp),
22
+ ctimeNs: Schema.optionalKey(Timestamp),
23
+ birthtimeNs: Schema.optionalKey(Timestamp)
24
+ });
25
+ const FixturePath = Schema.Union([
26
+ Schema.String,
27
+ BytePath
28
+ ]);
29
+ /**
30
+ * Schema for one fixture entry: a directory, a file with bytes, a symbolic
31
+ * link, or a hard link to an earlier file entry.
32
+ *
33
+ * @category schemas
34
+ * @since 0.6.0
35
+ */
36
+ export const FixtureEntry = Schema.Union([
37
+ Schema.Struct({
38
+ kind: Schema.Literal("directory"),
39
+ path: FixturePath,
40
+ metadata: Schema.optionalKey(FixtureMetadata)
41
+ }),
42
+ Schema.Struct({
43
+ kind: Schema.Literal("file"),
44
+ path: FixturePath,
45
+ bytes: Schema.Uint8Array,
46
+ metadata: Schema.optionalKey(FixtureMetadata)
47
+ }),
48
+ Schema.Struct({
49
+ kind: Schema.Literal("symlink"),
50
+ path: FixturePath,
51
+ target: FixturePath,
52
+ metadata: Schema.optionalKey(FixtureMetadata)
53
+ }),
54
+ Schema.Struct({ kind: Schema.Literal("hardLink"), path: FixturePath, target: FixturePath })
55
+ ]).pipe(Schema.toTaggedUnion("kind"));
56
+ /**
57
+ * Schema for a whole fixture: optional root metadata and its entries in order.
58
+ *
59
+ * @category schemas
60
+ * @since 0.6.0
61
+ */
62
+ export const Fixture = Schema.Struct({
63
+ rootMetadata: Schema.optionalKey(FixtureMetadata),
64
+ entries: Schema.Array(FixtureEntry)
65
+ });
@@ -3,38 +3,27 @@
3
3
  *
4
4
  * An adapter must preserve the supplied bytes atomically and classify each
5
5
  * commit as confirmed, definitely rejected, or uncertain. The opened volume
6
- * stays at `memory-only` until the adapter's durability is qualified.
6
+ * stays at `memory-only` unless the adapter explicitly supplies a qualified
7
+ * durability tier.
7
8
  *
8
9
  * @since 0.4.0
9
10
  */
10
11
  import { Context, Effect } from "effect";
11
12
  import * as ByteSize from "effect/ByteSize";
12
- import type * as Crypto from "effect/Crypto";
13
- import type * as PlatformError from "effect/PlatformError";
14
13
  import type * as Scope from "effect/Scope";
15
- import type { ConfigurationError, ImageError, Volume, VolumeOptions } from "./VirtualFileSystem.js";
14
+ import { type ArgumentFailure, type StoreFailure, VfsError } from "./VfsError.js";
15
+ import type { Volume, VolumeDurability, VolumeOptions } from "./VirtualFileSystem.js";
16
16
  /**
17
17
  * A storage commit's observed outcome.
18
18
  *
19
+ * @category models
19
20
  * @since 0.4.0
20
21
  */
21
22
  export type CommitOutcome = "committed" | "rejected" | "unknown";
22
- declare const LiveVolumeError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
23
- readonly _tag: "LiveVolumeError";
24
- } & Readonly<A>;
25
- /**
26
- * A failed live-store startup or recovery.
27
- *
28
- * @category errors
29
- * @since 0.4.0
30
- */
31
- export declare class LiveVolumeError extends LiveVolumeError_base<{
32
- readonly code: "InvalidConfiguration" | "Storage" | "Ownership" | "IncompatibleStore" | "CorruptStore";
33
- readonly cause?: unknown;
34
- }> {
35
- }
36
23
  declare const LiveImageStore_base: Context.ServiceClass<LiveImageStore, "@effect-vfs/core/LiveImageStore", {
37
- readonly loadOrCreate: (initial: Uint8Array) => Effect.Effect<Uint8Array, LiveVolumeError>;
24
+ /** Storage guarantee for successful commits; omission means memory-only. */
25
+ readonly durability?: VolumeDurability;
26
+ readonly loadOrCreate: (initial: Uint8Array) => Effect.Effect<Uint8Array, StoreFailure | ArgumentFailure>;
38
27
  readonly commit: (image: Uint8Array) => Effect.Effect<CommitOutcome>;
39
28
  }>;
40
29
  /**
@@ -42,6 +31,7 @@ declare const LiveImageStore_base: Context.ServiceClass<LiveImageStore, "@effect
42
31
  * volume has shut down. Providers must atomically replace each image and
43
32
  * classify ambiguous commits as `unknown`.
44
33
  *
34
+ * @category services
45
35
  * @since 0.4.0
46
36
  */
47
37
  export declare class LiveImageStore extends LiveImageStore_base {
@@ -60,9 +50,10 @@ export interface Options {
60
50
  * Open a live volume using the supplied store Layer. The caller owns a Scope;
61
51
  * the volume shuts down before that Layer releases its storage resource.
62
52
  *
53
+ * @category constructors
63
54
  * @since 0.4.0
64
55
  */
65
- export declare const open: (options: Options) => Effect.Effect<Volume, LiveVolumeError, LiveImageStore | Crypto.Crypto | Scope.Scope>;
56
+ export declare const open: (options: Options) => Effect.Effect<Volume, VfsError, LiveImageStore | Scope.Scope>;
66
57
  /**
67
58
  * A live volume and the shutdown action its storage adapter must run before
68
59
  * closing the underlying store.
@@ -85,17 +76,19 @@ export interface ImageSession {
85
76
  * Construct a versioned image for a new, empty volume.
86
77
  * Store this image before opening it for mutation.
87
78
  *
79
+ * @category constructors
88
80
  * @since 0.4.0
89
81
  */
90
- export declare const prepareEmptyImage: (options?: VolumeOptions) => Effect.Effect<Uint8Array, ConfigurationError | ImageError | PlatformError.PlatformError, Crypto.Crypto>;
82
+ export declare const prepareEmptyImage: (options?: VolumeOptions) => Effect.Effect<Uint8Array, VfsError>;
91
83
  /**
92
84
  * Open a validated image and stage every mutation before calling `commit`.
93
85
  * The returned session contains the volume and a coordinated shutdown effect.
94
86
  * Run shutdown before releasing the storage connection. An uncertain commit
95
87
  * makes the volume unavailable until it is reopened.
96
88
  *
89
+ * @category constructors
97
90
  * @since 0.4.0
98
91
  */
99
- export declare const openImage: (image: Uint8Array, maxImageBytes: ByteSize.ByteSize, commit: (image: Uint8Array) => Effect.Effect<CommitOutcome>) => Effect.Effect<ImageSession, ConfigurationError | ImageError | PlatformError.PlatformError, Crypto.Crypto>;
92
+ export declare const openImage: (image: Uint8Array, maxImageBytes: ByteSize.ByteSize, commit: (image: Uint8Array) => Effect.Effect<CommitOutcome>, durability?: VolumeDurability) => Effect.Effect<ImageSession, VfsError>;
100
93
  export {};
101
94
  //# sourceMappingURL=LiveVolume.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LiveVolume.d.ts","sourceRoot":"","sources":["../src/LiveVolume.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEnG;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAA;;;;AAEhE;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,qBAAoC;IACvE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,SAAS,GAAG,WAAW,GAAG,mBAAmB,GAAG,cAAc,CAAA;IACtG,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;CAAG;;2BAUoB,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC;qBACzE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;;AATtE;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,mBAGG;CAAG;AAE1C;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACzC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAC/B;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CACpD,MAAM,EACN,eAAe,EACf,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAkC5C,CAAA;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACvC;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,CACxE,UAAU,EACV,kBAAkB,GAAG,UAAU,GAAG,aAAa,CAAC,aAAa,EAC7D,MAAM,CAAC,MAAM,CACgB,CAAA;AAE/B;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,EAAE,CACtB,KAAK,EAAE,UAAU,EACjB,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAChC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KACxD,MAAM,CAAC,MAAM,CAChB,YAAY,EACZ,kBAAkB,GAAG,UAAU,GAAG,aAAa,CAAC,aAAa,EAC7D,MAAM,CAAC,MAAM,CACU,CAAA"}
1
+ {"version":3,"file":"LiveVolume.d.ts","sourceRoot":"","sources":["../src/LiveVolume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAG1C,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAErF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAA;;IAW9D,4EAA4E;0BACtD,gBAAgB;2BACf,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,GAAG,eAAe,CAAC;qBACxF,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;;AAZtE;;;;;;;GAOG;AACH,qBAAa,cAAe,SAAQ,mBAKG;CAAG;AAE1C;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACzC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CACpD,MAAM,EACN,QAAQ,EACR,cAAc,GAAG,KAAK,CAAC,KAAK,CAuC5B,CAAA;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,CACxE,UAAU,EACV,QAAQ,CAKP,CAAA;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE,CACtB,KAAK,EAAE,UAAU,EACjB,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAChC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAC3D,UAAU,CAAC,EAAE,gBAAgB,KAC1B,MAAM,CAAC,MAAM,CAChB,YAAY,EACZ,QAAQ,CACe,CAAA"}
@@ -3,26 +3,22 @@
3
3
  *
4
4
  * An adapter must preserve the supplied bytes atomically and classify each
5
5
  * commit as confirmed, definitely rejected, or uncertain. The opened volume
6
- * stays at `memory-only` until the adapter's durability is qualified.
6
+ * stays at `memory-only` unless the adapter explicitly supplies a qualified
7
+ * durability tier.
7
8
  *
8
9
  * @since 0.4.0
9
10
  */
10
- import { Context, Data, Effect } from "effect";
11
+ import { Context, Effect } from "effect";
11
12
  import * as ByteSize from "effect/ByteSize";
13
+ import { argumentFailure, retargetFailure } from "./internal/errors.js";
12
14
  import * as Model from "./internal/virtualFileSystem.js";
13
- /**
14
- * A failed live-store startup or recovery.
15
- *
16
- * @category errors
17
- * @since 0.4.0
18
- */
19
- export class LiveVolumeError extends Data.TaggedError("LiveVolumeError") {
20
- }
15
+ import { VfsError } from "./VfsError.js";
21
16
  /**
22
17
  * One exclusively owned store. Its Layer holds the storage resource until the
23
18
  * volume has shut down. Providers must atomically replace each image and
24
19
  * classify ambiguous commits as `unknown`.
25
20
  *
21
+ * @category services
26
22
  * @since 0.4.0
27
23
  */
28
24
  export class LiveImageStore extends Context.Service()("@effect-vfs/core/LiveImageStore") {
@@ -31,16 +27,22 @@ export class LiveImageStore extends Context.Service()("@effect-vfs/core/LiveImag
31
27
  * Open a live volume using the supplied store Layer. The caller owns a Scope;
32
28
  * the volume shuts down before that Layer releases its storage resource.
33
29
  *
30
+ * @category constructors
34
31
  * @since 0.4.0
35
32
  */
36
33
  export const open = Effect.fn("LiveVolume.open")(function* (options) {
37
34
  const store = yield* LiveImageStore;
38
- const initial = yield* prepareEmptyImage(options.volume).pipe(Effect.mapError((cause) => new LiveVolumeError({ code: "InvalidConfiguration", cause })));
35
+ const initial = yield* prepareEmptyImage(options.volume).pipe(
36
+ // Names the nested option that failed, such as `volume.maxEntries`.
37
+ Effect.mapError((cause) => {
38
+ const field = "field" in cause ? cause.field : undefined;
39
+ return argumentFailure("LiveVolume.open", field === undefined ? "volume" : `volume.${field}`, cause);
40
+ }));
39
41
  if (BigInt(initial.length) > ByteSize.toBigInt(options.maxImageBytes)) {
40
- return yield* new LiveVolumeError({ code: "InvalidConfiguration" });
42
+ return yield* argumentFailure("LiveVolume.open", "maxImageBytes");
41
43
  }
42
44
  const image = yield* store.loadOrCreate(initial);
43
- const session = yield* openImage(image, options.maxImageBytes, store.commit).pipe(Effect.mapError((cause) => new LiveVolumeError({ code: "CorruptStore", cause })));
45
+ const session = yield* openImage(image, options.maxImageBytes, store.commit, store.durability ?? "memory-only").pipe(Effect.mapError((cause) => new VfsError({ code: "CorruptStore", operation: "LiveVolume.open", cause })));
44
46
  yield* Effect.addFinalizer(() => session.shutdown);
45
47
  const volume = session.volume;
46
48
  if (volume.limits.maxEntries !== options.volume.maxEntries || volume.limits.maxBytes === undefined ||
@@ -50,7 +52,7 @@ export const open = Effect.fn("LiveVolume.open")(function* (options) {
50
52
  ByteSize.toBigInt(volume.limits.maxFileBytes) !== ByteSize.toBigInt(options.volume.maxFileBytes) ||
51
53
  ByteSize.toBigInt(volume.limits.maxPathBytes) !== ByteSize.toBigInt(options.volume.maxPathBytes) ||
52
54
  (options.volume.identity !== undefined && options.volume.identity !== volume.identity)) {
53
- return yield* new LiveVolumeError({ code: "IncompatibleStore" });
55
+ return yield* new VfsError({ code: "IncompatibleStore", operation: "LiveVolume.open" });
54
56
  }
55
57
  return volume;
56
58
  });
@@ -58,15 +60,17 @@ export const open = Effect.fn("LiveVolume.open")(function* (options) {
58
60
  * Construct a versioned image for a new, empty volume.
59
61
  * Store this image before opening it for mutation.
60
62
  *
63
+ * @category constructors
61
64
  * @since 0.4.0
62
65
  */
63
- export const prepareEmptyImage = Model.prepareEmptyLiveImage;
66
+ export const prepareEmptyImage = (options) => Effect.mapError(Model.prepareEmptyLiveImage(options), (error) => retargetFailure("LiveVolume.prepareEmptyImage", error));
64
67
  /**
65
68
  * Open a validated image and stage every mutation before calling `commit`.
66
69
  * The returned session contains the volume and a coordinated shutdown effect.
67
70
  * Run shutdown before releasing the storage connection. An uncertain commit
68
71
  * makes the volume unavailable until it is reopened.
69
72
  *
73
+ * @category constructors
70
74
  * @since 0.4.0
71
75
  */
72
76
  export const openImage = Model.openImageVolume;
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Metadata schemas for virtual filesystem objects: timestamps, permission modes,
3
+ * the metadata record every observation returns, and the owner and time updates
4
+ * that mutations accept.
5
+ *
6
+ * @since 0.6.0
7
+ */
8
+ import * as Schema from "effect/Schema";
9
+ /**
10
+ * Schema for a timestamp in nanoseconds since the Unix epoch. Values stay
11
+ * within 128 decimal digits so they round-trip through snapshot encodings.
12
+ *
13
+ * @category schemas
14
+ * @since 0.6.0
15
+ */
16
+ export declare const Timestamp: Schema.BigInt;
17
+ /**
18
+ * A timestamp in nanoseconds since the Unix epoch.
19
+ *
20
+ * @category models
21
+ * @since 0.6.0
22
+ */
23
+ export type Timestamp = typeof Timestamp.Type;
24
+ /**
25
+ * Schema for a POSIX permission mode: the permission, setuid, setgid and sticky
26
+ * bits without any file-type bits.
27
+ *
28
+ * @category schemas
29
+ * @since 0.6.0
30
+ */
31
+ export declare const Mode: Schema.Natural;
32
+ /**
33
+ * A POSIX permission mode.
34
+ *
35
+ * @category models
36
+ * @since 0.6.0
37
+ */
38
+ export type Mode = typeof Mode.Type;
39
+ /**
40
+ * Schema for the metadata of a filesystem object.
41
+ *
42
+ * @category schemas
43
+ * @since 0.6.0
44
+ */
45
+ export declare const Metadata: Schema.Struct<{
46
+ readonly kind: Schema.Literals<readonly ["directory", "file", "symlink"]>;
47
+ readonly ino: Schema.BigInt;
48
+ readonly nlink: Schema.Natural;
49
+ readonly size: Schema.BigInt;
50
+ readonly uid: Schema.Natural;
51
+ readonly gid: Schema.Natural;
52
+ readonly mode: Schema.Natural;
53
+ readonly atimeNs: Schema.BigInt;
54
+ readonly mtimeNs: Schema.BigInt;
55
+ readonly ctimeNs: Schema.BigInt;
56
+ readonly birthtimeNs: Schema.BigInt;
57
+ /** The object's revision, advanced by every committed change to it. */
58
+ readonly revision: Schema.BigInt;
59
+ }>;
60
+ /**
61
+ * Metadata of a filesystem object, including its revision.
62
+ *
63
+ * @category models
64
+ * @since 0.6.0
65
+ */
66
+ export type Metadata = typeof Metadata.Type;
67
+ /**
68
+ * Mask of the file-type bits in a POSIX `st_mode`.
69
+ *
70
+ * @category constants
71
+ * @since 0.6.0
72
+ */
73
+ export declare const S_IFMT = 61440;
74
+ /**
75
+ * File-type bits of a regular file in a POSIX `st_mode`.
76
+ *
77
+ * @category constants
78
+ * @since 0.6.0
79
+ */
80
+ export declare const S_IFREG = 32768;
81
+ /**
82
+ * File-type bits of a directory in a POSIX `st_mode`.
83
+ *
84
+ * @category constants
85
+ * @since 0.6.0
86
+ */
87
+ export declare const S_IFDIR = 16384;
88
+ /**
89
+ * File-type bits of a symbolic link in a POSIX `st_mode`.
90
+ *
91
+ * @category constants
92
+ * @since 0.6.0
93
+ */
94
+ export declare const S_IFLNK = 40960;
95
+ /**
96
+ * The POSIX `st_mode` of an object: the file-type bits of its `kind` joined
97
+ * with its permission `mode`. `mode` itself never carries type bits, so the
98
+ * kind has a single source.
99
+ *
100
+ * A volume has no device nodes, so a `stat` built from metadata reports `dev`
101
+ * and `rdev` as 0, and `(dev, ino)` identifies an object only within one volume.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * import { S_IFDIR, S_IFMT, typedMode } from "@effect-vfs/core/Metadata"
106
+ *
107
+ * const stMode = typedMode({ kind: "directory", mode: 0o755 })
108
+ *
109
+ * console.log(stMode.toString(8)) // "40755"
110
+ * console.log((stMode & S_IFMT) === S_IFDIR) // true
111
+ * ```
112
+ *
113
+ * @category getters
114
+ * @since 0.6.0
115
+ */
116
+ export declare const typedMode: (metadata: Pick<Metadata, "kind" | "mode">) => number;
117
+ /**
118
+ * Schema for an ownership update; an omitted field keeps its current value.
119
+ *
120
+ * @category schemas
121
+ * @since 0.6.0
122
+ */
123
+ export declare const OwnerUpdate: Schema.Struct<{
124
+ readonly uid: Schema.optionalKey<Schema.Natural>;
125
+ readonly gid: Schema.optionalKey<Schema.Natural>;
126
+ }>;
127
+ /**
128
+ * An ownership update.
129
+ *
130
+ * @category models
131
+ * @since 0.6.0
132
+ */
133
+ export type OwnerUpdate = typeof OwnerUpdate.Type;
134
+ /**
135
+ * Schema for one timestamp update: the current time, no change, or an explicit value.
136
+ *
137
+ * @category schemas
138
+ * @since 0.6.0
139
+ */
140
+ export declare const TimeUpdate: Schema.Union<readonly [Schema.Struct<{
141
+ readonly kind: Schema.Literal<"now">;
142
+ }>, Schema.Struct<{
143
+ readonly kind: Schema.Literal<"omit">;
144
+ }>, Schema.Struct<{
145
+ readonly kind: Schema.Literal<"value">;
146
+ readonly nanoseconds: Schema.BigInt;
147
+ }>]>;
148
+ /**
149
+ * One timestamp update.
150
+ *
151
+ * @category models
152
+ * @since 0.6.0
153
+ */
154
+ export type TimeUpdate = typeof TimeUpdate.Type;
155
+ /**
156
+ * Schema for the access and modification time updates a mutation applies together.
157
+ *
158
+ * @category schemas
159
+ * @since 0.6.0
160
+ */
161
+ export declare const Times: Schema.Struct<{
162
+ readonly access: Schema.Union<readonly [Schema.Struct<{
163
+ readonly kind: Schema.Literal<"now">;
164
+ }>, Schema.Struct<{
165
+ readonly kind: Schema.Literal<"omit">;
166
+ }>, Schema.Struct<{
167
+ readonly kind: Schema.Literal<"value">;
168
+ readonly nanoseconds: Schema.BigInt;
169
+ }>]>;
170
+ readonly modification: Schema.Union<readonly [Schema.Struct<{
171
+ readonly kind: Schema.Literal<"now">;
172
+ }>, Schema.Struct<{
173
+ readonly kind: Schema.Literal<"omit">;
174
+ }>, Schema.Struct<{
175
+ readonly kind: Schema.Literal<"value">;
176
+ readonly nanoseconds: Schema.BigInt;
177
+ }>]>;
178
+ }>;
179
+ /**
180
+ * Access and modification time updates.
181
+ *
182
+ * @category models
183
+ * @since 0.6.0
184
+ */
185
+ export type Times = typeof Times.Type;
186
+ //# sourceMappingURL=Metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Metadata.d.ts","sourceRoot":"","sources":["../src/Metadata.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,eAGrB,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,gBAA2D,CAAA;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;IAYnB,uEAAuE;;EAEvE,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,MAAM,QAAW,CAAA;AAE9B;;;;;GAKG;AACH,eAAO,MAAM,OAAO,QAAW,CAAA;AAE/B;;;;;GAKG;AACH,eAAO,MAAM,OAAO,QAAW,CAAA;AAE/B;;;;;GAKG;AACH,eAAO,MAAM,OAAO,QAAW,CAAA;AAI/B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,SAAS,aAAc,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,KAAG,MACvB,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;EAGtB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,UAAU;;;;;;;IAIrB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;EAAkE,CAAA;AAEpF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA"}