@whook/gcp-functions 12.0.2 → 13.1.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 (38) hide show
  1. package/README.md +55 -35
  2. package/dist/commands/testHTTPFunction.d.ts +2 -2
  3. package/dist/commands/testHTTPFunction.js +4 -2
  4. package/dist/commands/testHTTPFunction.js.map +1 -1
  5. package/dist/index.d.ts +27 -0
  6. package/dist/index.js +34 -66
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.test.js +10 -0
  9. package/dist/index.test.js.map +1 -0
  10. package/dist/libs/utils.d.ts +3 -2
  11. package/dist/libs/utils.js +2 -2
  12. package/dist/libs/utils.js.map +1 -1
  13. package/dist/services/HANDLER.d.ts +12 -0
  14. package/dist/services/HANDLER.js +21 -0
  15. package/dist/services/HANDLER.js.map +1 -0
  16. package/dist/services/_autoload.d.ts +31 -15
  17. package/dist/services/_autoload.js +78 -26
  18. package/dist/services/_autoload.js.map +1 -1
  19. package/dist/services/log.js +2 -2
  20. package/dist/services/log.js.map +1 -1
  21. package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.d.ts +26 -0
  22. package/dist/wrappers/{googleHTTPFunction.js → wrapHandlerForGoogleHTTPFunction.js} +71 -63
  23. package/dist/wrappers/wrapHandlerForGoogleHTTPFunction.js.map +1 -0
  24. package/package.json +46 -42
  25. package/src/commands/testHTTPFunction.ts +5 -4
  26. package/src/index.test.ts +11 -0
  27. package/src/index.ts +45 -99
  28. package/src/libs/utils.ts +4 -2
  29. package/src/services/HANDLER.ts +41 -0
  30. package/src/services/_autoload.ts +134 -36
  31. package/src/services/log.ts +2 -2
  32. package/src/wrappers/{googleHTTPFunction.ts → wrapHandlerForGoogleHTTPFunction.ts} +135 -123
  33. package/dist/services/log.test.js +0 -8
  34. package/dist/services/log.test.js.map +0 -1
  35. package/dist/wrappers/googleHTTPFunction.d.ts +0 -22
  36. package/dist/wrappers/googleHTTPFunction.js.map +0 -1
  37. package/src/services/log.test.ts +0 -8
  38. /package/dist/{services/log.test.d.ts → index.test.d.ts} +0 -0
@@ -1,8 +1,17 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { initAutoload, noop, cleanupOpenAPI } from '@whook/whook';
2
- import { SPECIAL_PROPS, wrapInitializer, constant, alsoInject, } from 'knifecycle';
3
+ import { SPECIAL_PROPS, UNBUILDABLE_SERVICES, wrapInitializer, constant, alsoInject, } from 'knifecycle';
3
4
  import { printStackTrace, YError } from 'yerror';
4
5
  import { dereferenceOpenAPIOperations, getOpenAPIOperations, } from '@whook/http-router';
5
- const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance, log = noop, }, $autoload) => {
6
+ import initHandler from './HANDLER.js';
7
+ import initWrapHandlerForGoogleHTTPFunction from '../wrappers/wrapHandlerForGoogleHTTPFunction.js';
8
+ export const GCP_WRAPPERS = {
9
+ http: {
10
+ name: 'wrapHandlerForGoogleHTTPFunction',
11
+ initializer: initWrapHandlerForGoogleHTTPFunction,
12
+ },
13
+ };
14
+ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance, resolve, log = noop, }, $autoload) => {
6
15
  let API;
7
16
  let OPERATION_APIS;
8
17
  const getAPIOperation = (() => {
@@ -32,28 +41,45 @@ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance,
32
41
  },
33
42
  },
34
43
  });
