@whook/gcp-functions 18.1.0 → 19.0.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.
Files changed (33) hide show
  1. package/README.md +16 -54
  2. package/dist/commands/testGCPFunctionRoute.d.ts +50 -0
  3. package/dist/commands/{testHTTPFunction.js → testGCPFunctionRoute.js} +43 -44
  4. package/dist/commands/testGCPFunctionRoute.js.map +1 -0
  5. package/dist/index.d.ts +7 -6
  6. package/dist/index.js +49 -52
  7. package/dist/index.js.map +1 -1
  8. package/dist/services/_autoload.d.ts +14 -9
  9. package/dist/services/_autoload.js +49 -62
  10. package/dist/services/_autoload.js.map +1 -1
  11. package/dist/wrappers/wrapRouteHandlerForGoogleHTTPFunction.d.ts +19 -0
  12. package/dist/wrappers/wrapRouteHandlerForGoogleHTTPFunction.js +307 -0
  13. package/dist/wrappers/wrapRouteHandlerForGoogleHTTPFunction.js.map +1 -0
  14. package/package.json +10 -8
  15. package/src/commands/{testHTTPFunction.ts → testGCPFunctionRoute.ts} +68 -69
  16. package/src/index.ts +85 -87
  17. package/src/services/_autoload.ts +79 -106
  18. package/src/types.d.ts +8 -0
  19. package/src/wrappers/wrapRouteHandlerForGoogleHTTPFunction.ts +571 -0
  20. package/dist/commands/testHTTPFunction.d.ts +0 -13
  21. package/dist/commands/testHTTPFunction.js.map +0 -1
  22. package/dist/services/HANDLER.d.ts +0 -10
  23. package/dist/services/HANDLER.js +0 -21
  24. package/dist/services/HANDLER.js.map +0 -1
  25. package/dist/services/log.d.ts +0 -5
  26. package/dist/services/log.js +0 -4
  27. package/dist/services/log.js.map +0 -1
  28. package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.d.ts +0 -21
  29. package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.js +0 -270
  30. package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.js.map +0 -1
  31. package/src/services/HANDLER.ts +0 -47
  32. package/src/services/log.ts +0 -7
  33. package/src/wrappers/wrapHandlerForGoogleHTTPFunction.ts +0 -480
