@whook/gcp-functions 9.0.0 → 9.0.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.
package/README.md CHANGED
@@ -103,7 +103,8 @@ Declare this module types in your `src/whook.d.ts` type
103
103
  ```diff
104
104
  + import type { WhookCompilerConfig } from '@whook/whook';
105
105
  + import type {
106
- + WhookAPIOperationGCPFunctionConfig
106
+ + WhookGCPBuildConfig,
107
+ + WhookAPIOperationGCPFunctionConfig
107
108
  + } from '@whook/gcp-functions';
108
109
 
109
110
  declare module '@whook/whook' {
@@ -112,7 +113,9 @@ declare module '@whook/whook' {
112
113
 
113
114
  export interface WhookConfigs
114
115
  - extends WhookBaseConfigs {}
115
- + extends WhookBaseConfigs, WhookCompilerConfig {}
116
+ + extends WhookBaseConfigs,
117
+ + WhookGCPBuildConfig,
118
+ + WhookCompilerConfig {}
116
119
 
117
120
  // ...
118
121
 
@@ -121,6 +124,7 @@ declare module '@whook/whook' {
121
124
  U extends {
122
125
  [K in keyof U]: K extends `x-${string}` ? Record<string, unknown> : never;
123
126
  } = unknown,
127
+ V extends Record<string, unknown> = Record<string, unknown>,
124
128
  > extends WhookBaseAPIHandlerDefinition<T, U> {
125
129
  operation: U & WhookAPIOperation<
126
130
  T &
package/dist/index.d.ts CHANGED
@@ -1,9 +1,7 @@
1
1
  import Knifecycle from 'knifecycle';
2
2
  import type { WhookCompilerOptions } from '@whook/whook';
3
- import type { BuildOptions } from 'knifecycle/dist/build';
4
3
  export declare const DEFAULT_BUILD_PARALLELISM = 10;
5
- export declare type WhookBuildConfig = {
6
- BUILD_OPTIONS?: BuildOptions;
4
+ export declare type WhookGCPBuildConfig = {
7
5
  BUILD_PARALLELISM?: number;
8
6
  };
9
7
  export declare type WhookAPIOperationGCPFunctionConfig = {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["DEFAULT_BUILD_PARALLELISM","readFileAsync","util","promisify","fs","readFile","writeFileAsync","writeFile","cprAsync","cpr","BUILD_DEFINITIONS","http","type","wrapper","name","path","join","__dirname","suffix","prepareBuildEnvironment","$","Knifecycle","register","constant","ENV","log","time","delay","initInitializerBuilder","initBuildAutoloader","initCompiler","runBuild","aPrepareBuildEnvironment","handlerName","process","argv","NODE_ENV","BUILD_PARALLELISM","BUILD_OPTIONS","PROJECT_DIR","compiler","$autoload","API","buildInitializer","run","operations","dereferenceOpenAPIOperations","getOpenAPIOperations","filter","operation","sourceOperationId","operationId","length","processOperations","DEFAULT_BUILD_OPTIONS","destroy","err","console","error","stack","JSON","stringify","params","exit","operationsLeft","slice","Promise","all","map","buildAnyLambda","whookConfig","operationType","entryPoint","finalEntryPoint","buildDefinition","applyWrapper","require","default","rootNode","lambdaPath","finalHandlerInitializer","initializer","initializerContent","SPECIAL_PROPS","INJECT","indexContent","buildLambdaIndex","mkdirp","copyStaticFiles","staticFiles","ensureFileAsync","buildFinalLambda","YError","wrap","buildWrapper","options","modules","contents","mappings","compilerOptions","resolve","staticFile","copyFiles","source","destination","theError","data","code","overwrite","content","encoding","oldContent"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint global-require:0 */\nimport fs from 'fs';\nimport util from 'util';\nimport path from 'path';\nimport mkdirp from 'mkdirp';\nimport cpr from 'cpr';\nimport YError from 'yerror';\nimport Knifecycle, {\n SPECIAL_PROPS,\n constant,\n initInitializerBuilder,\n} from 'knifecycle';\nimport { DEFAULT_BUILD_OPTIONS, initCompiler } from '@whook/whook';\nimport initBuildAutoloader from './services/_autoload';\nimport {\n dereferenceOpenAPIOperations,\n getOpenAPIOperations,\n} from '@whook/http-router';\nimport type {\n Autoloader,\n Dependencies,\n BuildInitializer,\n Initializer,\n Service,\n} from 'knifecycle';\nimport type {\n WhookOperation,\n WhookCompilerOptions,\n WhookCompilerService,\n} from '@whook/whook';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { LogService } from 'common-services';\nimport type { CprOptions } from 'cpr';\nimport type { BuildOptions } from 'knifecycle/dist/build';\n\nexport const DEFAULT_BUILD_PARALLELISM = 10;\n\nexport type WhookBuildConfig = {\n BUILD_OPTIONS?: BuildOptions;\n BUILD_PARALLELISM?: number;\n};\nexport type WhookAPIOperationGCPFunctionConfig = {\n type?: 'http';\n sourceOperationId?: string;\n staticFiles?: string[];\n compilerOptions?: WhookCompilerOptions;\n suffix?: string;\n};\n\nconst readFileAsync = util.promisify(fs.readFile) as (\n path: string,\n encoding: string,\n) => Promise<string>;\nconst writeFileAsync = util.promisify(fs.writeFile) as (\n path: string,\n content: string,\n encoding: string,\n) => Promise<void>;\nconst cprAsync = util.promisify(cpr) as (\n source: string,\n destination: string,\n options: CprOptions,\n) => Promise<string[]>;\n\nconst BUILD_DEFINITIONS: Record<\n NonNullable<WhookAPIOperationGCPFunctionConfig['type']>,\n {\n type: string;\n wrapper: { name: string; path: string };\n suffix?: string;\n }\n> = {\n http: {\n type: 'HTTP',\n wrapper: {\n name: 'wrapHandlerForGoogleHTTPFunction',\n path: path.join(__dirname, 'wrappers', 'googleHTTPFunction'),\n },\n suffix: 'Wrapped',\n },\n};\n\nexport async function prepareBuildEnvironment<T extends Knifecycle>(\n $: T = new Knifecycle() as T,\n): Promise<T> {\n $.register(\n constant('INITIALIZER_PATH_MAP', {\n ENV: '@whook/whook/dist/services/ProxyedENV',\n log: __dirname + '/services/log',\n time: 'common-services/dist/time',\n delay: 'common-services/dist/delay',\n }),\n );\n $.register(initInitializerBuilder);\n $.register(initBuildAutoloader);\n $.register(initCompiler);\n $.register(constant('PORT', 1337));\n $.register(constant('HOST', 'localhost'));\n\n return $;\n}\n\nexport async function runBuild(\n aPrepareBuildEnvironment: typeof prepareBuildEnvironment,\n): Promise<void> {\n try {\n const handlerName = process.argv[2];\n const $ = await aPrepareBuildEnvironment();\n const {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n API,\n buildInitializer,\n }: WhookBuildConfig & {\n NODE_ENV: string;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n API: OpenAPIV3.Document;\n buildInitializer: BuildInitializer;\n } = await $.run([\n 'NODE_ENV',\n '?BUILD_PARALLELISM',\n '?BUILD_OPTIONS',\n 'PROJECT_DIR',\n 'process',\n 'compiler',\n 'log',\n '$autoload',\n 'API',\n 'buildInitializer',\n ]);\n\n log('info', 'GCP Functions build Environment initialized 🚀🌕');\n\n const operations = (\n await dereferenceOpenAPIOperations(\n API,\n getOpenAPIOperations<WhookAPIOperationGCPFunctionConfig>(API),\n )\n ).filter((operation) => {\n if (handlerName) {\n const sourceOperationId =\n operation['x-whook'] && operation['x-whook'].sourceOperationId;\n\n return (\n handlerName === operation.operationId ||\n handlerName === sourceOperationId\n );\n }\n return true;\n });\n\n log('warning', `${operations.length} operations to process.`);\n await processOperations(\n {\n NODE_ENV,\n BUILD_OPTIONS: BUILD_OPTIONS || DEFAULT_BUILD_OPTIONS,\n BUILD_PARALLELISM: BUILD_PARALLELISM || DEFAULT_BUILD_PARALLELISM,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operations,\n );\n await $.destroy();\n } catch (err) {\n // eslint-disable-next-line\n console.error(\n '💀 - Cannot launch the build:',\n (err as YError).stack,\n JSON.stringify((err as YError).params, null, 2),\n );\n process.exit(1);\n }\n}\n\nasync function processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: {\n NODE_ENV: string;\n BUILD_PARALLELISM: number;\n BUILD_OPTIONS: BuildOptions;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operations: WhookOperation<WhookAPIOperationGCPFunctionConfig>[],\n): Promise<void> {\n const operationsLeft = operations.slice(BUILD_PARALLELISM);\n\n await Promise.all(\n operations.slice(0, BUILD_PARALLELISM).map((operation) =>\n buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operation,\n ),\n ),\n );\n\n if (operationsLeft.length) {\n log('info', operationsLeft.length, ' operations left.');\n return processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operationsLeft,\n );\n }\n log('info', 'No more operations.');\n}\n\nasync function buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: {\n NODE_ENV: string;\n PROJECT_DIR: string;\n BUILD_OPTIONS: BuildOptions;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operation: WhookOperation<WhookAPIOperationGCPFunctionConfig>,\n): Promise<void> {\n const { operationId } = operation;\n\n try {\n const whookConfig: WhookAPIOperationGCPFunctionConfig =\n operation['x-whook'] || {};\n const operationType = whookConfig.type || 'http';\n const sourceOperationId = whookConfig.sourceOperationId;\n const entryPoint = operationId;\n const finalEntryPoint =\n (sourceOperationId ? sourceOperationId : operationId) +\n ((operation['x-whook'] || {}).suffix || '');\n log('warning', `Building ${operationType} \"${finalEntryPoint}\"...`);\n const buildDefinition = BUILD_DEFINITIONS[operationType];\n // eslint-disable-next-line\n const applyWrapper = require(buildDefinition.wrapper.path).default;\n const rootNode = await $autoload(\n entryPoint + (buildDefinition.suffix || ''),\n );\n const lambdaPath = path.join(\n PROJECT_DIR,\n 'builds',\n NODE_ENV,\n finalEntryPoint,\n );\n const finalHandlerInitializer = applyWrapper(rootNode.initializer);\n\n const initializerContent = await buildInitializer(\n finalHandlerInitializer[SPECIAL_PROPS.INJECT].map((name) =>\n name === 'OPERATION_API'\n ? `OPERATION_API>OPERATION_API_${finalEntryPoint}`\n : name,\n ),\n BUILD_OPTIONS,\n );\n const indexContent = await buildLambdaIndex(\n rootNode,\n {\n name: buildDefinition.wrapper.name,\n path: buildDefinition.wrapper.path,\n },\n BUILD_OPTIONS,\n );\n\n await mkdirp(lambdaPath);\n await Promise.all([\n copyStaticFiles(\n { PROJECT_DIR, log },\n lambdaPath,\n whookConfig.staticFiles || [],\n ),\n ensureFileAsync(\n { log },\n path.join(lambdaPath, 'initialize.js'),\n initializerContent,\n ),\n ensureFileAsync({ log }, path.join(lambdaPath, 'main.js'), indexContent),\n ]);\n await buildFinalLambda({ compiler, log }, lambdaPath, whookConfig);\n } catch (err) {\n log('error', `Error building \"${operationId}\"...`);\n log('error-stack', (err as Error).stack || 'no_stack_trace');\n log('debug', JSON.stringify((err as YError).params, null, 2));\n throw YError.wrap(err as Error, 'E_LAMBDA_BUILD', operationId);\n }\n}\n\nasync function buildLambdaIndex(\n rootNode: { path: string },\n buildWrapper: { name: string; path: string },\n options: BuildOptions,\n): Promise<string> {\n return `${\n options.modules === 'commonjs'\n ? `const pickModule = (m) => { return m && m.default || m; }\nconst initHandler = pickModule(require('${rootNode.path}'));\nconst ${buildWrapper.name} = pickModule(require('${buildWrapper.path}'));\nconst { initialize } = require('./initialize');`\n : `import initHandler from '${rootNode.path}';\nimport ${buildWrapper.name} from '${buildWrapper.path}';\nimport { initialize } from './initialize';`\n }\n\nconst handlerInitializer = ${buildWrapper.name}(\n initHandler\n);\n\nconst handlerPromise = initialize()\n .then(handlerInitializer);\n\n${\n options.modules === 'commonjs'\n ? 'module.exports = {}; module.exports.default = '\n : 'export default '\n}function handler (req, res) {\n return handlerPromise\n .then(handler => handler(req, res));\n};\n`;\n}\n\nasync function buildFinalLambda(\n { compiler, log }: { compiler: WhookCompilerService; log: LogService },\n lambdaPath: string,\n whookConfig: WhookAPIOperationGCPFunctionConfig,\n): Promise<void> {\n const entryPoint = `${lambdaPath}/main.js`;\n const { contents, mappings } = await compiler(\n entryPoint,\n whookConfig.compilerOptions,\n );\n\n await Promise.all([\n ensureFileAsync({ log }, `${lambdaPath}/index.js`, contents, 'utf-8'),\n mappings\n ? ensureFileAsync(\n { log },\n `${lambdaPath}/index.js.map`,\n mappings,\n 'utf-8',\n )\n : Promise.resolve(),\n ]);\n}\n\nasync function copyStaticFiles(\n { PROJECT_DIR, log }: { PROJECT_DIR: string; log: LogService },\n lambdaPath: string,\n staticFiles: string[] = [],\n): Promise<void> {\n await Promise.all(\n staticFiles.map(\n async (staticFile) =>\n await copyFiles(\n { log },\n path.join(PROJECT_DIR, 'node_modules', staticFile),\n path.join(lambdaPath, 'node_modules', staticFile),\n ),\n ),\n );\n}\n\nasync function copyFiles(\n { log }: { log: LogService },\n source: string,\n destination: string,\n): Promise<void> {\n let theError;\n try {\n await mkdirp(destination);\n const data = await readFileAsync(source, 'utf-8');\n await ensureFileAsync({ log }, destination, data, 'utf-8');\n } catch (err) {\n theError = err;\n }\n if (theError) {\n if ('EISDIR' !== theError.code) {\n throw theError;\n }\n await cprAsync(source, destination, {\n overwrite: true,\n });\n }\n}\n\nasync function ensureFileAsync(\n { log }: { log: LogService },\n path: string,\n content: string,\n encoding = 'utf-8',\n): Promise<void> {\n try {\n const oldContent = await readFileAsync(path, encoding);\n\n if (oldContent === content) {\n log('debug', `Ignore unchanged file: \"${path}\".`);\n return;\n }\n } catch (err) {\n log('debug', `Write new file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n }\n log('debug', `Write changed file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["DEFAULT_BUILD_PARALLELISM","readFileAsync","util","promisify","fs","readFile","writeFileAsync","writeFile","cprAsync","cpr","BUILD_DEFINITIONS","http","type","wrapper","name","path","join","__dirname","suffix","prepareBuildEnvironment","$","Knifecycle","register","constant","ENV","log","time","delay","initInitializerBuilder","initBuildAutoloader","initCompiler","runBuild","aPrepareBuildEnvironment","handlerName","process","argv","NODE_ENV","BUILD_PARALLELISM","BUILD_OPTIONS","PROJECT_DIR","compiler","$autoload","API","buildInitializer","run","operations","dereferenceOpenAPIOperations","getOpenAPIOperations","filter","operation","sourceOperationId","operationId","length","processOperations","DEFAULT_BUILD_OPTIONS","destroy","err","console","error","stack","JSON","stringify","params","exit","operationsLeft","slice","Promise","all","map","buildAnyLambda","whookConfig","operationType","entryPoint","finalEntryPoint","buildDefinition","applyWrapper","require","default","rootNode","lambdaPath","finalHandlerInitializer","initializer","initializerContent","SPECIAL_PROPS","INJECT","indexContent","buildLambdaIndex","mkdirp","copyStaticFiles","staticFiles","ensureFileAsync","buildFinalLambda","YError","wrap","buildWrapper","options","modules","contents","mappings","compilerOptions","resolve","staticFile","copyFiles","source","destination","theError","data","code","overwrite","content","encoding","oldContent"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint global-require:0 */\nimport fs from 'fs';\nimport util from 'util';\nimport path from 'path';\nimport mkdirp from 'mkdirp';\nimport cpr from 'cpr';\nimport YError from 'yerror';\nimport Knifecycle, {\n SPECIAL_PROPS,\n constant,\n initInitializerBuilder,\n} from 'knifecycle';\nimport { DEFAULT_BUILD_OPTIONS, initCompiler } from '@whook/whook';\nimport initBuildAutoloader from './services/_autoload';\nimport {\n dereferenceOpenAPIOperations,\n getOpenAPIOperations,\n} from '@whook/http-router';\nimport type {\n Autoloader,\n Dependencies,\n BuildInitializer,\n Initializer,\n Service,\n} from 'knifecycle';\nimport type {\n WhookOperation,\n WhookCompilerConfig,\n WhookCompilerOptions,\n WhookCompilerService,\n} from '@whook/whook';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { LogService } from 'common-services';\nimport type { CprOptions } from 'cpr';\n\nexport const DEFAULT_BUILD_PARALLELISM = 10;\n\nexport type WhookGCPBuildConfig = {\n BUILD_PARALLELISM?: number;\n};\nexport type WhookAPIOperationGCPFunctionConfig = {\n type?: 'http';\n sourceOperationId?: string;\n staticFiles?: string[];\n compilerOptions?: WhookCompilerOptions;\n suffix?: string;\n};\n\nconst readFileAsync = util.promisify(fs.readFile) as (\n path: string,\n encoding: string,\n) => Promise<string>;\nconst writeFileAsync = util.promisify(fs.writeFile) as (\n path: string,\n content: string,\n encoding: string,\n) => Promise<void>;\nconst cprAsync = util.promisify(cpr) as (\n source: string,\n destination: string,\n options: CprOptions,\n) => Promise<string[]>;\n\nconst BUILD_DEFINITIONS: Record<\n NonNullable<WhookAPIOperationGCPFunctionConfig['type']>,\n {\n type: string;\n wrapper: { name: string; path: string };\n suffix?: string;\n }\n> = {\n http: {\n type: 'HTTP',\n wrapper: {\n name: 'wrapHandlerForGoogleHTTPFunction',\n path: path.join(__dirname, 'wrappers', 'googleHTTPFunction'),\n },\n suffix: 'Wrapped',\n },\n};\n\nexport async function prepareBuildEnvironment<T extends Knifecycle>(\n $: T = new Knifecycle() as T,\n): Promise<T> {\n $.register(\n constant('INITIALIZER_PATH_MAP', {\n ENV: '@whook/whook/dist/services/ProxyedENV',\n log: __dirname + '/services/log',\n time: 'common-services/dist/time',\n delay: 'common-services/dist/delay',\n }),\n );\n $.register(initInitializerBuilder);\n $.register(initBuildAutoloader);\n $.register(initCompiler);\n $.register(constant('PORT', 1337));\n $.register(constant('HOST', 'localhost'));\n\n return $;\n}\n\nexport async function runBuild(\n aPrepareBuildEnvironment: typeof prepareBuildEnvironment,\n): Promise<void> {\n try {\n const handlerName = process.argv[2];\n const $ = await aPrepareBuildEnvironment();\n const {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n API,\n buildInitializer,\n }: WhookGCPBuildConfig &\n Pick<WhookCompilerConfig, 'BUILD_OPTIONS'> & {\n NODE_ENV: string;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n API: OpenAPIV3.Document;\n buildInitializer: BuildInitializer;\n } = await $.run([\n 'NODE_ENV',\n '?BUILD_PARALLELISM',\n '?BUILD_OPTIONS',\n 'PROJECT_DIR',\n 'process',\n 'compiler',\n 'log',\n '$autoload',\n 'API',\n 'buildInitializer',\n ]);\n\n log('info', 'GCP Functions build Environment initialized 🚀🌕');\n\n const operations = (\n await dereferenceOpenAPIOperations(\n API,\n getOpenAPIOperations<WhookAPIOperationGCPFunctionConfig>(API),\n )\n ).filter((operation) => {\n if (handlerName) {\n const sourceOperationId =\n operation['x-whook'] && operation['x-whook'].sourceOperationId;\n\n return (\n handlerName === operation.operationId ||\n handlerName === sourceOperationId\n );\n }\n return true;\n });\n\n log('warning', `${operations.length} operations to process.`);\n await processOperations(\n {\n NODE_ENV,\n BUILD_OPTIONS: BUILD_OPTIONS || DEFAULT_BUILD_OPTIONS,\n BUILD_PARALLELISM: BUILD_PARALLELISM || DEFAULT_BUILD_PARALLELISM,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operations,\n );\n await $.destroy();\n } catch (err) {\n // eslint-disable-next-line\n console.error(\n '💀 - Cannot launch the build:',\n (err as YError).stack,\n JSON.stringify((err as YError).params, null, 2),\n );\n process.exit(1);\n }\n}\n\nasync function processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {\n NODE_ENV: string;\n BUILD_PARALLELISM: number;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operations: WhookOperation<WhookAPIOperationGCPFunctionConfig>[],\n): Promise<void> {\n const operationsLeft = operations.slice(BUILD_PARALLELISM);\n\n await Promise.all(\n operations.slice(0, BUILD_PARALLELISM).map((operation) =>\n buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operation,\n ),\n ),\n );\n\n if (operationsLeft.length) {\n log('info', operationsLeft.length, ' operations left.');\n return processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operationsLeft,\n );\n }\n log('info', 'No more operations.');\n}\n\nasync function buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {\n NODE_ENV: string;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operation: WhookOperation<WhookAPIOperationGCPFunctionConfig>,\n): Promise<void> {\n const { operationId } = operation;\n\n try {\n const whookConfig: WhookAPIOperationGCPFunctionConfig =\n operation['x-whook'] || {};\n const operationType = whookConfig.type || 'http';\n const sourceOperationId = whookConfig.sourceOperationId;\n const entryPoint = operationId;\n const finalEntryPoint =\n (sourceOperationId ? sourceOperationId : operationId) +\n ((operation['x-whook'] || {}).suffix || '');\n log('warning', `Building ${operationType} \"${finalEntryPoint}\"...`);\n const buildDefinition = BUILD_DEFINITIONS[operationType];\n // eslint-disable-next-line\n const applyWrapper = require(buildDefinition.wrapper.path).default;\n const rootNode = await $autoload(\n entryPoint + (buildDefinition.suffix || ''),\n );\n const lambdaPath = path.join(\n PROJECT_DIR,\n 'builds',\n NODE_ENV,\n finalEntryPoint,\n );\n const finalHandlerInitializer = applyWrapper(rootNode.initializer);\n\n const initializerContent = await buildInitializer(\n finalHandlerInitializer[SPECIAL_PROPS.INJECT].map((name) =>\n name === 'OPERATION_API'\n ? `OPERATION_API>OPERATION_API_${finalEntryPoint}`\n : name,\n ),\n BUILD_OPTIONS,\n );\n const indexContent = await buildLambdaIndex(\n rootNode,\n {\n name: buildDefinition.wrapper.name,\n path: buildDefinition.wrapper.path,\n },\n BUILD_OPTIONS,\n );\n\n await mkdirp(lambdaPath);\n await Promise.all([\n copyStaticFiles(\n { PROJECT_DIR, log },\n lambdaPath,\n whookConfig.staticFiles || [],\n ),\n ensureFileAsync(\n { log },\n path.join(lambdaPath, 'initialize.js'),\n initializerContent,\n ),\n ensureFileAsync({ log }, path.join(lambdaPath, 'main.js'), indexContent),\n ]);\n await buildFinalLambda({ compiler, log }, lambdaPath, whookConfig);\n } catch (err) {\n log('error', `Error building \"${operationId}\"...`);\n log('error-stack', (err as Error).stack || 'no_stack_trace');\n log('debug', JSON.stringify((err as YError).params, null, 2));\n throw YError.wrap(err as Error, 'E_LAMBDA_BUILD', operationId);\n }\n}\n\nasync function buildLambdaIndex(\n rootNode: { path: string },\n buildWrapper: { name: string; path: string },\n options: NonNullable<WhookCompilerConfig['BUILD_OPTIONS']>,\n): Promise<string> {\n return `${\n options.modules === 'commonjs'\n ? `const pickModule = (m) => { return m && m.default || m; }\nconst initHandler = pickModule(require('${rootNode.path}'));\nconst ${buildWrapper.name} = pickModule(require('${buildWrapper.path}'));\nconst { initialize } = require('./initialize');`\n : `import initHandler from '${rootNode.path}';\nimport ${buildWrapper.name} from '${buildWrapper.path}';\nimport { initialize } from './initialize';`\n }\n\nconst handlerInitializer = ${buildWrapper.name}(\n initHandler\n);\n\nconst handlerPromise = initialize()\n .then(handlerInitializer);\n\n${\n options.modules === 'commonjs'\n ? 'module.exports = {}; module.exports.default = '\n : 'export default '\n}function handler (req, res) {\n return handlerPromise\n .then(handler => handler(req, res));\n};\n`;\n}\n\nasync function buildFinalLambda(\n { compiler, log }: { compiler: WhookCompilerService; log: LogService },\n lambdaPath: string,\n whookConfig: WhookAPIOperationGCPFunctionConfig,\n): Promise<void> {\n const entryPoint = `${lambdaPath}/main.js`;\n const { contents, mappings } = await compiler(\n entryPoint,\n whookConfig.compilerOptions,\n );\n\n await Promise.all([\n ensureFileAsync({ log }, `${lambdaPath}/index.js`, contents, 'utf-8'),\n mappings\n ? ensureFileAsync(\n { log },\n `${lambdaPath}/index.js.map`,\n mappings,\n 'utf-8',\n )\n : Promise.resolve(),\n ]);\n}\n\nasync function copyStaticFiles(\n { PROJECT_DIR, log }: { PROJECT_DIR: string; log: LogService },\n lambdaPath: string,\n staticFiles: string[] = [],\n): Promise<void> {\n await Promise.all(\n staticFiles.map(\n async (staticFile) =>\n await copyFiles(\n { log },\n path.join(PROJECT_DIR, 'node_modules', staticFile),\n path.join(lambdaPath, 'node_modules', staticFile),\n ),\n ),\n );\n}\n\nasync function copyFiles(\n { log }: { log: LogService },\n source: string,\n destination: string,\n): Promise<void> {\n let theError;\n try {\n await mkdirp(destination);\n const data = await readFileAsync(source, 'utf-8');\n await ensureFileAsync({ log }, destination, data, 'utf-8');\n } catch (err) {\n theError = err;\n }\n if (theError) {\n if ('EISDIR' !== theError.code) {\n throw theError;\n }\n await cprAsync(source, destination, {\n overwrite: true,\n });\n }\n}\n\nasync function ensureFileAsync(\n { log }: { log: LogService },\n path: string,\n content: string,\n encoding = 'utf-8',\n): Promise<void> {\n try {\n const oldContent = await readFileAsync(path, encoding);\n\n if (oldContent === content) {\n log('debug', `Ignore unchanged file: \"${path}\".`);\n return;\n }\n } catch (err) {\n log('debug', `Write new file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n }\n log('debug', `Write changed file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["fs","util","path","mkdirp","cpr","YError","Knifecycle","SPECIAL_PROPS","constant","initInitializerBuilder","DEFAULT_BUILD_OPTIONS","initCompiler","initBuildAutoloader","dereferenceOpenAPIOperations","getOpenAPIOperations","DEFAULT_BUILD_PARALLELISM","readFileAsync","promisify","readFile","writeFileAsync","writeFile","cprAsync","BUILD_DEFINITIONS","http","type","wrapper","name","join","__dirname","suffix","prepareBuildEnvironment","$","register","ENV","log","time","delay","runBuild","aPrepareBuildEnvironment","handlerName","process","argv","NODE_ENV","BUILD_PARALLELISM","BUILD_OPTIONS","PROJECT_DIR","compiler","$autoload","API","buildInitializer","run","operations","filter","operation","sourceOperationId","operationId","length","processOperations","destroy","err","console","error","stack","JSON","stringify","params","exit","operationsLeft","slice","Promise","all","map","buildAnyLambda","whookConfig","operationType","entryPoint","finalEntryPoint","buildDefinition","applyWrapper","require","default","rootNode","lambdaPath","finalHandlerInitializer","initializer","initializerContent","INJECT","indexContent","buildLambdaIndex","copyStaticFiles","staticFiles","ensureFileAsync","buildFinalLambda","wrap","buildWrapper","options","modules","contents","mappings","compilerOptions","resolve","staticFile","copyFiles","source","destination","theError","data","code","overwrite","content","encoding","oldContent"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint global-require:0 */\nimport fs from 'fs';\nimport util from 'util';\nimport path from 'path';\nimport mkdirp from 'mkdirp';\nimport cpr from 'cpr';\nimport YError from 'yerror';\nimport Knifecycle, {\n SPECIAL_PROPS,\n constant,\n initInitializerBuilder,\n} from 'knifecycle';\nimport { DEFAULT_BUILD_OPTIONS, initCompiler } from '@whook/whook';\nimport initBuildAutoloader from './services/_autoload';\nimport {\n dereferenceOpenAPIOperations,\n getOpenAPIOperations,\n} from '@whook/http-router';\nimport type {\n Autoloader,\n Dependencies,\n BuildInitializer,\n Initializer,\n Service,\n} from 'knifecycle';\nimport type {\n WhookOperation,\n WhookCompilerOptions,\n WhookCompilerService,\n} from '@whook/whook';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { LogService } from 'common-services';\nimport type { CprOptions } from 'cpr';\nimport type { BuildOptions } from 'knifecycle/dist/build';\n\nexport const DEFAULT_BUILD_PARALLELISM = 10;\n\nexport type WhookBuildConfig = {\n BUILD_OPTIONS?: BuildOptions;\n BUILD_PARALLELISM?: number;\n};\nexport type WhookAPIOperationGCPFunctionConfig = {\n type?: 'http';\n sourceOperationId?: string;\n staticFiles?: string[];\n compilerOptions?: WhookCompilerOptions;\n suffix?: string;\n};\n\nconst readFileAsync = util.promisify(fs.readFile) as (\n path: string,\n encoding: string,\n) => Promise<string>;\nconst writeFileAsync = util.promisify(fs.writeFile) as (\n path: string,\n content: string,\n encoding: string,\n) => Promise<void>;\nconst cprAsync = util.promisify(cpr) as (\n source: string,\n destination: string,\n options: CprOptions,\n) => Promise<string[]>;\n\nconst BUILD_DEFINITIONS: Record<\n NonNullable<WhookAPIOperationGCPFunctionConfig['type']>,\n {\n type: string;\n wrapper: { name: string; path: string };\n suffix?: string;\n }\n> = {\n http: {\n type: 'HTTP',\n wrapper: {\n name: 'wrapHandlerForGoogleHTTPFunction',\n path: path.join(__dirname, 'wrappers', 'googleHTTPFunction'),\n },\n suffix: 'Wrapped',\n },\n};\n\nexport async function prepareBuildEnvironment<T extends Knifecycle>(\n $: T = new Knifecycle() as T,\n): Promise<T> {\n $.register(\n constant('INITIALIZER_PATH_MAP', {\n ENV: '@whook/whook/dist/services/ProxyedENV',\n log: __dirname + '/services/log',\n time: 'common-services/dist/time',\n delay: 'common-services/dist/delay',\n }),\n );\n $.register(initInitializerBuilder);\n $.register(initBuildAutoloader);\n $.register(initCompiler);\n $.register(constant('PORT', 1337));\n $.register(constant('HOST', 'localhost'));\n\n return $;\n}\n\nexport async function runBuild(\n aPrepareBuildEnvironment: typeof prepareBuildEnvironment,\n): Promise<void> {\n try {\n const handlerName = process.argv[2];\n const $ = await aPrepareBuildEnvironment();\n const {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n API,\n buildInitializer,\n }: WhookBuildConfig & {\n NODE_ENV: string;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n API: OpenAPIV3.Document;\n buildInitializer: BuildInitializer;\n } = await $.run([\n 'NODE_ENV',\n '?BUILD_PARALLELISM',\n '?BUILD_OPTIONS',\n 'PROJECT_DIR',\n 'process',\n 'compiler',\n 'log',\n '$autoload',\n 'API',\n 'buildInitializer',\n ]);\n\n log('info', 'GCP Functions build Environment initialized 🚀🌕');\n\n const operations = (\n await dereferenceOpenAPIOperations(\n API,\n getOpenAPIOperations<WhookAPIOperationGCPFunctionConfig>(API),\n )\n ).filter((operation) => {\n if (handlerName) {\n const sourceOperationId =\n operation['x-whook'] && operation['x-whook'].sourceOperationId;\n\n return (\n handlerName === operation.operationId ||\n handlerName === sourceOperationId\n );\n }\n return true;\n });\n\n log('warning', `${operations.length} operations to process.`);\n await processOperations(\n {\n NODE_ENV,\n BUILD_OPTIONS: BUILD_OPTIONS || DEFAULT_BUILD_OPTIONS,\n BUILD_PARALLELISM: BUILD_PARALLELISM || DEFAULT_BUILD_PARALLELISM,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operations,\n );\n await $.destroy();\n } catch (err) {\n // eslint-disable-next-line\n console.error(\n '💀 - Cannot launch the build:',\n (err as YError).stack,\n JSON.stringify((err as YError).params, null, 2),\n );\n process.exit(1);\n }\n}\n\nasync function processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: {\n NODE_ENV: string;\n BUILD_PARALLELISM: number;\n BUILD_OPTIONS: BuildOptions;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operations: WhookOperation<WhookAPIOperationGCPFunctionConfig>[],\n): Promise<void> {\n const operationsLeft = operations.slice(BUILD_PARALLELISM);\n\n await Promise.all(\n operations.slice(0, BUILD_PARALLELISM).map((operation) =>\n buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operation,\n ),\n ),\n );\n\n if (operationsLeft.length) {\n log('info', operationsLeft.length, ' operations left.');\n return processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operationsLeft,\n );\n }\n log('info', 'No more operations.');\n}\n\nasync function buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: {\n NODE_ENV: string;\n PROJECT_DIR: string;\n BUILD_OPTIONS: BuildOptions;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operation: WhookOperation<WhookAPIOperationGCPFunctionConfig>,\n): Promise<void> {\n const { operationId } = operation;\n\n try {\n const whookConfig: WhookAPIOperationGCPFunctionConfig =\n operation['x-whook'] || {};\n const operationType = whookConfig.type || 'http';\n const sourceOperationId = whookConfig.sourceOperationId;\n const entryPoint = operationId;\n const finalEntryPoint =\n (sourceOperationId ? sourceOperationId : operationId) +\n ((operation['x-whook'] || {}).suffix || '');\n log('warning', `Building ${operationType} \"${finalEntryPoint}\"...`);\n const buildDefinition = BUILD_DEFINITIONS[operationType];\n // eslint-disable-next-line\n const applyWrapper = require(buildDefinition.wrapper.path).default;\n const rootNode = await $autoload(\n entryPoint + (buildDefinition.suffix || ''),\n );\n const lambdaPath = path.join(\n PROJECT_DIR,\n 'builds',\n NODE_ENV,\n finalEntryPoint,\n );\n const finalHandlerInitializer = applyWrapper(rootNode.initializer);\n\n const initializerContent = await buildInitializer(\n finalHandlerInitializer[SPECIAL_PROPS.INJECT].map((name) =>\n name === 'OPERATION_API'\n ? `OPERATION_API>OPERATION_API_${finalEntryPoint}`\n : name,\n ),\n BUILD_OPTIONS,\n );\n const indexContent = await buildLambdaIndex(\n rootNode,\n {\n name: buildDefinition.wrapper.name,\n path: buildDefinition.wrapper.path,\n },\n BUILD_OPTIONS,\n );\n\n await mkdirp(lambdaPath);\n await Promise.all([\n copyStaticFiles(\n { PROJECT_DIR, log },\n lambdaPath,\n whookConfig.staticFiles || [],\n ),\n ensureFileAsync(\n { log },\n path.join(lambdaPath, 'initialize.js'),\n initializerContent,\n ),\n ensureFileAsync({ log }, path.join(lambdaPath, 'main.js'), indexContent),\n ]);\n await buildFinalLambda({ compiler, log }, lambdaPath, whookConfig);\n } catch (err) {\n log('error', `Error building \"${operationId}\"...`);\n log('error-stack', (err as Error).stack || 'no_stack_trace');\n log('debug', JSON.stringify((err as YError).params, null, 2));\n throw YError.wrap(err as Error, 'E_LAMBDA_BUILD', operationId);\n }\n}\n\nasync function buildLambdaIndex(\n rootNode: { path: string },\n buildWrapper: { name: string; path: string },\n options: BuildOptions,\n): Promise<string> {\n return `${\n options.modules === 'commonjs'\n ? `const pickModule = (m) => { return m && m.default || m; }\nconst initHandler = pickModule(require('${rootNode.path}'));\nconst ${buildWrapper.name} = pickModule(require('${buildWrapper.path}'));\nconst { initialize } = require('./initialize');`\n : `import initHandler from '${rootNode.path}';\nimport ${buildWrapper.name} from '${buildWrapper.path}';\nimport { initialize } from './initialize';`\n }\n\nconst handlerInitializer = ${buildWrapper.name}(\n initHandler\n);\n\nconst handlerPromise = initialize()\n .then(handlerInitializer);\n\n${\n options.modules === 'commonjs'\n ? 'module.exports = {}; module.exports.default = '\n : 'export default '\n}function handler (req, res) {\n return handlerPromise\n .then(handler => handler(req, res));\n};\n`;\n}\n\nasync function buildFinalLambda(\n { compiler, log }: { compiler: WhookCompilerService; log: LogService },\n lambdaPath: string,\n whookConfig: WhookAPIOperationGCPFunctionConfig,\n): Promise<void> {\n const entryPoint = `${lambdaPath}/main.js`;\n const { contents, mappings } = await compiler(\n entryPoint,\n whookConfig.compilerOptions,\n );\n\n await Promise.all([\n ensureFileAsync({ log }, `${lambdaPath}/index.js`, contents, 'utf-8'),\n mappings\n ? ensureFileAsync(\n { log },\n `${lambdaPath}/index.js.map`,\n mappings,\n 'utf-8',\n )\n : Promise.resolve(),\n ]);\n}\n\nasync function copyStaticFiles(\n { PROJECT_DIR, log }: { PROJECT_DIR: string; log: LogService },\n lambdaPath: string,\n staticFiles: string[] = [],\n): Promise<void> {\n await Promise.all(\n staticFiles.map(\n async (staticFile) =>\n await copyFiles(\n { log },\n path.join(PROJECT_DIR, 'node_modules', staticFile),\n path.join(lambdaPath, 'node_modules', staticFile),\n ),\n ),\n );\n}\n\nasync function copyFiles(\n { log }: { log: LogService },\n source: string,\n destination: string,\n): Promise<void> {\n let theError;\n try {\n await mkdirp(destination);\n const data = await readFileAsync(source, 'utf-8');\n await ensureFileAsync({ log }, destination, data, 'utf-8');\n } catch (err) {\n theError = err;\n }\n if (theError) {\n if ('EISDIR' !== theError.code) {\n throw theError;\n }\n await cprAsync(source, destination, {\n overwrite: true,\n });\n }\n}\n\nasync function ensureFileAsync(\n { log }: { log: LogService },\n path: string,\n content: string,\n encoding = 'utf-8',\n): Promise<void> {\n try {\n const oldContent = await readFileAsync(path, encoding);\n\n if (oldContent === content) {\n log('debug', `Ignore unchanged file: \"${path}\".`);\n return;\n }\n } catch (err) {\n log('debug', `Write new file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n }\n log('debug', `Write changed file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n}\n"],"mappings":"AAAA;AACA,OAAOA,EAAP,MAAe,IAAf;AACA,OAAOC,IAAP,MAAiB,MAAjB;AACA,OAAOC,IAAP,MAAiB,MAAjB;AACA,OAAOC,MAAP,MAAmB,QAAnB;AACA,OAAOC,GAAP,MAAgB,KAAhB;AACA,OAAOC,MAAP,MAAmB,QAAnB;AACA,OAAOC,UAAP,IACEC,aADF,EAEEC,QAFF,EAGEC,sBAHF,QAIO,YAJP;AAKA,SAASC,qBAAT,EAAgCC,YAAhC,QAAoD,cAApD;AACA,OAAOC,mBAAP,MAAgC,sBAAhC;AACA,SACEC,4BADF,EAEEC,oBAFF,QAGO,oBAHP;AAqBA,OAAO,MAAMC,yBAAyB,GAAG,EAAlC;AAcP,MAAMC,aAAa,GAAGf,IAAI,CAACgB,SAAL,CAAejB,EAAE,CAACkB,QAAlB,CAAtB;AAIA,MAAMC,cAAc,GAAGlB,IAAI,CAACgB,SAAL,CAAejB,EAAE,CAACoB,SAAlB,CAAvB;AAKA,MAAMC,QAAQ,GAAGpB,IAAI,CAACgB,SAAL,CAAeb,GAAf,CAAjB;AAMA,MAAMkB,iBAOL,GAAG;EACFC,IAAI,EAAE;IACJC,IAAI,EAAE,MADF;IAEJC,OAAO,EAAE;MACPC,IAAI,EAAE,kCADC;MAEPxB,IAAI,EAAEA,IAAI,CAACyB,IAAL,CAAUC,SAAV,EAAqB,UAArB,EAAiC,oBAAjC;IAFC,CAFL;IAMJC,MAAM,EAAE;EANJ;AADJ,CAPJ;AAkBA,OAAO,eAAeC,uBAAf,CACLC,CAAI,GAAG,IAAIzB,UAAJ,EADF,EAEO;EACZyB,CAAC,CAACC,QAAF,CACExB,QAAQ,CAAC,sBAAD,EAAyB;IAC/ByB,GAAG,EAAE,uCAD0B;IAE/BC,GAAG,EAAEN,SAAS,GAAG,eAFc;IAG/BO,IAAI,EAAE,2BAHyB;IAI/BC,KAAK,EAAE;EAJwB,CAAzB,CADV;EAQAL,CAAC,CAACC,QAAF,CAAWvB,sBAAX;EACAsB,CAAC,CAACC,QAAF,CAAWpB,mBAAX;EACAmB,CAAC,CAACC,QAAF,CAAWrB,YAAX;EACAoB,CAAC,CAACC,QAAF,CAAWxB,QAAQ,CAAC,MAAD,EAAS,IAAT,CAAnB;EACAuB,CAAC,CAACC,QAAF,CAAWxB,QAAQ,CAAC,MAAD,EAAS,WAAT,CAAnB;EAEA,OAAOuB,CAAP;AACD;AAED,OAAO,eAAeM,QAAf,CACLC,wBADK,EAEU;EACf,IAAI;IACF,MAAMC,WAAW,GAAGC,OAAO,CAACC,IAAR,CAAa,CAAb,CAApB;IACA,MAAMV,CAAC,GAAG,MAAMO,wBAAwB,EAAxC;IACA,MAAM;MACJI,QADI;MAEJC,iBAFI;MAGJC,aAHI;MAIJC,WAJI;MAKJC,QALI;MAMJZ,GANI;MAOJa,SAPI;MAQJC,GARI;MASJC;IATI,IAkBF,MAAMlB,CAAC,CAACmB,GAAF,CAAM,CACd,UADc,EAEd,oBAFc,EAGd,gBAHc,EAId,aAJc,EAKd,SALc,EAMd,UANc,EAOd,KAPc,EAQd,WARc,EASd,KATc,EAUd,kBAVc,CAAN,CAlBV;IA+BAhB,GAAG,CAAC,MAAD,EAAS,kDAAT,CAAH;IAEA,MAAMiB,UAAU,GAAG,CACjB,MAAMtC,4BAA4B,CAChCmC,GADgC,EAEhClC,oBAAoB,CAAqCkC,GAArC,CAFY,CADjB,EAKjBI,MALiB,CAKTC,SAAD,IAAe;MACtB,IAAId,WAAJ,EAAiB;QACf,MAAMe,iBAAiB,GACrBD,SAAS,CAAC,SAAD,CAAT,IAAwBA,SAAS,CAAC,SAAD,CAAT,CAAqBC,iBAD/C;QAGA,OACEf,WAAW,KAAKc,SAAS,CAACE,WAA1B,IACAhB,WAAW,KAAKe,iBAFlB;MAID;;MACD,OAAO,IAAP;IACD,CAhBkB,CAAnB;IAkBApB,GAAG,CAAC,SAAD,EAAa,GAAEiB,UAAU,CAACK,MAAO,yBAAjC,CAAH;IACA,MAAMC,iBAAiB,CACrB;MACEf,QADF;MAEEE,aAAa,EAAEA,aAAa,IAAIlC,qBAFlC;MAGEiC,iBAAiB,EAAEA,iBAAiB,IAAI5B,yBAH1C;MAIE8B,WAJF;MAKEC,QALF;MAMEZ,GANF;MAOEa,SAPF;MAQEE;IARF,CADqB,EAWrBE,UAXqB,CAAvB;IAaA,MAAMpB,CAAC,CAAC2B,OAAF,EAAN;EACD,CArED,CAqEE,OAAOC,GAAP,EAAY;IACZ;IACAC,OAAO,CAACC,KAAR,CACE,+BADF,EAEGF,GAAD,CAAgBG,KAFlB,EAGEC,IAAI,CAACC,SAAL,CAAgBL,GAAD,CAAgBM,MAA/B,EAAuC,IAAvC,EAA6C,CAA7C,CAHF;IAKAzB,OAAO,CAAC0B,IAAR,CAAa,CAAb;EACD;AACF;;AAED,eAAeT,iBAAf,CACE;EACEf,QADF;EAEEC,iBAFF;EAGEC,aAHF;EAIEC,WAJF;EAKEC,QALF;EAMEZ,GANF;EAOEa,SAPF;EAQEE;AARF,CADF,EAoBEE,UApBF,EAqBiB;EACf,MAAMgB,cAAc,GAAGhB,UAAU,CAACiB,KAAX,CAAiBzB,iBAAjB,CAAvB;EAEA,MAAM0B,OAAO,CAACC,GAAR,CACJnB,UAAU,CAACiB,KAAX,CAAiB,CAAjB,EAAoBzB,iBAApB,EAAuC4B,GAAvC,CAA4ClB,SAAD,IACzCmB,cAAc,CACZ;IACE9B,QADF;IAEEG,WAFF;IAGED,aAHF;IAIEE,QAJF;IAKEZ,GALF;IAMEa,SANF;IAOEE;EAPF,CADY,EAUZI,SAVY,CADhB,CADI,CAAN;;EAiBA,IAAIc,cAAc,CAACX,MAAnB,EAA2B;IACzBtB,GAAG,CAAC,MAAD,EAASiC,cAAc,CAACX,MAAxB,EAAgC,mBAAhC,CAAH;IACA,OAAOC,iBAAiB,CACtB;MACEf,QADF;MAEEC,iBAFF;MAGEC,aAHF;MAIEC,WAJF;MAKEC,QALF;MAMEZ,GANF;MAOEa,SAPF;MAQEE;IARF,CADsB,EAWtBkB,cAXsB,CAAxB;EAaD;;EACDjC,GAAG,CAAC,MAAD,EAAS,qBAAT,CAAH;AACD;;AAED,eAAesC,cAAf,CACE;EACE9B,QADF;EAEEG,WAFF;EAGED,aAHF;EAIEE,QAJF;EAKEZ,GALF;EAMEa,SANF;EAOEE;AAPF,CADF,EAkBEI,SAlBF,EAmBiB;EACf,MAAM;IAAEE;EAAF,IAAkBF,SAAxB;;EAEA,IAAI;IACF,MAAMoB,WAA+C,GACnDpB,SAAS,CAAC,SAAD,CAAT,IAAwB,EAD1B;IAEA,MAAMqB,aAAa,GAAGD,WAAW,CAACjD,IAAZ,IAAoB,MAA1C;IACA,MAAM8B,iBAAiB,GAAGmB,WAAW,CAACnB,iBAAtC;IACA,MAAMqB,UAAU,GAAGpB,WAAnB;IACA,MAAMqB,eAAe,GACnB,CAACtB,iBAAiB,GAAGA,iBAAH,GAAuBC,WAAzC,KACC,CAACF,SAAS,CAAC,SAAD,CAAT,IAAwB,EAAzB,EAA6BxB,MAA7B,IAAuC,EADxC,CADF;IAGAK,GAAG,CAAC,SAAD,EAAa,YAAWwC,aAAc,KAAIE,eAAgB,MAA1D,CAAH;IACA,MAAMC,eAAe,GAAGvD,iBAAiB,CAACoD,aAAD,CAAzC,CAVE,CAWF;;IACA,MAAMI,YAAY,GAAGC,OAAO,CAACF,eAAe,CAACpD,OAAhB,CAAwBvB,IAAzB,CAAP,CAAsC8E,OAA3D;;IACA,MAAMC,QAAQ,GAAG,MAAMlC,SAAS,CAC9B4B,UAAU,IAAIE,eAAe,CAAChD,MAAhB,IAA0B,EAA9B,CADoB,CAAhC;IAGA,MAAMqD,UAAU,GAAGhF,IAAI,CAACyB,IAAL,CACjBkB,WADiB,EAEjB,QAFiB,EAGjBH,QAHiB,EAIjBkC,eAJiB,CAAnB;IAMA,MAAMO,uBAAuB,GAAGL,YAAY,CAACG,QAAQ,CAACG,WAAV,CAA5C;IAEA,MAAMC,kBAAkB,GAAG,MAAMpC,gBAAgB,CAC/CkC,uBAAuB,CAAC5E,aAAa,CAAC+E,MAAf,CAAvB,CAA8Cf,GAA9C,CAAmD7C,IAAD,IAChDA,IAAI,KAAK,eAAT,GACK,+BAA8BkD,eAAgB,EADnD,GAEIlD,IAHN,CAD+C,EAM/CkB,aAN+C,CAAjD;IAQA,MAAM2C,YAAY,GAAG,MAAMC,gBAAgB,CACzCP,QADyC,EAEzC;MACEvD,IAAI,EAAEmD,eAAe,CAACpD,OAAhB,CAAwBC,IADhC;MAEExB,IAAI,EAAE2E,eAAe,CAACpD,OAAhB,CAAwBvB;IAFhC,CAFyC,EAMzC0C,aANyC,CAA3C;IASA,MAAMzC,MAAM,CAAC+E,UAAD,CAAZ;IACA,MAAMb,OAAO,CAACC,GAAR,CAAY,CAChBmB,eAAe,CACb;MAAE5C,WAAF;MAAeX;IAAf,CADa,EAEbgD,UAFa,EAGbT,WAAW,CAACiB,WAAZ,IAA2B,EAHd,CADC,EAMhBC,eAAe,CACb;MAAEzD;IAAF,CADa,EAEbhC,IAAI,CAACyB,IAAL,CAAUuD,UAAV,EAAsB,eAAtB,CAFa,EAGbG,kBAHa,CANC,EAWhBM,eAAe,CAAC;MAAEzD;IAAF,CAAD,EAAUhC,IAAI,CAACyB,IAAL,CAAUuD,UAAV,EAAsB,SAAtB,CAAV,EAA4CK,YAA5C,CAXC,CAAZ,CAAN;IAaA,MAAMK,gBAAgB,CAAC;MAAE9C,QAAF;MAAYZ;IAAZ,CAAD,EAAoBgD,UAApB,EAAgCT,WAAhC,CAAtB;EACD,CAxDD,CAwDE,OAAOd,GAAP,EAAY;IACZzB,GAAG,CAAC,OAAD,EAAW,mBAAkBqB,WAAY,MAAzC,CAAH;IACArB,GAAG,CAAC,aAAD,EAAiByB,GAAD,CAAeG,KAAf,IAAwB,gBAAxC,CAAH;IACA5B,GAAG,CAAC,OAAD,EAAU6B,IAAI,CAACC,SAAL,CAAgBL,GAAD,CAAgBM,MAA/B,EAAuC,IAAvC,EAA6C,CAA7C,CAAV,CAAH;IACA,MAAM5D,MAAM,CAACwF,IAAP,CAAYlC,GAAZ,EAA0B,gBAA1B,EAA4CJ,WAA5C,CAAN;EACD;AACF;;AAED,eAAeiC,gBAAf,CACEP,QADF,EAEEa,YAFF,EAGEC,OAHF,EAImB;EACjB,OAAQ,GACNA,OAAO,CAACC,OAAR,KAAoB,UAApB,GACK;AACT,0CAA0Cf,QAAQ,CAAC/E,IAAK;AACxD,QAAQ4F,YAAY,CAACpE,IAAK,0BAAyBoE,YAAY,CAAC5F,IAAK;AACrE,gDAJI,GAKK,4BAA2B+E,QAAQ,CAAC/E,IAAK;AAClD,SAAS4F,YAAY,CAACpE,IAAK,UAASoE,YAAY,CAAC5F,IAAK;AACtD,2CACG;AACH;AACA,6BAA6B4F,YAAY,CAACpE,IAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,EACEqE,OAAO,CAACC,OAAR,KAAoB,UAApB,GACI,gDADJ,GAEI,iBACL;AACD;AACA;AACA;AACA,CA1BE;AA2BD;;AAED,eAAeJ,gBAAf,CACE;EAAE9C,QAAF;EAAYZ;AAAZ,CADF,EAEEgD,UAFF,EAGET,WAHF,EAIiB;EACf,MAAME,UAAU,GAAI,GAAEO,UAAW,UAAjC;EACA,MAAM;IAAEe,QAAF;IAAYC;EAAZ,IAAyB,MAAMpD,QAAQ,CAC3C6B,UAD2C,EAE3CF,WAAW,CAAC0B,eAF+B,CAA7C;EAKA,MAAM9B,OAAO,CAACC,GAAR,CAAY,CAChBqB,eAAe,CAAC;IAAEzD;EAAF,CAAD,EAAW,GAAEgD,UAAW,WAAxB,EAAoCe,QAApC,EAA8C,OAA9C,CADC,EAEhBC,QAAQ,GACJP,eAAe,CACb;IAAEzD;EAAF,CADa,EAEZ,GAAEgD,UAAW,eAFD,EAGbgB,QAHa,EAIb,OAJa,CADX,GAOJ7B,OAAO,CAAC+B,OAAR,EATY,CAAZ,CAAN;AAWD;;AAED,eAAeX,eAAf,CACE;EAAE5C,WAAF;EAAeX;AAAf,CADF,EAEEgD,UAFF,EAGEQ,WAAqB,GAAG,EAH1B,EAIiB;EACf,MAAMrB,OAAO,CAACC,GAAR,CACJoB,WAAW,CAACnB,GAAZ,CACE,MAAO8B,UAAP,IACE,MAAMC,SAAS,CACb;IAAEpE;EAAF,CADa,EAEbhC,IAAI,CAACyB,IAAL,CAAUkB,WAAV,EAAuB,cAAvB,EAAuCwD,UAAvC,CAFa,EAGbnG,IAAI,CAACyB,IAAL,CAAUuD,UAAV,EAAsB,cAAtB,EAAsCmB,UAAtC,CAHa,CAFnB,CADI,CAAN;AAUD;;AAED,eAAeC,SAAf,CACE;EAAEpE;AAAF,CADF,EAEEqE,MAFF,EAGEC,WAHF,EAIiB;EACf,IAAIC,QAAJ;;EACA,IAAI;IACF,MAAMtG,MAAM,CAACqG,WAAD,CAAZ;IACA,MAAME,IAAI,GAAG,MAAM1F,aAAa,CAACuF,MAAD,EAAS,OAAT,CAAhC;IACA,MAAMZ,eAAe,CAAC;MAAEzD;IAAF,CAAD,EAAUsE,WAAV,EAAuBE,IAAvB,EAA6B,OAA7B,CAArB;EACD,CAJD,CAIE,OAAO/C,GAAP,EAAY;IACZ8C,QAAQ,GAAG9C,GAAX;EACD;;EACD,IAAI8C,QAAJ,EAAc;IACZ,IAAI,aAAaA,QAAQ,CAACE,IAA1B,EAAgC;MAC9B,MAAMF,QAAN;IACD;;IACD,MAAMpF,QAAQ,CAACkF,MAAD,EAASC,WAAT,EAAsB;MAClCI,SAAS,EAAE;IADuB,CAAtB,CAAd;EAGD;AACF;;AAED,eAAejB,eAAf,CACE;EAAEzD;AAAF,CADF,EAEEhC,IAFF,EAGE2G,OAHF,EAIEC,QAAQ,GAAG,OAJb,EAKiB;EACf,IAAI;IACF,MAAMC,UAAU,GAAG,MAAM/F,aAAa,CAACd,IAAD,EAAO4G,QAAP,CAAtC;;IAEA,IAAIC,UAAU,KAAKF,OAAnB,EAA4B;MAC1B3E,GAAG,CAAC,OAAD,EAAW,2BAA0BhC,IAAK,IAA1C,CAAH;MACA;IACD;EACF,CAPD,CAOE,OAAOyD,GAAP,EAAY;IACZzB,GAAG,CAAC,OAAD,EAAW,oBAAmBhC,IAAK,IAAnC,CAAH;IACA,OAAO,MAAMiB,cAAc,CAACjB,IAAD,EAAO2G,OAAP,EAAgBC,QAAhB,CAA3B;EACD;;EACD5E,GAAG,CAAC,OAAD,EAAW,wBAAuBhC,IAAK,IAAvC,CAAH;EACA,OAAO,MAAMiB,cAAc,CAACjB,IAAD,EAAO2G,OAAP,EAAgBC,QAAhB,CAA3B;AACD"}
