@openstax/ts-utils 1.29.0 → 1.30.1

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 (121) hide show
  1. package/dist/cjs/assertions/index.d.ts +7 -3
  2. package/dist/cjs/config/envConfig.d.ts +1 -1
  3. package/dist/cjs/config/index.d.ts +7 -7
  4. package/dist/cjs/config/resolveConfigValue.d.ts +2 -2
  5. package/dist/cjs/fetch/index.d.ts +16 -16
  6. package/dist/cjs/fetch/index.js +1 -1
  7. package/dist/cjs/middleware/apiErrorHandler.d.ts +3 -3
  8. package/dist/cjs/middleware/apiSlowResponseMiddleware.d.ts +1 -1
  9. package/dist/cjs/middleware/index.d.ts +7 -7
  10. package/dist/cjs/middleware/lambdaCorsResponseMiddleware.d.ts +1 -1
  11. package/dist/cjs/misc/hashValue.d.ts +2 -2
  12. package/dist/cjs/misc/helpers.d.ts +11 -11
  13. package/dist/cjs/misc/merge.d.ts +2 -2
  14. package/dist/cjs/misc/partitionSequence.d.ts +2 -2
  15. package/dist/cjs/pagination/index.d.ts +1 -1
  16. package/dist/cjs/routing/index.d.ts +30 -30
  17. package/dist/cjs/routing/index.js +18 -8
  18. package/dist/cjs/routing/validators/zod.d.ts +1 -1
  19. package/dist/cjs/routing/validators/zod.js +3 -1
  20. package/dist/cjs/services/accountsGateway/index.d.ts +17 -20
  21. package/dist/cjs/services/apiGateway/index.d.ts +10 -10
  22. package/dist/cjs/services/apiGateway/index.js +17 -7
  23. package/dist/cjs/services/authProvider/browser.d.ts +5 -7
  24. package/dist/cjs/services/authProvider/decryption.d.ts +3 -7
  25. package/dist/cjs/services/authProvider/index.d.ts +8 -8
  26. package/dist/cjs/services/authProvider/subrequest.d.ts +2 -5
  27. package/dist/cjs/services/authProvider/utils/decryptAndVerify.d.ts +1 -2
  28. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.d.ts +4 -4
  29. package/dist/cjs/services/authProvider/utils/embeddedAuthProvider.js +1 -1
  30. package/dist/cjs/services/authProvider/utils/userRoleValidator.d.ts +2 -2
  31. package/dist/cjs/services/documentStore/index.d.ts +7 -7
  32. package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +7 -9
  33. package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +7 -9
  34. package/dist/cjs/services/documentStore/unversioned/file-system.js +17 -7
  35. package/dist/cjs/services/documentStore/unversioned/index.d.ts +1 -1
  36. package/dist/cjs/services/documentStore/versioned/dynamodb.d.ts +7 -9
  37. package/dist/cjs/services/documentStore/versioned/file-system.d.ts +6 -8
  38. package/dist/cjs/services/documentStore/versioned/index.d.ts +4 -4
  39. package/dist/cjs/services/exercisesGateway/index.d.ts +9 -13
  40. package/dist/cjs/services/exercisesGateway/index.js +17 -7
  41. package/dist/cjs/services/fileServer/index.d.ts +13 -3
  42. package/dist/cjs/services/fileServer/localFileServer.d.ts +2 -6
  43. package/dist/cjs/services/fileServer/localFileServer.js +47 -0
  44. package/dist/cjs/services/fileServer/s3FileServer.d.ts +2 -5
  45. package/dist/cjs/services/fileServer/s3FileServer.js +70 -0
  46. package/dist/cjs/services/launchParams/signer.d.ts +4 -9
  47. package/dist/cjs/services/launchParams/verifier.d.ts +4 -7
  48. package/dist/cjs/services/launchParams/verifier.js +17 -7
  49. package/dist/cjs/services/logger/index.d.ts +2 -2
  50. package/dist/cjs/services/logger/index.js +1 -1
  51. package/dist/cjs/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  52. package/dist/cjs/services/lrsGateway/attempt-utils.d.ts +34 -34
  53. package/dist/cjs/services/lrsGateway/file-system.d.ts +2 -4
  54. package/dist/cjs/services/lrsGateway/file-system.js +17 -7
  55. package/dist/cjs/services/lrsGateway/index.d.ts +29 -32
  56. package/dist/cjs/services/lrsGateway/index.js +17 -7
  57. package/dist/cjs/services/lrsGateway/xapiUtils.d.ts +23 -23
  58. package/dist/cjs/services/postgresConnection/index.d.ts +3 -10
  59. package/dist/cjs/services/searchProvider/index.d.ts +7 -7
  60. package/dist/cjs/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  61. package/dist/cjs/services/searchProvider/openSearch.d.ts +3 -6
  62. package/dist/cjs/services/searchProvider/openSearch.js +7 -3
  63. package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
  64. package/dist/cjs/types.d.ts +5 -5
  65. package/dist/esm/assertions/index.d.ts +7 -3
  66. package/dist/esm/config/envConfig.d.ts +1 -1
  67. package/dist/esm/config/index.d.ts +7 -7
  68. package/dist/esm/config/resolveConfigValue.d.ts +2 -2
  69. package/dist/esm/fetch/index.d.ts +16 -16
  70. package/dist/esm/middleware/apiErrorHandler.d.ts +3 -3
  71. package/dist/esm/middleware/apiSlowResponseMiddleware.d.ts +1 -1
  72. package/dist/esm/middleware/index.d.ts +7 -7
  73. package/dist/esm/middleware/lambdaCorsResponseMiddleware.d.ts +1 -1
  74. package/dist/esm/misc/hashValue.d.ts +2 -2
  75. package/dist/esm/misc/helpers.d.ts +11 -11
  76. package/dist/esm/misc/merge.d.ts +2 -2
  77. package/dist/esm/misc/partitionSequence.d.ts +2 -2
  78. package/dist/esm/pagination/index.d.ts +1 -1
  79. package/dist/esm/routing/index.d.ts +30 -30
  80. package/dist/esm/routing/validators/zod.d.ts +1 -1
  81. package/dist/esm/routing/validators/zod.js +3 -1
  82. package/dist/esm/services/accountsGateway/index.d.ts +17 -20
  83. package/dist/esm/services/apiGateway/index.d.ts +10 -10
  84. package/dist/esm/services/authProvider/browser.d.ts +5 -7
  85. package/dist/esm/services/authProvider/decryption.d.ts +3 -7
  86. package/dist/esm/services/authProvider/index.d.ts +8 -8
  87. package/dist/esm/services/authProvider/subrequest.d.ts +2 -5
  88. package/dist/esm/services/authProvider/utils/decryptAndVerify.d.ts +1 -2
  89. package/dist/esm/services/authProvider/utils/embeddedAuthProvider.d.ts +4 -4
  90. package/dist/esm/services/authProvider/utils/userRoleValidator.d.ts +2 -2
  91. package/dist/esm/services/documentStore/index.d.ts +7 -7
  92. package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +7 -9
  93. package/dist/esm/services/documentStore/unversioned/file-system.d.ts +7 -9
  94. package/dist/esm/services/documentStore/unversioned/index.d.ts +1 -1
  95. package/dist/esm/services/documentStore/versioned/dynamodb.d.ts +7 -9
  96. package/dist/esm/services/documentStore/versioned/file-system.d.ts +6 -8
  97. package/dist/esm/services/documentStore/versioned/index.d.ts +4 -4
  98. package/dist/esm/services/exercisesGateway/index.d.ts +9 -13
  99. package/dist/esm/services/fileServer/index.d.ts +13 -3
  100. package/dist/esm/services/fileServer/localFileServer.d.ts +2 -6
  101. package/dist/esm/services/fileServer/localFileServer.js +47 -0
  102. package/dist/esm/services/fileServer/s3FileServer.d.ts +2 -5
  103. package/dist/esm/services/fileServer/s3FileServer.js +68 -1
  104. package/dist/esm/services/launchParams/signer.d.ts +4 -9
  105. package/dist/esm/services/launchParams/verifier.d.ts +4 -7
  106. package/dist/esm/services/logger/index.d.ts +2 -2
  107. package/dist/esm/services/lrsGateway/addStatementDefaultFields.d.ts +1 -1
  108. package/dist/esm/services/lrsGateway/attempt-utils.d.ts +34 -34
  109. package/dist/esm/services/lrsGateway/file-system.d.ts +2 -4
  110. package/dist/esm/services/lrsGateway/index.d.ts +29 -32
  111. package/dist/esm/services/lrsGateway/xapiUtils.d.ts +23 -23
  112. package/dist/esm/services/postgresConnection/index.d.ts +3 -10
  113. package/dist/esm/services/searchProvider/index.d.ts +7 -7
  114. package/dist/esm/services/searchProvider/memorySearchTheBadWay.d.ts +1 -1
  115. package/dist/esm/services/searchProvider/openSearch.d.ts +3 -6
  116. package/dist/esm/services/searchProvider/openSearch.js +7 -3
  117. package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
  118. package/dist/esm/types.d.ts +5 -5
  119. package/package.json +10 -9
  120. package/script/bin/.init-params-script.bash.swp +0 -0
  121. package/script/bin/copy-from-template.bash +6 -1
