alchemy 0.85.0 → 0.85.2

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 (84) hide show
  1. package/bin/alchemy.js +32 -23
  2. package/lib/cloudflare/account-api-token.d.ts +5 -0
  3. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  4. package/lib/cloudflare/account-api-token.js +13 -2
  5. package/lib/cloudflare/account-api-token.js.map +1 -1
  6. package/lib/cloudflare/ai-crawler.d.ts +27 -0
  7. package/lib/cloudflare/ai-crawler.d.ts.map +1 -0
  8. package/lib/cloudflare/ai-crawler.js +75 -0
  9. package/lib/cloudflare/ai-crawler.js.map +1 -0
  10. package/lib/cloudflare/ai-search-token.d.ts +150 -0
  11. package/lib/cloudflare/ai-search-token.d.ts.map +1 -0
  12. package/lib/cloudflare/ai-search-token.js +171 -0
  13. package/lib/cloudflare/ai-search-token.js.map +1 -0
  14. package/lib/cloudflare/ai-search.d.ts +397 -0
  15. package/lib/cloudflare/ai-search.d.ts.map +1 -0
  16. package/lib/cloudflare/ai-search.js +307 -0
  17. package/lib/cloudflare/ai-search.js.map +1 -0
  18. package/lib/cloudflare/auth.d.ts +3 -2
  19. package/lib/cloudflare/auth.d.ts.map +1 -1
  20. package/lib/cloudflare/auth.js +17 -14
  21. package/lib/cloudflare/auth.js.map +1 -1
  22. package/lib/cloudflare/bucket-custom-domain.d.ts.map +1 -1
  23. package/lib/cloudflare/bucket-custom-domain.js +4 -2
  24. package/lib/cloudflare/bucket-custom-domain.js.map +1 -1
  25. package/lib/cloudflare/bucket.d.ts.map +1 -1
  26. package/lib/cloudflare/bucket.js +8 -2
  27. package/lib/cloudflare/bucket.js.map +1 -1
  28. package/lib/cloudflare/index.d.ts +3 -0
  29. package/lib/cloudflare/index.d.ts.map +1 -1
  30. package/lib/cloudflare/index.js +3 -0
  31. package/lib/cloudflare/index.js.map +1 -1
  32. package/lib/cloudflare/permission-groups.d.ts +5 -0
  33. package/lib/cloudflare/permission-groups.d.ts.map +1 -1
  34. package/lib/cloudflare/permission-groups.js +6 -0
  35. package/lib/cloudflare/permission-groups.js.map +1 -1
  36. package/lib/cloudflare/sveltekit/plugin.d.ts.map +1 -1
  37. package/lib/cloudflare/sveltekit/plugin.js +11 -5
  38. package/lib/cloudflare/sveltekit/plugin.js.map +1 -1
  39. package/lib/cloudflare/vite/vite.d.ts.map +1 -1
  40. package/lib/cloudflare/vite/vite.js +2 -1
  41. package/lib/cloudflare/vite/vite.js.map +1 -1
  42. package/lib/docker/api.d.ts +33 -2
  43. package/lib/docker/api.d.ts.map +1 -1
  44. package/lib/docker/api.js +8 -4
  45. package/lib/docker/api.js.map +1 -1
  46. package/lib/docker/container.d.ts +1 -1
  47. package/lib/docker/container.d.ts.map +1 -1
  48. package/lib/docker/container.js +244 -15
  49. package/lib/docker/container.js.map +1 -1
  50. package/lib/scope.d.ts +1 -1
  51. package/lib/scope.d.ts.map +1 -1
  52. package/lib/scope.js +10 -5
  53. package/lib/scope.js.map +1 -1
  54. package/lib/test/bun.d.ts +17 -0
  55. package/lib/test/bun.d.ts.map +1 -1
  56. package/lib/test/bun.js +2 -1
  57. package/lib/test/bun.js.map +1 -1
  58. package/lib/test/vitest.d.ts +17 -0
  59. package/lib/test/vitest.d.ts.map +1 -1
  60. package/lib/test/vitest.js +4 -1
  61. package/lib/test/vitest.js.map +1 -1
  62. package/lib/util/snake-to-camel.d.ts +21 -0
  63. package/lib/util/snake-to-camel.d.ts.map +1 -0
  64. package/lib/util/snake-to-camel.js +34 -0
  65. package/lib/util/snake-to-camel.js.map +1 -0
  66. package/package.json +1 -1
  67. package/src/cloudflare/account-api-token.ts +23 -6
  68. package/src/cloudflare/ai-crawler.ts +89 -0
  69. package/src/cloudflare/ai-search-token.ts +324 -0
  70. package/src/cloudflare/ai-search.ts +952 -0
  71. package/src/cloudflare/auth.ts +17 -14
  72. package/src/cloudflare/bucket-custom-domain.ts +4 -1
  73. package/src/cloudflare/bucket.ts +9 -2
  74. package/src/cloudflare/index.ts +3 -0
  75. package/src/cloudflare/permission-groups.ts +6 -0
  76. package/src/cloudflare/sveltekit/plugin.ts +17 -8
  77. package/src/cloudflare/vite/vite.ts +4 -2
  78. package/src/docker/api.ts +47 -4
  79. package/src/docker/container.ts +318 -18
  80. package/src/scope.ts +14 -5
  81. package/src/test/bun.ts +26 -1
  82. package/src/test/vitest.ts +34 -1
  83. package/src/util/snake-to-camel.ts +59 -0
  84. package/workers/tunnel-proxy.js +1 -1
