Skip to content

Commit

Permalink
Make it so type checker will reject getKnownStringKey automatically f…
Browse files Browse the repository at this point in the history
…or secret key types.

Part of #18.
  • Loading branch information
jkomoros committed Jun 29, 2023
1 parent 582bed9 commit ec37a34
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 12 deletions.
1 change: 0 additions & 1 deletion src/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ export class Environment {
}

getKnownStringKey(key : KnownEnvironmentStringKey | KnownEnvironmentStringKey[], defaultValue = '') : string {
//TODO: make it so get() will barf if trying to get one of hte secret keys without calling .getKnownSecretKey.
return String(this.get(key, defaultValue));
}

Expand Down
10 changes: 6 additions & 4 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,23 @@ export const knownSecretEnvironmentData = z.object({
}))
});

export const knownEnvironmentData = knownSecretEnvironmentData.extend({
const knownEnvironmentNonSecretData = z.object({
completion_model: z.optional(completionModelID),
mock: z.optional(z.boolean()),
verbose: z.optional(z.boolean())
});

type KnownEnvironmentData = z.infer<typeof knownEnvironmentData>;
const knownEnvironmentData = knownSecretEnvironmentData.merge(knownEnvironmentNonSecretData);

type KnownEnvironmentNonSecretData = z.infer<typeof knownEnvironmentNonSecretData>;

type KnownEnvironmentDataOfType<T, V> = {
[K in keyof T as T[K] extends V ? K : never]: T[K]
};

export type KnownEnvironmentStringKey = keyof KnownEnvironmentDataOfType<Required<KnownEnvironmentData>, string>;
export type KnownEnvironmentStringKey = keyof KnownEnvironmentDataOfType<Required<KnownEnvironmentNonSecretData>, string>;

export type KnownEnvironmentBooleanKey = keyof KnownEnvironmentDataOfType<Required<KnownEnvironmentData>, boolean>;
export type KnownEnvironmentBooleanKey = keyof KnownEnvironmentDataOfType<Required<KnownEnvironmentNonSecretData>, boolean>;

export const knownEnvironmentSecretKey = knownSecretEnvironmentData.keyof();

Expand Down
7 changes: 0 additions & 7 deletions test/base/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -318,13 +318,6 @@ describe('Garden smoke test', () => {
assert.deepStrictEqual(result, golden);
});

it ('testing secret key fails', async () => {
const garden = loadTestGarden();
assert.throws(() => {
garden.environment.getKnownStringKey('openai_api_key');
});
});

it ('testing secret key via secret works', async () => {
const garden = loadTestGarden();
assert.doesNotThrow(() => {
Expand Down

0 comments on commit ec37a34

Please sign in to comment.