@@ -6,26 +6,26 @@
6
6
  *
7
7
  * There may be a better way to do this; `T1 extends T2` doesn't work
8
8
  */
9
- export declare type TupleExtends<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail] ? T2 extends [infer T2Head, ...infer T2Tail] ? T1Head extends T2Head ? TupleExtends<T1Tail, T2Tail> extends 'yes' ? 'yes' : 'no' : 'no' : T2 extends [] ? 'yes' : 'no' : T1 extends [] ? T2 extends [] ? 'yes' : 'no' : 'no';
9
+ export type TupleExtends<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail] ? T2 extends [infer T2Head, ...infer T2Tail] ? T1Head extends T2Head ? TupleExtends<T1Tail, T2Tail> extends 'yes' ? 'yes' : 'no' : 'no' : T2 extends [] ? 'yes' : 'no' : T1 extends [] ? T2 extends [] ? 'yes' : 'no' : 'no';
10
10
  /**
11
11
  * unions each member of the tuple
12
12
  */
13
- export declare type TupleZip<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail] ? T2 extends [infer T2Head, ...infer T2Tail] ? [T1Head & T2Head, ...TupleZip<T1Tail, T2Tail>] : T2 extends [] ? T1 : never : T1 extends [] ? T2 extends any[] ? T2 : never : never;
13
+ export type TupleZip<T1, T2> = T1 extends [infer T1Head, ...infer T1Tail] ? T2 extends [infer T2Head, ...infer T2Tail] ? [T1Head & T2Head, ...TupleZip<T1Tail, T2Tail>] : T2 extends [] ? T1 : never : T1 extends [] ? T2 extends any[] ? T2 : never : never;
14
14
  /**
15
15
  * If `R` is `Promise<I>`, returns `I`, otherwise returns `R`
16
16
  * @deprecated use TypeScript builtin Awaited instead:
17
17
  * @see https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-5.html#the-awaited-type-and-promise-improvements
18
18
  */
19
- export declare type UnwrapPromise<R> = R extends Promise<infer I> ? I : R;
19
+ export type UnwrapPromise<R> = R extends Promise<infer I> ? I : R;
20
20
  /**
21
21
  * turns `thing | thing2` into `thing & thing2`
22
22
  * @see https://stackoverflow.com/a/50375286/14809536
23
23
  */
24
- export declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
24
+ export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
25
25
  /**
26
26
  * make certain fields required
27
27
  * @see https://stackoverflow.com/a/69328045/14809536
28
28
  */