1
+ {"version":3,"file":"index.mjs","names":["fs","util","path","mkdirp","cpr","YError","Knifecycle","SPECIAL_PROPS","constant","initInitializerBuilder","DEFAULT_BUILD_OPTIONS","initCompiler","initBuildAutoloader","dereferenceOpenAPIOperations","getOpenAPIOperations","DEFAULT_BUILD_PARALLELISM","readFileAsync","promisify","readFile","writeFileAsync","writeFile","cprAsync","BUILD_DEFINITIONS","http","type","wrapper","name","join","__dirname","suffix","prepareBuildEnvironment","$","register","ENV","log","time","delay","runBuild","aPrepareBuildEnvironment","handlerName","process","argv","NODE_ENV","BUILD_PARALLELISM","BUILD_OPTIONS","PROJECT_DIR","compiler","$autoload","API","buildInitializer","run","operations","filter","operation","sourceOperationId","operationId","length","processOperations","destroy","err","console","error","stack","JSON","stringify","params","exit","operationsLeft","slice","Promise","all","map","buildAnyLambda","whookConfig","operationType","entryPoint","finalEntryPoint","buildDefinition","applyWrapper","require","default","rootNode","lambdaPath","finalHandlerInitializer","initializer","initializerContent","INJECT","indexContent","buildLambdaIndex","copyStaticFiles","staticFiles","ensureFileAsync","buildFinalLambda","wrap","buildWrapper","options","modules","contents","mappings","compilerOptions","resolve","staticFile","copyFiles","source","destination","theError","data","code","overwrite","content","encoding","oldContent"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint global-require:0 */\nimport fs from 'fs';\nimport util from 'util';\nimport path from 'path';\nimport mkdirp from 'mkdirp';\nimport cpr from 'cpr';\nimport YError from 'yerror';\nimport Knifecycle, {\n SPECIAL_PROPS,\n constant,\n initInitializerBuilder,\n} from 'knifecycle';\nimport { DEFAULT_BUILD_OPTIONS, initCompiler } from '@whook/whook';\nimport initBuildAutoloader from './services/_autoload';\nimport {\n dereferenceOpenAPIOperations,\n getOpenAPIOperations,\n} from '@whook/http-router';\nimport type {\n Autoloader,\n Dependencies,\n BuildInitializer,\n Initializer,\n Service,\n} from 'knifecycle';\nimport type {\n WhookOperation,\n WhookCompilerConfig,\n WhookCompilerOptions,\n WhookCompilerService,\n} from '@whook/whook';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { LogService } from 'common-services';\nimport type { CprOptions } from 'cpr';\n\nexport const DEFAULT_BUILD_PARALLELISM = 10;\n\nexport type WhookGCPBuildConfig = {\n BUILD_PARALLELISM?: number;\n};\nexport type WhookAPIOperationGCPFunctionConfig = {\n type?: 'http';\n sourceOperationId?: string;\n staticFiles?: string[];\n compilerOptions?: WhookCompilerOptions;\n suffix?: string;\n};\n\nconst readFileAsync = util.promisify(fs.readFile) as (\n path: string,\n encoding: string,\n) => Promise<string>;\nconst writeFileAsync = util.promisify(fs.writeFile) as (\n path: string,\n content: string,\n encoding: string,\n) => Promise<void>;\nconst cprAsync = util.promisify(cpr) as (\n source: string,\n destination: string,\n options: CprOptions,\n) => Promise<string[]>;\n\nconst BUILD_DEFINITIONS: Record<\n NonNullable<WhookAPIOperationGCPFunctionConfig['type']>,\n {\n type: string;\n wrapper: { name: string; path: string };\n suffix?: string;\n }\n> = {\n http: {\n type: 'HTTP',\n wrapper: {\n name: 'wrapHandlerForGoogleHTTPFunction',\n path: path.join(__dirname, 'wrappers', 'googleHTTPFunction'),\n },\n suffix: 'Wrapped',\n },\n};\n\nexport async function prepareBuildEnvironment<T extends Knifecycle>(\n $: T = new Knifecycle() as T,\n): Promise<T> {\n $.register(\n constant('INITIALIZER_PATH_MAP', {\n ENV: '@whook/whook/dist/services/ProxyedENV',\n log: __dirname + '/services/log',\n time: 'common-services/dist/time',\n delay: 'common-services/dist/delay',\n }),\n );\n $.register(initInitializerBuilder);\n $.register(initBuildAutoloader);\n $.register(initCompiler);\n $.register(constant('PORT', 1337));\n $.register(constant('HOST', 'localhost'));\n\n return $;\n}\n\nexport async function runBuild(\n aPrepareBuildEnvironment: typeof prepareBuildEnvironment,\n): Promise<void> {\n try {\n const handlerName = process.argv[2];\n const $ = await aPrepareBuildEnvironment();\n const {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n API,\n buildInitializer,\n }: WhookGCPBuildConfig &\n Pick<WhookCompilerConfig, 'BUILD_OPTIONS'> & {\n NODE_ENV: string;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n API: OpenAPIV3.Document;\n buildInitializer: BuildInitializer;\n } = await $.run([\n 'NODE_ENV',\n '?BUILD_PARALLELISM',\n '?BUILD_OPTIONS',\n 'PROJECT_DIR',\n 'process',\n 'compiler',\n 'log',\n '$autoload',\n 'API',\n 'buildInitializer',\n ]);\n\n log('info', 'GCP Functions build Environment initialized 🚀🌕');\n\n const operations = (\n await dereferenceOpenAPIOperations(\n API,\n getOpenAPIOperations<WhookAPIOperationGCPFunctionConfig>(API),\n )\n ).filter((operation) => {\n if (handlerName) {\n const sourceOperationId =\n operation['x-whook'] && operation['x-whook'].sourceOperationId;\n\n return (\n handlerName === operation.operationId ||\n handlerName === sourceOperationId\n );\n }\n return true;\n });\n\n log('warning', `${operations.length} operations to process.`);\n await processOperations(\n {\n NODE_ENV,\n BUILD_OPTIONS: BUILD_OPTIONS || DEFAULT_BUILD_OPTIONS,\n BUILD_PARALLELISM: BUILD_PARALLELISM || DEFAULT_BUILD_PARALLELISM,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operations,\n );\n await $.destroy();\n } catch (err) {\n // eslint-disable-next-line\n console.error(\n '💀 - Cannot launch the build:',\n (err as YError).stack,\n JSON.stringify((err as YError).params, null, 2),\n );\n process.exit(1);\n }\n}\n\nasync function processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {\n NODE_ENV: string;\n BUILD_PARALLELISM: number;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operations: WhookOperation<WhookAPIOperationGCPFunctionConfig>[],\n): Promise<void> {\n const operationsLeft = operations.slice(BUILD_PARALLELISM);\n\n await Promise.all(\n operations.slice(0, BUILD_PARALLELISM).map((operation) =>\n buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operation,\n ),\n ),\n );\n\n if (operationsLeft.length) {\n log('info', operationsLeft.length, ' operations left.');\n return processOperations(\n {\n NODE_ENV,\n BUILD_PARALLELISM,\n BUILD_OPTIONS,\n PROJECT_DIR,\n compiler,\n log,\n $autoload,\n buildInitializer,\n },\n operationsLeft,\n );\n }\n log('info', 'No more operations.');\n}\n\nasync function buildAnyLambda(\n {\n NODE_ENV,\n PROJECT_DIR,\n BUILD_OPTIONS,\n compiler,\n log,\n $autoload,\n buildInitializer,\n }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {\n NODE_ENV: string;\n PROJECT_DIR: string;\n compiler: WhookCompilerService;\n log: LogService;\n $autoload: Autoloader<Initializer<Dependencies, Service>>;\n buildInitializer: BuildInitializer;\n },\n operation: WhookOperation<WhookAPIOperationGCPFunctionConfig>,\n): Promise<void> {\n const { operationId } = operation;\n\n try {\n const whookConfig: WhookAPIOperationGCPFunctionConfig =\n operation['x-whook'] || {};\n const operationType = whookConfig.type || 'http';\n const sourceOperationId = whookConfig.sourceOperationId;\n const entryPoint = operationId;\n const finalEntryPoint =\n (sourceOperationId ? sourceOperationId : operationId) +\n ((operation['x-whook'] || {}).suffix || '');\n log('warning', `Building ${operationType} \"${finalEntryPoint}\"...`);\n const buildDefinition = BUILD_DEFINITIONS[operationType];\n // eslint-disable-next-line\n const applyWrapper = require(buildDefinition.wrapper.path).default;\n const rootNode = await $autoload(\n entryPoint + (buildDefinition.suffix || ''),\n );\n const lambdaPath = path.join(\n PROJECT_DIR,\n 'builds',\n NODE_ENV,\n finalEntryPoint,\n );\n const finalHandlerInitializer = applyWrapper(rootNode.initializer);\n\n const initializerContent = await buildInitializer(\n finalHandlerInitializer[SPECIAL_PROPS.INJECT].map((name) =>\n name === 'OPERATION_API'\n ? `OPERATION_API>OPERATION_API_${finalEntryPoint}`\n : name,\n ),\n BUILD_OPTIONS,\n );\n const indexContent = await buildLambdaIndex(\n rootNode,\n {\n name: buildDefinition.wrapper.name,\n path: buildDefinition.wrapper.path,\n },\n BUILD_OPTIONS,\n );\n\n await mkdirp(lambdaPath);\n await Promise.all([\n copyStaticFiles(\n { PROJECT_DIR, log },\n lambdaPath,\n whookConfig.staticFiles || [],\n ),\n ensureFileAsync(\n { log },\n path.join(lambdaPath, 'initialize.js'),\n initializerContent,\n ),\n ensureFileAsync({ log }, path.join(lambdaPath, 'main.js'), indexContent),\n ]);\n await buildFinalLambda({ compiler, log }, lambdaPath, whookConfig);\n } catch (err) {\n log('error', `Error building \"${operationId}\"...`);\n log('error-stack', (err as Error).stack || 'no_stack_trace');\n log('debug', JSON.stringify((err as YError).params, null, 2));\n throw YError.wrap(err as Error, 'E_LAMBDA_BUILD', operationId);\n }\n}\n\nasync function buildLambdaIndex(\n rootNode: { path: string },\n buildWrapper: { name: string; path: string },\n options: NonNullable<WhookCompilerConfig['BUILD_OPTIONS']>,\n): Promise<string> {\n return `${\n options.modules === 'commonjs'\n ? `const pickModule = (m) => { return m && m.default || m; }\nconst initHandler = pickModule(require('${rootNode.path}'));\nconst ${buildWrapper.name} = pickModule(require('${buildWrapper.path}'));\nconst { initialize } = require('./initialize');`\n : `import initHandler from '${rootNode.path}';\nimport ${buildWrapper.name} from '${buildWrapper.path}';\nimport { initialize } from './initialize';`\n }\n\nconst handlerInitializer = ${buildWrapper.name}(\n initHandler\n);\n\nconst handlerPromise = initialize()\n .then(handlerInitializer);\n\n${\n options.modules === 'commonjs'\n ? 'module.exports = {}; module.exports.default = '\n : 'export default '\n}function handler (req, res) {\n return handlerPromise\n .then(handler => handler(req, res));\n};\n`;\n}\n\nasync function buildFinalLambda(\n { compiler, log }: { compiler: WhookCompilerService; log: LogService },\n lambdaPath: string,\n whookConfig: WhookAPIOperationGCPFunctionConfig,\n): Promise<void> {\n const entryPoint = `${lambdaPath}/main.js`;\n const { contents, mappings } = await compiler(\n entryPoint,\n whookConfig.compilerOptions,\n );\n\n await Promise.all([\n ensureFileAsync({ log }, `${lambdaPath}/index.js`, contents, 'utf-8'),\n mappings\n ? ensureFileAsync(\n { log },\n `${lambdaPath}/index.js.map`,\n mappings,\n 'utf-8',\n )\n : Promise.resolve(),\n ]);\n}\n\nasync function copyStaticFiles(\n { PROJECT_DIR, log }: { PROJECT_DIR: string; log: LogService },\n lambdaPath: string,\n staticFiles: string[] = [],\n): Promise<void> {\n await Promise.all(\n staticFiles.map(\n async (staticFile) =>\n await copyFiles(\n { log },\n path.join(PROJECT_DIR, 'node_modules', staticFile),\n path.join(lambdaPath, 'node_modules', staticFile),\n ),\n ),\n );\n}\n\nasync function copyFiles(\n { log }: { log: LogService },\n source: string,\n destination: string,\n): Promise<void> {\n let theError;\n try {\n await mkdirp(destination);\n const data = await readFileAsync(source, 'utf-8');\n await ensureFileAsync({ log }, destination, data, 'utf-8');\n } catch (err) {\n theError = err;\n }\n if (theError) {\n if ('EISDIR' !== theError.code) {\n throw theError;\n }\n await cprAsync(source, destination, {\n overwrite: true,\n });\n }\n}\n\nasync function ensureFileAsync(\n { log }: { log: LogService },\n path: string,\n content: string,\n encoding = 'utf-8',\n): Promise<void> {\n try {\n const oldContent = await readFileAsync(path, encoding);\n\n if (oldContent === content) {\n log('debug', `Ignore unchanged file: \"${path}\".`);\n return;\n }\n } catch (err) {\n log('debug', `Write new file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n }\n log('debug', `Write changed file: \"${path}\".`);\n return await writeFileAsync(path, content, encoding);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whook/gcp-functions",
3
- "version": "9.0.0",
3
+ "version": "9.0.1",
4
4
  "description": "Build and deploy to GCP Cloud Functions with Whook.",
5
5
  "main": "dist/index",
6
6
  "module": "dist/index.mjs",
@@ -50,10 +50,10 @@
50
50
  },
51
51
  "homepage": "https://github.com/nfroidure/whook",
52
52
  "dependencies": {
53
- "@whook/cli": "^9.0.0",
54
- "@whook/cors": "^9.0.0",
55
- "@whook/http-router": "^9.0.0",
56
- "@whook/whook": "^9.0.0",
53
+ "@whook/cli": "^9.0.1",
54
+ "@whook/cors": "^9.0.1",
55
+ "@whook/http-router": "^9.0.1",
56
+ "@whook/whook": "^9.0.1",
57
57
  "ajv": "^8.11.0",
58
58
  "ajv-formats": "^2.1.1",
59
59
  "camelcase": "^6.3.0",
@@ -85,7 +85,7 @@
85
85
  "eslint-plugin-prettier": "^4.0.0",
86
86
  "jest": "^28.1.0",
87
87
  "jsdoc-to-markdown": "^7.1.1",
88
- "metapak": "^4.0.3",
88
+ "metapak": "^4.0.4",
89
89
  "metapak-nfroidure": "11.2.1",
90
90
  "prettier": "^2.6.2",
91
91
  "rimraf": "^3.0.2",
@@ -210,5 +210,6 @@
210
210
  "prettier": "prettier --write 'src/**/*.ts'",
211
211
  "test": "npm run jest",
212
212
  "types": "rimraf -f 'dist/**/*.d.ts' && tsc --project . --declaration --emitDeclarationOnly --outDir dist"
213
- }
213
+ },
214
+ "gitHead": "a5620b3eacf3b500a5db59db9997bf7ed60668d5"
214
215
  }
package/src/index.ts CHANGED
@@ -25,18 +25,17 @@ import type {
25
25
  } from 'knifecycle';
26
26
  import type {
27
27
  WhookOperation,
28
+ WhookCompilerConfig,
28
29
  WhookCompilerOptions,
29
30
  WhookCompilerService,
30
31
  } from '@whook/whook';
31
32
  import type { OpenAPIV3 } from 'openapi-types';
32
33
  import type { LogService } from 'common-services';
33
34
  import type { CprOptions } from 'cpr';
34
- import type { BuildOptions } from 'knifecycle/dist/build';
35
35
 
36
36
  export const DEFAULT_BUILD_PARALLELISM = 10;
37
37
 
38
- export type WhookBuildConfig = {
39
- BUILD_OPTIONS?: BuildOptions;
38
+ export type WhookGCPBuildConfig = {
40
39
  BUILD_PARALLELISM?: number;
41
40
  };
42
41
  export type WhookAPIOperationGCPFunctionConfig = {
@@ -116,15 +115,16 @@ export async function runBuild(
116
115
  $autoload,
117
116
  API,
118
117
  buildInitializer,
119
- }: WhookBuildConfig & {
120
- NODE_ENV: string;
121
- PROJECT_DIR: string;
122
- compiler: WhookCompilerService;
123
- log: LogService;
124
- $autoload: Autoloader<Initializer<Dependencies, Service>>;
125
- API: OpenAPIV3.Document;
126
- buildInitializer: BuildInitializer;
127
- } = await $.run([
118
+ }: WhookGCPBuildConfig &
119
+ Pick<WhookCompilerConfig, 'BUILD_OPTIONS'> & {
120
+ NODE_ENV: string;
121
+ PROJECT_DIR: string;
122
+ compiler: WhookCompilerService;
123
+ log: LogService;
124
+ $autoload: Autoloader<Initializer<Dependencies, Service>>;
125
+ API: OpenAPIV3.Document;
126
+ buildInitializer: BuildInitializer;
127
+ } = await $.run([
128
128
  'NODE_ENV',
129
129
  '?BUILD_PARALLELISM',
130
130
  '?BUILD_OPTIONS',
@@ -193,10 +193,9 @@ async function processOperations(
193
193
  log,
194
194
  $autoload,
195
195
  buildInitializer,
196
- }: {
196
+ }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {
197
197
  NODE_ENV: string;
198
198
  BUILD_PARALLELISM: number;
199
- BUILD_OPTIONS: BuildOptions;
200
199
  PROJECT_DIR: string;
201
200
  compiler: WhookCompilerService;
202
201
  log: LogService;
@@ -252,10 +251,9 @@ async function buildAnyLambda(
252
251
  log,
253
252
  $autoload,
254
253
  buildInitializer,
255
- }: {
254
+ }: Required<Pick<WhookCompilerConfig, 'BUILD_OPTIONS'>> & {
256
255
  NODE_ENV: string;
257
256
  PROJECT_DIR: string;
258
- BUILD_OPTIONS: BuildOptions;
259
257
  compiler: WhookCompilerService;
260
258
  log: LogService;
261
259
  $autoload: Autoloader<Initializer<Dependencies, Service>>;
@@ -332,7 +330,7 @@ async function buildAnyLambda(
332
330
  async function buildLambdaIndex(
333
331
  rootNode: { path: string },
334
332
  buildWrapper: { name: string; path: string },
335
- options: BuildOptions,
333
+ options: NonNullable<WhookCompilerConfig['BUILD_OPTIONS']>,
336
334
  ): Promise<string> {
337
335
  return `${
338
336
  options.modules === 'commonjs'