diff --git a/.all-contributorsrc b/.all-contributorsrc index ca9b2c50..4ba8be3f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -277,6 +277,15 @@ "contributions": [ "code" ] + }, + { + "login": "sanderkooger", + "name": "Sander Kooger", + "avatar_url": "https://avatars.githubusercontent.com/u/19397354?v=4", + "profile": "https://thisisfashion.tv", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/src/helper.ts b/src/helper.ts index 8efcd6a8..9ad970b0 100644 --- a/src/helper.ts +++ b/src/helper.ts @@ -221,13 +221,19 @@ export type GoogleNodeProviderRuntimeMatcher = { [Version in Versions as `nodejs${Version}`]: `node${Version}`; }; +export type ScalewayNodeProviderRuntimeMatcher = { + [Version in Versions as `node${Version}`]: `node${Version}`; +}; + export type AwsNodeMatcher = AwsNodeProviderRuntimeMatcher<12 | 14 | 16 | 18>; export type AzureNodeMatcher = AzureNodeProviderRuntimeMatcher<12 | 14 | 16 | 18>; export type GoogleNodeMatcher = GoogleNodeProviderRuntimeMatcher<12 | 14 | 16 | 18>; -export type NodeMatcher = AwsNodeMatcher & AzureNodeMatcher & GoogleNodeMatcher; +export type ScalewayNodeMatcher = ScalewayNodeProviderRuntimeMatcher<12 | 14 | 16 | 18 | 20>; + +export type NodeMatcher = AwsNodeMatcher & AzureNodeMatcher & GoogleNodeMatcher & ScalewayNodeMatcher; export type AwsNodeMatcherKey = keyof AwsNodeMatcher; @@ -235,7 +241,9 @@ export type AzureNodeMatcherKey = keyof AzureNodeMatcher; export type GoogleNodeMatcherKey = keyof GoogleNodeMatcher; -export type NodeMatcherKey = AwsNodeMatcherKey | AzureNodeMatcherKey | GoogleNodeMatcherKey; +export type ScalewayNodeMatcherKey = keyof ScalewayNodeMatcher; + +export type NodeMatcherKey = AwsNodeMatcherKey | AzureNodeMatcherKey | GoogleNodeMatcherKey | ScalewayNodeMatcherKey; const awsNodeMatcher: AwsNodeMatcher = { 'nodejs18.x': 'node18', @@ -258,12 +266,26 @@ const googleNodeMatcher: GoogleNodeMatcher = { nodejs12: 'node12', }; -const nodeMatcher: NodeMatcher = { ...googleNodeMatcher, ...awsNodeMatcher, ...azureNodeMatcher }; +const scalewayNodeMatcher: ScalewayNodeMatcher = { + node20: 'node20', + node18: 'node18', + node16: 'node16', + node14: 'node14', + node12: 'node12', +}; + +const nodeMatcher: NodeMatcher = { + ...googleNodeMatcher, + ...awsNodeMatcher, + ...azureNodeMatcher, + ...scalewayNodeMatcher, +}; export const providerRuntimeMatcher = Object.freeze>({ aws: awsNodeMatcher as NodeMatcher, azure: azureNodeMatcher as NodeMatcher, google: googleNodeMatcher as NodeMatcher, + scaleway: scalewayNodeMatcher as NodeMatcher, }); export const isNodeMatcherKey = (input: unknown): input is NodeMatcherKey => diff --git a/src/pack.ts b/src/pack.ts index edc994e3..01ff27dc 100644 --- a/src/pack.ts +++ b/src/pack.ts @@ -89,12 +89,16 @@ export const filterFilesForZipPackage = ({ // eslint-disable-next-line max-statements export async function pack(this: EsbuildServerlessPlugin) { // GOOGLE Provider requires a package.json and NO node_modules + + const providerName = this.serverless?.service?.provider?.name; const isGoogleProvider = this.serverless?.service?.provider?.name === 'google'; + const isScalewayProvider = this.serverless?.service?.provider?.name === 'scaleway'; // Scaleway can not have package: individually const excludedFiles = isGoogleProvider ? [] : excludedFilesDefault; - // Google provider cannot use individual packaging for now - this could be built in a future release - if (isGoogleProvider && this.serverless?.service?.package?.individually) { - throw new Error('Packaging failed: cannot package function individually when using Google provider'); + // Google and Scaleway providers cannot use individual packaging for now - this could be built in a future release + const isPackageIndividuallyNotSupported = isGoogleProvider || isScalewayProvider || false; + if (isPackageIndividuallyNotSupported && this.serverless?.service?.package?.individually) { + throw new Error(`Packaging failed: cannot package function individually when using ${providerName} provider`); } const { buildDirPath, workDirPath } = this;