29
- export declare type WithRequired<T, K extends keyof T> = T & {
29
+ export type WithRequired<T, K extends keyof T> = T & {
30
30
  [P in K]-?: T[P];
31
31
  };
@@ -1,4 +1,4 @@
1
- export declare type AssertionFailed = string | Error | (() => never) | undefined;
1
+ export type AssertionFailed = string | Error | (() => never) | undefined;
2
2
  export declare const doThrow: (failed: AssertionFailed) => never;
3
3
  /**
4
4
  * Asserts that the given value is true.
@@ -70,7 +70,9 @@ export declare const notNaN: <T>(thing: T, failed?: AssertionFailed) => T;
70
70
  * @example const definitelySyntaxError = assertInstanceOf(error, SyntaxError, new Error('argument was not a SyntaxError'));
71
71
  * @returns the value that was asserted
72
72
  */
73
- export declare const assertInstanceOf: <T>(thing: any, constructable: Function & (new (...args: any[]) => T), failed?: AssertionFailed) => T;
73
+ export declare const assertInstanceOf: <T>(thing: any, constructable: Function & {
74
+ new (...args: any[]): T;
75
+ }, failed?: AssertionFailed) => T;
74
76
  /**
75
77
  * Asserts that the error in the first argument is an instance of the error given as the
76
78
  * second argument
@@ -82,4 +84,6 @@ export declare const assertInstanceOf: <T>(thing: any, constructable: Function &
82
84
  * @throws the original error if the check fails
83
85
  * @see assertInstanceOf
84
86
  */
85
- export declare const assertErrorInstanceOf: <T extends Error>(thing: unknown, constructable: Function & (new (...args: any[]) => T)) => T;
87
+ export declare const assertErrorInstanceOf: <T extends Error>(thing: unknown, constructable: Function & {
88
+ new (...args: any[]): T;
89
+ }) => T;
@@ -21,4 +21,4 @@ export declare const ENV_BUILD_CONFIGS: string[];
21
21
  *
22
22
  * @example const config = { configValue: envConfig('environment_variable_name') };
23
23
  */
24
- export declare const envConfig: (name: string, type?: "build" | "runtime" | undefined, defaultValue?: ConfigValueProvider<string> | undefined) => ConfigValueProvider<string>;
24
+ export declare const envConfig: (name: string, type?: "build" | "runtime", defaultValue?: ConfigValueProvider<string>) => ConfigValueProvider<string>;
@@ -1,29 +1,29 @@
1
1
  /**
2
2
  * A simple type alias for a string that represents a configuration value. Currently only string values are supported to maintain compatibility with environment variables, but this type is future proofing against allowing other types like `number` as possible config values.
3
3
  */
4
- export declare type ConfigValue = string;
4
+ export type ConfigValue = string;
5
5
  /**
6
6
  * A configuration object that may contain nested configuration objects or configuration values.
7
7
  */
8
- export declare type Config = {
8
+ export type Config = {
9
9
  [key: string]: Config | ConfigValue;
10
10
  };
11
11
  /**
12
12
  * Either a function that returns a `ConfigValue` or a `Promise` that resolves to a `ConfigValue`,
13
13
  * or just a `ConfigValue`.
14
14
  */
15
- export declare type ConfigValueProvider<V extends ConfigValue = ConfigValue> = (() => Promise<V> | V) | V;
15
+ export type ConfigValueProvider<V extends ConfigValue = ConfigValue> = (() => Promise<V> | V) | V;
16
16
  /**
17
17
  * A configuration object that may contain nested configuration objects or configuration value providers.
18
18
  */
19
- export declare type ConfigProvider = {
19
+ export type ConfigProvider = {
20
20
  [key: string]: ConfigProvider | ConfigValueProvider;
21
21
  };
22
22
  /**
23
23
  * Conditional type that resolves to the type of configuration object for the given configuration
24
24
  * provider. Also resolves to a config value type if the given type is a config value.
25
25
  */
26
- export declare type ConfigForConfigProvider<T> = T extends ConfigValue ? T : T extends ConfigProvider ? {
26
+ export type ConfigForConfigProvider<T> = T extends ConfigValue ? T : T extends ConfigProvider ? {
27
27
  [key in keyof T]: ConfigForConfigProvider<T[key]>;
28
28
  } : T extends ConfigValueProvider<infer R> ? R : never;
29
29
  /**
@@ -31,7 +31,7 @@ export declare type ConfigForConfigProvider<T> = T extends ConfigValue ? T : T e
31
31
  * type (`ConfigValue` or `Config`). The resulting type is either a `ConfigValueProvider` or
32
32
  * a `ConfigProvider`.
33
33
  */
34
- export declare type ConfigProviderForConfig<T> = T extends ConfigValue ? ConfigValueProvider<T> : T extends Config ? {
34
+ export type ConfigProviderForConfig<T> = T extends ConfigValue ? ConfigValueProvider<T> : T extends Config ? {
35
35
  [key in keyof T]: ConfigProviderForConfig<T[key]>;
36
36
  } : never;
37
37
  export * from './resolveConfigValue';
@@ -41,7 +41,7 @@ export * from './resolveConfigValue';
41
41
  *
42
42
  * @example const config = { configValue: stubConfig('just-a-string') };
43
43
  */
44
- export declare const stubConfig: <V extends string>(configValue: V) => ConfigValueProvider<V>;
44
+ export declare const stubConfig: <V extends ConfigValue>(configValue: V) => ConfigValueProvider<V>;
45
45
  export * from './envConfig';
46
46
  export * from './replaceConfig';
47
47
  export * from './awsParameterConfig';
@@ -1,5 +1,5 @@
1
- import type { ConfigValueProvider } from '.';
1
+ import type { ConfigValue, ConfigValueProvider } from '.';
2
2
  /**
3
3
  * resolves a config value into a string, to be used inside of things that are provided configurations
4
4
  */
5
- export declare const resolveConfigValue: <V extends string>(provider: ConfigValueProvider<V>) => Promise<V>;
5
+ export declare const resolveConfigValue: <V extends ConfigValue>(provider: ConfigValueProvider<V>) => Promise<V>;
@@ -5,44 +5,44 @@ export declare enum FetchStateType {
5
5
  LOADING = "loading",
6
6
  IDLE = "idle"
7
7
  }
8
- export declare type FetchState<D, E> = FetchStateLoading<D> | FetchStateError<D, E> | FetchStateSuccess<D> | FetchStateIdle;
9
- declare type FetchStateLoading<D> = {
8
+ export type FetchState<D, E> = FetchStateLoading<D> | FetchStateError<D, E> | FetchStateSuccess<D> | FetchStateIdle;
9
+ type FetchStateLoading<D> = {
10
10
  type: FetchStateType.LOADING;
11
11
  data?: D;
12
12
  };
13
- declare type FetchStateError<D, E> = {
13
+ type FetchStateError<D, E> = {
14
14
  type: FetchStateType.ERROR;
15
15
  data?: D;
16
16
  error: E;
17
17
  };
18
- declare type FetchStateSuccess<D> = {
18
+ type FetchStateSuccess<D> = {
19
19
  type: FetchStateType.SUCCESS;
20
20
  data: D;
21
21
  };
22
- declare type FetchStateIdle = {
22
+ type FetchStateIdle = {
23
23
  type: FetchStateType.IDLE;
24
24
  };
25
- export declare const fetchLoading: <D, E>(previous?: FetchState<D, E> | undefined) => FetchStateLoading<D>;
26
- export declare const fetchError: <D, E>(error: E, previous?: FetchState<D, E> | undefined) => FetchStateError<D, E>;
25
+ export declare const fetchLoading: <D, E>(previous?: FetchState<D, E>) => FetchStateLoading<D>;
26
+ export declare const fetchError: <D, E>(error: E, previous?: FetchState<D, E>) => FetchStateError<D, E>;
27
27
  export declare const fetchSuccess: <D>(data: D) => FetchStateSuccess<D>;
28
28
  export declare const fetchIdle: () => FetchStateIdle;
29
29
  export declare const stateHasData: <D, E>(state: {
30
30
  type: FetchStateType;
31
- data?: D | undefined;
32
- error?: E | undefined;
31
+ data?: D;
32
+ error?: E;
33
33
  }) => state is {
34
34
  type: FetchStateType;
35
35
  data: D;
36
36
  };
37
37
  export declare const stateHasError: <D, E>(state: {
38
38
  type: FetchStateType;
39
- data?: D | undefined;
40
- error?: E | undefined;
39
+ data?: D;
40
+ error?: E;
41
41
  }) => state is {
42
42
  type: FetchStateType;
43
43
  error: E;
44
44
  };
45
- export declare type FetchConfig = {
45
+ export type FetchConfig = {
46
46
  credentials?: 'include' | 'omit' | 'same-origin';
47
47
  method?: METHOD;
48
48
  body?: string;
@@ -50,15 +50,15 @@ export declare type FetchConfig = {
50
50
  [key: string]: string;
51
51
  };
52
52
  };
53
- declare type Headers = {
53
+ type Headers = {
54
54
  get: (name: string) => string | null;
55
55
  };
56
- export declare type Response = {
56
+ export type Response = {
57
57
  status: number;
58
58
  headers: Headers;
59
59
  json: () => Promise<any>;
60
60
  text: () => Promise<string>;
61
61
  };
62
- export declare type GenericFetch<C extends FetchConfig = FetchConfig, R extends Response = Response> = (url: string, fetchConfig?: C) => Promise<R>;
63
- export declare type ConfigForFetch<F> = F extends GenericFetch<infer C, any> ? C : never;
62
+ export type GenericFetch<C extends FetchConfig = FetchConfig, R extends Response = Response> = (url: string, fetchConfig?: C) => Promise<R>;
63
+ export type ConfigForFetch<F> = F extends GenericFetch<infer C, any> ? C : never;
64
64
  export {};
@@ -1,7 +1,7 @@
1
1
  import { ForbiddenError, InvalidRequestError, NotFoundError, SessionExpiredError, UnauthorizedError, ValidationError } from '../errors';
2
2
  import type { ApiResponse } from '../routing';
3
3
  import type { Logger } from '../services/logger';
4
- export declare type DefaultErrors = {
4
+ export type DefaultErrors = {
5
5
  InvalidRequestError: InvalidRequestError;
6
6
  UnauthorizedError: UnauthorizedError;
7
7
  ForbiddenError: ForbiddenError;
@@ -9,7 +9,7 @@ export declare type DefaultErrors = {
9
9
  ValidationError: ValidationError;
10
10
  SessionExpiredError: SessionExpiredError;
11
11
  };
12
- export declare type Handlers<E> = {
12
+ export type Handlers<E> = {
13
13
  [T in keyof E]?: (e: E[T], logger: Logger) => ApiResponse<number, any>;
14
14
  };
15
15
  export declare const defaultHandlers: Handlers<DefaultErrors>;
@@ -21,4 +21,4 @@ export declare const defaultHandlers: Handlers<DefaultErrors>;
21
21
  *
22
22
  * @param inputHandlers a map of errors to handler functions
23
23
  */
24
- export declare const createErrorHandler: <Errors = DefaultErrors>(inputHandlers?: Handlers<Errors> | undefined) => (e: Error, logger: Logger) => Promise<ApiResponse<number, any>>;
24
+ export declare const createErrorHandler: <Errors = DefaultErrors>(inputHandlers?: Handlers<Errors>) => (e: Error, logger: Logger) => Promise<ApiResponse<number, any>>;
@@ -1,7 +1,7 @@
1
1
  import type { ConfigProviderForConfig } from '../config';
2
2
  import type { ApiResponse } from '../routing';
3
3
  import type { Logger } from '../services/logger';
4
- declare type Config = {
4
+ type Config = {
5
5
  logResponseSlowerThan: string;
6
6
  timeoutResponseAfter: string;
7
7
  };
@@ -1,11 +1,11 @@
1
1
  import { TupleZip } from '../types';
2
- export declare type MiddlewareProvider<Sa, M, A extends any[], R> = (app: Sa, appBinder?: ((app: Sa, provider: MiddlewareProvider<Sa, M, A, R>) => (middleware: M, ...args: A) => R)) => (middleware: M, ...args: A) => R;
3
- export declare type MiddlewareTransformProvider<Sa, M, A extends any[], R> = (app: Sa) => (middleware: M, ...args: A) => Omit<M, keyof R> & R;
4
- export declare type MiddlewareInput<S> = S extends MiddlewareProvider<any, infer M, any, any> ? M : never;
5
- export declare type ServiceMiddlewareProviderResult<M, S> = [M] extends [never] ? never : [M] extends [MiddlewareInput<S>] ? S extends MiddlewareTransformProvider<any, M, any, infer R> ? (Omit<R, keyof M> & M) extends R ? Omit<R, keyof M> & M : R extends M ? R : Omit<M, keyof R> & R : S extends MiddlewareProvider<any, M, any, infer R> ? R : never : never;
6
- export declare type ServiceMiddlewareProviderArgs<S> = S extends MiddlewareProvider<any, any, infer A, any> ? A : never;
7
- export declare type ServiceMiddlewareProviderChainResult<C, M> = C extends [infer S1, ...infer S] ? S extends never[] ? ServiceMiddlewareProviderResult<M, S1> : ServiceMiddlewareProviderChainResult<S, ServiceMiddlewareProviderResult<M, S1>> : C extends unknown ? M : never;
8
- export declare type ServiceMiddlewareProviderChainArgs<C> = C extends [infer S1, ...infer S] ? S extends never[] ? ServiceMiddlewareProviderArgs<S1> : TupleZip<ServiceMiddlewareProviderChainArgs<S>, ServiceMiddlewareProviderArgs<S1>> : C extends unknown ? [] : never;
2
+ export type MiddlewareProvider<Sa, M, A extends any[], R> = (app: Sa, appBinder?: ((app: Sa, provider: MiddlewareProvider<Sa, M, A, R>) => (middleware: M, ...args: A) => R)) => (middleware: M, ...args: A) => R;
3
+ export type MiddlewareTransformProvider<Sa, M, A extends any[], R> = (app: Sa) => (middleware: M, ...args: A) => Omit<M, keyof R> & R;
4
+ export type MiddlewareInput<S> = S extends MiddlewareProvider<any, infer M, any, any> ? M : never;
5
+ export type ServiceMiddlewareProviderResult<M, S> = [M] extends [never] ? never : [M] extends [MiddlewareInput<S>] ? S extends MiddlewareTransformProvider<any, M, any, infer R> ? (Omit<R, keyof M> & M) extends R ? Omit<R, keyof M> & M : R extends M ? R : Omit<M, keyof R> & R : S extends MiddlewareProvider<any, M, any, infer R> ? R : never : never;
6
+ export type ServiceMiddlewareProviderArgs<S> = S extends MiddlewareProvider<any, any, infer A, any> ? A : never;
7
+ export type ServiceMiddlewareProviderChainResult<C, M> = C extends [infer S1, ...infer S] ? S extends never[] ? ServiceMiddlewareProviderResult<M, S1> : ServiceMiddlewareProviderChainResult<S, ServiceMiddlewareProviderResult<M, S1>> : C extends unknown ? M : never;
8
+ export type ServiceMiddlewareProviderChainArgs<C> = C extends [infer S1, ...infer S] ? S extends never[] ? ServiceMiddlewareProviderArgs<S1> : TupleZip<ServiceMiddlewareProviderChainArgs<S>, ServiceMiddlewareProviderArgs<S1>> : C extends unknown ? [] : never;
9
9
  /**
10
10
  * Creates a middleware composer for given AppServices and input value types. The composer accepts a list of middleware
11
11
  * that it assembles into a chain. The function returned by the composer takes a value of the given input value type,
@@ -1,7 +1,7 @@
1
1
  import { APIGatewayProxyEventV2 } from 'aws-lambda';
2
2
  import { ConfigProviderForConfig } from '../config';
3
3
  import { ApiResponse } from '../routing';
4
- declare type Config = {
4
+ type Config = {
5
5
  corsAllowedHostRegex: string;
6
6
  };
7
7
  /**
@@ -1,5 +1,5 @@
1
- export declare type HashValue = string | number | boolean | null | HashCompoundValue;
2
- export declare type HashCompoundValue = Array<HashValue> | {
1
+ export type HashValue = string | number | boolean | null | HashCompoundValue;
2
+ export type HashCompoundValue = Array<HashValue> | {
3
3
  [key: string]: HashValue;
4
4
  };
5
5
  /**
@@ -7,7 +7,7 @@ import type { Logger } from '../services/logger';
7
7
  * const getAuthor = getKeyValue('author');
8
8
  * const author = getAuthor(book);
9
9
  */
10
- export declare const getKeyValue: <K extends string>(key: K) => <O extends { [key in K]?: any; }>(obj: O) => O[K];
10
+ export declare const getKeyValue: <K extends string>(key: K) => <O extends { [_key in K]?: any; }>(obj: O) => O[K];
11
11
  /**
12
12
  * Returns a function that gets the value of the given key from an object, or the given default
13
13
  * value if the key is not present.
@@ -18,7 +18,7 @@ export declare const getKeyValue: <K extends string>(key: K) => <O extends { [ke
18
18
  * const getAuthorOrNope = getKeyValueOr('author', 'nope');
19
19
  * const authorOrNope = getAuthorOrNope(book);
20
20
  */
21
- export declare const getKeyValueOr: <K extends string, V, Od extends { [key in K]?: any; } = { [key_1 in K]?: any; }>(key: K, defaultValue: V) => <O extends Od extends undefined ? { [key_2 in K]?: any; } : Od>(obj: O) => V | NonNullable<O[K]>;
21
+ export declare const getKeyValueOr: <K extends string, V, Od extends { [_key in K]?: any; } = { [_key in K]?: any; }>(key: K, defaultValue: V) => <O extends (Od extends undefined ? { [_key in K]?: any; } : Od)>(obj: O) => NonNullable<O[K]> | V;
22
22
  /**
23
23
  * Returns a function that sets the value of the given key on an object.
24
24
  *
@@ -27,7 +27,7 @@ export declare const getKeyValueOr: <K extends string, V, Od extends { [key in K
27
27
  * const putAuthor = putKeyValue('author');
28
28
  * const newBook = putAuthor(book, 'tom');
29
29
  */
30
- export declare const putKeyValue: <K extends string>(key: K) => <O extends { [key in K]?: any; }>(obj: O, value: O[K]) => O;
30
+ export declare const putKeyValue: <K extends string>(key: K) => <O extends { [_key in K]?: any; }>(obj: O, value: O[K]) => O;
31
31
  /**
32
32
  * Coerces a value into an array. If the value is already an array, it is returned as-is.
33
33
  * If the value is undefined, an empty array is returned.
@@ -35,17 +35,17 @@ export declare const putKeyValue: <K extends string>(key: K) => <O extends { [ke
35
35
  * @param thing the value
36
36
  * @returns an array
37
37
  */
38
- export declare const coerceArray: <T>(thing: T | T[] | undefined) => T[];
39
- declare type FlowFn<A, R> = (...args: [A]) => R;
40
- declare type AnyFlowFn = FlowFn<any, any>;
41
- declare type FlowFnResult<F, A> = F extends FlowFn<A, infer R> ? R : never;
42
- declare type FlowResult<C, A> = C extends [infer F1, ...infer Cr] ? F1 extends AnyFlowFn ? Cr extends never[] ? FlowFnResult<F1, A> : FlowResult<Cr, FlowFnResult<F1, A>> : never : never;
43
- declare type FlowChainArg<C> = C extends [infer F1, ...infer _] ? F1 extends FlowFn<infer A, any> ? A : never : never;
38
+ export declare const coerceArray: <T>(thing: undefined | T | T[]) => T[];
39
+ type FlowFn<A, R> = (...args: [A]) => R;
40
+ type AnyFlowFn = FlowFn<any, any>;
41
+ type FlowFnResult<F, A> = F extends FlowFn<A, infer R> ? R : never;
42
+ type FlowResult<C, A> = C extends [infer F1, ...infer Cr] ? F1 extends AnyFlowFn ? Cr extends never[] ? FlowFnResult<F1, A> : FlowResult<Cr, FlowFnResult<F1, A>> : never : never;
43
+ type FlowChainArg<C> = C extends [infer F1, ...infer _] ? F1 extends FlowFn<infer A, any> ? A : never : never;
44
44
  /**
45
45
  * this is like lodash/flow but it uses a recursive type instead of hard-coding parameters
46
46
  */
47
47
  export declare const flow: <C extends AnyFlowFn[]>(...chain: C) => (param: FlowChainArg<C>) => FlowResult<C, FlowChainArg<C>>;
48
- export declare type RetryOptions = {
48
+ export type RetryOptions = {
49
49
  logger?: Logger;
50
50
  wait?: number;
51
51
  splay?: number;
@@ -66,7 +66,7 @@ export declare type RetryOptions = {
66
66
  * initial wait cliff with incremental increases, then maybe you'd set this. default: 0
67
67
  * @returns A promise that resolves with the result of the function, or rejects with the last error.
68
68
  */
69
- export declare const retryWithDelay: <R>(fn: (abort?: ((e: Error) => never) | undefined) => Promise<R>, options?: RetryOptions | undefined) => Promise<R>;
69
+ export declare const retryWithDelay: <R>(fn: (abort?: (e: Error) => never) => Promise<R>, options?: RetryOptions) => Promise<R>;
70
70
  /**
71
71
  * a shameful helper to avoid needing to test code coverage of branches
72
72
  */
@@ -7,7 +7,7 @@ import type { UnionToIntersection } from '../types';
7
7
  * @param thing2 another object
8
8
  * @returns an array of keys, type-limited to those keys
9
9
  */
10
- export declare const getCommonProperties: <T1 extends {}, T2 extends {}>(thing1: T1, thing2: T2) => (keyof T1 & keyof T2)[];
10
+ export declare const getCommonProperties: <T1 extends {}, T2 extends {}>(thing1: T1, thing2: T2) => Array<keyof T1 & keyof T2>;
11
11
  /**
12
12
  * recursive merge properties of inputs. values are merged if they are
13
13
  * plain objects or arrays, otherwise if the same property exists in both
@@ -18,4 +18,4 @@ export declare const getCommonProperties: <T1 extends {}, T2 extends {}>(thing1:
18
18
  *
19
19
  * @example merge({thing: 'one'}, {thing: 'two', otherKey: 'one'}, {coolKey: 'coolValue'});
20
20
  */
21
- export declare const merge: <T extends {}[]>(...[thing1, ...tail]: T) => UnionToIntersection<T[number]>;
21
+ export declare const merge: <T extends Array<{}>>(...[thing1, ...tail]: T) => UnionToIntersection<T[number]>;
@@ -29,7 +29,7 @@
29
29
  * , [1,2,3,5,6,8]
30
30
  * )
31
31
  */
32
- export declare const partitionSequence: <T, P>(getPartition: (thing: T, previous?: P | undefined) => {
33
- matches?: boolean | undefined;
32
+ export declare const partitionSequence: <T, P>(getPartition: (thing: T, previous?: P) => {
33
+ matches?: boolean;
34
34
  value: P;
35
35
  }, sequence: T[]) => [P, T[]][];
@@ -1,5 +1,5 @@
1
1
  import { QueryParams, RouteMatchRecord } from '../routing';
2
- export declare type PaginationHandler<Pa, Q extends QueryParams> = <R>(queryParams: Q, match: RouteMatchRecord<R>) => Pa & {
2
+ export type PaginationHandler<Pa, Q extends QueryParams> = <R>(queryParams: Q, match: RouteMatchRecord<R>) => Pa & {
3
3
  getUnusedQueryParams: () => Q;
4
4
  };
5
5
  /**
@@ -1,27 +1,27 @@
1
1
  import { Logger } from '../services/logger';
2
2
  /** HTTP query parameters */
3
- export declare type QueryParams = Record<string, string | undefined | string[] | null>;
3
+ export type QueryParams = Record<string, string | undefined | string[] | null>;
4
4
  /**
5
5
  * The type for a map of string substitutions to use when building route paths, e.g. a route may
6
6
  * be defined as `'/api/:id'` and then rendered as `'/api/123'` when the `id` route param is set
7
7
  * to `'123'`
8
8
  */
9
- export declare type RouteParams = {
9
+ export type RouteParams = {
10
10
  [key: string]: string;
11
11
  };
12
12
  /** A type that is compatible with any `Route` type */
13
- export declare type AnyRoute<R> = R extends Route<infer N, infer P, infer Sa, infer Sr, infer Ri, infer Ro> ? Route<N, P, Sa, Sr, Ri, Ro> : never;
14
- export declare type AnySpecificRoute<R, Sa, Ri, Ro> = R extends Route<infer N, infer P, Sa, infer Sr, Ri, Ro> & infer E ? Route<N, P, Sa, Sr, Ri, Ro> & E : never;
13
+ export type AnyRoute<R> = R extends Route<infer N, infer P, infer Sa, infer Sr, infer Ri, infer Ro> ? Route<N, P, Sa, Sr, Ri, Ro> : never;
14
+ export type AnySpecificRoute<R, Sa, Ri, Ro> = R extends Route<infer N, infer P, Sa, infer Sr, Ri, Ro> & infer E ? Route<N, P, Sa, Sr, Ri, Ro> & E : never;
15
15
  /** The inferred "route output" (`Ro`) type for a given route */
16
- export declare type OutputForRoute<R> = R extends Route<any, any, any, any, any, infer Ro> ? Ro : never;
16
+ export type OutputForRoute<R> = R extends Route<any, any, any, any, any, infer Ro> ? Ro : never;
17
17
  /** The inferred type for the params of the provided route type, `R`; may be undefined */
18
- export declare type ParamsForRoute<R> = R extends Route<any, infer P, any, any, any, any> ? P : never;
18
+ export type ParamsForRoute<R> = R extends Route<any, infer P, any, any, any, any> ? P : never;
19
19
  /** The inferred type for the request services of the provided route type, `R`. */
20
- export declare type RequestServicesForRoute<R> = R extends Route<any, any, any, infer Sr, any, any> ? Sr : never;
20
+ export type RequestServicesForRoute<R> = R extends Route<any, any, any, infer Sr, any, any> ? Sr : never;
21
21
  /** The type for the params of the provided route type, `R`; will be `{}` if undefined */
22
- export declare type ParamsForRouteOrEmpty<R> = ParamsForRoute<R> extends undefined ? {} : Exclude<ParamsForRoute<R>, undefined>;
22
+ export type ParamsForRouteOrEmpty<R> = ParamsForRoute<R> extends undefined ? {} : Exclude<ParamsForRoute<R>, undefined>;
23
23
  /** derives the route match type for this route, which includes the route itself and the matching params. */
24
- export declare type RouteMatchRecord<R> = R extends AnyRoute<R> ? {
24
+ export type RouteMatchRecord<R> = R extends AnyRoute<R> ? {
25
25
  route: R;
26
26
  params: ParamsForRoute<R>;
27
27
  } : never;
@@ -29,15 +29,15 @@ export declare type RouteMatchRecord<R> = R extends AnyRoute<R> ? {
29
29
  * The conditional type for the payload for a given route, `R`. This isn't a route structure, its
30
30
  * a convention based on the request middleware
31
31
  */
32
- export declare type PayloadForRoute<R> = RequestServicesForRoute<R> extends {
32
+ export type PayloadForRoute<R> = RequestServicesForRoute<R> extends {
33
33
  payload: any;
34
34
  } ? RequestServicesForRoute<R>['payload'] : undefined;
35
- declare type RequestServiceProvider<Sa, Sr, Ri> = (app: Sa) => <R>(middleware: {
35
+ type RequestServiceProvider<Sa, Sr, Ri> = (app: Sa) => <R>(middleware: {
36
36
  request: Ri;
37
37
  logger: Logger;
38
38
  }, match: RouteMatchRecord<R>) => Sr;
39
- declare type RouteHandler<P, Sr, Ro> = (params: P, request: Sr) => Ro;
40
- declare type Route<N extends string, P extends RouteParams | undefined, Sa, Sr, Ri, Ro> = (Sr extends undefined ? {
39
+ type RouteHandler<P, Sr, Ro> = (params: P, request: Sr) => Ro;
40
+ type Route<N extends string, P extends RouteParams | undefined, Sa, Sr, Ri, Ro> = (Sr extends undefined ? {
41
41
  requestServiceProvider?: RequestServiceProvider<Sa, Sr, Ri> | undefined;
42
42
  } : {
43
43
  requestServiceProvider: RequestServiceProvider<Sa, Sr, Ri>;
@@ -46,7 +46,7 @@ declare type Route<N extends string, P extends RouteParams | undefined, Sa, Sr,
46
46
  path: string;
47
47
  handler: (params: P, request: Sr) => Ro;
48
48
  };
49
- declare type CreateRouteConfig<Sa, Sr, Ri, N extends string, Ex> = (Sr extends undefined ? {
49
+ type CreateRouteConfig<Sa, Sr, Ri, N extends string, Ex> = (Sr extends undefined ? {
50
50
  requestServiceProvider?: RequestServiceProvider<Sa, Sr, Ri> | undefined;
51
51
  } : {
52
52
  requestServiceProvider: RequestServiceProvider<Sa, Sr, Ri>;
@@ -154,15 +154,15 @@ export declare const makeRenderRouteUrl: <Ru extends {
154
154
  * @returns the interpolated route path
155
155
  */
156
156
  export declare const renderAnyRouteUrl: <R extends any>(route: R, params: ParamsForRoute<R>, query?: QueryParams) => string;
157
- declare type RequestPathExtractor<Ri> = (request: Ri) => string;
158
- declare type RequestLogExtractor<Ri> = (request: Ri) => JsonCompatibleStruct;
159
- declare type RequestRouteMatcher<Ri, R> = (request: Ri, route: R) => boolean;
160
- declare type CompatibleServices<T1> = keyof T1 extends 'logger' ? T1 extends {
157
+ type RequestPathExtractor<Ri> = (request: Ri) => string;
158
+ type RequestLogExtractor<Ri> = (request: Ri) => JsonCompatibleStruct;
159
+ type RequestRouteMatcher<Ri, R> = (request: Ri, route: R) => boolean;
160
+ type CompatibleServices<T1> = keyof T1 extends 'logger' ? T1 extends {
161
161
  logger: Logger;
162
162
  } ? T1 : never : T1 & {
163
163
  logger?: Logger;
164
164
  };
165
- declare type RequestResponder<Sa, Ri, Ro> = {
165
+ type RequestResponder<Sa, Ri, Ro> = {
166
166
  (services: CompatibleServices<Sa>): (request: Ri) => Ro | undefined;
167
167
  <RoF>(services: CompatibleServices<Sa>, responseMiddleware: (app: Sa) => (response: Ro | undefined, request: {
168
168
  request: Ri;
@@ -202,24 +202,24 @@ declare type RequestResponder<Sa, Ri, Ro> = {
202
202
  export declare const makeGetRequestResponder: <Sa, Ru, Ri, Ro>() => ({ routes, pathExtractor, routeMatcher, errorHandler, logExtractor }: {
203
203
  routes: () => AnySpecificRoute<Ru, Sa, Ri, Ro>[];
204
204
  pathExtractor: RequestPathExtractor<Ri>;
205
- logExtractor?: RequestLogExtractor<Ri> | undefined;
206
- routeMatcher?: RequestRouteMatcher<Ri, AnySpecificRoute<Ru, Sa, Ri, Ro>> | undefined;
207
- errorHandler?: ((e: Error, logger: Logger) => Ro) | undefined;
205
+ logExtractor?: RequestLogExtractor<Ri>;
206
+ routeMatcher?: RequestRouteMatcher<Ri, AnySpecificRoute<Ru, Sa, Ri, Ro>>;
207
+ errorHandler?: (e: Error, logger: Logger) => Ro;
208
208
  }) => RequestResponder<Sa, Ri, Ro>;
209
209
  /** HTTP Headers */
210
- export declare type HttpHeaders = {
210
+ export type HttpHeaders = {
211
211
  [key: string]: string | undefined | string[];
212
212
  };
213
213
  /** A type that works in JSON */
214
- export declare type JsonCompatibleValue = string | number | null | undefined | boolean;
214
+ export type JsonCompatibleValue = string | number | null | undefined | boolean;
215
215
  /** A JSON array type */
216
- export declare type JsonCompatibleArray = Array<JsonCompatibleValue | JsonCompatibleStruct | JsonCompatibleStruct>;
216
+ export type JsonCompatibleArray = Array<JsonCompatibleValue | JsonCompatibleStruct | JsonCompatibleStruct>;
217
217
  /** A JSON object type */
218
- export declare type JsonCompatibleStruct = {
218
+ export type JsonCompatibleStruct = {
219
219
  [key: string]: JsonCompatibleStruct | JsonCompatibleValue | JsonCompatibleArray;
220
220
  };
221
221
  /** The type for an API response */
222
- export declare type ApiResponse<S extends number, T> = {
222
+ export type ApiResponse<S extends number, T> = {
223
223
  isBase64Encoded?: boolean;
224
224
  statusCode: S;
225
225
  data: T;
@@ -242,7 +242,7 @@ export declare type ApiResponse<S extends number, T> = {
242
242
  * { 'X-Frame-Options': 'DENY' }
243
243
  * );
244
244
  */
245
- export declare const apiJsonResponse: <S extends number, T extends JsonCompatibleStruct>(statusCode: S, data: T, headers?: HttpHeaders | undefined) => ApiResponse<S, T>;
245
+ export declare const apiJsonResponse: <S extends number, T extends JsonCompatibleStruct>(statusCode: S, data: T, headers?: HttpHeaders) => ApiResponse<S, T>;
246
246
  /**
247
247
  * Returns a plain text response. Handles setting the content-type header.
248
248
  * @param statusCode e.g. 201
@@ -250,7 +250,7 @@ export declare const apiJsonResponse: <S extends number, T extends JsonCompatibl
250
250
  * @param headers HTTP headers
251
251
  * @example return apiTextResponse(200, 'some text')
252
252
  */
253
- export declare const apiTextResponse: <S extends number>(statusCode: S, data: string, headers?: HttpHeaders | undefined) => ApiResponse<S, string>;
253
+ export declare const apiTextResponse: <S extends number>(statusCode: S, data: string, headers?: HttpHeaders) => ApiResponse<S, string>;
254
254
  /**
255
255
  * Returns an HTML response. Handles setting the content-type header.
256
256
  * @param statusCode e.g. 201
@@ -258,7 +258,7 @@ export declare const apiTextResponse: <S extends number>(statusCode: S, data: st
258
258
  * @param headers HTTP headers
259
259
  * @example return apiHtmlResponse(200, '<b>some text</b>')
260
260
  */
261
- export declare const apiHtmlResponse: <S extends number>(statusCode: S, data: string, headers?: HttpHeaders | undefined) => ApiResponse<S, string>;
261
+ export declare const apiHtmlResponse: <S extends number>(statusCode: S, data: string, headers?: HttpHeaders) => ApiResponse<S, string>;
262
262
  /** HTTP method enum */
263
263
  export declare enum METHOD {
264
264
  GET = "GET",
@@ -1,4 +1,4 @@
1
1
  import type { z } from 'zod';
2
- export declare const zodPayloadValidator: <T>(validator: z.ZodType<T, z.ZodTypeDef, T>) => (input: {
2
+ export declare const zodPayloadValidator: <T extends {}>(validator: z.ZodType<T, T>) => (input: {
3
3
  [key: string]: any;
4
4
  }) => input is T;
@@ -1,8 +1,10 @@
1
+ /* spell-checker: ignore treeify */
2
+ import { treeifyError } from 'zod';
1
3
  import { ValidationError } from '../../errors';
2
4
  export const zodPayloadValidator = (validator) => (input) => {
3
5
  const result = validator.safeParse(input);
4
6
  if (result.success) {
5
7
  return true;
6
8
  }
7
- throw new ValidationError(result.error.format());
9
+ throw new ValidationError(treeifyError(result.error));
8
10
  };