@useairfoil/effect-vcr 0.4.3 → 0.4.4
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 +15 -5
- package/dist/{cassette-store-CnXX5OLB.js → cassette-store-BF9e0rz3.js} +5 -7
- package/dist/cassette-store-BF9e0rz3.js.map +1 -0
- package/dist/{cassette-store-BunkvLoV.d.ts → cassette-store-BMtcjh5h.d.ts} +29 -5
- package/dist/cassette-store.d.ts +2 -2
- package/dist/cassette-store.js +2 -1
- package/dist/{file-system-cassette-store-DUEtpVCu.d.ts → file-system-cassette-store-ClYAuH7U.d.ts} +2 -2
- package/dist/{file-system-cassette-store-zWkrhhlO.js → file-system-cassette-store-CyOsu3z5.js} +3 -3
- package/dist/{file-system-cassette-store-zWkrhhlO.js.map → file-system-cassette-store-CyOsu3z5.js.map} +1 -1
- package/dist/file-system-cassette-store.d.ts +3 -3
- package/dist/file-system-cassette-store.js +4 -3
- package/dist/index.d.ts +5 -5
- package/dist/index.js +6 -6
- package/dist/types-DMuz_JGd.js +45 -0
- package/dist/types-DMuz_JGd.js.map +1 -0
- package/dist/types-XZehMu_v.d.ts +138 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.js +2 -2
- package/dist/{vcr-http-client-BaMxQun5.js → vcr-http-client-Ba0WYPV9.js} +143 -66
- package/dist/vcr-http-client-Ba0WYPV9.js.map +1 -0
- package/dist/{vcr-http-client-Mwb8ZMsc.d.ts → vcr-http-client-BveeoOoW.d.ts} +3 -3
- package/dist/vcr-http-client.d.ts +3 -3
- package/dist/vcr-http-client.js +4 -3
- package/dist/{vitest-state-BOynp4Va.js → vitest-state-CiW5dzXZ.js} +1 -1
- package/dist/{vitest-state-BOynp4Va.js.map → vitest-state-CiW5dzXZ.js.map} +1 -1
- package/package.json +6 -5
- package/src/cassette-store.ts +15 -11
- package/src/sanitize.ts +166 -48
- package/src/types.ts +40 -26
- package/src/vcr-http-client.ts +33 -30
- package/dist/cassette-store-CnXX5OLB.js.map +0 -1
- package/dist/types-BsuPrIpu.js +0 -1
- package/dist/types-DWwkMzxG.d.ts +0 -85
- package/dist/vcr-http-client-BaMxQun5.js.map +0 -1
package/README.md
CHANGED
|
@@ -103,6 +103,8 @@ type VcrConfig = {
|
|
|
103
103
|
readonly responseHeaders?: ReadonlyArray<string>;
|
|
104
104
|
readonly requestBodyKeys?: ReadonlyArray<string>;
|
|
105
105
|
readonly responseBodyKeys?: ReadonlyArray<string>;
|
|
106
|
+
readonly requestBodyReplacements?: Readonly<Record<string, string | number | boolean | null>>;
|
|
107
|
+
readonly responseBodyReplacements?: Readonly<Record<string, string | number | boolean | null>>;
|
|
106
108
|
};
|
|
107
109
|
readonly matchIgnore?: {
|
|
108
110
|
readonly requestHeaders?: ReadonlyArray<string>;
|
|
@@ -124,9 +126,11 @@ type VcrConfig = {
|
|
|
124
126
|
- `replay`: only serve from cassette; missing entries fail
|
|
125
127
|
- `auto`: replay if the cassette exists, otherwise record; when `CI=true`, missing cassettes fail instead of recording
|
|
126
128
|
- `redact`
|
|
127
|
-
- remove sensitive headers or JSON body keys before writing to disk
|
|
129
|
+
- remove sensitive headers or JSON and URL-encoded body keys before writing to disk
|
|
130
|
+
- replace body values with safe placeholders when the field must remain available during replay
|
|
131
|
+
- request fields redacted here are also ignored when building cassette keys
|
|
128
132
|
- `matchIgnore`
|
|
129
|
-
- ignore request headers or JSON body keys when computing the request lookup key
|
|
133
|
+
- ignore request headers or JSON and URL-encoded body keys when computing the request lookup key
|
|
130
134
|
- `match`
|
|
131
135
|
- custom request matcher for advanced lookup behavior
|
|
132
136
|
|
|
@@ -156,11 +160,14 @@ Typical usage:
|
|
|
156
160
|
const vcrLayer = VcrHttpClient.layer({
|
|
157
161
|
vcrName: "shopify-products",
|
|
158
162
|
mode: "auto",
|
|
159
|
-
matchIgnore: {
|
|
160
|
-
requestHeaders: ["x-shopify-access-token", "authorization"],
|
|
161
|
-
},
|
|
162
163
|
redact: {
|
|
163
164
|
requestHeaders: ["x-shopify-access-token", "authorization"],
|
|
165
|
+
requestBodyReplacements: {
|
|
166
|
+
client_secret: "client-secret-placeholder",
|
|
167
|
+
},
|
|
168
|
+
responseBodyReplacements: {
|
|
169
|
+
access_token: "access-token-placeholder",
|
|
170
|
+
},
|
|
164
171
|
},
|
|
165
172
|
});
|
|
166
173
|
```
|
|
@@ -168,6 +175,9 @@ const vcrLayer = VcrHttpClient.layer({
|
|
|
168
175
|
Use `matchIgnore` when a request field should not affect cassette identity.
|
|
169
176
|
|
|
170
177
|
Use `redact` when a field should never be written to disk.
|
|
178
|
+
Replacement values are useful for fields such as access tokens that a replayed
|
|
179
|
+
response must still contain. If body redaction changes the encoded length, the VCR
|
|
180
|
+
also removes and ignores the stale `content-length` header.
|
|
171
181
|
|
|
172
182
|
## Runtime configuration
|
|
173
183
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { t as __export } from "./chunk-Bp6m_JJh.js";
|
|
2
|
-
import {
|
|
2
|
+
import { t as CassetteFileSchema } from "./types-DMuz_JGd.js";
|
|
3
|
+
import { Context, Data, DateTime, Effect, Schema } from "effect";
|
|
3
4
|
|
|
4
5
|
//#region src/cassette-store.ts
|
|
5
6
|
var cassette_store_exports = /* @__PURE__ */ __export({
|
|
@@ -43,18 +44,15 @@ const toStoreError = (operation, path, cause, message) => new CassetteStoreError
|
|
|
43
44
|
message
|
|
44
45
|
});
|
|
45
46
|
/**
|
|
46
|
-
* Parses cassette JSON and maps invalid JSON to a store error.
|
|
47
|
+
* Parses cassette JSON and maps invalid JSON or an invalid cassette shape to a store error.
|
|
47
48
|
*/
|
|
48
49
|
const parseCassette = (content, path) => Effect.try({
|
|
49
50
|
try: () => JSON.parse(content),
|
|
50
51
|
catch: (error) => toStoreError("load", path, error, "Invalid JSON")
|
|
51
|
-
}).pipe(Effect.flatMap((parsed) =>
|
|
52
|
-
if (!parsed || typeof parsed !== "object" || !("exports" in parsed)) return Effect.fail(toStoreError("load", path, void 0, "Invalid cassette file format"));
|
|
53
|
-
return Effect.succeed(parsed);
|
|
54
|
-
}));
|
|
52
|
+
}).pipe(Effect.flatMap((parsed) => Schema.decodeUnknownEffect(CassetteFileSchema)(parsed).pipe(Effect.mapError((error) => toStoreError("load", path, error, "Invalid cassette file format")))));
|
|
55
53
|
/** Creates a `CassetteStore` implementation that uses the given `impl` object. */
|
|
56
54
|
const make = (impl) => CassetteStore.of({ ...impl });
|
|
57
55
|
|
|
58
56
|
//#endregion
|
|
59
57
|
export { createEmptyCassetteFile as a, toStoreError as c, createEmptyCassette as i, CassetteStoreError as n, make as o, cassette_store_exports as r, parseCassette as s, CassetteStore as t };
|
|
60
|
-
//# sourceMappingURL=cassette-store-
|
|
58
|
+
//# sourceMappingURL=cassette-store-BF9e0rz3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cassette-store-BF9e0rz3.js","names":[],"sources":["../src/cassette-store.ts"],"sourcesContent":["import { Context, Data, DateTime, Effect, Schema } from \"effect\";\n\nimport { CassetteFileSchema, type Cassette, type CassetteFile } from \"./types\";\n\nexport type CassetteStoreOperation = \"exists\" | \"load\" | \"save\" | \"loadOrInit\" | \"resolveRoot\";\n\n/**\n * Storage contract for VCR cassettes.\n *\n */\nexport interface CassetteStoreService {\n /** Returns true if a cassette with the given name exists. */\n readonly exists: (name: string) => Effect.Effect<boolean, CassetteStoreError>;\n\n /** Loads a cassette by name, returning a `CassetteFile` if found. */\n readonly load: (name: string) => Effect.Effect<CassetteFile, CassetteStoreError>;\n\n /** Saves a cassette by name, overwriting any existing cassette with the same name. */\n readonly save: (name: string, content: CassetteFile) => Effect.Effect<void, CassetteStoreError>;\n\n /** Loads a cassette by name, initializing a new empty cassette if not found. */\n readonly loadOrInit: (name: string) => Effect.Effect<CassetteFile, CassetteStoreError>;\n}\n\n/**\n * Effect service tag for the cassette store.\n */\nexport class CassetteStore extends Context.Service<CassetteStore, CassetteStoreService>()(\n \"@useairfoil/effect-vcr/CassetteStore\",\n) {}\n\n/**\n * Creates a new empty cassette with a timestamp and format version.\n */\nexport const createEmptyCassette = Effect.fnUntraced(function* (): Effect.fn.Return<Cassette> {\n const now = yield* DateTime.now;\n return {\n meta: {\n createdAt: DateTime.formatIso(now),\n version: \"1\",\n },\n entries: {},\n };\n});\n\nexport const createEmptyCassetteFile = (): Effect.Effect<CassetteFile> =>\n Effect.map(createEmptyCassette(), (cassette) => ({\n exports: { default: cassette },\n }));\n\n/**\n * Structured error for cassette persistence operations.\n *\n * `operation` indicates which store function failed.\n * `path` is the file or directory path that was targeted.\n */\nexport class CassetteStoreError extends Data.TaggedError(\"CassetteStoreError\")<{\n readonly operation: CassetteStoreOperation;\n readonly path: string;\n readonly message?: string;\n readonly cause?: unknown;\n}> {}\n\nexport const toStoreError = (\n operation: CassetteStoreOperation,\n path: string,\n cause?: unknown,\n message?: string,\n) =>\n new CassetteStoreError({\n operation,\n path,\n cause,\n message,\n });\n\n/**\n * Parses cassette JSON and maps invalid JSON or an invalid cassette shape to a store error.\n */\nexport const parseCassette = (\n content: string,\n path: string,\n): Effect.Effect<CassetteFile, CassetteStoreError> =>\n Effect.try({\n try: () => JSON.parse(content) as unknown,\n catch: (error) => toStoreError(\"load\", path, error, \"Invalid JSON\"),\n }).pipe(\n Effect.flatMap((parsed) =>\n Schema.decodeUnknownEffect(CassetteFileSchema)(parsed).pipe(\n Effect.mapError((error) =>\n toStoreError(\"load\", path, error, \"Invalid cassette file format\"),\n ),\n ),\n ),\n );\n\n/** Creates a `CassetteStore` implementation that uses the given `impl` object. */\nexport const make = (impl: CassetteStoreService): CassetteStoreService =>\n CassetteStore.of({ ...impl });\n"],"mappings":";;;;;;;;;;;;;;;;;AA2BA,IAAa,gBAAb,cAAmC,QAAQ,SAA8C,CACvF,uCACD,CAAC;;;;AAKF,MAAa,sBAAsB,OAAO,WAAW,aAAyC;CAC5F,MAAM,MAAM,OAAO,SAAS;AAC5B,QAAO;EACL,MAAM;GACJ,WAAW,SAAS,UAAU,IAAI;GAClC,SAAS;GACV;EACD,SAAS,EAAE;EACZ;EACD;AAEF,MAAa,gCACX,OAAO,IAAI,qBAAqB,GAAG,cAAc,EAC/C,SAAS,EAAE,SAAS,UAAU,EAC/B,EAAE;;;;;;;AAQL,IAAa,qBAAb,cAAwC,KAAK,YAAY,qBAAqB,CAK3E;AAEH,MAAa,gBACX,WACA,MACA,OACA,YAEA,IAAI,mBAAmB;CACrB;CACA;CACA;CACA;CACD,CAAC;;;;AAKJ,MAAa,iBACX,SACA,SAEA,OAAO,IAAI;CACT,WAAW,KAAK,MAAM,QAAQ;CAC9B,QAAQ,UAAU,aAAa,QAAQ,MAAM,OAAO,eAAe;CACpE,CAAC,CAAC,KACD,OAAO,SAAS,WACd,OAAO,oBAAoB,mBAAmB,CAAC,OAAO,CAAC,KACrD,OAAO,UAAU,UACf,aAAa,QAAQ,MAAM,OAAO,+BAA+B,CAClE,CACF,CACF,CACF;;AAGH,MAAa,QAAQ,SACnB,cAAc,GAAG,EAAE,GAAG,MAAM,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as CassetteFile
|
|
1
|
+
import { n as CassetteFile } from "./types-XZehMu_v.js";
|
|
2
2
|
import { Context, Effect } from "effect";
|
|
3
3
|
import * as effect_Types0 from "effect/Types";
|
|
4
4
|
import * as effect_Cause0 from "effect/Cause";
|
|
@@ -30,7 +30,31 @@ declare class CassetteStore extends CassetteStore_base {}
|
|
|
30
30
|
/**
|
|
31
31
|
* Creates a new empty cassette with a timestamp and format version.
|
|
32
32
|
*/
|
|
33
|
-
declare const createEmptyCassette: () => Effect.Effect<
|
|
33
|
+
declare const createEmptyCassette: () => Effect.Effect<{
|
|
34
|
+
readonly meta: {
|
|
35
|
+
readonly createdAt: string;
|
|
36
|
+
readonly version: string;
|
|
37
|
+
};
|
|
38
|
+
readonly entries: {
|
|
39
|
+
readonly [x: string]: {
|
|
40
|
+
readonly request: {
|
|
41
|
+
readonly method: string;
|
|
42
|
+
readonly url: string;
|
|
43
|
+
readonly headers?: {
|
|
44
|
+
readonly [x: string]: string;
|
|
45
|
+
} | undefined;
|
|
46
|
+
readonly body?: string | undefined;
|
|
47
|
+
};
|
|
48
|
+
readonly response: {
|
|
49
|
+
readonly body: string;
|
|
50
|
+
readonly status: number;
|
|
51
|
+
readonly headers?: {
|
|
52
|
+
readonly [x: string]: string;
|
|
53
|
+
} | undefined;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
}, never, never>;
|
|
34
58
|
declare const createEmptyCassetteFile: () => Effect.Effect<CassetteFile>;
|
|
35
59
|
declare const CassetteStoreError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }>) => effect_Cause0.YieldableError & {
|
|
36
60
|
readonly _tag: "CassetteStoreError";
|
|
@@ -49,11 +73,11 @@ declare class CassetteStoreError extends CassetteStoreError_base<{
|
|
|
49
73
|
}> {}
|
|
50
74
|
declare const toStoreError: (operation: CassetteStoreOperation, path: string, cause?: unknown, message?: string) => CassetteStoreError;
|
|
51
75
|
/**
|
|
52
|
-
* Parses cassette JSON and maps invalid JSON to a store error.
|
|
76
|
+
* Parses cassette JSON and maps invalid JSON or an invalid cassette shape to a store error.
|
|
53
77
|
*/
|
|
54
|
-
declare const parseCassette: (content: string, path: string) => Effect.Effect<CassetteFile, CassetteStoreError
|
|
78
|
+
declare const parseCassette: (content: string, path: string) => Effect.Effect<CassetteFile, CassetteStoreError>;
|
|
55
79
|
/** Creates a `CassetteStore` implementation that uses the given `impl` object. */
|
|
56
80
|
declare const make: (impl: CassetteStoreService) => CassetteStoreService;
|
|
57
81
|
//#endregion
|
|
58
82
|
export { cassette_store_d_exports as a, make as c, CassetteStoreService as i, parseCassette as l, CassetteStoreError as n, createEmptyCassette as o, CassetteStoreOperation as r, createEmptyCassetteFile as s, CassetteStore as t, toStoreError as u };
|
|
59
|
-
//# sourceMappingURL=cassette-store-
|
|
83
|
+
//# sourceMappingURL=cassette-store-BMtcjh5h.d.ts.map
|
package/dist/cassette-store.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import "./types-
|
|
2
|
-
import { c as make, i as CassetteStoreService, l as parseCassette, n as CassetteStoreError, o as createEmptyCassette, r as CassetteStoreOperation, s as createEmptyCassetteFile, t as CassetteStore, u as toStoreError } from "./cassette-store-
|
|
1
|
+
import "./types-XZehMu_v.js";
|
|
2
|
+
import { c as make, i as CassetteStoreService, l as parseCassette, n as CassetteStoreError, o as createEmptyCassette, r as CassetteStoreOperation, s as createEmptyCassetteFile, t as CassetteStore, u as toStoreError } from "./cassette-store-BMtcjh5h.js";
|
|
3
3
|
export { CassetteStore, CassetteStoreError, CassetteStoreOperation, CassetteStoreService, createEmptyCassette, createEmptyCassetteFile, make, parseCassette, toStoreError };
|
package/dist/cassette-store.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "./types-DMuz_JGd.js";
|
|
2
|
+
import { a as createEmptyCassetteFile, c as toStoreError, i as createEmptyCassette, n as CassetteStoreError, o as make, s as parseCassette, t as CassetteStore } from "./cassette-store-BF9e0rz3.js";
|
|
2
3
|
|
|
3
4
|
export { CassetteStore, CassetteStoreError, createEmptyCassette, createEmptyCassetteFile, make, parseCassette, toStoreError };
|
package/dist/{file-system-cassette-store-DUEtpVCu.d.ts → file-system-cassette-store-ClYAuH7U.d.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as CassetteStoreError, t as CassetteStore } from "./cassette-store-
|
|
1
|
+
import { n as CassetteStoreError, t as CassetteStore } from "./cassette-store-BMtcjh5h.js";
|
|
2
2
|
import { FileSystem, Layer, Path } from "effect";
|
|
3
3
|
|
|
4
4
|
//#region src/file-system-cassette-store.d.ts
|
|
@@ -16,4 +16,4 @@ type FileSystemCassetteStoreConfig = {
|
|
|
16
16
|
declare const layer: (config?: FileSystemCassetteStoreConfig) => Layer.Layer<CassetteStore, CassetteStoreError, FileSystem.FileSystem | Path.Path>;
|
|
17
17
|
//#endregion
|
|
18
18
|
export { file_system_cassette_store_d_exports as n, layer as r, FileSystemCassetteStoreConfig as t };
|
|
19
|
-
//# sourceMappingURL=file-system-cassette-store-
|
|
19
|
+
//# sourceMappingURL=file-system-cassette-store-ClYAuH7U.d.ts.map
|
package/dist/{file-system-cassette-store-zWkrhhlO.js → file-system-cassette-store-CyOsu3z5.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __export } from "./chunk-Bp6m_JJh.js";
|
|
2
|
-
import { a as createEmptyCassetteFile, c as toStoreError, o as make, s as parseCassette, t as CassetteStore } from "./cassette-store-
|
|
3
|
-
import { t as getVitestState } from "./vitest-state-
|
|
2
|
+
import { a as createEmptyCassetteFile, c as toStoreError, o as make, s as parseCassette, t as CassetteStore } from "./cassette-store-BF9e0rz3.js";
|
|
3
|
+
import { t as getVitestState } from "./vitest-state-CiW5dzXZ.js";
|
|
4
4
|
import { Effect, FileSystem, Layer, Path } from "effect";
|
|
5
5
|
|
|
6
6
|
//#region src/file-system-cassette-store.ts
|
|
@@ -39,4 +39,4 @@ const layer = (config = {}) => Layer.effect(CassetteStore)(Effect.gen(function*
|
|
|
39
39
|
|
|
40
40
|
//#endregion
|
|
41
41
|
export { layer as n, file_system_cassette_store_exports as t };
|
|
42
|
-
//# sourceMappingURL=file-system-cassette-store-
|
|
42
|
+
//# sourceMappingURL=file-system-cassette-store-CyOsu3z5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system-cassette-store-
|
|
1
|
+
{"version":3,"file":"file-system-cassette-store-CyOsu3z5.js","names":["CassetteStore.CassetteStore","rootDir: string","CassetteStore.toStoreError","CassetteStore.parseCassette","CassetteStore.createEmptyCassetteFile","CassetteStore.make"],"sources":["../src/file-system-cassette-store.ts"],"sourcesContent":["import { Effect, Layer, FileSystem, Path } from \"effect\";\n\nimport type { CassetteFile } from \"./types\";\n\nimport * as CassetteStore from \"./cassette-store\";\nimport { getVitestState } from \"./vitest-state\";\n\nexport type FileSystemCassetteStoreConfig = {\n readonly cassetteDir?: string;\n};\n\n/**\n * FileSystem-backed cassette store.\n *\n * Requires a platform FileSystem layer (Node/Bun) to be provided by the user.\n */\nexport const layer = (config: FileSystemCassetteStoreConfig = {}) =>\n Layer.effect(CassetteStore.CassetteStore)(\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n\n let rootDir: string;\n if (config.cassetteDir) {\n rootDir = config.cassetteDir;\n } else {\n const { testPath } = getVitestState();\n if (!testPath) {\n return yield* Effect.fail(\n CassetteStore.toStoreError(\n \"resolveRoot\",\n \"__cassettes__\",\n undefined,\n \"VCR cassette directory could not be inferred. Provide cassetteDir when not running in Vitest.\",\n ),\n );\n }\n const testFolder = path.dirname(testPath);\n rootDir = path.join(testFolder, \"__cassettes__\");\n }\n\n const fullPath = (name: string) => path.join(rootDir, name);\n\n const load = (name: string) =>\n fs.readFileString(fullPath(name)).pipe(\n Effect.mapError((error) => CassetteStore.toStoreError(\"load\", name, error)),\n Effect.flatMap((content) => CassetteStore.parseCassette(content, name)),\n );\n\n const save = (name: string, cassette: CassetteFile) => {\n const filePath = fullPath(name);\n const dir = path.dirname(filePath);\n const ensureDir =\n dir === \"\"\n ? Effect.void\n : fs\n .makeDirectory(dir, { recursive: true })\n .pipe(Effect.mapError((error) => CassetteStore.toStoreError(\"save\", dir, error)));\n return ensureDir.pipe(\n Effect.andThen(\n fs\n .writeFileString(filePath, JSON.stringify(cassette, null, 2))\n .pipe(Effect.mapError((error) => CassetteStore.toStoreError(\"save\", name, error))),\n ),\n );\n };\n\n const loadOrInit = (name: string) =>\n fs.exists(fullPath(name)).pipe(\n Effect.mapError((error) => CassetteStore.toStoreError(\"loadOrInit\", name, error)),\n Effect.flatMap((exists) =>\n exists\n ? load(name)\n : CassetteStore.createEmptyCassetteFile().pipe(\n Effect.tap((cassette) => save(name, cassette)),\n ),\n ),\n );\n\n return CassetteStore.make({\n exists: (name: string) =>\n fs\n .exists(fullPath(name))\n .pipe(Effect.mapError((error) => CassetteStore.toStoreError(\"exists\", name, error))),\n load,\n save,\n loadOrInit,\n });\n }),\n );\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAa,SAAS,SAAwC,EAAE,KAC9D,MAAM,OAAOA,cAA4B,CACvC,OAAO,IAAI,aAAa;CACtB,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,OAAO,OAAO,KAAK;CAEzB,IAAIC;AACJ,KAAI,OAAO,YACT,WAAU,OAAO;MACZ;EACL,MAAM,EAAE,aAAa,gBAAgB;AACrC,MAAI,CAAC,SACH,QAAO,OAAO,OAAO,KACnBC,aACE,eACA,iBACA,QACA,gGACD,CACF;EAEH,MAAM,aAAa,KAAK,QAAQ,SAAS;AACzC,YAAU,KAAK,KAAK,YAAY,gBAAgB;;CAGlD,MAAM,YAAY,SAAiB,KAAK,KAAK,SAAS,KAAK;CAE3D,MAAM,QAAQ,SACZ,GAAG,eAAe,SAAS,KAAK,CAAC,CAAC,KAChC,OAAO,UAAU,UAAUA,aAA2B,QAAQ,MAAM,MAAM,CAAC,EAC3E,OAAO,SAAS,YAAYC,cAA4B,SAAS,KAAK,CAAC,CACxE;CAEH,MAAM,QAAQ,MAAc,aAA2B;EACrD,MAAM,WAAW,SAAS,KAAK;EAC/B,MAAM,MAAM,KAAK,QAAQ,SAAS;AAOlC,UALE,QAAQ,KACJ,OAAO,OACP,GACG,cAAc,KAAK,EAAE,WAAW,MAAM,CAAC,CACvC,KAAK,OAAO,UAAU,UAAUD,aAA2B,QAAQ,KAAK,MAAM,CAAC,CAAC,EACxE,KACf,OAAO,QACL,GACG,gBAAgB,UAAU,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC,CAC5D,KAAK,OAAO,UAAU,UAAUA,aAA2B,QAAQ,MAAM,MAAM,CAAC,CAAC,CACrF,CACF;;CAGH,MAAM,cAAc,SAClB,GAAG,OAAO,SAAS,KAAK,CAAC,CAAC,KACxB,OAAO,UAAU,UAAUA,aAA2B,cAAc,MAAM,MAAM,CAAC,EACjF,OAAO,SAAS,WACd,SACI,KAAK,KAAK,GACVE,yBAAuC,CAAC,KACtC,OAAO,KAAK,aAAa,KAAK,MAAM,SAAS,CAAC,CAC/C,CACN,CACF;AAEH,QAAOC,KAAmB;EACxB,SAAS,SACP,GACG,OAAO,SAAS,KAAK,CAAC,CACtB,KAAK,OAAO,UAAU,UAAUH,aAA2B,UAAU,MAAM,MAAM,CAAC,CAAC;EACxF;EACA;EACA;EACD,CAAC;EACF,CACH"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./types-
|
|
2
|
-
import "./cassette-store-
|
|
3
|
-
import { r as layer, t as FileSystemCassetteStoreConfig } from "./file-system-cassette-store-
|
|
1
|
+
import "./types-XZehMu_v.js";
|
|
2
|
+
import "./cassette-store-BMtcjh5h.js";
|
|
3
|
+
import { r as layer, t as FileSystemCassetteStoreConfig } from "./file-system-cassette-store-ClYAuH7U.js";
|
|
4
4
|
export { FileSystemCassetteStoreConfig, layer };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./
|
|
3
|
-
import
|
|
1
|
+
import "./types-DMuz_JGd.js";
|
|
2
|
+
import "./cassette-store-BF9e0rz3.js";
|
|
3
|
+
import "./vitest-state-CiW5dzXZ.js";
|
|
4
|
+
import { n as layer } from "./file-system-cassette-store-CyOsu3z5.js";
|
|
4
5
|
|
|
5
6
|
export { layer };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as VcrMode, i as
|
|
2
|
-
import { a as cassette_store_d_exports } from "./cassette-store-
|
|
3
|
-
import { n as file_system_cassette_store_d_exports } from "./file-system-cassette-store-
|
|
4
|
-
import { r as vcr_http_client_d_exports } from "./vcr-http-client-
|
|
5
|
-
export { Cassette, CassetteFile, cassette_store_d_exports as CassetteStore, file_system_cassette_store_d_exports as FileSystemCassetteStore, VcrConfig, VcrEntry, vcr_http_client_d_exports as VcrHttpClient, VcrMode, VcrRequest, VcrResponse };
|
|
1
|
+
import { a as VcrConfig, c as VcrMode, d as VcrRequestSchema, f as VcrResponse, i as CassetteSchema, l as VcrRedactedValue, n as CassetteFile, o as VcrEntry, p as VcrResponseSchema, r as CassetteFileSchema, s as VcrEntrySchema, t as Cassette, u as VcrRequest } from "./types-XZehMu_v.js";
|
|
2
|
+
import { a as cassette_store_d_exports } from "./cassette-store-BMtcjh5h.js";
|
|
3
|
+
import { n as file_system_cassette_store_d_exports } from "./file-system-cassette-store-ClYAuH7U.js";
|
|
4
|
+
import { r as vcr_http_client_d_exports } from "./vcr-http-client-BveeoOoW.js";
|
|
5
|
+
export { Cassette, CassetteFile, CassetteFileSchema, CassetteSchema, cassette_store_d_exports as CassetteStore, file_system_cassette_store_d_exports as FileSystemCassetteStore, VcrConfig, VcrEntry, VcrEntrySchema, vcr_http_client_d_exports as VcrHttpClient, VcrMode, VcrRedactedValue, VcrRequest, VcrRequestSchema, VcrResponse, VcrResponseSchema };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as
|
|
2
|
-
import "./
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import "./
|
|
1
|
+
import { a as VcrResponseSchema, i as VcrRequestSchema, n as CassetteSchema, r as VcrEntrySchema, t as CassetteFileSchema } from "./types-DMuz_JGd.js";
|
|
2
|
+
import { r as cassette_store_exports } from "./cassette-store-BF9e0rz3.js";
|
|
3
|
+
import "./vitest-state-CiW5dzXZ.js";
|
|
4
|
+
import { t as file_system_cassette_store_exports } from "./file-system-cassette-store-CyOsu3z5.js";
|
|
5
|
+
import { r as vcr_http_client_exports } from "./vcr-http-client-Ba0WYPV9.js";
|
|
6
6
|
|
|
7
|
-
export { cassette_store_exports as CassetteStore, file_system_cassette_store_exports as FileSystemCassetteStore, vcr_http_client_exports as VcrHttpClient };
|
|
7
|
+
export { CassetteFileSchema, CassetteSchema, cassette_store_exports as CassetteStore, file_system_cassette_store_exports as FileSystemCassetteStore, VcrEntrySchema, vcr_http_client_exports as VcrHttpClient, VcrRequestSchema, VcrResponseSchema };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
|
|
3
|
+
//#region src/types.ts
|
|
4
|
+
/**
|
|
5
|
+
* Serialized request shape stored in a cassette.
|
|
6
|
+
*/
|
|
7
|
+
const VcrRequestSchema = Schema.Struct({
|
|
8
|
+
method: Schema.String,
|
|
9
|
+
url: Schema.String,
|
|
10
|
+
headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),
|
|
11
|
+
body: Schema.optional(Schema.String)
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Serialized response shape stored in a cassette.
|
|
15
|
+
*/
|
|
16
|
+
const VcrResponseSchema = Schema.Struct({
|
|
17
|
+
status: Schema.Number,
|
|
18
|
+
body: Schema.String,
|
|
19
|
+
headers: Schema.optional(Schema.Record(Schema.String, Schema.String))
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* A single request/response pair keyed in the cassette.
|
|
23
|
+
*/
|
|
24
|
+
const VcrEntrySchema = Schema.Struct({
|
|
25
|
+
request: VcrRequestSchema,
|
|
26
|
+
response: VcrResponseSchema
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Cassette file format.
|
|
30
|
+
*/
|
|
31
|
+
const CassetteSchema = Schema.Struct({
|
|
32
|
+
meta: Schema.Struct({
|
|
33
|
+
createdAt: Schema.String,
|
|
34
|
+
version: Schema.String
|
|
35
|
+
}),
|
|
36
|
+
entries: Schema.Record(Schema.String, VcrEntrySchema)
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Cassette file format with multiple exports.
|
|
40
|
+
*/
|
|
41
|
+
const CassetteFileSchema = Schema.Struct({ exports: Schema.Record(Schema.String, CassetteSchema) });
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
export { VcrResponseSchema as a, VcrRequestSchema as i, CassetteSchema as n, VcrEntrySchema as r, CassetteFileSchema as t };
|
|
45
|
+
//# sourceMappingURL=types-DMuz_JGd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-DMuz_JGd.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\n/**\n * VCR operating mode.\n * - record: always call the live client and persist.\n * - replay: serve only from cassette, fail if missing.\n * - auto: replay if cassette exists, otherwise record (fail in CI).\n */\nexport type VcrMode = \"record\" | \"replay\" | \"auto\";\n\n/**\n * Safe scalar value written in place of a sensitive body field.\n */\nexport type VcrRedactedValue = string | number | boolean | null;\n\n/**\n * Serialized request shape stored in a cassette.\n */\nexport const VcrRequestSchema = Schema.Struct({\n method: Schema.String,\n url: Schema.String,\n headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n body: Schema.optional(Schema.String),\n});\nexport type VcrRequest = Schema.Schema.Type<typeof VcrRequestSchema>;\n\n/**\n * Serialized response shape stored in a cassette.\n */\nexport const VcrResponseSchema = Schema.Struct({\n status: Schema.Number,\n body: Schema.String,\n headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n});\nexport type VcrResponse = Schema.Schema.Type<typeof VcrResponseSchema>;\n\n/**\n * A single request/response pair keyed in the cassette.\n */\nexport const VcrEntrySchema = Schema.Struct({\n request: VcrRequestSchema,\n response: VcrResponseSchema,\n});\nexport type VcrEntry = Schema.Schema.Type<typeof VcrEntrySchema>;\n\n/**\n * Cassette file format.\n */\nexport const CassetteSchema = Schema.Struct({\n meta: Schema.Struct({\n createdAt: Schema.String,\n version: Schema.String,\n }),\n entries: Schema.Record(Schema.String, VcrEntrySchema),\n});\nexport type Cassette = Schema.Schema.Type<typeof CassetteSchema>;\n\n/**\n * Cassette file format with multiple exports.\n */\nexport const CassetteFileSchema = Schema.Struct({\n exports: Schema.Record(Schema.String, CassetteSchema),\n});\nexport type CassetteFile = Schema.Schema.Type<typeof CassetteFileSchema>;\n\n/**\n * VCR configuration.\n */\nexport type VcrConfig = {\n readonly vcrName?: string;\n /**\n * Cassette file name or basename.\n *\n * `users` resolves to `users.cassette`.\n * `users.cassette` is preserved as-is.\n */\n readonly cassetteName?: string;\n readonly mode?: VcrMode;\n /**\n * Remove or replace sensitive data before writing to disk.\n */\n readonly redact?: {\n readonly requestHeaders?: ReadonlyArray<string>;\n readonly responseHeaders?: ReadonlyArray<string>;\n readonly requestBodyKeys?: ReadonlyArray<string>;\n readonly responseBodyKeys?: ReadonlyArray<string>;\n readonly requestBodyReplacements?: Readonly<Record<string, VcrRedactedValue>>;\n readonly responseBodyReplacements?: Readonly<Record<string, VcrRedactedValue>>;\n };\n /**\n * Ignore fields when computing the request key for replay matching.\n */\n readonly matchIgnore?: {\n readonly requestHeaders?: ReadonlyArray<string>;\n readonly requestBodyKeys?: ReadonlyArray<string>;\n };\n /**\n * Custom matcher to override key-based lookup.\n */\n readonly match?: (request: VcrRequest, entry: VcrEntry) => boolean;\n};\n"],"mappings":";;;;;;AAkBA,MAAa,mBAAmB,OAAO,OAAO;CAC5C,QAAQ,OAAO;CACf,KAAK,OAAO;CACZ,SAAS,OAAO,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,CAAC;CACrE,MAAM,OAAO,SAAS,OAAO,OAAO;CACrC,CAAC;;;;AAMF,MAAa,oBAAoB,OAAO,OAAO;CAC7C,QAAQ,OAAO;CACf,MAAM,OAAO;CACb,SAAS,OAAO,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,CAAC;CACtE,CAAC;;;;AAMF,MAAa,iBAAiB,OAAO,OAAO;CAC1C,SAAS;CACT,UAAU;CACX,CAAC;;;;AAMF,MAAa,iBAAiB,OAAO,OAAO;CAC1C,MAAM,OAAO,OAAO;EAClB,WAAW,OAAO;EAClB,SAAS,OAAO;EACjB,CAAC;CACF,SAAS,OAAO,OAAO,OAAO,QAAQ,eAAe;CACtD,CAAC;;;;AAMF,MAAa,qBAAqB,OAAO,OAAO,EAC9C,SAAS,OAAO,OAAO,OAAO,QAAQ,eAAe,EACtD,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
|
|
3
|
+
//#region src/types.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* VCR operating mode.
|
|
7
|
+
* - record: always call the live client and persist.
|
|
8
|
+
* - replay: serve only from cassette, fail if missing.
|
|
9
|
+
* - auto: replay if cassette exists, otherwise record (fail in CI).
|
|
10
|
+
*/
|
|
11
|
+
type VcrMode = "record" | "replay" | "auto";
|
|
12
|
+
/**
|
|
13
|
+
* Safe scalar value written in place of a sensitive body field.
|
|
14
|
+
*/
|
|
15
|
+
type VcrRedactedValue = string | number | boolean | null;
|
|
16
|
+
/**
|
|
17
|
+
* Serialized request shape stored in a cassette.
|
|
18
|
+
*/
|
|
19
|
+
declare const VcrRequestSchema: Schema.Struct<{
|
|
20
|
+
readonly method: Schema.String;
|
|
21
|
+
readonly url: Schema.String;
|
|
22
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
23
|
+
readonly body: Schema.optional<Schema.String>;
|
|
24
|
+
}>;
|
|
25
|
+
type VcrRequest = Schema.Schema.Type<typeof VcrRequestSchema>;
|
|
26
|
+
/**
|
|
27
|
+
* Serialized response shape stored in a cassette.
|
|
28
|
+
*/
|
|
29
|
+
declare const VcrResponseSchema: Schema.Struct<{
|
|
30
|
+
readonly status: Schema.Number;
|
|
31
|
+
readonly body: Schema.String;
|
|
32
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
33
|
+
}>;
|
|
34
|
+
type VcrResponse = Schema.Schema.Type<typeof VcrResponseSchema>;
|
|
35
|
+
/**
|
|
36
|
+
* A single request/response pair keyed in the cassette.
|
|
37
|
+
*/
|
|
38
|
+
declare const VcrEntrySchema: Schema.Struct<{
|
|
39
|
+
readonly request: Schema.Struct<{
|
|
40
|
+
readonly method: Schema.String;
|
|
41
|
+
readonly url: Schema.String;
|
|
42
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
43
|
+
readonly body: Schema.optional<Schema.String>;
|
|
44
|
+
}>;
|
|
45
|
+
readonly response: Schema.Struct<{
|
|
46
|
+
readonly status: Schema.Number;
|
|
47
|
+
readonly body: Schema.String;
|
|
48
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
49
|
+
}>;
|
|
50
|
+
}>;
|
|
51
|
+
type VcrEntry = Schema.Schema.Type<typeof VcrEntrySchema>;
|
|
52
|
+
/**
|
|
53
|
+
* Cassette file format.
|
|
54
|
+
*/
|
|
55
|
+
declare const CassetteSchema: Schema.Struct<{
|
|
56
|
+
readonly meta: Schema.Struct<{
|
|
57
|
+
readonly createdAt: Schema.String;
|
|
58
|
+
readonly version: Schema.String;
|
|
59
|
+
}>;
|
|
60
|
+
readonly entries: Schema.$Record<Schema.String, Schema.Struct<{
|
|
61
|
+
readonly request: Schema.Struct<{
|
|
62
|
+
readonly method: Schema.String;
|
|
63
|
+
readonly url: Schema.String;
|
|
64
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
65
|
+
readonly body: Schema.optional<Schema.String>;
|
|
66
|
+
}>;
|
|
67
|
+
readonly response: Schema.Struct<{
|
|
68
|
+
readonly status: Schema.Number;
|
|
69
|
+
readonly body: Schema.String;
|
|
70
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
71
|
+
}>;
|
|
72
|
+
}>>;
|
|
73
|
+
}>;
|
|
74
|
+
type Cassette = Schema.Schema.Type<typeof CassetteSchema>;
|
|
75
|
+
/**
|
|
76
|
+
* Cassette file format with multiple exports.
|
|
77
|
+
*/
|
|
78
|
+
declare const CassetteFileSchema: Schema.Struct<{
|
|
79
|
+
readonly exports: Schema.$Record<Schema.String, Schema.Struct<{
|
|
80
|
+
readonly meta: Schema.Struct<{
|
|
81
|
+
readonly createdAt: Schema.String;
|
|
82
|
+
readonly version: Schema.String;
|
|
83
|
+
}>;
|
|
84
|
+
readonly entries: Schema.$Record<Schema.String, Schema.Struct<{
|
|
85
|
+
readonly request: Schema.Struct<{
|
|
86
|
+
readonly method: Schema.String;
|
|
87
|
+
readonly url: Schema.String;
|
|
88
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
89
|
+
readonly body: Schema.optional<Schema.String>;
|
|
90
|
+
}>;
|
|
91
|
+
readonly response: Schema.Struct<{
|
|
92
|
+
readonly status: Schema.Number;
|
|
93
|
+
readonly body: Schema.String;
|
|
94
|
+
readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
95
|
+
}>;
|
|
96
|
+
}>>;
|
|
97
|
+
}>>;
|
|
98
|
+
}>;
|
|
99
|
+
type CassetteFile = Schema.Schema.Type<typeof CassetteFileSchema>;
|
|
100
|
+
/**
|
|
101
|
+
* VCR configuration.
|
|
102
|
+
*/
|
|
103
|
+
type VcrConfig = {
|
|
104
|
+
readonly vcrName?: string;
|
|
105
|
+
/**
|
|
106
|
+
* Cassette file name or basename.
|
|
107
|
+
*
|
|
108
|
+
* `users` resolves to `users.cassette`.
|
|
109
|
+
* `users.cassette` is preserved as-is.
|
|
110
|
+
*/
|
|
111
|
+
readonly cassetteName?: string;
|
|
112
|
+
readonly mode?: VcrMode;
|
|
113
|
+
/**
|
|
114
|
+
* Remove or replace sensitive data before writing to disk.
|
|
115
|
+
*/
|
|
116
|
+
readonly redact?: {
|
|
117
|
+
readonly requestHeaders?: ReadonlyArray<string>;
|
|
118
|
+
readonly responseHeaders?: ReadonlyArray<string>;
|
|
119
|
+
readonly requestBodyKeys?: ReadonlyArray<string>;
|
|
120
|
+
readonly responseBodyKeys?: ReadonlyArray<string>;
|
|
121
|
+
readonly requestBodyReplacements?: Readonly<Record<string, VcrRedactedValue>>;
|
|
122
|
+
readonly responseBodyReplacements?: Readonly<Record<string, VcrRedactedValue>>;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Ignore fields when computing the request key for replay matching.
|
|
126
|
+
*/
|
|
127
|
+
readonly matchIgnore?: {
|
|
128
|
+
readonly requestHeaders?: ReadonlyArray<string>;
|
|
129
|
+
readonly requestBodyKeys?: ReadonlyArray<string>;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Custom matcher to override key-based lookup.
|
|
133
|
+
*/
|
|
134
|
+
readonly match?: (request: VcrRequest, entry: VcrEntry) => boolean;
|
|
135
|
+
};
|
|
136
|
+
//#endregion
|
|
137
|
+
export { VcrConfig as a, VcrMode as c, VcrRequestSchema as d, VcrResponse as f, CassetteSchema as i, VcrRedactedValue as l, CassetteFile as n, VcrEntry as o, VcrResponseSchema as p, CassetteFileSchema as r, VcrEntrySchema as s, Cassette as t, VcrRequest as u };
|
|
138
|
+
//# sourceMappingURL=types-XZehMu_v.d.ts.map
|
package/dist/types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as VcrMode, i as
|
|
2
|
-
export { Cassette, CassetteFile, VcrConfig, VcrEntry, VcrMode, VcrRequest, VcrResponse };
|
|
1
|
+
import { a as VcrConfig, c as VcrMode, d as VcrRequestSchema, f as VcrResponse, i as CassetteSchema, l as VcrRedactedValue, n as CassetteFile, o as VcrEntry, p as VcrResponseSchema, r as CassetteFileSchema, s as VcrEntrySchema, t as Cassette, u as VcrRequest } from "./types-XZehMu_v.js";
|
|
2
|
+
export { Cassette, CassetteFile, CassetteFileSchema, CassetteSchema, VcrConfig, VcrEntry, VcrEntrySchema, VcrMode, VcrRedactedValue, VcrRequest, VcrRequestSchema, VcrResponse, VcrResponseSchema };
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import "./types-
|
|
1
|
+
import { a as VcrResponseSchema, i as VcrRequestSchema, n as CassetteSchema, r as VcrEntrySchema, t as CassetteFileSchema } from "./types-DMuz_JGd.js";
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { CassetteFileSchema, CassetteSchema, VcrEntrySchema, VcrRequestSchema, VcrResponseSchema };
|