package/src/test/bun.ts CHANGED
@@ -51,6 +51,29 @@ type test = {
51
51
  * @param condition If true, test will be skipped
52
52
  */
53
53
  skipIf(condition: boolean): test;
54
+ skip: {
55
+ /**
56
+ * Create a test with default options
57
+ * @param name Test name
58
+ * @param fn Test function
59
+ * @param timeout Optional timeout in milliseconds
60
+ */
61
+ (name: string, fn: (scope: Scope) => Promise<any>, timeout?: number): void;
62
+
63
+ /**
64
+ * Create a test with custom options
65
+ * @param name Test name
66
+ * @param options Test configuration options
67
+ * @param fn Test function
68
+ * @param timeout Optional timeout in milliseconds
69
+ */
70
+ (
71
+ name: string,
72
+ options: TestOptions,
73
+ fn: (scope: Scope) => Promise<any>,
74
+ timeout?: number,
75
+ ): void;
76
+ };
54
77
 
55
78
  beforeAll(fn: (scope: Scope) => Promise<void>, timeout?: number): void;
56
79
 
@@ -95,6 +118,8 @@ export function test(meta: ImportMeta, defaultOptions?: TestOptions): test {
95
118
  // Add skipIf functionality
96
119
  test.skipIf = it.skipIf.bind(it);
97
120
 
121
+ test.skip = it.skip.bind(it);
122
+
98
123
  // Create local test scope based on filename
99
124
  const scope = new Scope({
100
125
  parent: undefined,
@@ -132,7 +157,7 @@ export function test(meta: ImportMeta, defaultOptions?: TestOptions): test {
132
157
  const timeout =
133
158
  typeof args[args.length - 1] === "number"
134
159
  ? (args[args.length - 1] as number)
135
- : 120000;
160
+ : 150000;
136
161
  const spread = (obj: any) =>
137
162
  obj && typeof obj === "object"
138
163
  ? Object.fromEntries(
@@ -55,6 +55,29 @@ type test = {
55
55
  * @param condition If true, test will be skipped
56
56
  */
57
57
  skipIf(condition: boolean): test;
58
+ skip: {
59
+ /**
60
+ * Create a test with default options
61
+ * @param name Test name
62
+ * @param fn Test function
63
+ * @param timeout Optional timeout in milliseconds
64
+ */
65
+ (name: string, fn: (scope: Scope) => Promise<any>, timeout?: number): void;
66
+
67
+ /**
68
+ * Create a test with custom options
69
+ * @param name Test name
70
+ * @param options Test configuration options
71
+ * @param fn Test function
72
+ * @param timeout Optional timeout in milliseconds
73
+ */
74
+ (
75
+ name: string,
76
+ options: TestOptions,
77
+ fn: (scope: Scope) => Promise<any>,
78
+ timeout?: number,
79
+ ): void;
80
+ };
58
81
 
59
82
  beforeAll(fn: (scope: Scope) => Promise<void>, timeout?: number): void;
60
83
 
@@ -125,6 +148,16 @@ export function test(
125
148
  }
126
149
  return test;
127
150
  };
151
+ test.skip = (
152
+ ...args:
153
+ | [
154
+ name: string,
155
+ options: TestOptions,
156
+ fn: (scope: Scope) => Promise<void>,
157
+ ]
158
+ | [name: string, fn: (scope: Scope) => Promise<void>]
159
+ // @ts-expect-error
160
+ ) => it.skip(...args);
128
161
 
129
162
  const scope = new Scope({
130
163
  parent: undefined,
@@ -163,7 +196,7 @@ export function test(
163
196
  const timeout =
164
197
  typeof args[args.length - 1] === "number"
165
198
  ? (args[args.length - 1] as number)
166
- : 120000;
199
+ : 150000;
167
200
  const spread = (obj: any) =>
168
201
  obj && typeof obj === "object"
169
202
  ? Object.fromEntries(
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Convert a snake_case string to camelCase.
3
+ * @example "account_id" -> "accountId", "created_at" -> "createdAt"
4
+ */
5
+ export function snakeToCamelString(s: string): string {
6
+ return s.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
7
+ }
8
+
9
+ /**
10
+ * Recursively convert an object's keys from snake_case to camelCase.
11
+ * Arrays and nested objects are traversed; primitives, Date, and RegExp are returned as-is.
12
+ */
13
+ export function snakeToCamelObjectDeep<T>(obj: T): SnakeToCamel<T> {
14
+ if (obj === undefined || obj === null) {
15
+ return obj as SnakeToCamel<T>;
16
+ }
17
+ if (typeof obj !== "object") {
18
+ return obj as SnakeToCamel<T>;
19
+ }
20
+ if (obj instanceof RegExp || obj instanceof Date) {
21
+ return obj as SnakeToCamel<T>;
22
+ }
23
+ if (Array.isArray(obj)) {
24
+ return obj.map(snakeToCamelObjectDeep) as SnakeToCamel<T>;
25
+ }
26
+ return Object.fromEntries(
27
+ Object.entries(obj).map(([key, value]) => [
28
+ snakeToCamelString(key),
29
+ typeof value === "object" && value !== null && !Array.isArray(value)
30
+ ? snakeToCamelObjectDeep(value)
31
+ : Array.isArray(value)
32
+ ? value.map(snakeToCamelObjectDeep)
33
+ : value,
34
+ ]),
35
+ ) as SnakeToCamel<T>;
36
+ }
37
+
38
+ /**
39
+ * Convert a snake_case string to camelCase at the type level.
40
+ */
41
+ export type SnakeToCamelString<S extends string> =
42
+ S extends `${infer A}_${infer B}`
43
+ ? `${A}${Capitalize<SnakeToCamelString<B>>}`
44
+ : S;
45
+
46
+ /**
47
+ * Recursively convert an object type's keys from snake_case to camelCase.
48
+ */
49
+ export type SnakeToCamel<T> = T extends object
50
+ ? T extends Array<infer U>
51
+ ? Array<SnakeToCamel<U>>
52
+ : T extends Date | RegExp | Function
53
+ ? T
54
+ : {
55
+ [K in keyof T as K extends string
56
+ ? SnakeToCamelString<K>
57
+ : K]: SnakeToCamel<T[K]>;
58
+ }
59
+ : T;
@@ -83,7 +83,7 @@ const renderErrorHtml = (props) => `
83
83
  Alchemy</a>.</p>
84
84
  </div>
85
85
  <div class="bg-slate-200 px-5 py-3 flex flex-col w-full max-w-lg">
86
- <p class="text-sm text-slate-500">Alchemy 0.85.0</p>
86
+ <p class="text-sm text-slate-500">Alchemy 0.85.2</p>
87
87
  </div>
88
88
  </div>
89
89
  </body>