35
- return {
36
- ...OPERATION_API,
37
- paths: {
38
- [OPERATION.path]: {
39
- [OPERATION.method]: (await dereferenceOpenAPIOperations(OPERATION_API, [
40
- {
41
- path: OPERATION.path,
42
- method: OPERATION.method,
43
- ...OPERATION_API.paths[OPERATION.path]?.[OPERATION.method],
44
- parameters: OPERATION.parameters,
45
- },
46
- ]))[0],
44
+ return [
45
+ OPERATION['x-whook']?.type || 'http',
46
+ OPERATION.operationId,
47
+ {
48
+ ...OPERATION_API,
49
+ paths: {
50
+ [OPERATION.path]: {
51
+ [OPERATION.method]: (await dereferenceOpenAPIOperations(OPERATION_API, [
52
+ {
53
+ path: OPERATION.path,
54
+ method: OPERATION.method,
55
+ ...OPERATION_API.paths[OPERATION.path]?.[OPERATION.method],
56
+ parameters: OPERATION.parameters,
57
+ },
58
+ ]))[0],
59
+ },
47
60
  },
48
61
  },
49
- };
62
+ ];
50
63
  };
51
64
  })();
52
65
  log('debug', '🤖 - Initializing the `$autoload` build wrapper.');
53
66
  return async (serviceName) => {
67
+ if (UNBUILDABLE_SERVICES.includes(serviceName)) {
68
+ log('warning', `🤷 - Building a project with the "${serviceName}" unbuildable service (ie Knifecycle ones: ${UNBUILDABLE_SERVICES.join(', ')}) can give unpredictable results!`);
69
+ return {
70
+ initializer: constant(serviceName, undefined),
71
+ path: `constant://${serviceName}`,
72
+ };
73
+ }
54
74
  try {
55
- // TODO: add initializer map to knifecycle public API
56
- const initializer = $instance._initializers.get(serviceName);
75
+ let initializer;
76
+ try {
77
+ initializer = $instance._getInitializer(serviceName);
78
+ }
79
+ catch (err) {
80
+ log('debug', `🤖 - Direct initializer access failure from the Knifecycle instance: "${serviceName}".`);
81
+ log('debug-stack', printStackTrace(err));
82
+ }
57
83
  if (initializer && initializer[SPECIAL_PROPS.TYPE] === 'constant') {
58
84
  log('debug', `🤖 - Reusing a constant initializer directly from the Knifecycle instance: "${serviceName}".`);
59
85
  return {
@@ -62,12 +88,33 @@ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance,
62
88
  };
63
89
  }
64
90
  if (serviceName.startsWith('OPERATION_API_')) {
65
- const OPERATION_API = await getAPIOperation(serviceName);
91
+ const [, , OPERATION_API] = await getAPIOperation(serviceName);
66
92
  return {
67
93
  initializer: constant(serviceName, OPERATION_API),
68
94
  path: `api://${serviceName}`,
69
95
  };
70
96
  }
97
+ if (serviceName.startsWith('OPERATION_WRAPPER_')) {
98
+ const [type] = await getAPIOperation(serviceName);
99
+ return {
100
+ initializer: alsoInject([
101
+ `OPERATION_API>${serviceName.replace('OPERATION_WRAPPER_', 'OPERATION_API_')}`,
102
+ ], GCP_WRAPPERS[type].initializer),
103
+ path: resolve(`@whook/gcp-functions/dist/wrappers/${GCP_WRAPPERS[type].name}`),
104
+ };
105
+ }
106
+ if (serviceName.startsWith('OPERATION_HANDLER_')) {
107
+ const [, operationId] = await getAPIOperation(serviceName);
108
+ return {
109
+ name: serviceName,
110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+ initializer: alsoInject([
112
+ `mainWrapper>OPERATION_WRAPPER_${serviceName.replace('OPERATION_HANDLER_', '')}`,
113
+ `baseHandler>${operationId}`,
114
+ ], initHandler),
115
+ path: resolve('@whook/gcp-functions/dist/services/HANDLER'),
116
+ };
117
+ }
71
118
  if (BUILD_CONSTANTS[serviceName]) {
72
119
  return {
73
120
  initializer: constant(serviceName, BUILD_CONSTANTS[serviceName]),
@@ -77,25 +124,30 @@ const initializerWrapper = (async ({ BUILD_CONSTANTS = {}, $injector, $instance,
77
124
  return $autoload(serviceName);
78
125
  }
79
126
  catch (err) {
80
- log('error', `Build error while loading "${serviceName}".`);
127
+ log('error', `💥 - Build error while loading "${serviceName}".`);
81
128
  log('error-stack', printStackTrace(err));
82
129
  throw err;
83
130
  }
84
131
  };
132
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
133
  });
86
134
  /**
87
- * Wrap the _autoload service in order to build AWS
88
- * Lambda compatible code.
135
+ * Wrap the _autoload service in order to build for GCP
136
+ * Functions compatible code.
89
137
  * @param {Object} services
90
138
  * The services ENV depends on
91
- * @param {Object} services.NODE_ENV
92
- * The injected NODE_ENV value to add it to the build env
93
- * @param {Object} [services.PROXYED_ENV_VARS={}]
94
- * A list of environment variable names to proxy
139
+ * @param {Object} [services.BUILD_CONSTANTS]
140
+ * Service whose contents should be considered as constants
141
+ * @param {Object} $instance
142
+ * A Knifecycle instance
143
+ * @param {Object} $injector
144
+ * The Knifecycle injector
95
145
  * @param {Object} [services.log=noop]
96
146
  * An optional logging service
97
147
  * @return {Promise<Object>}
98
148
  * A promise of an object containing the reshaped env vars.
99
149
  */
100
- export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log'], wrapInitializer(initializerWrapper, initAutoload));
150
+ export default alsoInject(['?BUILD_CONSTANTS', '$instance', '$injector', '?log'],
151
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+ wrapInitializer(initializerWrapper, initAutoload));
101
153
  //# sourceMappingURL=_autoload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_autoload.js","sourceRoot":"","sources":["../../src/services/_autoload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_autoload.js","sourceRoot":"","sources":["../../src/services/_autoload.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { service } from 'knifecycle';
2
- // eslint-disable-next-line
3
- export default service(async () => console.log.bind(console), 'log');
2
+ import { log } from 'node:console';
3
+ export default service(async () => log, 'log');
4
4
  //# sourceMappingURL=log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/services/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,2BAA2B;AAC3B,eAAe,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/services/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,eAAe,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { DEFAULT_PARSERS, DEFAULT_STRINGIFYERS, DEFAULT_DECODERS, DEFAULT_ENCODERS } from '@whook/http-router';
3
+ import stream from 'stream';
4
+ import type { WhookQueryStringParser } from '@whook/http-router';
5
+ import type { WhookResponse, WhookHandler, WhookObfuscatorService, WhookOperation, WhookWrapper } from '@whook/whook';
6
+ import type { TimeService, LogService } from 'common-services';
7
+ import type { OpenAPIV3 } from 'openapi-types';
8
+ import type { CORSConfig } from '@whook/cors';
9
+ import type { AppEnvVars } from 'application-services';
10
+ export type WhookWrapHTTPFunctionDependencies = {
11
+ CORS: CORSConfig;
12
+ ENV: AppEnvVars;
13
+ DEBUG_NODE_ENVS?: string[];
14
+ DECODERS?: typeof DEFAULT_DECODERS;
15
+ ENCODERS?: typeof DEFAULT_ENCODERS;
16
+ PARSERS?: typeof DEFAULT_PARSERS;
17
+ STRINGIFYERS?: typeof DEFAULT_STRINGIFYERS;
18
+ QUERY_PARSER: WhookQueryStringParser;
19
+ BUFFER_LIMIT?: string;
20
+ obfuscator: WhookObfuscatorService;
21
+ time?: TimeService;
22
+ log?: LogService;
23
+ OPERATION_API: OpenAPIV3.Document;
24
+ };
25
+ declare const _default: import("knifecycle").ServiceInitializer<WhookWrapHTTPFunctionDependencies, WhookWrapper<WhookHandler<import("knifecycle").Parameters, WhookResponse<number, void | import("@whook/http-transaction").WhookHeaders, void | stream.Readable | import("type-fest").JsonValue>, WhookOperation<Record<string, unknown>>>>>;
26
+ export default _default;
@@ -1,46 +1,56 @@
1
- import { printStackTrace } from 'yerror';
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { YError, printStackTrace } from 'yerror';
2
3
  import { DEFAULT_DEBUG_NODE_ENVS, DEFAULT_BUFFER_LIMIT, DEFAULT_PARSERS, DEFAULT_STRINGIFYERS, DEFAULT_DECODERS, DEFAULT_ENCODERS, extractOperationSecurityParameters, castParameters, } from '@whook/http-router';
3
- import { reuseSpecialProps, alsoInject } from 'knifecycle';
4
+ import { autoService } from 'knifecycle';
4
5
  import Ajv from 'ajv';
5
6
  import addAJVFormats from 'ajv-formats';
6
7
  import bytes from 'bytes';
7
8
  import { YHTTPError } from 'yhttperror';
8
9
  import { prepareParametersValidators, prepareBodyValidator, applyValidators, filterHeaders, extractBodySpec, extractResponseSpec, checkResponseCharset, checkResponseMediaType, executeHandler, extractProduceableMediaTypes, extractConsumableMediaTypes, getBody, sendBody, } from '@whook/http-router';
9
- import { noop, compose, identity, lowerCaseHeaders } from '@whook/whook';
10
+ import { noop, identity, lowerCaseHeaders } from '@whook/whook';
10
11
  import stream from 'stream';
11
12
  const SEARCH_SEPARATOR = '?';
12
13
  const PATH_SEPARATOR = '/';
13
- export default function wrapHandlerForAWSHTTPFunction(initHandler) {
14
- return alsoInject([
15
- 'OPERATION_API',
16
- 'WRAPPERS',
17
- '?DEBUG_NODE_ENVS',
18
- 'NODE_ENV',
19
- '?DECODERS',
20
- '?ENCODERS',
21
- '?PARSERS',
22
- '?STRINGIFYERS',
23
- '?BUFFER_LIMIT',
24
- 'QUERY_PARSER',
25
- 'obfuscator',
26
- '?log',
27
- '?time',
28
- ], reuseSpecialProps(initHandler, initHandlerForAWSHTTPFunction.bind(null, initHandler)));
29
- }
30
- async function initHandlerForAWSHTTPFunction(initHandler, { OPERATION_API, WRAPPERS, NODE_ENV, DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS, DECODERS = DEFAULT_DECODERS, ENCODERS = DEFAULT_ENCODERS, log = noop, time = Date.now.bind(Date), ...services }) {
14
+ /**
15
+ * Wrap an handler to make it work with GCP Functions.
16
+ * @param {Object} services
17
+ * The services the wrapper depends on
18
+ * @param {Object} services.ENV
19
+ * The process environment
20
+ * @param {Object} services.OPERATION_API
21
+ * An OpenAPI definitition for that handler
22
+ * @param {Object} services.CORS
23
+ * The CORS for the server
24
+ * @param {Object} [services.time]
25
+ * An optional time service
26
+ * @param {Object} [services.log=noop]
27
+ * An optional logging service
28
+ * @return {Promise<Object>}
29
+ * A promise of an object containing the reshaped env vars.
30
+ */
31
+ async function initWrapHandlerForGoogleHTTPFunction({ OPERATION_API, ENV, DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS, CORS, DECODERS = DEFAULT_DECODERS, ENCODERS = DEFAULT_ENCODERS, PARSERS = DEFAULT_PARSERS, STRINGIFYERS = DEFAULT_STRINGIFYERS, BUFFER_LIMIT = DEFAULT_BUFFER_LIMIT, QUERY_PARSER, obfuscator, log = noop, }) {
32
+ log('debug', '📥 - Initializing the AWS Lambda cron wrapper.');
31
33
  const path = Object.keys(OPERATION_API.paths)[0];
32
- const method = Object.keys(OPERATION_API.paths[path])[0];
33
- const OPERATION = {
34
+ const pathObject = OPERATION_API.paths[path];
35
+ if (typeof pathObject === 'undefined' || '$ref' in pathObject) {
36
+ throw new YError('E_BAD_OPERATION', 'pathObject', pathObject);
37
+ }
38
+ const method = Object.keys(pathObject)[0];
39
+ const operationObject = pathObject[method];
40
+ if (typeof operationObject === 'undefined' || '$ref' in operationObject) {
41
+ throw new YError('E_BAD_OPERATION', 'operationObject', operationObject);
42
+ }
43
+ const operation = {
34
44
  path,
35
45
  method,
36
- ...OPERATION_API.paths[path][method],
46
+ ...operationObject,
37
47
  };
38
48
  const consumableCharsets = Object.keys(DECODERS);
39
49
  const produceableCharsets = Object.keys(ENCODERS);
40
- const consumableMediaTypes = extractConsumableMediaTypes(OPERATION);
41
- const produceableMediaTypes = extractProduceableMediaTypes(OPERATION);
50
+ const consumableMediaTypes = extractConsumableMediaTypes(operation);
51
+ const produceableMediaTypes = extractProduceableMediaTypes(operation);
42
52
  const ajv = new Ajv.default({
43
- verbose: DEBUG_NODE_ENVS.includes(NODE_ENV),
53
+ verbose: DEBUG_NODE_ENVS.includes(ENV.NODE_ENV),
44
54
  strict: true,
45
55
  logger: {
46
56
  log: (...args) => log?.('debug', ...args),
@@ -51,39 +61,37 @@ async function initHandlerForAWSHTTPFunction(initHandler, { OPERATION_API, WRAPP
51
61
  coerceTypes: true,
52
62
  });
53
63
  addAJVFormats.default(ajv);
54
- const ammendedParameters = extractOperationSecurityParameters(OPERATION_API, OPERATION);
55
- const validators = prepareParametersValidators(ajv, OPERATION.operationId, (OPERATION.parameters || []).concat(ammendedParameters));
56
- const bodyValidator = prepareBodyValidator(ajv, OPERATION);
57
- const applyWrappers = compose(...WRAPPERS);
58
- const handler = await applyWrappers(initHandler)({
59
- OPERATION,
60
- DEBUG_NODE_ENVS,
61
- NODE_ENV,
62
- ...services,
63
- time,
64
- log,
65
- });
66
- return handleForAWSHTTPFunction.bind(null, {
67
- OPERATION,
68
- NODE_ENV,
69
- DEBUG_NODE_ENVS,
70
- DECODERS,
71
- ENCODERS,
72
- log,
73
- time,
74
- ...services,
75
- }, {
76
- consumableMediaTypes,
77
- produceableMediaTypes,
78
- consumableCharsets,
79
- produceableCharsets,
80
- validators,
81
- bodyValidator,
82
- ammendedParameters,
83
- }, handler);
64
+ const ammendedParameters = extractOperationSecurityParameters(OPERATION_API, operation);
65
+ const validators = prepareParametersValidators(ajv, operation.operationId, (operation.parameters || []).concat(ammendedParameters));
66
+ const bodyValidator = prepareBodyValidator(ajv, operation);
67
+ const wrapper = async (handler) => {
68
+ const wrappedHandler = handleForAWSHTTPFunction.bind(null, {
69
+ ENV,
70
+ DEBUG_NODE_ENVS,
71
+ CORS,
72
+ DECODERS,
73
+ ENCODERS,
74
+ PARSERS,
75
+ STRINGIFYERS,
76
+ BUFFER_LIMIT,
77
+ QUERY_PARSER,
78
+ obfuscator,
79
+ log,
80
+ }, {
81
+ consumableMediaTypes,
82
+ produceableMediaTypes,
83
+ consumableCharsets,
84
+ produceableCharsets,
85
+ validators,
86
+ bodyValidator,
87
+ operation,
88
+ }, handler);
89
+ return wrappedHandler;
90
+ };
91
+ return wrapper;
84
92
  }
85
- async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV, ENCODERS, DECODERS, PARSERS = DEFAULT_PARSERS, STRINGIFYERS = DEFAULT_STRINGIFYERS, BUFFER_LIMIT = DEFAULT_BUFFER_LIMIT, QUERY_PARSER, CORS, log, obfuscator, }, { consumableMediaTypes, produceableMediaTypes, consumableCharsets, produceableCharsets, validators, bodyValidator, }, handler, req, res) {
86
- const debugging = (DEBUG_NODE_ENVS || []).includes(NODE_ENV);
93
+ async function handleForAWSHTTPFunction({ ENV, DEBUG_NODE_ENVS = DEFAULT_DEBUG_NODE_ENVS, CORS, DECODERS, ENCODERS, PARSERS, STRINGIFYERS, BUFFER_LIMIT, QUERY_PARSER, obfuscator, log, }, { consumableMediaTypes, produceableMediaTypes, consumableCharsets, produceableCharsets, validators, bodyValidator, operation, }, handler, req, res) {
94
+ const debugging = (DEBUG_NODE_ENVS || []).includes(ENV.NODE_ENV);
87
95
  const bufferLimit = bytes.parse(BUFFER_LIMIT);
88
96
  log?.('info', 'GCP_FUNCTIONS_REQUEST', JSON.stringify({
89
97
  url: req.originalUrl,
@@ -103,7 +111,6 @@ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV,
103
111
  headers: obfuscator.obfuscateSensibleHeaders(request.headers),
104
112
  }));
105
113
  try {
106
- const operation = OPERATION;
107
114
  const bodySpec = extractBodySpec(request, consumableMediaTypes, consumableCharsets);
108
115
  responseSpec = extractResponseSpec(operation, request, produceableMediaTypes, produceableCharsets);
109
116
  try {
@@ -115,7 +122,7 @@ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV,
115
122
  const path = request.url.split(SEARCH_SEPARATOR)[0];
116
123
  const parts = path.split(PATH_SEPARATOR).filter(identity);
117
124
  const search = request.url.substr(request.url.split(SEARCH_SEPARATOR)[0].length);
118
- const pathParameters = OPERATION.path
125
+ const pathParameters = operation.path
119
126
  .split(PATH_SEPARATOR)
120
127
  .filter(identity)
121
128
  .map((part, index) => {
@@ -133,7 +140,7 @@ async function handleForAWSHTTPFunction({ OPERATION, DEBUG_NODE_ENVS, NODE_ENV,
133
140
  [name]: value,
134
141
  }), {});
135
142
  // TODO: Update strictQS to handle OpenAPI 3
136
- const retroCompatibleQueryParameters = (OPERATION.parameters || [])
143
+ const retroCompatibleQueryParameters = (operation.parameters || [])
137
144
  .filter((p) => p.in === 'query')
138
145
  .map((p) => ({ ...p, ...p.schema }));
139
146
  parameters = {
@@ -260,4 +267,5 @@ function obfuscateEventBody(obfuscator, rawBody) {
260
267
  }
261
268
  return rawBody;
262
269
  }
263
- //# sourceMappingURL=googleHTTPFunction.js.map
270
+ export default autoService(initWrapHandlerForGoogleHTTPFunction);
271
+ //# sourceMappingURL=wrapHandlerForGoogleHTTPFunction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapHandlerForGoogleHTTPFunction.js","sourceRoot":"","sources":["../../src/wrappers/wrapHandlerForGoogleHTTPFunction.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,4 @@
1
1
  {
2
- "name": "@whook/gcp-functions",
3
- "version": "12.0.2",
4
- "description": "Build and deploy to GCP Cloud Functions with Whook.",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
2
  "metapak": {
9
3
  "configs": [
10
4
  "main",
@@ -34,6 +28,12 @@
34
28
  ]
35
29
  }
36
30
  },
31
+ "name": "@whook/gcp-functions",
32
+ "version": "13.1.0",
33
+ "description": "Build and deploy to GCP Cloud Functions with Whook.",
34
+ "type": "module",
35
+ "main": "dist/index.js",
36
+ "types": "dist/index.d.ts",
37
37
  "author": {
38
38
  "name": "Nicolas Froidure",
39
39
  "email": "nicolas.froidure@insertafter.com",
@@ -49,40 +49,44 @@
49
49
  },
50
50
  "homepage": "https://github.com/nfroidure/whook",
51
51
  "dependencies": {
52
- "@whook/cors": "^12.0.2",
53
- "@whook/http-router": "^12.0.1",
54
- "@whook/whook": "^12.0.2",
55
- "ajv": "^8.11.2",
52
+ "@whook/cors": "^13.1.0",
53
+ "@whook/http-router": "^13.1.0",
54
+ "@whook/whook": "^13.1.0",
55
+ "ajv": "^8.12.0",
56
56
  "ajv-formats": "^2.1.1",
57
- "camelcase": "^7.0.1",
58
- "common-services": "^12.1.0",
57
+ "application-services": "^4.0.0",
58
+ "camelcase": "^8.0.0",
59
+ "common-services": "^15.0.0",
59
60
  "cpr": "3.0.1",
60
- "knifecycle": "^14.1.0",
61
- "mkdirp": "^1.0.4",
62
- "openapi-types": "^12.1.0",
63
- "qs": "^6.11.0",
64
- "strict-qs": "^7.0.2",
65
- "yerror": "^6.2.1"
61
+ "knifecycle": "^17.0.1",
62
+ "mkdirp": "^3.0.1",
63
+ "openapi-types": "^12.1.3",
64
+ "qs": "^6.11.2",
65
+ "strict-qs": "^8.0.1",
66
+ "yerror": "^8.0.0"
66
67
  },
67
68
  "devDependencies": {
68
- "@typescript-eslint/eslint-plugin": "^5.36.0",
69
- "@typescript-eslint/parser": "^5.36.0",
70
- "esbuild": "^0.15.6",
71
- "esbuild-jest": "^0.5.0",
72
- "eslint": "^8.23.0",
73
- "eslint-config-prettier": "^8.5.0",
74
- "eslint-plugin-prettier": "^4.2.1",
75
- "jest": "^29.0.1",
76
- "jsdoc-to-markdown": "^7.1.1",
77
- "metapak": "^4.0.6",
78
- "metapak-nfroidure": "13.0.0",
79
- "prettier": "^2.7.1",
80
- "rimraf": "^3.0.2",
81
- "typescript": "^4.8.2"
69
+ "@swc/cli": "^0.1.62",
70
+ "@swc/core": "^1.3.77",
71
+ "@swc/helpers": "^0.5.1",
72
+ "@swc/jest": "^0.2.29",
73
+ "@types/mkdirp": "^1.0.2",
74
+ "@typescript-eslint/eslint-plugin": "^6.4.0",
75
+ "@typescript-eslint/parser": "^6.4.0",
76
+ "eslint": "^8.47.0",
77
+ "eslint-config-prettier": "^9.0.0",
78
+ "eslint-plugin-prettier": "^5.0.0",
79
+ "jest": "^29.6.2",
80
+ "jsdoc-to-markdown": "^8.0.0",
81
+ "metapak": "^5.1.7",
82
+ "metapak-nfroidure": "15.0.3",
83
+ "prettier": "^3.0.2",
84
+ "rimraf": "^5.0.1",
85
+ "typescript": "^5.1.6"
82
86
  },
83
87
  "contributors": [],
84
88
  "engines": {
85
- "node": ">=16.15.0"
89
+ "node": ">=18.16.0"
86
90
  },
87
91
  "files": [
88
92
  "dist",
@@ -141,11 +145,8 @@
141
145
  "testEnvironment": "node",
142
146
  "transform": {
143
147
  "^.+\\.tsx?$": [
144
- "esbuild-jest",
145
- {
146
- "sourcemap": true,
147
- "format": "esm"
148
- }
148
+ "@swc/jest",
149
+ {}
149
150
  ]
150
151
  },
151
152
  "moduleNameMapper": {
@@ -154,10 +155,11 @@
154
155
  },
155
156
  "extensionsToTreatAsEsm": [
156
157
  ".ts"
157
- ]
158
+ ],
159
+ "prettierPath": null
158
160
  },
159
161
  "scripts": {
160
- "build": "rimraf -f 'dist' && tsc --outDir dist",
162
+ "build": "rimraf 'dist' && tsc --outDir dist",
161
163
  "cli": "env NODE_ENV=${NODE_ENV:-cli}",
162
164
  "cover": "npm run jest -- --coverage",
163
165
  "doc": "echo \"# API\" > API.md; jsdoc2md 'dist/**/*.js' >> API.md && git add API.md",
@@ -165,7 +167,9 @@
165
167
  "lint": "eslint 'src/**/*.ts'",
166
168
  "metapak": "metapak",
167
169
  "prettier": "prettier --write 'src/**/*.ts'",
168
- "test": "npm run jest"
170
+ "rebuild": "swc ./src -s -d dist -C jsc.target=es2022",
171
+ "test": "npm run jest",
172
+ "type-check": "tsc --pretty --noEmit"
169
173
  },
170
- "gitHead": "9b78e7257f9afafd8d661ad8c21e4a60971884e9"
174
+ "gitHead": "7b07d5d2ab99610b95e36a3109c494d73735fdac"
171
175
  }
@@ -54,14 +54,14 @@ export const definition: WhookCommandDefinition = {
54
54
  export default extra(definition, autoService(initTestHTTPFunctionCommand));
55
55
 
56
56
  async function initTestHTTPFunctionCommand({
57
- NODE_ENV,
57
+ APP_ENV,
58
58
  PROJECT_DIR,
59
59
  COMPILER_OPTIONS = DEFAULT_COMPILER_OPTIONS,
60
60
  API,
61
61
  log,
62
62
  args,
63
63
  }: {
64
- NODE_ENV: string;
64
+ APP_ENV: string;
65
65
  PROJECT_DIR: string;
66
66
  COMPILER_OPTIONS?: WhookCompilerOptions;
67
67
  API: OpenAPIV3.Document;
@@ -79,8 +79,7 @@ async function initTestHTTPFunctionCommand({
79
79
  }>(definition.arguments, args);
80
80
  const extension = COMPILER_OPTIONS.format === 'cjs' ? '.cjs' : '.mjs';
81
81
  const handler = await loadFunction(
82
- { PROJECT_DIR, log },
83
- NODE_ENV,
82
+ { APP_ENV, PROJECT_DIR, log },
84
83
  name,
85
84
  type,
86
85
  extension,
@@ -154,9 +153,11 @@ async function initTestHTTPFunctionCommand({
154
153
  await new Promise<void>((resolve, reject) => {
155
154
  const gcpfResponse = new stream.PassThrough();
156
155
 
156
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
157
157
  (gcpfResponse as any).set = (name: string, value: string): void => {
158
158
  response.headers[name] = value;
159
159
  };
160
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
160
161
  (gcpfResponse as any).status = (code: number): void => {
161
162
  response.status = code;
162
163
  };
@@ -0,0 +1,11 @@
1
+ import { Knifecycle } from 'knifecycle';
2
+ import { describe, test, expect } from '@jest/globals';
3
+ import { prepareBuildEnvironment } from './index.js';
4
+
5
+ describe('prepareBuildEnvironment', () => {
6
+ test('should work', async () => {
7
+ const $ = await prepareBuildEnvironment(new Knifecycle());
8
+
9
+ expect($).toBeDefined();
10
+ });
11
+ });