Skip to content

Commit 971ce1a

Browse files
committed
feat: added explicit type override
1 parent f18af60 commit 971ce1a

File tree

6 files changed

+65
-36
lines changed

6 files changed

+65
-36
lines changed

packages/parameters/src/ssm/SSMProvider.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import type {
1616
import type {
1717
SSMProviderOptions,
1818
SSMGetOptions,
19-
SSMGetOptionsUnion,
2019
SSMGetOutput,
2120
SSMGetMultipleOptions,
2221
SSMGetMultipleOptionsUnion,
2322
SSMGetMultipleOutput,
23+
SSMGetParametersByNameOutput,
2424
SSMGetParametersByNameOutputInterface,
2525
SSMGetParametersByNameOptionsInterface,
2626
SSMSplitBatchAndDecryptParametersOutputType,
@@ -319,11 +319,11 @@ class SSMProvider extends BaseProvider {
319319
* @param {SSMGetOptions} options - Options to configure the provider
320320
* @see https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/
321321
*/
322-
public async get<O extends SSMGetOptionsUnion | undefined = undefined>(
322+
public async get<T = undefined, O extends SSMGetOptions | undefined = SSMGetOptions>(
323323
name: string,
324324
options?: O & SSMGetOptions
325-
): Promise<SSMGetOutput<O> | undefined> {
326-
return super.get(name, options) as Promise<SSMGetOutput<O> | undefined>;
325+
): Promise<SSMGetOutput<T, O> | undefined> {
326+
return super.get(name, options) as Promise<SSMGetOutput<T, O> | undefined>;
327327
}
328328

329329
/**
@@ -356,11 +356,11 @@ class SSMProvider extends BaseProvider {
356356
* @param {SSMGetMultipleOptions} options - Options to configure the retrieval
357357
* @see https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/
358358
*/
359-
public async getMultiple<O extends SSMGetMultipleOptionsUnion | undefined = undefined>(
359+
public async getMultiple<T = undefined, O extends SSMGetMultipleOptionsUnion | undefined = undefined>(
360360
path: string,
361361
options?: O & SSMGetMultipleOptions
362-
): Promise<SSMGetMultipleOutput<O> | undefined> {
363-
return super.getMultiple(path, options) as Promise<SSMGetMultipleOutput<O> | undefined>;
362+
): Promise<SSMGetMultipleOutput<T, O> | undefined> {
363+
return super.getMultiple(path, options) as Promise<SSMGetMultipleOutput<T, O> | undefined>;
364364
}
365365

366366
/**
@@ -413,10 +413,10 @@ class SSMProvider extends BaseProvider {
413413
* @param {SSMGetParametersByNameOptionsInterface} options - Options to configure the retrieval
414414
* @see https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/
415415
*/
416-
public async getParametersByName(
416+
public async getParametersByName<T = undefined>(
417417
parameters: Record<string, SSMGetParametersByNameOptionsInterface>,
418418
options?: SSMGetParametersByNameOptionsInterface
419-
): Promise<Record<string, unknown>> {
419+
): Promise<SSMGetParametersByNameOutput<T>> {
420420
const configs = { ...{
421421
decrypt: this.resolveDecryptionConfigValue({}) || false,
422422
maxAge: DEFAULT_MAX_AGE_SECS,
@@ -464,7 +464,7 @@ class SSMProvider extends BaseProvider {
464464
}
465465
}
466466

467-
return response;
467+
return response as unknown as Promise<SSMGetParametersByNameOutput<T>>;
468468
}
469469

470470
/**

packages/parameters/src/ssm/getParameter.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { SSMProvider, DEFAULT_PROVIDERS } from './SSMProvider';
22
import type {
33
SSMGetOptions,
4-
SSMGetOptionsUnion,
54
SSMGetOutput,
65
} from '../types/SSMProvider';
76

@@ -140,17 +139,17 @@ import type {
140139
* @param {SSMGetOptions} options - Options to configure the provider
141140
* @see https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/
142141
*/
143-
const getParameter = <O extends SSMGetOptionsUnion | undefined = undefined>(
142+
const getParameter = <T = undefined, O extends SSMGetOptions | undefined = SSMGetOptions>(
144143
name: string,
145144
options?: O & SSMGetOptions
146-
): Promise<SSMGetOutput<O> | undefined> => {
145+
): Promise<SSMGetOutput<T, O> | undefined> => {
147146
if (!DEFAULT_PROVIDERS.hasOwnProperty('ssm')) {
148147
DEFAULT_PROVIDERS.ssm = new SSMProvider();
149148
}
150149

151150
return (
152151
DEFAULT_PROVIDERS.ssm as SSMProvider
153-
).get(name, options) as Promise<SSMGetOutput<O> | undefined>;
152+
).get(name, options) as Promise<SSMGetOutput<T, O> | undefined>;
154153
};
155154

156155
export {

packages/parameters/src/ssm/getParameters.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,17 +141,17 @@ import type {
141141
* @param {SSMGetMultipleOptions} options - Options to configure the provider
142142
* @see https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/
143143
*/
144-
const getParameters = <O extends SSMGetMultipleOptionsUnion | undefined = undefined>(
144+
const getParameters = <T = undefined, O extends SSMGetMultipleOptionsUnion | undefined = SSMGetMultipleOptionsUnion>(
145145
path: string,
146146
options?: O & SSMGetMultipleOptions
147-
): Promise<SSMGetMultipleOutput<O> | undefined> => {
147+
): Promise<SSMGetMultipleOutput<T, O> | undefined> => {
148148
if (!DEFAULT_PROVIDERS.hasOwnProperty('ssm')) {
149149
DEFAULT_PROVIDERS.ssm = new SSMProvider();
150150
}
151151

152152
return (
153153
DEFAULT_PROVIDERS.ssm as SSMProvider
154-
).getMultiple(path, options) as Promise<SSMGetMultipleOutput<O> | undefined>;
154+
).getMultiple(path, options) as Promise<SSMGetMultipleOutput<T, O> | undefined>;
155155
};
156156

157157
export {

packages/parameters/src/ssm/getParametersByName.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { SSMProvider, DEFAULT_PROVIDERS } from './SSMProvider';
22
import type {
3-
SSMGetParametersByNameOptionsInterface
3+
SSMGetParametersByNameOptionsInterface,
4+
SSMGetParametersByNameOutput,
45
} from '../types/SSMProvider';
56

67
/**
@@ -160,15 +161,17 @@ import type {
160161
* @param {SSMGetParametersByNameOptionsInterface} options - Options to configure the provider
161162
* @see https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/
162163
*/
163-
const getParametersByName = (
164+
const getParametersByName = <T = undefined>(
164165
parameters: Record<string, SSMGetParametersByNameOptionsInterface>,
165166
options?: SSMGetParametersByNameOptionsInterface
166-
): Promise<Record<string, unknown> & { _errors?: string[] }> => {
167+
): Promise<SSMGetParametersByNameOutput<T>> => {
167168
if (!DEFAULT_PROVIDERS.hasOwnProperty('ssm')) {
168169
DEFAULT_PROVIDERS.ssm = new SSMProvider();
169170
}
170171

171-
return (DEFAULT_PROVIDERS.ssm as SSMProvider).getParametersByName(parameters, options);
172+
return (
173+
DEFAULT_PROVIDERS.ssm as SSMProvider
174+
).getParametersByName(parameters, options) as Promise<SSMGetParametersByNameOutput<T>>;
172175
};
173176

174177
export {

packages/parameters/src/types/BaseProvider.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ interface GetOptionsInterface {
2525
*/
2626
sdkOptions?: unknown
2727
/**
28-
* Transform to be applied, can be 'json', 'binary', or 'auto'.
28+
* Transform to be applied, can be `json` or `binary`.
2929
*/
30-
transform?: TransformOptions
30+
transform?: Omit<TransformOptions, 'auto'>
3131
}
3232

3333
/**
@@ -40,6 +40,10 @@ interface GetOptionsInterface {
4040
* @property {boolean} throwOnTransformError - Whether to throw an error if a value cannot be transformed.
4141
*/
4242
interface GetMultipleOptionsInterface extends GetOptionsInterface {
43+
/**
44+
* Transform to be applied, can be `json`, `binary`, or `auto`.
45+
*/
46+
transform?: TransformOptions
4347
/**
4448
* Whether to throw an error if a value cannot be transformed.
4549
*/

packages/parameters/src/types/SSMProvider.ts

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ interface SSMGetOptions extends GetOptionsInterface {
6363
* Additional options to pass to the AWS SDK v3 client. Supports all options from `GetParameterCommandInput`.
6464
*/
6565
sdkOptions?: Partial<GetParameterCommandInput>
66+
67+
transform?: Exclude<TransformOptions, 'auto'>
6668
}
6769

6870
interface SSMGetOptionsTransformJson extends SSMGetOptions {
@@ -77,14 +79,16 @@ interface SSMGetOptionsTransformNone extends SSMGetOptions {
7779
transform?: never
7880
}
7981

80-
type SSMGetOptionsUnion = SSMGetOptionsTransformJson | SSMGetOptionsTransformBinary | SSMGetOptionsTransformNone | undefined;
81-
82-
type SSMGetOutput<O = undefined> =
82+
/**
83+
* Generic output type for the SSMProvider get method.
84+
*/
85+
type SSMGetOutput<T = undefined, O = undefined> =
86+
undefined extends T ?
8387
undefined extends O ? string :
8488
O extends SSMGetOptionsTransformNone | SSMGetOptionsTransformBinary ? string :
85-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
86-
O extends SSMGetOptionsTransformJson ? Record<string, any> :
87-
never;
89+
O extends SSMGetOptionsTransformJson ? Record<string, unknown> :
90+
never
91+
: T;
8892

8993
/**
9094
* Options for the SSMProvider getMultiple method.
@@ -126,18 +130,32 @@ interface SSMGetMultipleOptionsTransformBinary extends SSMGetMultipleOptions {
126130
transform: 'binary'
127131
}
128132

133+
interface SSMGetMultipleOptionsTransformAuto extends SSMGetMultipleOptions {
134+
transform: 'auto'
135+
}
136+
129137
interface SSMGetMultipleOptionsTransformNone extends SSMGetMultipleOptions {
130138
transform?: never
131139
}
132140

133-
type SSMGetMultipleOptionsUnion = SSMGetMultipleOptionsTransformJson | SSMGetMultipleOptionsTransformBinary | SSMGetMultipleOptionsTransformNone | undefined;
141+
type SSMGetMultipleOptionsUnion =
142+
SSMGetMultipleOptionsTransformJson |
143+
SSMGetMultipleOptionsTransformBinary |
144+
SSMGetMultipleOptionsTransformAuto |
145+
SSMGetMultipleOptionsTransformNone |
146+
undefined;
134147

135-
type SSMGetMultipleOutput<O = undefined> =
148+
/**
149+
* Generic output type for the SSMProvider getMultiple method.
150+
*/
151+
type SSMGetMultipleOutput<T = undefined, O = undefined> =
152+
undefined extends T ?
136153
undefined extends O ? Record<string, string> :
137154
O extends SSMGetMultipleOptionsTransformNone | SSMGetMultipleOptionsTransformBinary ? Record<string, string> :
138-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
139-
O extends SSMGetMultipleOptionsTransformJson ? Record<string, Record<string, any>> :
140-
never;
155+
O extends SSMGetMultipleOptionsTransformAuto ? Record<string, unknown> :
156+
O extends SSMGetMultipleOptionsTransformJson ? Record<string, Record<string, unknown>> :
157+
never
158+
: Record<string, T>;
141159

142160
/**
143161
* Options for the SSMProvider getParametersByName method.
@@ -152,7 +170,7 @@ interface SSMGetParametersByNameOptionsInterface {
152170
maxAge?: number
153171
throwOnError?: boolean
154172
decrypt?: boolean
155-
transform?: TransformOptions
173+
transform?: Exclude<TransformOptions, 'auto'>
156174
}
157175

158176
/**
@@ -179,10 +197,14 @@ type SSMGetParametersByNameFromCacheOutputType = {
179197
toFetch: Record<string, SSMGetParametersByNameOptionsInterface>
180198
};
181199

200+
type SSMGetParametersByNameOutput<T = undefined> =
201+
undefined extends T ?
202+
Record<string, unknown> & { _errors?: string[] } :
203+
Record<string, T> & { _errors?: string[] };
204+
182205
export type {
183206
SSMProviderOptions,
184207
SSMGetOptions,
185-
SSMGetOptionsUnion,
186208
SSMGetOutput,
187209
SSMGetMultipleOptions,
188210
SSMGetMultipleOptionsUnion,
@@ -191,4 +213,5 @@ export type {
191213
SSMSplitBatchAndDecryptParametersOutputType,
192214
SSMGetParametersByNameOutputInterface,
193215
SSMGetParametersByNameFromCacheOutputType,
216+
SSMGetParametersByNameOutput,
194217
};

0 commit comments

Comments
 (0)