@@ -1,6 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import {
3
- UNBUILDABLE_SERVICES,
4
3
  Knifecycle,
5
4
  wrapInitializer,
6
5
  constant,
@@ -16,18 +15,24 @@ import {
16
15
  import { YError } from 'yerror';
17
16
  import {
18
17
  initBuildAutoload,
18
+ initMainHandler,
19
19
  noop,
20
- cleanupOpenAPI,
21
- dereferenceOpenAPIOperations,
22
- getOpenAPIOperations,
20
+ type WhookOpenAPI,
23
21
  type WhookBuildConstantsService,
24
- type WhookRawOperation,
22
+ type WhookDefinitions,
23
+ type WhookRouteDefinition,
24
+ type WhookRoutesDefinitionsService,
25
25
  } from '@whook/whook';
26
26
  import { type LogService } from 'common-services';
27
- import { type OpenAPIV3_1 } from 'openapi-types';
28
- import { type WhookAPIOperationGCPFunctionConfig } from '../index.js';
29
- import initHandler from './HANDLER.js';
30
- import initWrapHandlerForGoogleHTTPFunction from '../wrappers/wrapHandlerForGoogleHTTPFunction.js';
27
+ import { cleanupOpenAPI } from 'ya-open-api-types';
28
+ import initWrapRouteHandlerForGoogleHTTPFunction from '../wrappers/wrapRouteHandlerForGoogleHTTPFunction.js';
29
+
30
+ export type GCPFunctionDefinition = {
31
+ name: string;
32
+ type: 'route';
33
+ definition: WhookRouteDefinition;
34
+ openAPI: WhookOpenAPI;
35
+ };
31
36
 
32
37
  export type WhookGoogleFunctionsAutoloadDependencies = {
33
38
  BUILD_CONSTANTS?: WhookBuildConstantsService;
@@ -36,19 +41,6 @@ export type WhookGoogleFunctionsAutoloadDependencies = {
36
41
  log?: LogService;
37
42
  };
38
43
 
39
- export const GCP_WRAPPERS: Record<
40
- Required<WhookAPIOperationGCPFunctionConfig>['type'],
41
- {
42
- name: string;
43
- initializer: Initializer<Service, Dependencies>;
44
- }
45
- > = {
46
- http: {
47
- name: 'wrapHandlerForGoogleHTTPFunction',
48
- initializer: initWrapHandlerForGoogleHTTPFunction as any,
49
- },
50
- };
51
-
52
44
  const initializerWrapper: ServiceInitializerWrapper<
53
45
  Autoloader<Initializer<Dependencies, Service>>,
54
46
  Dependencies
@@ -58,125 +50,106 @@ const initializerWrapper: ServiceInitializerWrapper<
58
50
  ): Promise<
59
51
  (serviceName: string) => Promise<Initializer<Dependencies, Service>>
60
52
  > => {
61
- let API: OpenAPIV3_1.Document;
62
- let OPERATION_APIS: WhookRawOperation<WhookAPIOperationGCPFunctionConfig>[];
63
- const getAPIOperation: (
64
- serviceName: string,
65
- ) => Promise<
66
- [
67
- Required<WhookAPIOperationGCPFunctionConfig>['type'],
68
- string,
69
- OpenAPIV3_1.Document,
70
- ]
71
- > = (() => {
72
- return async (serviceName) => {
73
- const cleanedName = serviceName.split('_').pop();
53
+ let API: WhookOpenAPI;
54
+ let DEFINITIONS: WhookDefinitions;
55
+ let ROUTES_DEFINITIONS: WhookRoutesDefinitionsService;
56
+ const getDefinition = (() => {
57
+ return async (serviceName: string): Promise<GCPFunctionDefinition> => {
58
+ const cleanedName = serviceName.split('_').pop() as string;
74
59
 
75
60
  API = API || (await $injector(['API'])).API;
76
- OPERATION_APIS =
77
- OPERATION_APIS ||
78
- getOpenAPIOperations<WhookAPIOperationGCPFunctionConfig>(API);
79
-
80
- const OPERATION = OPERATION_APIS.find(
81
- (operation) =>
82
- cleanedName ===
83
- (((operation['x-whook'] || {}).sourceOperationId &&
84
- (operation['x-whook'] || {}).sourceOperationId) ||
85
- operation.operationId) +
86
- ((operation['x-whook'] || {}).suffix || ''),
87
- );
61
+ DEFINITIONS =
62
+ DEFINITIONS || (await $injector(['DEFINITIONS'])).DEFINITIONS;
63
+ ROUTES_DEFINITIONS =
64
+ ROUTES_DEFINITIONS ||
65
+ (await $injector(['ROUTES_DEFINITIONS'])).ROUTES_DEFINITIONS;
66
+
67
+ const config = DEFINITIONS.configs[cleanedName as string];
88
68
 
89
- if (!OPERATION) {
90
- log('error', '💥 - Unable to find a function operation definition!');
91
- throw new YError('E_OPERATION_NOT_FOUND', serviceName);
69
+ if (!config) {
70
+ log('error', '💥 - Unable to find a GCP Function definition!');
71
+ throw new YError('E_DEFINITION_NOT_FOUND', serviceName, cleanedName);
92
72
  }
93
73
 
94
- const OPERATION_API: OpenAPIV3_1.Document = cleanupOpenAPI({
74
+ if (!config || config.type !== 'route') {
75
+ log('error', '💥 - GCP Function only supports routes!');
76
+ throw new YError('E_UNSUPPORTED_DEFINITION', serviceName, cleanedName);
77
+ }
78
+
79
+ const openAPI = (await cleanupOpenAPI({
95
80
  ...API,
96
81
  paths: {
97
- [OPERATION.path]: {
98
- [OPERATION.method]: API.paths?.[OPERATION.path]?.[OPERATION.method],
99
- },
100
- },
101
- });
102
-
103
- return [
104
- OPERATION['x-whook']?.type || 'http',
105
- OPERATION.operationId as string,
106
- {
107
- ...OPERATION_API,
108
- paths: {
109
- [OPERATION.path]: {
110
- [OPERATION.method]: (
111
- await dereferenceOpenAPIOperations(OPERATION_API, [
112
- {
113
- path: OPERATION.path,
114
- method: OPERATION.method,
115
- ...OPERATION_API.paths?.[OPERATION.path]?.[
116
- OPERATION.method
117
- ],
118
- parameters: OPERATION.parameters,
119
- },
120
- ])
121
- )[0],
122
- },
82
+ [config.path]: {
83
+ parameters: API?.paths?.[config.path]?.parameters || [],
84
+ [config.method]: API.paths?.[config.path]?.[config.method],
123
85
  },
124
86
  },
125
- ];
87
+ })) as WhookOpenAPI;
88
+
89
+ return {
90
+ name: cleanedName,
91
+ type: 'route',
92
+ openAPI,
93
+ definition:
94
+ ROUTES_DEFINITIONS[cleanedName]?.module?.definition || config,
95
+ };
126
96
  };
127
97
  })();
128
98
 
129
- log('debug', '🤖 - Initializing the `$autoload` build wrapper.');
99
+ log(
100
+ 'debug',
101
+ '🤖 - Initializing the GCP Functions `$autoload` build wrapper.',
102
+ );
130
103
 
131
104
  return async (serviceName) => {
132
- if (UNBUILDABLE_SERVICES.includes(serviceName)) {
133
- log(
134
- 'warning',
135
- `🤷 - Building a project with the "${serviceName}" unbuildable service (ie Knifecycle ones: ${UNBUILDABLE_SERVICES.join(
136
- ', ',
137
- )}) can give unpredictable results!`,
105
+ if (serviceName.startsWith('MAIN_API_')) {
106
+ const definition = await getDefinition(serviceName);
107
+
108
+ return constant(
109
+ serviceName,
110
+ definition.type === 'route' ? definition.openAPI : {},
138
111
  );
139
- return constant(serviceName, undefined);
140
112
  }
141
113
 
142
- if (serviceName.startsWith('OPERATION_API_')) {
143
- const [, , OPERATION_API] = await getAPIOperation(serviceName);
114
+ if (serviceName.startsWith('MAIN_DEFINITION_')) {
115
+ const { definition } = await getDefinition(serviceName);
144
116
 
145
- return constant(serviceName, OPERATION_API);
117
+ return constant(serviceName, definition);
146
118
  }
147
119
 
148
- if (serviceName.startsWith('OPERATION_WRAPPER_')) {
149
- const [type] = await getAPIOperation(serviceName);
150
-
120
+ if (serviceName.startsWith('MAIN_WRAPPER_')) {
151
121
  return location(
152
122
  alsoInject(
153
123
  [
154
- `OPERATION_API>${serviceName.replace(
155
- 'OPERATION_WRAPPER_',
156
- 'OPERATION_API_',
124
+ `MAIN_DEFINITION>${serviceName.replace(
125
+ 'MAIN_WRAPPER_',
126
+ 'MAIN_DEFINITION_',
157
127
  )}`,
128
+ `MAIN_API>${serviceName.replace('MAIN_WRAPPER_', 'MAIN_API_')}`,
158
129
  ],
159
- GCP_WRAPPERS[type].initializer as any,
160
- ),
161
- `@whook/gcp-functions/dist/wrappers/${GCP_WRAPPERS[type].name}.js`,
130
+ initWrapRouteHandlerForGoogleHTTPFunction as any,
131
+ ) as any,
132
+ `@whook/gcp-functions/dist/wrappers/wrapRouteHandlerForGoogleHTTPFunction.js`,
162
133
  ) as any;
163
134
  }
164
135
 
165
- if (serviceName.startsWith('OPERATION_HANDLER_')) {
166
- const [, operationId] = await getAPIOperation(serviceName);
136
+ if (serviceName.startsWith('MAIN_HANDLER_')) {
137
+ const { type, name, definition } = await getDefinition(serviceName);
138
+ const targetHandler = definition.config?.targetHandler || name;
167
139
 
168
140
  return location(
169
141
  alsoInject(
170
142
  [
171
- `mainWrapper>OPERATION_WRAPPER_${serviceName.replace(
172
- 'OPERATION_HANDLER_',
143
+ `MAIN_WRAPPER>MAIN_WRAPPER_${serviceName.replace(
144
+ 'MAIN_HANDLER_',
173
145
  '',
174
146
  )}`,
175
- `baseHandler>${operationId}`,
147
+ `?WRAPPERS>${type.toUpperCase()}S_WRAPPERS`,
148
+ `BASE_HANDLER>${targetHandler}`,
176
149
  ],
177
- initHandler,
178
- ),
179
- '@whook/gcp-functions/dist/services/HANDLER.js',
150
+ initMainHandler,
151
+ ) as any,
152
+ '@whook/whook/dist/services/MAIN_HANDLER.js',
180
153
  );
181
154
  }
182
155
 
package/src/types.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { type WhookBaseRouteConfig } from '@whook/whook';
2
+ import { type WhookGCPFunctionRouteConfig } from './index.ts';
3
+
4
+ declare module '@whook/whook' {
5
+ export interface WhookRouteConfig
6
+ extends WhookBaseRouteConfig,
7
+ WhookGCPFunctionRouteConfig {}
8
+ }