@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 +6 -2
- package/dist/index.d.ts +1 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -7
- package/src/index.ts +15 -17
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
|
-
+
|
|
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,
|
|
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
|
|
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":";;;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AACA;;AACA;;;;;;;;AAdA;AAmCO,MAAMA,yBAAyB,GAAG,EAAlC;;;AAaP,MAAMC,aAAa,GAAGC,aAAA,CAAKC,SAAL,CAAeC,WAAA,CAAGC,QAAlB,CAAtB;;AAIA,MAAMC,cAAc,GAAGJ,aAAA,CAAKC,SAAL,CAAeC,WAAA,CAAGG,SAAlB,CAAvB;;AAKA,MAAMC,QAAQ,GAAGN,aAAA,CAAKC,SAAL,CAAeM,YAAf,CAAjB;;AAMA,MAAMC,iBAOL,GAAG;EACFC,IAAI,EAAE;IACJC,IAAI,EAAE,MADF;IAEJC,OAAO,EAAE;MACPC,IAAI,EAAE,kCADC;MAEPC,IAAI,EAAEA,aAAA,CAAKC,IAAL,CAAUC,SAAV,EAAqB,UAArB,EAAiC,oBAAjC;IAFC,CAFL;IAMJC,MAAM,EAAE;EANJ;AADJ,CAPJ;;AAkBO,eAAeC,uBAAf,CACLC,CAAI,GAAG,IAAIC,mBAAJ,EADF,EAEO;EACZD,CAAC,CAACE,QAAF,CACE,IAAAC,oBAAA,EAAS,sBAAT,EAAiC;IAC/BC,GAAG,EAAE,uCAD0B;IAE/BC,GAAG,EAAER,SAAS,GAAG,eAFc;IAG/BS,IAAI,EAAE,2BAHyB;IAI/BC,KAAK,EAAE;EAJwB,CAAjC,CADF;EAQAP,CAAC,CAACE,QAAF,CAAWM,kCAAX;EACAR,CAAC,CAACE,QAAF,CAAWO,iBAAX;EACAT,CAAC,CAACE,QAAF,CAAWQ,mBAAX;EACAV,CAAC,CAACE,QAAF,CAAW,IAAAC,oBAAA,EAAS,MAAT,EAAiB,IAAjB,CAAX;EACAH,CAAC,CAACE,QAAF,CAAW,IAAAC,oBAAA,EAAS,MAAT,EAAiB,WAAjB,CAAX;EAEA,OAAOH,CAAP;AACD;;AAEM,eAAeW,QAAf,CACLC,wBADK,EAEU;EACf,IAAI;IACF,MAAMC,WAAW,GAAGC,OAAO,CAACC,IAAR,CAAa,CAAb,CAApB;IACA,MAAMf,CAAC,GAAG,MAAMY,wBAAwB,EAAxC;IACA,MAAM;MACJI,QADI;MAEJC,iBAFI;MAGJC,aAHI;MAIJC,WAJI;MAKJC,QALI;MAMJf,GANI;MAOJgB,SAPI;MAQJC,GARI;MASJC;IATI,IAmBA,MAAMvB,CAAC,CAACwB,GAAF,CAAM,CAChB,UADgB,EAEhB,oBAFgB,EAGhB,gBAHgB,EAIhB,aAJgB,EAKhB,SALgB,EAMhB,UANgB,EAOhB,KAPgB,EAQhB,WARgB,EAShB,KATgB,EAUhB,kBAVgB,CAAN,CAnBZ;IAgCAnB,GAAG,CAAC,MAAD,EAAS,kDAAT,CAAH;IAEA,MAAMoB,UAAU,GAAG,CACjB,MAAM,IAAAC,wCAAA,EACJJ,GADI,EAEJ,IAAAK,gCAAA,EAAyDL,GAAzD,CAFI,CADW,EAKjBM,MALiB,CAKTC,SAAD,IAAe;MACtB,IAAIhB,WAAJ,EAAiB;QACf,MAAMiB,iBAAiB,GACrBD,SAAS,CAAC,SAAD,CAAT,IAAwBA,SAAS,CAAC,SAAD,CAAT,CAAqBC,iBAD/C;QAGA,OACEjB,WAAW,KAAKgB,SAAS,CAACE,WAA1B,IACAlB,WAAW,KAAKiB,iBAFlB;MAID;;MACD,OAAO,IAAP;IACD,CAhBkB,CAAnB;IAkBAzB,GAAG,CAAC,SAAD,EAAa,GAAEoB,UAAU,CAACO,MAAO,yBAAjC,CAAH;IACA,MAAMC,iBAAiB,CACrB;MACEjB,QADF;MAEEE,aAAa,EAAEA,aAAa,IAAIgB,4BAFlC;MAGEjB,iBAAiB,EAAEA,iBAAiB,IAAIrC,yBAH1C;MAIEuC,WAJF;MAKEC,QALF;MAMEf,GANF;MAOEgB,SAPF;MAQEE;IARF,CADqB,EAWrBE,UAXqB,CAAvB;IAaA,MAAMzB,CAAC,CAACmC,OAAF,EAAN;EACD,CAtED,CAsEE,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;IAKA5B,OAAO,CAAC6B,IAAR,CAAa,CAAb;EACD;AACF;;AAED,eAAeV,iBAAf,CACE;EACEjB,QADF;EAEEC,iBAFF;EAGEC,aAHF;EAIEC,WAJF;EAKEC,QALF;EAMEf,GANF;EAOEgB,SAPF;EAQEE;AARF,CADF,EAmBEE,UAnBF,EAoBiB;EACf,MAAMmB,cAAc,GAAGnB,UAAU,CAACoB,KAAX,CAAiB5B,iBAAjB,CAAvB;EAEA,MAAM6B,OAAO,CAACC,GAAR,CACJtB,UAAU,CAACoB,KAAX,CAAiB,CAAjB,EAAoB5B,iBAApB,EAAuC+B,GAAvC,CAA4CnB,SAAD,IACzCoB,cAAc,CACZ;IACEjC,QADF;IAEEG,WAFF;IAGED,aAHF;IAIEE,QAJF;IAKEf,GALF;IAMEgB,SANF;IAOEE;EAPF,CADY,EAUZM,SAVY,CADhB,CADI,CAAN;;EAiBA,IAAIe,cAAc,CAACZ,MAAnB,EAA2B;IACzB3B,GAAG,CAAC,MAAD,EAASuC,cAAc,CAACZ,MAAxB,EAAgC,mBAAhC,CAAH;IACA,OAAOC,iBAAiB,CACtB;MACEjB,QADF;MAEEC,iBAFF;MAGEC,aAHF;MAIEC,WAJF;MAKEC,QALF;MAMEf,GANF;MAOEgB,SAPF;MAQEE;IARF,CADsB,EAWtBqB,cAXsB,CAAxB;EAaD;;EACDvC,GAAG,CAAC,MAAD,EAAS,qBAAT,CAAH;AACD;;AAED,eAAe4C,cAAf,CACE;EACEjC,QADF;EAEEG,WAFF;EAGED,aAHF;EAIEE,QAJF;EAKEf,GALF;EAMEgB,SANF;EAOEE;AAPF,CADF,EAiBEM,SAjBF,EAkBiB;EACf,MAAM;IAAEE;EAAF,IAAkBF,SAAxB;;EAEA,IAAI;IACF,MAAMqB,WAA+C,GACnDrB,SAAS,CAAC,SAAD,CAAT,IAAwB,EAD1B;IAEA,MAAMsB,aAAa,GAAGD,WAAW,CAAC1D,IAAZ,IAAoB,MAA1C;IACA,MAAMsC,iBAAiB,GAAGoB,WAAW,CAACpB,iBAAtC;IACA,MAAMsB,UAAU,GAAGrB,WAAnB;IACA,MAAMsB,eAAe,GACnB,CAACvB,iBAAiB,GAAGA,iBAAH,GAAuBC,WAAzC,KACC,CAACF,SAAS,CAAC,SAAD,CAAT,IAAwB,EAAzB,EAA6B/B,MAA7B,IAAuC,EADxC,CADF;IAGAO,GAAG,CAAC,SAAD,EAAa,YAAW8C,aAAc,KAAIE,eAAgB,MAA1D,CAAH;IACA,MAAMC,eAAe,GAAGhE,iBAAiB,CAAC6D,aAAD,CAAzC,CAVE,CAWF;;IACA,MAAMI,YAAY,GAAGC,OAAO,CAACF,eAAe,CAAC7D,OAAhB,CAAwBE,IAAzB,CAAP,CAAsC8D,OAA3D;;IACA,MAAMC,QAAQ,GAAG,MAAMrC,SAAS,CAC9B+B,UAAU,IAAIE,eAAe,CAACxD,MAAhB,IAA0B,EAA9B,CADoB,CAAhC;;IAGA,MAAM6D,UAAU,GAAGhE,aAAA,CAAKC,IAAL,CACjBuB,WADiB,EAEjB,QAFiB,EAGjBH,QAHiB,EAIjBqC,eAJiB,CAAnB;;IAMA,MAAMO,uBAAuB,GAAGL,YAAY,CAACG,QAAQ,CAACG,WAAV,CAA5C;IAEA,MAAMC,kBAAkB,GAAG,MAAMvC,gBAAgB,CAC/CqC,uBAAuB,CAACG,yBAAA,CAAcC,MAAf,CAAvB,CAA8ChB,GAA9C,CAAmDtD,IAAD,IAChDA,IAAI,KAAK,eAAT,GACK,+BAA8B2D,eAAgB,EADnD,GAEI3D,IAHN,CAD+C,EAM/CwB,aAN+C,CAAjD;IAQA,MAAM+C,YAAY,GAAG,MAAMC,gBAAgB,CACzCR,QADyC,EAEzC;MACEhE,IAAI,EAAE4D,eAAe,CAAC7D,OAAhB,CAAwBC,IADhC;MAEEC,IAAI,EAAE2D,eAAe,CAAC7D,OAAhB,CAAwBE;IAFhC,CAFyC,EAMzCuB,aANyC,CAA3C;IASA,MAAM,IAAAiD,eAAA,EAAOR,UAAP,CAAN;IACA,MAAMb,OAAO,CAACC,GAAR,CAAY,CAChBqB,eAAe,CACb;MAAEjD,WAAF;MAAed;IAAf,CADa,EAEbsD,UAFa,EAGbT,WAAW,CAACmB,WAAZ,IAA2B,EAHd,CADC,EAMhBC,eAAe,CACb;MAAEjE;IAAF,CADa,EAEbV,aAAA,CAAKC,IAAL,CAAU+D,UAAV,EAAsB,eAAtB,CAFa,EAGbG,kBAHa,CANC,EAWhBQ,eAAe,CAAC;MAAEjE;IAAF,CAAD,EAAUV,aAAA,CAAKC,IAAL,CAAU+D,UAAV,EAAsB,SAAtB,CAAV,EAA4CM,YAA5C,CAXC,CAAZ,CAAN;IAaA,MAAMM,gBAAgB,CAAC;MAAEnD,QAAF;MAAYf;IAAZ,CAAD,EAAoBsD,UAApB,EAAgCT,WAAhC,CAAtB;EACD,CAxDD,CAwDE,OAAOd,GAAP,EAAY;IACZ/B,GAAG,CAAC,OAAD,EAAW,mBAAkB0B,WAAY,MAAzC,CAAH;IACA1B,GAAG,CAAC,aAAD,EAAiB+B,GAAD,CAAeG,KAAf,IAAwB,gBAAxC,CAAH;IACAlC,GAAG,CAAC,OAAD,EAAUmC,IAAI,CAACC,SAAL,CAAgBL,GAAD,CAAgBM,MAA/B,EAAuC,IAAvC,EAA6C,CAA7C,CAAV,CAAH;IACA,MAAM8B,eAAA,CAAOC,IAAP,CAAYrC,GAAZ,EAA0B,gBAA1B,EAA4CL,WAA5C,CAAN;EACD;AACF;;AAED,eAAemC,gBAAf,CACER,QADF,EAEEgB,YAFF,EAGEC,OAHF,EAImB;EACjB,OAAQ,GACNA,OAAO,CAACC,OAAR,KAAoB,UAApB,GACK;AACT,0CAA0ClB,QAAQ,CAAC/D,IAAK;AACxD,QAAQ+E,YAAY,CAAChF,IAAK,0BAAyBgF,YAAY,CAAC/E,IAAK;AACrE,gDAJI,GAKK,4BAA2B+D,QAAQ,CAAC/D,IAAK;AAClD,SAAS+E,YAAY,CAAChF,IAAK,UAASgF,YAAY,CAAC/E,IAAK;AACtD,2CACG;AACH;AACA,6BAA6B+E,YAAY,CAAChF,IAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,EACEiF,OAAO,CAACC,OAAR,KAAoB,UAApB,GACI,gDADJ,GAEI,iBACL;AACD;AACA;AACA;AACA,CA1BE;AA2BD;;AAED,eAAeL,gBAAf,CACE;EAAEnD,QAAF;EAAYf;AAAZ,CADF,EAEEsD,UAFF,EAGET,WAHF,EAIiB;EACf,MAAME,UAAU,GAAI,GAAEO,UAAW,UAAjC;EACA,MAAM;IAAEkB,QAAF;IAAYC;EAAZ,IAAyB,MAAM1D,QAAQ,CAC3CgC,UAD2C,EAE3CF,WAAW,CAAC6B,eAF+B,CAA7C;EAKA,MAAMjC,OAAO,CAACC,GAAR,CAAY,CAChBuB,eAAe,CAAC;IAAEjE;EAAF,CAAD,EAAW,GAAEsD,UAAW,WAAxB,EAAoCkB,QAApC,EAA8C,OAA9C,CADC,EAEhBC,QAAQ,GACJR,eAAe,CACb;IAAEjE;EAAF,CADa,EAEZ,GAAEsD,UAAW,eAFD,EAGbmB,QAHa,EAIb,OAJa,CADX,GAOJhC,OAAO,CAACkC,OAAR,EATY,CAAZ,CAAN;AAWD;;AAED,eAAeZ,eAAf,CACE;EAAEjD,WAAF;EAAed;AAAf,CADF,EAEEsD,UAFF,EAGEU,WAAqB,GAAG,EAH1B,EAIiB;EACf,MAAMvB,OAAO,CAACC,GAAR,CACJsB,WAAW,CAACrB,GAAZ,CACE,MAAOiC,UAAP,IACE,MAAMC,SAAS,CACb;IAAE7E;EAAF,CADa,EAEbV,aAAA,CAAKC,IAAL,CAAUuB,WAAV,EAAuB,cAAvB,EAAuC8D,UAAvC,CAFa,EAGbtF,aAAA,CAAKC,IAAL,CAAU+D,UAAV,EAAsB,cAAtB,EAAsCsB,UAAtC,CAHa,CAFnB,CADI,CAAN;AAUD;;AAED,eAAeC,SAAf,CACE;EAAE7E;AAAF,CADF,EAEE8E,MAFF,EAGEC,WAHF,EAIiB;EACf,IAAIC,QAAJ;;EACA,IAAI;IACF,MAAM,IAAAlB,eAAA,EAAOiB,WAAP,CAAN;IACA,MAAME,IAAI,GAAG,MAAMzG,aAAa,CAACsG,MAAD,EAAS,OAAT,CAAhC;IACA,MAAMb,eAAe,CAAC;MAAEjE;IAAF,CAAD,EAAU+E,WAAV,EAAuBE,IAAvB,EAA6B,OAA7B,CAArB;EACD,CAJD,CAIE,OAAOlD,GAAP,EAAY;IACZiD,QAAQ,GAAGjD,GAAX;EACD;;EACD,IAAIiD,QAAJ,EAAc;IACZ,IAAI,aAAaA,QAAQ,CAACE,IAA1B,EAAgC;MAC9B,MAAMF,QAAN;IACD;;IACD,MAAMjG,QAAQ,CAAC+F,MAAD,EAASC,WAAT,EAAsB;MAClCI,SAAS,EAAE;IADuB,CAAtB,CAAd;EAGD;AACF;;AAED,eAAelB,eAAf,CACE;EAAEjE;AAAF,CADF,EAEEV,IAFF,EAGE8F,OAHF,EAIEC,QAAQ,GAAG,OAJb,EAKiB;EACf,IAAI;IACF,MAAMC,UAAU,GAAG,MAAM9G,aAAa,CAACc,IAAD,EAAO+F,QAAP,CAAtC;;IAEA,IAAIC,UAAU,KAAKF,OAAnB,EAA4B;MAC1BpF,GAAG,CAAC,OAAD,EAAW,2BAA0BV,IAAK,IAA1C,CAAH;MACA;IACD;EACF,CAPD,CAOE,OAAOyC,GAAP,EAAY;IACZ/B,GAAG,CAAC,OAAD,EAAW,oBAAmBV,IAAK,IAAnC,CAAH;IACA,OAAO,MAAMT,cAAc,CAACS,IAAD,EAAO8F,OAAP,EAAgBC,QAAhB,CAA3B;EACD;;EACDrF,GAAG,CAAC,OAAD,EAAW,wBAAuBV,IAAK,IAAvC,CAAH;EACA,OAAO,MAAMT,cAAc,CAACS,IAAD,EAAO8F,OAAP,EAAgBC,QAAhB,CAA3B;AACD"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -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.
|
|
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.
|
|
54
|
-
"@whook/cors": "^9.0.
|
|
55
|
-
"@whook/http-router": "^9.0.
|
|
56
|
-
"@whook/whook": "^9.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.
|
|
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
|
|
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
|
-
}:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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:
|
|
333
|
+
options: NonNullable<WhookCompilerConfig['BUILD_OPTIONS']>,
|
|
336
334
|
): Promise<string> {
|
|
337
335
|
return `${
|
|
338
336
|
options.modules === 'commonjs'
|