@struktoai/mirage-browser 0.0.7 → 0.0.8
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 +143 -48
- package/dist/core/opfs/append.d.ts +1 -2
- package/dist/core/opfs/append.d.ts.map +1 -1
- package/dist/core/opfs/append.js +2 -5
- package/dist/core/opfs/append.js.map +1 -1
- package/dist/core/opfs/capacity.d.ts +8 -0
- package/dist/core/opfs/capacity.d.ts.map +1 -0
- package/dist/core/opfs/capacity.js +42 -0
- package/dist/core/opfs/capacity.js.map +1 -0
- package/dist/core/opfs/stream.d.ts.map +1 -1
- package/dist/core/opfs/stream.js +2 -0
- package/dist/core/opfs/stream.js.map +1 -1
- package/dist/core/opfs/write.d.ts +1 -2
- package/dist/core/opfs/write.d.ts.map +1 -1
- package/dist/core/opfs/write.js +2 -5
- package/dist/core/opfs/write.js.map +1 -1
- package/dist/index.d.ts +79 -99
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -91
- package/dist/index.js.map +1 -1
- package/dist/io/gateway.d.ts +8 -0
- package/dist/io/gateway.d.ts.map +1 -0
- package/dist/io/gateway.js +238 -0
- package/dist/io/gateway.js.map +1 -0
- package/dist/io/network.d.ts +21 -0
- package/dist/io/network.d.ts.map +1 -0
- package/dist/io/network.js +131 -0
- package/dist/io/network.js.map +1 -0
- package/dist/io/spool.d.ts +2 -0
- package/dist/io/spool.d.ts.map +1 -0
- package/dist/io/spool.js +68 -0
- package/dist/io/spool.js.map +1 -0
- package/dist/pyodide-sw.js +48 -0
- package/dist/vfs/aliyun/aliyun.d.ts +4 -5
- package/dist/vfs/aliyun/aliyun.d.ts.map +1 -1
- package/dist/vfs/aliyun/aliyun.js +2 -4
- package/dist/vfs/aliyun/aliyun.js.map +1 -1
- package/dist/vfs/aliyun/config.d.ts +22 -11
- package/dist/vfs/aliyun/config.d.ts.map +1 -1
- package/dist/vfs/aliyun/config.js +2 -7
- package/dist/vfs/aliyun/config.js.map +1 -1
- package/dist/vfs/backblaze/backblaze.d.ts +4 -5
- package/dist/vfs/backblaze/backblaze.d.ts.map +1 -1
- package/dist/vfs/backblaze/backblaze.js +2 -4
- package/dist/vfs/backblaze/backblaze.js.map +1 -1
- package/dist/vfs/backblaze/config.d.ts +22 -11
- package/dist/vfs/backblaze/config.d.ts.map +1 -1
- package/dist/vfs/backblaze/config.js +2 -7
- package/dist/vfs/backblaze/config.js.map +1 -1
- package/dist/vfs/ceph/ceph.d.ts +4 -5
- package/dist/vfs/ceph/ceph.d.ts.map +1 -1
- package/dist/vfs/ceph/ceph.js +2 -4
- package/dist/vfs/ceph/ceph.js.map +1 -1
- package/dist/vfs/ceph/config.d.ts +22 -10
- package/dist/vfs/ceph/config.d.ts.map +1 -1
- package/dist/vfs/ceph/config.js +1 -7
- package/dist/vfs/ceph/config.js.map +1 -1
- package/dist/vfs/digitalocean/config.d.ts +22 -11
- package/dist/vfs/digitalocean/config.d.ts.map +1 -1
- package/dist/vfs/digitalocean/config.js +2 -7
- package/dist/vfs/digitalocean/config.js.map +1 -1
- package/dist/vfs/digitalocean/digitalocean.d.ts +4 -5
- package/dist/vfs/digitalocean/digitalocean.d.ts.map +1 -1
- package/dist/vfs/digitalocean/digitalocean.js +2 -4
- package/dist/vfs/digitalocean/digitalocean.js.map +1 -1
- package/dist/vfs/discord/config.d.ts +5 -14
- package/dist/vfs/discord/config.d.ts.map +1 -1
- package/dist/vfs/discord/config.js +11 -18
- package/dist/vfs/discord/config.js.map +1 -1
- package/dist/vfs/discord/discord.d.ts +7 -10
- package/dist/vfs/discord/discord.d.ts.map +1 -1
- package/dist/vfs/discord/discord.js +7 -11
- package/dist/vfs/discord/discord.js.map +1 -1
- package/dist/vfs/gcs/config.d.ts +34 -15
- package/dist/vfs/gcs/config.d.ts.map +1 -1
- package/dist/vfs/gcs/config.js +12 -6
- package/dist/vfs/gcs/config.js.map +1 -1
- package/dist/vfs/gcs/gcs.d.ts +4 -5
- package/dist/vfs/gcs/gcs.d.ts.map +1 -1
- package/dist/vfs/gcs/gcs.js +2 -4
- package/dist/vfs/gcs/gcs.js.map +1 -1
- package/dist/vfs/minio/config.d.ts +22 -10
- package/dist/vfs/minio/config.d.ts.map +1 -1
- package/dist/vfs/minio/config.js +1 -7
- package/dist/vfs/minio/config.js.map +1 -1
- package/dist/vfs/minio/minio.d.ts +4 -5
- package/dist/vfs/minio/minio.d.ts.map +1 -1
- package/dist/vfs/minio/minio.js +2 -4
- package/dist/vfs/minio/minio.js.map +1 -1
- package/dist/vfs/mongodb/http_driver.d.ts +2 -0
- package/dist/vfs/mongodb/http_driver.d.ts.map +1 -1
- package/dist/vfs/mongodb/http_driver.js +2 -1
- package/dist/vfs/mongodb/http_driver.js.map +1 -1
- package/dist/vfs/mongodb/mongodb.d.ts +10 -11
- package/dist/vfs/mongodb/mongodb.d.ts.map +1 -1
- package/dist/vfs/mongodb/mongodb.js +8 -7
- package/dist/vfs/mongodb/mongodb.js.map +1 -1
- package/dist/vfs/notion/config.d.ts +4 -15
- package/dist/vfs/notion/config.d.ts.map +1 -1
- package/dist/vfs/notion/config.js +7 -17
- package/dist/vfs/notion/config.js.map +1 -1
- package/dist/vfs/notion/notion.d.ts +7 -10
- package/dist/vfs/notion/notion.d.ts.map +1 -1
- package/dist/vfs/notion/notion.js +5 -10
- package/dist/vfs/notion/notion.js.map +1 -1
- package/dist/vfs/oci/config.d.ts +25 -11
- package/dist/vfs/oci/config.d.ts.map +1 -1
- package/dist/vfs/oci/config.js +7 -7
- package/dist/vfs/oci/config.js.map +1 -1
- package/dist/vfs/oci/oci.d.ts +4 -5
- package/dist/vfs/oci/oci.d.ts.map +1 -1
- package/dist/vfs/oci/oci.js +2 -4
- package/dist/vfs/oci/oci.js.map +1 -1
- package/dist/vfs/opfs/opfs.d.ts +18 -11
- package/dist/vfs/opfs/opfs.d.ts.map +1 -1
- package/dist/vfs/opfs/opfs.js +62 -38
- package/dist/vfs/opfs/opfs.js.map +1 -1
- package/dist/vfs/postgres/neon_driver.d.ts +3 -1
- package/dist/vfs/postgres/neon_driver.d.ts.map +1 -1
- package/dist/vfs/postgres/neon_driver.js +34 -3
- package/dist/vfs/postgres/neon_driver.js.map +1 -1
- package/dist/vfs/postgres/postgres.d.ts +10 -11
- package/dist/vfs/postgres/postgres.d.ts.map +1 -1
- package/dist/vfs/postgres/postgres.js +6 -7
- package/dist/vfs/postgres/postgres.js.map +1 -1
- package/dist/vfs/qingstor/config.d.ts +22 -11
- package/dist/vfs/qingstor/config.d.ts.map +1 -1
- package/dist/vfs/qingstor/config.js +2 -7
- package/dist/vfs/qingstor/config.js.map +1 -1
- package/dist/vfs/qingstor/qingstor.d.ts +4 -5
- package/dist/vfs/qingstor/qingstor.d.ts.map +1 -1
- package/dist/vfs/qingstor/qingstor.js +2 -4
- package/dist/vfs/qingstor/qingstor.js.map +1 -1
- package/dist/vfs/r2/config.d.ts +27 -11
- package/dist/vfs/r2/config.d.ts.map +1 -1
- package/dist/vfs/r2/config.js +11 -7
- package/dist/vfs/r2/config.js.map +1 -1
- package/dist/vfs/r2/r2.d.ts +4 -5
- package/dist/vfs/r2/r2.d.ts.map +1 -1
- package/dist/vfs/r2/r2.js +2 -4
- package/dist/vfs/r2/r2.js.map +1 -1
- package/dist/vfs/redis/redis.d.ts +5 -1
- package/dist/vfs/redis/redis.d.ts.map +1 -1
- package/dist/vfs/redis/redis.js +1 -1
- package/dist/vfs/redis/redis.js.map +1 -1
- package/dist/vfs/redis/store.d.ts +2 -0
- package/dist/vfs/redis/store.d.ts.map +1 -1
- package/dist/vfs/redis/store.js +24 -5
- package/dist/vfs/redis/store.js.map +1 -1
- package/dist/vfs/registry.d.ts.map +1 -1
- package/dist/vfs/registry.js +87 -85
- package/dist/vfs/registry.js.map +1 -1
- package/dist/vfs/s3/config.d.ts +17 -5
- package/dist/vfs/s3/config.d.ts.map +1 -1
- package/dist/vfs/s3/config.js +7 -7
- package/dist/vfs/s3/config.js.map +1 -1
- package/dist/vfs/s3/s3.d.ts +6 -9
- package/dist/vfs/s3/s3.d.ts.map +1 -1
- package/dist/vfs/s3/s3.js +5 -10
- package/dist/vfs/s3/s3.js.map +1 -1
- package/dist/vfs/s3_alias.d.ts +22 -32
- package/dist/vfs/s3_alias.d.ts.map +1 -1
- package/dist/vfs/s3_alias.js +35 -23
- package/dist/vfs/s3_alias.js.map +1 -1
- package/dist/vfs/scaleway/config.d.ts +22 -11
- package/dist/vfs/scaleway/config.d.ts.map +1 -1
- package/dist/vfs/scaleway/config.js +2 -7
- package/dist/vfs/scaleway/config.js.map +1 -1
- package/dist/vfs/scaleway/scaleway.d.ts +4 -5
- package/dist/vfs/scaleway/scaleway.d.ts.map +1 -1
- package/dist/vfs/scaleway/scaleway.js +2 -4
- package/dist/vfs/scaleway/scaleway.js.map +1 -1
- package/dist/vfs/seaweedfs/config.d.ts +22 -10
- package/dist/vfs/seaweedfs/config.d.ts.map +1 -1
- package/dist/vfs/seaweedfs/config.js +1 -7
- package/dist/vfs/seaweedfs/config.js.map +1 -1
- package/dist/vfs/seaweedfs/seaweedfs.d.ts +4 -5
- package/dist/vfs/seaweedfs/seaweedfs.d.ts.map +1 -1
- package/dist/vfs/seaweedfs/seaweedfs.js +2 -4
- package/dist/vfs/seaweedfs/seaweedfs.js.map +1 -1
- package/dist/vfs/slack/config.d.ts +5 -15
- package/dist/vfs/slack/config.d.ts.map +1 -1
- package/dist/vfs/slack/config.js +11 -21
- package/dist/vfs/slack/config.js.map +1 -1
- package/dist/vfs/slack/slack.d.ts +7 -10
- package/dist/vfs/slack/slack.d.ts.map +1 -1
- package/dist/vfs/slack/slack.js +7 -11
- package/dist/vfs/slack/slack.js.map +1 -1
- package/dist/vfs/supabase/config.d.ts +25 -11
- package/dist/vfs/supabase/config.d.ts.map +1 -1
- package/dist/vfs/supabase/config.js +7 -7
- package/dist/vfs/supabase/config.js.map +1 -1
- package/dist/vfs/supabase/supabase.d.ts +4 -5
- package/dist/vfs/supabase/supabase.d.ts.map +1 -1
- package/dist/vfs/supabase/supabase.js +2 -4
- package/dist/vfs/supabase/supabase.js.map +1 -1
- package/dist/vfs/tencent/config.d.ts +22 -11
- package/dist/vfs/tencent/config.d.ts.map +1 -1
- package/dist/vfs/tencent/config.js +2 -7
- package/dist/vfs/tencent/config.js.map +1 -1
- package/dist/vfs/tencent/tencent.d.ts +4 -5
- package/dist/vfs/tencent/tencent.d.ts.map +1 -1
- package/dist/vfs/tencent/tencent.js +2 -4
- package/dist/vfs/tencent/tencent.js.map +1 -1
- package/dist/vfs/wasabi/config.d.ts +32 -16
- package/dist/vfs/wasabi/config.d.ts.map +1 -1
- package/dist/vfs/wasabi/config.js +8 -7
- package/dist/vfs/wasabi/config.js.map +1 -1
- package/dist/vfs/wasabi/wasabi.d.ts +4 -5
- package/dist/vfs/wasabi/wasabi.d.ts.map +1 -1
- package/dist/vfs/wasabi/wasabi.js +2 -4
- package/dist/vfs/wasabi/wasabi.js.map +1 -1
- package/dist/workspace.d.ts +2 -3
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +10 -18
- package/dist/workspace.js.map +1 -1
- package/package.json +7 -10
- package/THIRD_PARTY_NOTICES +0 -66
- package/dist/core/opfs/constants.d.ts +0 -2
- package/dist/core/opfs/constants.d.ts.map +0 -1
- package/dist/core/opfs/constants.js +0 -15
- package/dist/core/opfs/constants.js.map +0 -1
- package/dist/generated/wasm.d.ts +0 -3
- package/dist/generated/wasm.d.ts.map +0 -1
- package/dist/generated/wasm.js +0 -7
- package/dist/generated/wasm.js.map +0 -1
- package/dist/vfs/aliyun/prompt.d.ts +0 -2
- package/dist/vfs/aliyun/prompt.d.ts.map +0 -1
- package/dist/vfs/aliyun/prompt.js +0 -19
- package/dist/vfs/aliyun/prompt.js.map +0 -1
- package/dist/vfs/backblaze/prompt.d.ts +0 -2
- package/dist/vfs/backblaze/prompt.d.ts.map +0 -1
- package/dist/vfs/backblaze/prompt.js +0 -19
- package/dist/vfs/backblaze/prompt.js.map +0 -1
- package/dist/vfs/ceph/prompt.d.ts +0 -2
- package/dist/vfs/ceph/prompt.d.ts.map +0 -1
- package/dist/vfs/ceph/prompt.js +0 -19
- package/dist/vfs/ceph/prompt.js.map +0 -1
- package/dist/vfs/digitalocean/prompt.d.ts +0 -2
- package/dist/vfs/digitalocean/prompt.d.ts.map +0 -1
- package/dist/vfs/digitalocean/prompt.js +0 -19
- package/dist/vfs/digitalocean/prompt.js.map +0 -1
- package/dist/vfs/gcs/prompt.d.ts +0 -2
- package/dist/vfs/gcs/prompt.d.ts.map +0 -1
- package/dist/vfs/gcs/prompt.js +0 -19
- package/dist/vfs/gcs/prompt.js.map +0 -1
- package/dist/vfs/minio/prompt.d.ts +0 -2
- package/dist/vfs/minio/prompt.d.ts.map +0 -1
- package/dist/vfs/minio/prompt.js +0 -19
- package/dist/vfs/minio/prompt.js.map +0 -1
- package/dist/vfs/oci/prompt.d.ts +0 -2
- package/dist/vfs/oci/prompt.d.ts.map +0 -1
- package/dist/vfs/oci/prompt.js +0 -19
- package/dist/vfs/oci/prompt.js.map +0 -1
- package/dist/vfs/opfs/prompt.d.ts +0 -2
- package/dist/vfs/opfs/prompt.d.ts.map +0 -1
- package/dist/vfs/opfs/prompt.js +0 -17
- package/dist/vfs/opfs/prompt.js.map +0 -1
- package/dist/vfs/qingstor/prompt.d.ts +0 -2
- package/dist/vfs/qingstor/prompt.d.ts.map +0 -1
- package/dist/vfs/qingstor/prompt.js +0 -19
- package/dist/vfs/qingstor/prompt.js.map +0 -1
- package/dist/vfs/r2/prompt.d.ts +0 -2
- package/dist/vfs/r2/prompt.d.ts.map +0 -1
- package/dist/vfs/r2/prompt.js +0 -19
- package/dist/vfs/r2/prompt.js.map +0 -1
- package/dist/vfs/s3/prompt.d.ts +0 -2
- package/dist/vfs/s3/prompt.d.ts.map +0 -1
- package/dist/vfs/s3/prompt.js +0 -19
- package/dist/vfs/s3/prompt.js.map +0 -1
- package/dist/vfs/scaleway/prompt.d.ts +0 -2
- package/dist/vfs/scaleway/prompt.d.ts.map +0 -1
- package/dist/vfs/scaleway/prompt.js +0 -19
- package/dist/vfs/scaleway/prompt.js.map +0 -1
- package/dist/vfs/seaweedfs/prompt.d.ts +0 -2
- package/dist/vfs/seaweedfs/prompt.d.ts.map +0 -1
- package/dist/vfs/seaweedfs/prompt.js +0 -19
- package/dist/vfs/seaweedfs/prompt.js.map +0 -1
- package/dist/vfs/supabase/prompt.d.ts +0 -2
- package/dist/vfs/supabase/prompt.d.ts.map +0 -1
- package/dist/vfs/supabase/prompt.js +0 -19
- package/dist/vfs/supabase/prompt.js.map +0 -1
- package/dist/vfs/tencent/prompt.d.ts +0 -2
- package/dist/vfs/tencent/prompt.d.ts.map +0 -1
- package/dist/vfs/tencent/prompt.js +0 -19
- package/dist/vfs/tencent/prompt.js.map +0 -1
- package/dist/vfs/wasabi/prompt.d.ts +0 -2
- package/dist/vfs/wasabi/prompt.d.ts.map +0 -1
- package/dist/vfs/wasabi/prompt.js +0 -19
- package/dist/vfs/wasabi/prompt.js.map +0 -1
package/dist/vfs/oci/config.d.ts
CHANGED
|
@@ -1,20 +1,34 @@
|
|
|
1
|
+
import type { ConfigOf } from '@struktoai/mirage-core/vfs/secrets';
|
|
1
2
|
import { z } from '@struktoai/mirage-core/vfs/secrets';
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
export declare const OCIConfig: z.ZodObject<{
|
|
4
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
4
5
|
bucket: z.ZodString;
|
|
5
|
-
presignedUrlProvider: z.ZodCustom<import("@struktoai/mirage-core/vfs/s3/config").S3BrowserPresignedUrlProvider, import("@struktoai/mirage-core/vfs/s3/config").S3BrowserPresignedUrlProvider
|
|
6
|
+
presignedUrlProvider: import("@struktoai/mirage-core/vfs/secrets").SecretSchema<z.ZodCustom<import("@struktoai/mirage-core/vfs/s3/config").S3BrowserPresignedUrlProvider, import("@struktoai/mirage-core/vfs/s3/config").S3BrowserPresignedUrlProvider>>;
|
|
6
7
|
region: z.ZodOptional<z.ZodString>;
|
|
7
8
|
endpoint: z.ZodOptional<z.ZodString>;
|
|
8
9
|
defaultContentType: z.ZodOptional<z.ZodString>;
|
|
9
10
|
keyPrefix: z.ZodOptional<z.ZodString>;
|
|
10
11
|
} & {
|
|
11
12
|
namespace: z.ZodOptional<z.ZodString>;
|
|
12
|
-
}, z.core.$strip
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
}, z.core.$strip> & import("../s3_alias.ts").BrowserAlias<ConfigOf<z.ZodObject<{
|
|
14
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
bucket: z.ZodString;
|
|
16
|
+
presignedUrlProvider: import("@struktoai/mirage-core/vfs/secrets").SecretSchema<z.ZodCustom<import("@struktoai/mirage-core/vfs/s3/config").S3BrowserPresignedUrlProvider, import("@struktoai/mirage-core/vfs/s3/config").S3BrowserPresignedUrlProvider>>;
|
|
17
|
+
region: z.ZodOptional<z.ZodString>;
|
|
18
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
19
|
+
defaultContentType: z.ZodOptional<z.ZodString>;
|
|
20
|
+
keyPrefix: z.ZodOptional<z.ZodString>;
|
|
21
|
+
} & {
|
|
22
|
+
namespace: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, z.core.$strip>> & import("../s3_alias.ts").S3BrowserAliasConfig, {
|
|
24
|
+
bucket: string;
|
|
25
|
+
presignedUrlProvider: "<REDACTED>";
|
|
26
|
+
timeout?: number;
|
|
27
|
+
region?: string;
|
|
28
|
+
endpoint?: string;
|
|
29
|
+
defaultContentType?: string;
|
|
30
|
+
keyPrefix?: string;
|
|
31
|
+
namespace?: string;
|
|
32
|
+
}, `https://${string}.compat.objectstorage.${string}.oci.customer-oci.com` | undefined>;
|
|
33
|
+
export type OCIConfig = ConfigOf<typeof OCIConfig>;
|
|
20
34
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/vfs/oci/config.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/vfs/oci/config.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,oCAAoC,CAAA;AAGtD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uFAgBpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAAA"}
|
package/dist/vfs/oci/config.js
CHANGED
|
@@ -13,9 +13,13 @@
|
|
|
13
13
|
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
|
|
14
14
|
import { z } from '@struktoai/mirage-core/vfs/secrets';
|
|
15
15
|
import { browserAliasSchema, makeBrowserS3Alias } from "../s3_alias.js";
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
export const OCIConfig = makeBrowserS3Alias({
|
|
17
|
+
schema: browserAliasSchema({
|
|
18
|
+
namespace: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Object Storage namespace of the tenancy. With `region` it builds the endpoint `https://<namespace>.compat.objectstorage.<region>.oci.customer-oci.com` unless `endpoint` is set.'),
|
|
22
|
+
}),
|
|
19
23
|
endpointFor: (config) => config.namespace !== undefined &&
|
|
20
24
|
config.namespace !== '' &&
|
|
21
25
|
config.region !== undefined &&
|
|
@@ -23,8 +27,4 @@ const alias = makeBrowserS3Alias({
|
|
|
23
27
|
? `https://${config.namespace}.compat.objectstorage.${config.region}.oci.customer-oci.com`
|
|
24
28
|
: undefined,
|
|
25
29
|
});
|
|
26
|
-
export const resolvedOciEndpoint = alias.resolvedEndpoint;
|
|
27
|
-
export const ociToS3Config = alias.toS3Config;
|
|
28
|
-
export const redactOciConfig = alias.redact;
|
|
29
|
-
export const normalizeOCIConfig = alias.normalize;
|
|
30
30
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/vfs/oci/config.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/vfs/oci/config.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;AAGvE,OAAO,EAAE,CAAC,EAAE,MAAM,oCAAoC,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC;IAC1C,MAAM,EAAE,kBAAkB,CAAC;QACzB,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,kLAAkL,CACnL;KACJ,CAAC;IACF,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CACtB,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,MAAM,CAAC,SAAS,KAAK,EAAE;QACvB,MAAM,CAAC,MAAM,KAAK,SAAS;QAC3B,MAAM,CAAC,MAAM,KAAK,EAAE;QAClB,CAAC,CAAC,WAAW,MAAM,CAAC,SAAS,yBAAyB,MAAM,CAAC,MAAM,uBAAuB;QAC1F,CAAC,CAAC,SAAS;CAChB,CAAC,CAAA"}
|
package/dist/vfs/oci/oci.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export declare class OCIVFS extends S3AliasVFS<OCIConfig,
|
|
5
|
-
readonly prompt: string;
|
|
1
|
+
import type { RedactedSchema } from '@struktoai/mirage-core/vfs/secrets';
|
|
2
|
+
import { S3AliasVFS } from '../s3_alias.ts';
|
|
3
|
+
import { OCIConfig } from './config.ts';
|
|
4
|
+
export declare class OCIVFS extends S3AliasVFS<OCIConfig, RedactedSchema<typeof OCIConfig>> {
|
|
6
5
|
constructor(config: OCIConfig);
|
|
7
6
|
}
|
|
8
7
|
//# sourceMappingURL=oci.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oci.d.ts","sourceRoot":"","sources":["../../../src/vfs/oci/oci.ts"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"oci.d.ts","sourceRoot":"","sources":["../../../src/vfs/oci/oci.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,qBAAa,MAAO,SAAQ,UAAU,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;gBACrE,MAAM,EAAE,SAAS;CAG9B"}
|
package/dist/vfs/oci/oci.js
CHANGED
|
@@ -13,12 +13,10 @@
|
|
|
13
13
|
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
|
|
14
14
|
import { VFSName } from '@struktoai/mirage-core/types';
|
|
15
15
|
import { S3AliasVFS } from "../s3_alias.js";
|
|
16
|
-
import {
|
|
17
|
-
import { PROMPT } from "./prompt.js";
|
|
16
|
+
import { OCIConfig } from "./config.js";
|
|
18
17
|
export class OCIVFS extends S3AliasVFS {
|
|
19
|
-
prompt = PROMPT;
|
|
20
18
|
constructor(config) {
|
|
21
|
-
super(VFSName.OCI, config,
|
|
19
|
+
super(VFSName.OCI, config, OCIConfig);
|
|
22
20
|
}
|
|
23
21
|
}
|
|
24
22
|
//# sourceMappingURL=oci.js.map
|
package/dist/vfs/oci/oci.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oci.js","sourceRoot":"","sources":["../../../src/vfs/oci/oci.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"oci.js","sourceRoot":"","sources":["../../../src/vfs/oci/oci.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,OAAO,MAAO,SAAQ,UAAuD;IACjF,YAAY,MAAiB;QAC3B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IACvC,CAAC;CACF"}
|
package/dist/vfs/opfs/opfs.d.ts
CHANGED
|
@@ -1,25 +1,36 @@
|
|
|
1
1
|
import type { ByteSource } from '@struktoai/mirage-core/io/types';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
2
|
+
import type { CapacityResult, FileStat, PathSpec } from '@struktoai/mirage-core/types';
|
|
3
|
+
import { BaseVFS } from '@struktoai/mirage-core/vfs/base';
|
|
4
|
+
import { type StorageUsage } from '@struktoai/mirage-core/vfs/capacity';
|
|
5
5
|
import type { Handed } from '@struktoai/mirage-core/vfs/types';
|
|
6
|
+
import { type VFSStateBase } from '@struktoai/mirage-core/vfs/types';
|
|
7
|
+
import { OPFSAccessor } from '../../accessor/opfs.ts';
|
|
6
8
|
export interface OPFSVFSOptions {
|
|
7
9
|
root?: string;
|
|
10
|
+
capacity?: number | string | null;
|
|
8
11
|
}
|
|
9
12
|
export interface OPFSVFSState {
|
|
10
13
|
type: string;
|
|
14
|
+
config?: {
|
|
15
|
+
capacity?: number;
|
|
16
|
+
};
|
|
11
17
|
files: Record<string, Uint8Array>;
|
|
12
18
|
dirs: string[];
|
|
13
19
|
}
|
|
14
20
|
export declare class OPFSVFS extends BaseVFS {
|
|
15
21
|
readonly name: "opfs";
|
|
16
22
|
readonly sizesAlwaysKnown: boolean;
|
|
17
|
-
readonly prompt = "{prefix}\n Browser Origin Private File System. Persistent per-origin storage that survives page reloads.\n Standard commands: ls, cat, head, tail, grep, wc, find, tree, mkdir, touch, cp, mv, rm, tee.";
|
|
18
23
|
readonly rootName: string;
|
|
19
24
|
readonly accessor: OPFSAccessor;
|
|
25
|
+
readonly usage: StorageUsage | null;
|
|
20
26
|
private rootHandle;
|
|
21
27
|
private openPromise;
|
|
28
|
+
walkLimit: number;
|
|
22
29
|
constructor(options?: OPFSVFSOptions);
|
|
30
|
+
private charge;
|
|
31
|
+
/** df's QUOTA row for a capped root, counted afresh so another tab's
|
|
32
|
+
* writes show; the base answer otherwise. */
|
|
33
|
+
capacity(): Promise<CapacityResult>;
|
|
23
34
|
close(): Promise<void>;
|
|
24
35
|
/**
|
|
25
36
|
* Lazily resolve to a usable root handle. Memoizes `navigator.storage`
|
|
@@ -29,16 +40,12 @@ export declare class OPFSVFS extends BaseVFS {
|
|
|
29
40
|
root(): Promise<FileSystemDirectoryHandle>;
|
|
30
41
|
readonly readsRanges: boolean;
|
|
31
42
|
readonly local: boolean;
|
|
32
|
-
readonly maxGlobMatches: number;
|
|
33
43
|
readdir(path: PathSpec): Promise<FileStat[]>;
|
|
34
|
-
read(path: PathSpec, _handed?: Handed, offset?: number, size?: number | null): Promise<Uint8Array>;
|
|
44
|
+
read(path: PathSpec, _handed?: Handed, offset?: number, size?: number | null): Promise<ByteSource> | AsyncIterable<Uint8Array>;
|
|
35
45
|
stat(path: PathSpec): Promise<FileStat>;
|
|
36
|
-
readStream(path: PathSpec): AsyncIterable<Uint8Array>;
|
|
37
46
|
exists(path: PathSpec): Promise<boolean>;
|
|
38
|
-
write(path: PathSpec, data:
|
|
39
|
-
|
|
40
|
-
appendStream(path: PathSpec, data: ByteSource, signal?: AbortSignal): Promise<void>;
|
|
41
|
-
append(path: PathSpec, data: Uint8Array): Promise<void>;
|
|
47
|
+
write(path: PathSpec, data: ByteSource, signal?: AbortSignal): Promise<void>;
|
|
48
|
+
append(path: PathSpec, data: ByteSource, _handed?: Handed, signal?: AbortSignal): Promise<void>;
|
|
42
49
|
create(path: PathSpec): Promise<void>;
|
|
43
50
|
mkdir(path: PathSpec, parents?: boolean): Promise<void>;
|
|
44
51
|
unlink(path: PathSpec): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opfs.d.ts","sourceRoot":"","sources":["../../../src/vfs/opfs/opfs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opfs.d.ts","sourceRoot":"","sources":["../../../src/vfs/opfs/opfs.ts"],"names":[],"mappings":"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"}
|
package/dist/vfs/opfs/opfs.js
CHANGED
|
@@ -11,30 +11,31 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
|
|
14
|
-
import { chunks } from '@struktoai/mirage-core/io/cooperative';
|
|
15
|
-
import { BaseVFS } from '@struktoai/mirage-core/vfs/base';
|
|
16
14
|
import { VFSName } from '@struktoai/mirage-core/types';
|
|
17
15
|
import { lstripSlash } from '@struktoai/mirage-core/utils/slash';
|
|
18
16
|
import { compareCodePoints } from '@struktoai/mirage-core/utils/sort';
|
|
17
|
+
import { BaseVFS } from '@struktoai/mirage-core/vfs/base';
|
|
18
|
+
import { charge, storageUsage, } from '@struktoai/mirage-core/vfs/capacity';
|
|
19
|
+
import { LOCAL_WALK_LIMIT } from '@struktoai/mirage-core/vfs/constants';
|
|
20
|
+
import {} from '@struktoai/mirage-core/vfs/types';
|
|
19
21
|
import { OPFSAccessor } from "../../accessor/opfs.js";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import { read as opfsRead } from "../../core/opfs/read.js";
|
|
24
|
-
import { stat as opfsStat } from "../../core/opfs/stat.js";
|
|
25
|
-
import { readStream as opfsStream } from "../../core/opfs/stream.js";
|
|
26
|
-
import { exists as opfsExists } from "../../core/opfs/exists.js";
|
|
27
|
-
import { write as opfsWrite, writeStream as opfsWriteStream } from "../../core/opfs/write.js";
|
|
28
|
-
import { appendBytes as opfsAppend, appendStream as opfsAppendStream, } from "../../core/opfs/append.js";
|
|
22
|
+
import { append as opfsAppend } from "../../core/opfs/append.js";
|
|
23
|
+
import { count as opfsCount, sizeOf as opfsSizeOf } from "../../core/opfs/capacity.js";
|
|
24
|
+
import { copy as opfsCopy } from "../../core/opfs/copy.js";
|
|
29
25
|
import { create as opfsCreate } from "../../core/opfs/create.js";
|
|
26
|
+
import { exists as opfsExists } from "../../core/opfs/exists.js";
|
|
30
27
|
import { mkdir as opfsMkdir } from "../../core/opfs/mkdir.js";
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import { rmR as opfsRmR } from "../../core/opfs/rm.js";
|
|
28
|
+
import { read as opfsRead } from "../../core/opfs/read.js";
|
|
29
|
+
import { readdir as opfsReaddir } from "../../core/opfs/readdir.js";
|
|
34
30
|
import { rename as opfsRename } from "../../core/opfs/rename.js";
|
|
35
|
-
import {
|
|
31
|
+
import { rmR as opfsRmR } from "../../core/opfs/rm.js";
|
|
32
|
+
import { rmdir as opfsRmdir } from "../../core/opfs/rmdir.js";
|
|
33
|
+
import { stat as opfsStat } from "../../core/opfs/stat.js";
|
|
34
|
+
import { readStream as opfsStream } from "../../core/opfs/stream.js";
|
|
36
35
|
import { truncate as opfsTruncate } from "../../core/opfs/truncate.js";
|
|
37
|
-
import {
|
|
36
|
+
import { unlink as opfsUnlink } from "../../core/opfs/unlink.js";
|
|
37
|
+
import { iterEntries, toWritableChunk } from "../../core/opfs/utils.js";
|
|
38
|
+
import { write as opfsWrite } from "../../core/opfs/write.js";
|
|
38
39
|
async function walkFiles(dir, currentPath, files) {
|
|
39
40
|
for await (const [name, handle] of iterEntries(dir)) {
|
|
40
41
|
const childPath = currentPath === '' ? name : `${currentPath}/${name}`;
|
|
@@ -73,15 +74,29 @@ export class OPFSVFS extends BaseVFS {
|
|
|
73
74
|
// OPFS is a real filesystem: getFile().size is the exact byte count a
|
|
74
75
|
// read returns.
|
|
75
76
|
sizesAlwaysKnown = true;
|
|
76
|
-
prompt = PROMPT;
|
|
77
77
|
rootName;
|
|
78
78
|
accessor;
|
|
79
|
+
usage;
|
|
79
80
|
rootHandle = null;
|
|
80
81
|
openPromise = null;
|
|
82
|
+
walkLimit = LOCAL_WALK_LIMIT;
|
|
81
83
|
constructor(options = {}) {
|
|
82
84
|
super();
|
|
83
85
|
this.rootName = options.root ?? '';
|
|
84
86
|
this.accessor = new OPFSAccessor(this);
|
|
87
|
+
this.usage = storageUsage(this.name, options.capacity);
|
|
88
|
+
}
|
|
89
|
+
charge(path, write) {
|
|
90
|
+
return charge(this.usage, path, (p) => opfsSizeOf(this.accessor, p), () => opfsCount(this.accessor), write);
|
|
91
|
+
}
|
|
92
|
+
/** df's QUOTA row for a capped root, counted afresh so another tab's
|
|
93
|
+
* writes show; the base answer otherwise. */
|
|
94
|
+
async capacity() {
|
|
95
|
+
if (this.usage === null)
|
|
96
|
+
return super.capacity();
|
|
97
|
+
this.usage.stale();
|
|
98
|
+
await this.usage.counted(() => opfsCount(this.accessor));
|
|
99
|
+
return this.usage.report();
|
|
85
100
|
}
|
|
86
101
|
async close() {
|
|
87
102
|
this.rootHandle = null;
|
|
@@ -111,59 +126,66 @@ export class OPFSVFS extends BaseVFS {
|
|
|
111
126
|
}
|
|
112
127
|
readsRanges = true;
|
|
113
128
|
local = true;
|
|
114
|
-
maxGlobMatches = SCOPE_ERROR;
|
|
115
129
|
readdir(path) {
|
|
116
130
|
return opfsReaddir(this.accessor, path);
|
|
117
131
|
}
|
|
118
132
|
read(path, _handed, offset = 0, size = null) {
|
|
119
133
|
if (offset === 0 && size === null)
|
|
120
|
-
return
|
|
134
|
+
return opfsStream(this.accessor, path);
|
|
121
135
|
return opfsRead(this.accessor, path, size === null ? { offset } : { offset, size });
|
|
122
136
|
}
|
|
123
137
|
stat(path) {
|
|
124
138
|
return opfsStat(this.accessor, path);
|
|
125
139
|
}
|
|
126
|
-
readStream(path) {
|
|
127
|
-
return opfsStream(this.accessor, path);
|
|
128
|
-
}
|
|
129
140
|
exists(path) {
|
|
130
141
|
return opfsExists(this.accessor, path);
|
|
131
142
|
}
|
|
132
|
-
write(path, data) {
|
|
133
|
-
return opfsWrite(this.accessor, path, data);
|
|
134
|
-
}
|
|
135
|
-
writeStream(path, data, signal) {
|
|
136
|
-
return opfsWriteStream(this.accessor, path, chunks(data, signal));
|
|
143
|
+
write(path, data, signal) {
|
|
144
|
+
return this.charge(path, (held) => opfsWrite(this.accessor, path, held.stream(data), signal));
|
|
137
145
|
}
|
|
138
|
-
|
|
139
|
-
return
|
|
140
|
-
}
|
|
141
|
-
append(path, data) {
|
|
142
|
-
return opfsAppend(this.accessor, path, data);
|
|
146
|
+
append(path, data, _handed, signal) {
|
|
147
|
+
return this.charge(path, (held) => opfsAppend(this.accessor, path, held.stream(data, true), signal));
|
|
143
148
|
}
|
|
144
149
|
create(path) {
|
|
145
|
-
return opfsCreate(this.accessor, path);
|
|
150
|
+
return this.charge(path, () => opfsCreate(this.accessor, path));
|
|
146
151
|
}
|
|
147
152
|
mkdir(path, parents = false) {
|
|
148
153
|
return opfsMkdir(this.accessor, path, parents);
|
|
149
154
|
}
|
|
150
155
|
unlink(path) {
|
|
151
|
-
return opfsUnlink(this.accessor, path);
|
|
156
|
+
return this.charge(path, () => opfsUnlink(this.accessor, path));
|
|
152
157
|
}
|
|
153
158
|
rmdir(path) {
|
|
154
159
|
return opfsRmdir(this.accessor, path);
|
|
155
160
|
}
|
|
156
161
|
rmR(path) {
|
|
157
|
-
return opfsRmR(this.accessor, path);
|
|
162
|
+
return this.charge(path, () => opfsRmR(this.accessor, path));
|
|
158
163
|
}
|
|
159
164
|
rename(src, dst) {
|
|
160
|
-
return opfsRename(this.accessor, src, dst);
|
|
165
|
+
return this.charge(src, () => this.charge(dst, () => opfsRename(this.accessor, src, dst)));
|
|
161
166
|
}
|
|
162
167
|
copy(src, dst) {
|
|
163
|
-
return
|
|
168
|
+
return this.charge(dst, async (held) => {
|
|
169
|
+
if (this.usage === null)
|
|
170
|
+
return opfsCopy(this.accessor, src, dst);
|
|
171
|
+
held.growTo(await opfsSizeOf(this.accessor, src));
|
|
172
|
+
await opfsCopy(this.accessor, src, dst);
|
|
173
|
+
const copied = await opfsSizeOf(this.accessor, dst);
|
|
174
|
+
try {
|
|
175
|
+
held.growTo(copied);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
await opfsTruncate(this.accessor, dst, held.reserved, true);
|
|
179
|
+
throw err;
|
|
180
|
+
}
|
|
181
|
+
});
|
|
164
182
|
}
|
|
165
183
|
truncate(path, length, noCreate = false) {
|
|
166
|
-
return
|
|
184
|
+
return this.charge(path, async (held) => {
|
|
185
|
+
if (!noCreate || (await this.exists(path)))
|
|
186
|
+
held.growTo(length);
|
|
187
|
+
await opfsTruncate(this.accessor, path, length, noCreate);
|
|
188
|
+
});
|
|
167
189
|
}
|
|
168
190
|
async getState() {
|
|
169
191
|
const handle = await this.root();
|
|
@@ -174,6 +196,7 @@ export class OPFSVFS extends BaseVFS {
|
|
|
174
196
|
dirs.sort(compareCodePoints);
|
|
175
197
|
return {
|
|
176
198
|
type: this.name,
|
|
199
|
+
...(this.usage !== null ? { config: { capacity: this.usage.limit } } : {}),
|
|
177
200
|
files,
|
|
178
201
|
dirs,
|
|
179
202
|
};
|
|
@@ -200,6 +223,7 @@ export class OPFSVFS extends BaseVFS {
|
|
|
200
223
|
await writable.write(toWritableChunk(data));
|
|
201
224
|
await writable.close();
|
|
202
225
|
}
|
|
226
|
+
this.usage?.stale();
|
|
203
227
|
}
|
|
204
228
|
}
|
|
205
229
|
//# sourceMappingURL=opfs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opfs.js","sourceRoot":"","sources":["../../../src/vfs/opfs/opfs.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;
|
|
1
|
+
{"version":3,"file":"opfs.js","sourceRoot":"","sources":["../../../src/vfs/opfs/opfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { PgDriver, PgQueryResult } from '@struktoai/mirage-core/core/postgres/_driver';
|
|
2
2
|
export declare class NeonPgDriver implements PgDriver {
|
|
3
|
+
private readonly timeout;
|
|
3
4
|
private readonly sql;
|
|
4
|
-
|
|
5
|
+
/** `timeout` is the seconds each query's request may stall. */
|
|
6
|
+
constructor(dsn: string, timeout?: number);
|
|
5
7
|
query<R = Record<string, unknown>>(text: string, params?: readonly unknown[]): Promise<PgQueryResult<R>>;
|
|
6
8
|
close(): Promise<void>;
|
|
7
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neon_driver.d.ts","sourceRoot":"","sources":["../../../src/vfs/postgres/neon_driver.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAA;
|
|
1
|
+
{"version":3,"file":"neon_driver.d.ts","sourceRoot":"","sources":["../../../src/vfs/postgres/neon_driver.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAA;AAmC3F,qBAAa,YAAa,YAAW,QAAQ;IAMzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;IAEpD,+DAA+D;gBAE7D,GAAG,EAAE,MAAM,EACM,OAAO,GAAE,MAAwB;IAM9C,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
|
|
@@ -11,15 +11,46 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
|
|
14
|
-
import { neon, types } from '@neondatabase/serverless';
|
|
14
|
+
import { neon, neonConfig, types } from '@neondatabase/serverless';
|
|
15
15
|
import { readAsText } from '@struktoai/mirage-core/accessor/postgres';
|
|
16
|
+
import { stallTimeout } from '@struktoai/mirage-core/core/api/client';
|
|
17
|
+
import { DEFAULT_TIMEOUT } from '@struktoai/mirage-core/core/api/constants';
|
|
18
|
+
// The seconds a query may stall, riding its fetch options to the one fetch
|
|
19
|
+
// function the Neon client keeps for the whole page.
|
|
20
|
+
const STALL = Symbol('stall seconds');
|
|
21
|
+
/**
|
|
22
|
+
* Bound each Neon request's stalls by the seconds its query names
|
|
23
|
+
* (`stallTimeout`). The client fetches through one function for the whole
|
|
24
|
+
* page and spreads a query's `fetchOptions` into the init it hands it, so
|
|
25
|
+
* this wraps the function it finds there, once, and a request that names no
|
|
26
|
+
* seconds goes through as before.
|
|
27
|
+
*/
|
|
28
|
+
function boundNeonFetch() {
|
|
29
|
+
const found = neonConfig.fetchFunction;
|
|
30
|
+
if (found?.[STALL] === true)
|
|
31
|
+
return;
|
|
32
|
+
const previous = found ?? ((input, init) => fetch(input, init));
|
|
33
|
+
const bounded = (input, init) => {
|
|
34
|
+
const seconds = init?.[STALL];
|
|
35
|
+
return seconds === undefined
|
|
36
|
+
? previous(input, init)
|
|
37
|
+
: stallTimeout(seconds, previous)(input, init);
|
|
38
|
+
};
|
|
39
|
+
neonConfig.fetchFunction = Object.assign(bounded, { [STALL]: true });
|
|
40
|
+
}
|
|
16
41
|
export class NeonPgDriver {
|
|
42
|
+
timeout;
|
|
17
43
|
sql;
|
|
18
|
-
|
|
44
|
+
/** `timeout` is the seconds each query's request may stall. */
|
|
45
|
+
constructor(dsn, timeout = DEFAULT_TIMEOUT) {
|
|
46
|
+
this.timeout = timeout;
|
|
47
|
+
boundNeonFetch();
|
|
19
48
|
this.sql = neon(dsn, { fullResults: true, types: readAsText(types) });
|
|
20
49
|
}
|
|
21
50
|
async query(text, params) {
|
|
22
|
-
const result = (await this.sql.query(text, params
|
|
51
|
+
const result = (await this.sql.query(text, params, {
|
|
52
|
+
fetchOptions: { [STALL]: this.timeout },
|
|
53
|
+
}));
|
|
23
54
|
return { rows: result.rows, rowCount: result.rowCount ?? result.rows.length };
|
|
24
55
|
}
|
|
25
56
|
close() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neon_driver.js","sourceRoot":"","sources":["../../../src/vfs/postgres/neon_driver.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;AAEvE,OAAO,EAAE,IAAI,EAAE,KAAK,EAA0B,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"neon_driver.js","sourceRoot":"","sources":["../../../src/vfs/postgres/neon_driver.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;AAEvE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAA0B,MAAM,0BAA0B,CAAA;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAA;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAO3E,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AAIrC;;;;;;GAMG;AACH,SAAS,cAAc;IACrB,MAAM,KAAK,GAAG,UAAU,CAAC,aAAgE,CAAA;IACzF,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI;QAAE,OAAM;IACnC,MAAM,QAAQ,GAAiB,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAC7E,MAAM,OAAO,GAAG,CAAC,KAAwB,EAAE,IAAgB,EAAqB,EAAE;QAChF,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;QAC7B,OAAO,OAAO,KAAK,SAAS;YAC1B,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAClD,CAAC,CAAA;IACD,UAAU,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAa,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,OAAO,YAAY;IAMJ;IALF,GAAG,CAAgC;IAEpD,+DAA+D;IAC/D,YACE,GAAW,EACM,UAAkB,eAAe;QAAjC,YAAO,GAAP,OAAO,CAA0B;QAElD,cAAc,EAAE,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,KAAK,CAAC,KAAK,CACT,IAAY,EACZ,MAA2B;QAE3B,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAA+B,EAAE;YAC1E,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE;SACxC,CAAC,CAAiC,CAAA;QACnC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;IAC/E,CAAC;IAED,KAAK;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import { PostgresVFSBase } from '@struktoai/mirage-core/vfs/postgres/postgres';
|
|
2
1
|
import { PostgresAccessor } from '@struktoai/mirage-core/accessor/postgres';
|
|
3
2
|
import type { PgDriver } from '@struktoai/mirage-core/core/postgres/_driver';
|
|
4
|
-
import type { PostgresConfig
|
|
3
|
+
import type { PostgresConfig } from '@struktoai/mirage-core/vfs/postgres/config';
|
|
4
|
+
import { redactPostgresConfig, resolvePostgresConfig } from '@struktoai/mirage-core/vfs/postgres/config';
|
|
5
|
+
import { PostgresVFS as CorePostgresVFS } from '@struktoai/mirage-core/vfs/postgres/postgres';
|
|
6
|
+
import type { ConfigState } from '@struktoai/mirage-core/vfs/types';
|
|
5
7
|
export interface PostgresVFSOptions {
|
|
6
8
|
config: PostgresConfig;
|
|
7
9
|
prefix?: string;
|
|
8
10
|
driver?: PgDriver;
|
|
9
11
|
}
|
|
10
|
-
export
|
|
11
|
-
type: string;
|
|
12
|
-
config: PostgresConfigRedacted;
|
|
13
|
-
needs_override: true;
|
|
14
|
-
}
|
|
15
|
-
export declare class PostgresVFS extends PostgresVFSBase {
|
|
12
|
+
export declare class PostgresVFS extends CorePostgresVFS {
|
|
16
13
|
readonly name: string;
|
|
17
14
|
readonly cachesReads: boolean;
|
|
18
15
|
readonly indexTtl: number;
|
|
19
|
-
|
|
20
|
-
readonly config:
|
|
16
|
+
vfsMd: string;
|
|
17
|
+
readonly config: ReturnType<typeof resolvePostgresConfig>;
|
|
21
18
|
readonly driver: PgDriver;
|
|
22
19
|
readonly accessor: PostgresAccessor;
|
|
23
20
|
constructor(options: PostgresVFSOptions | PostgresConfig);
|
|
24
|
-
getState():
|
|
21
|
+
getState(): ConfigState<ReturnType<typeof redactPostgresConfig>> & {
|
|
22
|
+
needs_override: true;
|
|
23
|
+
};
|
|
25
24
|
close(): Promise<void>;
|
|
26
25
|
}
|
|
27
26
|
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/vfs/postgres/postgres.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/vfs/postgres/postgres.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,4CAA4C,CAAA;AACnD,OAAO,EACL,WAAW,IAAI,eAAe,EAE/B,MAAM,8CAA8C,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAGnE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,QAAQ,CAAA;CAClB;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAkB,IAAI,EAAE,MAAM,CAAmB;IACjD,SAAkB,WAAW,EAAE,OAAO,CAAQ;IAC9C,SAAkB,QAAQ,EAAE,MAAM,CAAI;IAC7B,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAA;IACzD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,SAAkB,QAAQ,EAAE,gBAAgB,CAAA;gBAEhC,OAAO,EAAE,kBAAkB,GAAG,cAAc;IAU/C,QAAQ,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,GAAG;QAC1E,cAAc,EAAE,IAAI,CAAA;KACrB;IAac,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAItC"}
|
|
@@ -11,17 +11,16 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
|
|
14
|
-
import { PostgresVFSBase } from '@struktoai/mirage-core/vfs/postgres/postgres';
|
|
15
14
|
import { PostgresAccessor } from '@struktoai/mirage-core/accessor/postgres';
|
|
16
|
-
import { redactPostgresConfig, resolvePostgresConfig, } from '@struktoai/mirage-core/vfs/postgres/config';
|
|
17
|
-
import { PROMPT } from '@struktoai/mirage-core/vfs/postgres/prompt';
|
|
18
15
|
import { VFSName } from '@struktoai/mirage-core/types';
|
|
16
|
+
import { redactPostgresConfig, resolvePostgresConfig, } from '@struktoai/mirage-core/vfs/postgres/config';
|
|
17
|
+
import { PostgresVFS as CorePostgresVFS, VFS_MD, } from '@struktoai/mirage-core/vfs/postgres/postgres';
|
|
19
18
|
import { NeonPgDriver } from "./neon_driver.js";
|
|
20
|
-
export class PostgresVFS extends
|
|
19
|
+
export class PostgresVFS extends CorePostgresVFS {
|
|
21
20
|
name = VFSName.POSTGRES;
|
|
22
21
|
cachesReads = false;
|
|
23
22
|
indexTtl = 0;
|
|
24
|
-
|
|
23
|
+
vfsMd;
|
|
25
24
|
config;
|
|
26
25
|
driver;
|
|
27
26
|
accessor;
|
|
@@ -29,9 +28,9 @@ export class PostgresVFS extends PostgresVFSBase {
|
|
|
29
28
|
super();
|
|
30
29
|
const { config, prefix, driver } = 'config' in options ? options : { config: options, prefix: undefined, driver: undefined };
|
|
31
30
|
this.config = resolvePostgresConfig(config);
|
|
32
|
-
this.driver = driver ?? new NeonPgDriver(this.config.dsn);
|
|
31
|
+
this.driver = driver ?? new NeonPgDriver(this.config.dsn, this.config.timeout);
|
|
33
32
|
this.accessor = new PostgresAccessor(this.driver, this.config);
|
|
34
|
-
this.
|
|
33
|
+
this.vfsMd = prefix === undefined ? VFS_MD : VFS_MD.replace('{prefix}', prefix);
|
|
35
34
|
}
|
|
36
35
|
getState() {
|
|
37
36
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/vfs/postgres/postgres.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;AAEvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/vfs/postgres/postgres.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA;AAE3E,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAEtD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,4CAA4C,CAAA;AACnD,OAAO,EACL,WAAW,IAAI,eAAe,EAC9B,MAAM,GACP,MAAM,8CAA8C,CAAA;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAQ/C,MAAM,OAAO,WAAY,SAAQ,eAAe;IAC5B,IAAI,GAAW,OAAO,CAAC,QAAQ,CAAA;IAC/B,WAAW,GAAY,KAAK,CAAA;IAC5B,QAAQ,GAAW,CAAC,CAAA;IAC7B,KAAK,CAAQ;IACb,MAAM,CAA0C;IAChD,MAAM,CAAU;IACP,QAAQ,CAAkB;IAE5C,YAAY,OAA4C;QACtD,KAAK,EAAE,CAAA;QACP,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAC9B,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QAC3F,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC9E,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9D,IAAI,CAAC,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACjF,CAAC;IAEQ,QAAQ;QAGf,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;YACzC,8DAA8D;YAC9D,4DAA4D;YAC5D,8DAA8D;YAC9D,kEAAkE;YAClE,wDAAwD;YACxD,cAAc,EAAE,IAAI;SACrB,CAAA;IACH,CAAC;IAEQ,KAAK,CAAC,KAAK;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACzB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;CACF"}
|