alchemy 0.15.3 → 0.15.5
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/lib/cloudflare/bindings.d.ts +3 -1
- package/lib/cloudflare/bindings.d.ts.map +1 -1
- package/lib/cloudflare/bindings.js +1 -0
- package/lib/cloudflare/bindings.js.map +1 -1
- package/lib/cloudflare/bound.d.ts +2 -2
- package/lib/cloudflare/bound.d.ts.map +1 -1
- package/lib/cloudflare/worker.d.ts +2 -2
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +108 -83
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +12 -0
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +17 -9
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/serde.d.ts.map +1 -1
- package/lib/serde.js +49 -13
- package/lib/serde.js.map +1 -1
- package/package.json +1 -1
- package/src/cloudflare/bindings.ts +5 -1
- package/src/cloudflare/bound.ts +4 -2
- package/src/cloudflare/worker.ts +158 -118
- package/src/cloudflare/wrangler.json.ts +27 -8
- package/src/serde.ts +57 -22
package/src/serde.ts
CHANGED
|
@@ -22,8 +22,7 @@ export async function serialize(
|
|
|
22
22
|
): Promise<any> {
|
|
23
23
|
if (Array.isArray(value)) {
|
|
24
24
|
return Promise.all(value.map((value) => serialize(scope, value, options)));
|
|
25
|
-
}
|
|
26
|
-
if (value instanceof Secret) {
|
|
25
|
+
} else if (value instanceof Secret) {
|
|
27
26
|
if (!scope.password) {
|
|
28
27
|
throw new Error("Cannot serialize secret without password");
|
|
29
28
|
}
|
|
@@ -33,31 +32,45 @@ export async function serialize(
|
|
|
33
32
|
? await encrypt(value.unencrypted, scope.password)
|
|
34
33
|
: value.unencrypted,
|
|
35
34
|
};
|
|
36
|
-
}
|
|
37
|
-
if (isType(value)) {
|
|
35
|
+
} else if (isType(value)) {
|
|
38
36
|
return {
|
|
39
37
|
"@schema": value.toJSON(),
|
|
40
38
|
};
|
|
41
|
-
}
|
|
42
|
-
if (value instanceof Date) {
|
|
39
|
+
} else if (value instanceof Date) {
|
|
43
40
|
return {
|
|
44
41
|
"@date": value.toISOString(),
|
|
45
42
|
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
} else if (typeof value === "symbol") {
|
|
44
|
+
assertNotUniqueSymbol(value);
|
|
45
|
+
return {
|
|
46
|
+
"@symbol": value.toString(),
|
|
47
|
+
};
|
|
48
|
+
} else if (value instanceof Scope) {
|
|
49
|
+
return {
|
|
50
|
+
"@scope": null,
|
|
51
|
+
};
|
|
52
|
+
} else if (value && typeof value === "object") {
|
|
53
|
+
for (const symbol of Object.getOwnPropertySymbols(value)) {
|
|
54
|
+
assertNotUniqueSymbol(symbol);
|
|
55
|
+
}
|
|
56
|
+
for (const key of Object.keys(value)) {
|
|
57
|
+
if (parseSymbol(key)) {
|
|
58
|
+
throw new Error(
|
|
59
|
+
`Cannot serialize property '${key}' because it looks like a stringified symbol.`,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
51
63
|
return Object.fromEntries(
|
|
52
64
|
await Promise.all(
|
|
53
|
-
Object.
|
|
54
|
-
key
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
[...Object.getOwnPropertySymbols(value), ...Object.keys(value)].map(
|
|
66
|
+
async (key) => [
|
|
67
|
+
key.toString(),
|
|
68
|
+
await serialize(scope, value[key], options),
|
|
69
|
+
],
|
|
70
|
+
),
|
|
57
71
|
),
|
|
58
72
|
);
|
|
59
|
-
}
|
|
60
|
-
if (typeof value === "function") {
|
|
73
|
+
} else if (typeof value === "function") {
|
|
61
74
|
// can't serialize functions
|
|
62
75
|
return undefined;
|
|
63
76
|
}
|
|
@@ -76,17 +89,20 @@ export async function deserialize(scope: Scope, value: any): Promise<any> {
|
|
|
76
89
|
throw new Error("Cannot deserialize secret without password");
|
|
77
90
|
}
|
|
78
91
|
return new Secret(await decryptWithKey(value["@secret"], scope.password));
|
|
79
|
-
}
|
|
80
|
-
if ("@schema" in value) {
|
|
92
|
+
} else if ("@schema" in value) {
|
|
81
93
|
return value["@schema"];
|
|
82
|
-
}
|
|
83
|
-
if ("@date" in value) {
|
|
94
|
+
} else if ("@date" in value) {
|
|
84
95
|
return new Date(value["@date"]);
|
|
96
|
+
} else if ("@symbol" in value) {
|
|
97
|
+
return parseSymbol(value["@symbol"]);
|
|
98
|
+
} else if ("@scope" in value) {
|
|
99
|
+
return scope;
|
|
85
100
|
}
|
|
101
|
+
|
|
86
102
|
return Object.fromEntries(
|
|
87
103
|
await Promise.all(
|
|
88
104
|
Object.entries(value).map(async ([key, value]) => [
|
|
89
|
-
key,
|
|
105
|
+
parseSymbol(key) ?? key,
|
|
90
106
|
await deserialize(scope, value),
|
|
91
107
|
]),
|
|
92
108
|
),
|
|
@@ -94,3 +110,22 @@ export async function deserialize(scope: Scope, value: any): Promise<any> {
|
|
|
94
110
|
}
|
|
95
111
|
return value;
|
|
96
112
|
}
|
|
113
|
+
|
|
114
|
+
const symbolPattern = /^Symbol\((.*)\)$/;
|
|
115
|
+
|
|
116
|
+
function parseSymbol(value: string) {
|
|
117
|
+
const match = value.match(symbolPattern);
|
|
118
|
+
if (!match) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return Symbol.for(match[1]);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function assertNotUniqueSymbol(symbol: Symbol) {
|
|
125
|
+
if (
|
|
126
|
+
symbol.description === undefined ||
|
|
127
|
+
symbol !== Symbol.for(symbol.description)
|
|
128
|
+
) {
|
|
129
|
+
throw new Error(`Cannot serialize unique symbol: ${symbol.description}`);
|
|
130
|
+
}
|
|
131
|
+
}
|