hanzio 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -4
- package/dist/api-wrapper/builders.d.ts +13 -2
- package/dist/api-wrapper/errors.d.ts +1 -0
- package/dist/api-wrapper/headers.d.ts +2 -1
- package/dist/api-wrapper/transport.d.ts +8 -5
- package/dist/api-wrapper/types.d.ts +1 -0
- package/dist/cache/index.d.ts +26 -0
- package/dist/secrets/core.d.ts +47 -0
- package/dist/secrets/deadline.d.ts +6 -0
- package/dist/secrets/environment.d.ts +9 -0
- package/dist/secrets/errors.d.ts +11 -0
- package/dist/secrets/index.d.ts +13 -25
- package/dist/secrets/infisical-cli.d.ts +6 -0
- package/dist/secrets/infisical-config.d.ts +17 -0
- package/dist/secrets/infisical-session.d.ts +4 -0
- package/dist/secrets/infisical.d.ts +8 -13
- package/dist/secrets/loaders.d.ts +5 -12
- package/dist/secrets/vite.d.ts +7 -3
- package/dist/secrets/worker-loader.d.ts +9 -0
- package/dist/secrets/worker.d.ts +3 -0
- package/dist/src/api-wrapper/index.js +152 -122
- package/dist/src/index.js +3173 -2713
- package/dist/src/jwt/index.js +2 -2
- package/dist/src/p-queue/index.js +3 -3
- package/dist/src/secrets/index.js +670 -402
- package/dist/src/secrets/infisical.js +451 -168
- package/dist/src/secrets/loaders.js +467 -174
- package/dist/src/secrets/vite.js +33 -11
- package/dist/src/secrets/worker.js +275 -0
- package/dist/src/sitemap/index.js +1 -1
- package/dist/src/zod/index.js +7 -7
- package/dist/typedswitch/index.d.ts +9 -5
- package/package.json +12 -3
- package/src/api-wrapper/builders.ts +68 -43
- package/src/api-wrapper/create-client.ts +82 -62
- package/src/api-wrapper/errors.ts +10 -0
- package/src/api-wrapper/headers.ts +14 -1
- package/src/api-wrapper/redaction.ts +1 -0
- package/src/api-wrapper/transport.ts +34 -38
- package/src/api-wrapper/types.ts +1 -0
- package/src/cache/index.ts +228 -61
- package/src/secrets/core.ts +348 -0
- package/src/secrets/deadline.ts +69 -0
- package/src/secrets/environment.ts +69 -0
- package/src/secrets/errors.ts +29 -0
- package/src/secrets/index.ts +79 -210
- package/src/secrets/infisical-cli.ts +99 -0
- package/src/secrets/infisical-config.ts +70 -0
- package/src/secrets/infisical-session.ts +42 -0
- package/src/secrets/infisical.ts +214 -66
- package/src/secrets/loaders.ts +24 -48
- package/src/secrets/vite.ts +44 -15
- package/src/secrets/worker-loader.ts +56 -0
- package/src/secrets/worker.ts +4 -0
- package/src/typedswitch/index.ts +80 -69
package/src/typedswitch/index.ts
CHANGED
|
@@ -74,15 +74,27 @@ type RawHandlerReturnType<T> = T extends (...args: any[]) => infer R ? R : never
|
|
|
74
74
|
|
|
75
75
|
/** Get union of all raw return types from a cases object's values */
|
|
76
76
|
type RawCasesReturnType<Cases> = {
|
|
77
|
-
[K in keyof Cases]: Cases[K]
|
|
77
|
+
[K in keyof Cases]: RawHandlerReturnType<Cases[K]>
|
|
78
|
+
}[keyof Cases]
|
|
79
|
+
|
|
80
|
+
/** Only required, defined handlers guarantee that a case is handled. */
|
|
81
|
+
type HandledCaseKeys<Cases> = {
|
|
82
|
+
// biome-ignore lint/complexity/noBannedTypes: Empty-object assignability detects optional keys and index signatures.
|
|
83
|
+
[K in keyof Cases]-?: {} extends Pick<Cases, K>
|
|
78
84
|
? never
|
|
79
|
-
:
|
|
85
|
+
: undefined extends Cases[K]
|
|
86
|
+
? never
|
|
87
|
+
: K
|
|
80
88
|
}[keyof Cases]
|
|
81
89
|
|
|
82
90
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
83
91
|
// String input mode types
|
|
84
92
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
85
93
|
|
|
94
|
+
// The exported case-map types below are annotation helpers for consumers who
|
|
95
|
+
// want to type reusable case maps. The typedSwitch overloads infer their own
|
|
96
|
+
// shapes and do not depend on these types.
|
|
97
|
+
|
|
86
98
|
/** Cases for string input - all cases required */
|
|
87
99
|
export type StringSwitchCases<T extends string, R> = {
|
|
88
100
|
[K in T]: (value: K) => R | Promise<R>
|
|
@@ -118,67 +130,6 @@ export type PartialObjectSwitchCases<
|
|
|
118
130
|
type Handler = (value: unknown) => unknown
|
|
119
131
|
type CasesRecord = Record<string, Handler | undefined>
|
|
120
132
|
|
|
121
|
-
function runSwitch(
|
|
122
|
-
value: string | Record<string, unknown>,
|
|
123
|
-
keyOrCases: string | CasesRecord,
|
|
124
|
-
casesOrDefault?: CasesRecord | Handler,
|
|
125
|
-
defaultCase?: Handler
|
|
126
|
-
): unknown {
|
|
127
|
-
let key: string
|
|
128
|
-
let cases: CasesRecord
|
|
129
|
-
let defaultHandler: Handler | undefined
|
|
130
|
-
let discriminantKey: string | undefined
|
|
131
|
-
|
|
132
|
-
if (typeof value === 'string') {
|
|
133
|
-
// String input: typedSwitch(string, cases, default?)
|
|
134
|
-
key = value
|
|
135
|
-
cases = keyOrCases as CasesRecord
|
|
136
|
-
defaultHandler = casesOrDefault as Handler | undefined
|
|
137
|
-
} else {
|
|
138
|
-
// Object input: typedSwitch(obj, key, cases, default?)
|
|
139
|
-
if (typeof keyOrCases !== 'string') {
|
|
140
|
-
throw new Error(
|
|
141
|
-
'Invalid typedSwitch call: object mode requires a string discriminant key'
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
discriminantKey = keyOrCases
|
|
146
|
-
const discriminantValue = value[discriminantKey]
|
|
147
|
-
if (typeof discriminantValue !== 'string') {
|
|
148
|
-
throw new Error(
|
|
149
|
-
`Invalid discriminant value for key "${discriminantKey}": expected string, received ${typeof discriminantValue}`
|
|
150
|
-
)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
key = discriminantValue
|
|
154
|
-
cases = casesOrDefault as CasesRecord
|
|
155
|
-
defaultHandler = defaultCase
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const handler = cases[key]
|
|
159
|
-
|
|
160
|
-
if (handler) {
|
|
161
|
-
return handler(value)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (defaultHandler) {
|
|
165
|
-
return defaultHandler(value)
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const availableCases = Object.keys(cases).join(', ')
|
|
169
|
-
const availableCasesSuffix =
|
|
170
|
-
availableCases.length > 0
|
|
171
|
-
? ` Available cases: ${availableCases}`
|
|
172
|
-
: ' Available cases: (none)'
|
|
173
|
-
const contextSuffix = discriminantKey
|
|
174
|
-
? ` (discriminant key: "${discriminantKey}")`
|
|
175
|
-
: ''
|
|
176
|
-
|
|
177
|
-
throw new Error(
|
|
178
|
-
`Unhandled case: ${key}${contextSuffix}.${availableCasesSuffix}`
|
|
179
|
-
)
|
|
180
|
-
}
|
|
181
|
-
|
|
182
133
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
183
134
|
// Function overloads
|
|
184
135
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -190,10 +141,11 @@ export function typedSwitch<
|
|
|
190
141
|
>(value: T, cases: Cases): RawCasesReturnType<Cases>
|
|
191
142
|
|
|
192
143
|
// String input - partial cases allowed (with default)
|
|
144
|
+
// The default handler only receives the cases not covered by `cases`.
|
|
193
145
|
export function typedSwitch<
|
|
194
146
|
T extends string,
|
|
195
147
|
Cases extends { [K in T]?: (value: K) => unknown },
|
|
196
|
-
DefaultCase extends (value: T) => unknown
|
|
148
|
+
DefaultCase extends (value: Exclude<T, HandledCaseKeys<Cases>>) => unknown
|
|
197
149
|
>(
|
|
198
150
|
value: T,
|
|
199
151
|
cases: Cases,
|
|
@@ -202,19 +154,22 @@ export function typedSwitch<
|
|
|
202
154
|
|
|
203
155
|
// Object input with key - all cases required (no default)
|
|
204
156
|
export function typedSwitch<
|
|
205
|
-
T extends
|
|
157
|
+
T extends object,
|
|
206
158
|
K extends keyof T,
|
|
207
159
|
TKey extends T[K] & string,
|
|
208
160
|
Cases extends { [V in TKey]: (value: Extract<T, Record<K, V>>) => unknown }
|
|
209
161
|
>(value: T, key: K, cases: Cases): RawCasesReturnType<Cases>
|
|
210
162
|
|
|
211
163
|
// Object input with key - partial cases allowed (with default)
|
|
164
|
+
// The default handler only receives the union members not covered by `cases`.
|
|
212
165
|
export function typedSwitch<
|
|
213
|
-
T extends
|
|
166
|
+
T extends object,
|
|
214
167
|
K extends keyof T,
|
|
215
168
|
TKey extends T[K] & string,
|
|
216
169
|
Cases extends { [V in TKey]?: (value: Extract<T, Record<K, V>>) => unknown },
|
|
217
|
-
DefaultCase extends (
|
|
170
|
+
DefaultCase extends (
|
|
171
|
+
value: Exclude<T, Record<K, HandledCaseKeys<Cases> & string>>
|
|
172
|
+
) => unknown
|
|
218
173
|
>(
|
|
219
174
|
value: T,
|
|
220
175
|
key: K,
|
|
@@ -300,10 +255,66 @@ export function typedSwitch<
|
|
|
300
255
|
|
|
301
256
|
// Implementation
|
|
302
257
|
export function typedSwitch(
|
|
303
|
-
value: string |
|
|
258
|
+
value: string | object,
|
|
304
259
|
keyOrCases: string | CasesRecord,
|
|
305
260
|
casesOrDefault?: CasesRecord | Handler,
|
|
306
261
|
defaultCase?: Handler
|
|
307
262
|
): unknown {
|
|
308
|
-
|
|
263
|
+
let key: string
|
|
264
|
+
let cases: CasesRecord
|
|
265
|
+
let defaultHandler: Handler | undefined
|
|
266
|
+
let discriminantKey: string | undefined
|
|
267
|
+
|
|
268
|
+
if (typeof value === 'string') {
|
|
269
|
+
// String input: typedSwitch(string, cases, default?)
|
|
270
|
+
key = value
|
|
271
|
+
cases = keyOrCases as CasesRecord
|
|
272
|
+
defaultHandler = casesOrDefault as Handler | undefined
|
|
273
|
+
} else {
|
|
274
|
+
// Object input: typedSwitch(obj, key, cases, default?)
|
|
275
|
+
if (typeof keyOrCases !== 'string') {
|
|
276
|
+
throw new Error(
|
|
277
|
+
'Invalid typedSwitch call: object mode requires a string discriminant key'
|
|
278
|
+
)
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
discriminantKey = keyOrCases
|
|
282
|
+
const discriminantValue = (value as Record<string, unknown>)[
|
|
283
|
+
discriminantKey
|
|
284
|
+
]
|
|
285
|
+
if (typeof discriminantValue !== 'string') {
|
|
286
|
+
throw new Error(
|
|
287
|
+
`Invalid discriminant value for key "${discriminantKey}": expected string, received ${typeof discriminantValue}`
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
key = discriminantValue
|
|
292
|
+
cases = casesOrDefault as CasesRecord
|
|
293
|
+
defaultHandler = defaultCase
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Only own properties count as cases - a key like 'toString' must not
|
|
297
|
+
// resolve to an inherited Object.prototype method.
|
|
298
|
+
const handler = Object.hasOwn(cases, key) ? cases[key] : undefined
|
|
299
|
+
|
|
300
|
+
if (handler) {
|
|
301
|
+
return handler(value)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (defaultHandler) {
|
|
305
|
+
return defaultHandler(value)
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const availableCases = Object.keys(cases).join(', ')
|
|
309
|
+
const availableCasesSuffix =
|
|
310
|
+
availableCases.length > 0
|
|
311
|
+
? ` Available cases: ${availableCases}`
|
|
312
|
+
: ' Available cases: (none)'
|
|
313
|
+
const contextSuffix = discriminantKey
|
|
314
|
+
? ` (discriminant key: "${discriminantKey}")`
|
|
315
|
+
: ''
|
|
316
|
+
|
|
317
|
+
throw new Error(
|
|
318
|
+
`Unhandled case: ${key}${contextSuffix}.${availableCasesSuffix}`
|
|
319
|
+
)
|
|
309
320
|
}
|