Skip to content

Commit f3dd623

Browse files
authored
Merge pull request #14140 from aws-amplify/gen2-migrations-execute
2 parents cdc08b5 + 91486f1 commit f3dd623

2 files changed

Lines changed: 44 additions & 10 deletions

File tree

packages/amplify-gen2-codegen/src/function/source_builder.test.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import assert from 'node:assert';
22
import { FunctionDefinition, renderFunctions } from './source_builder';
33
import { printNodeArray } from '../test_utils/ts_node_printer';
4+
import { Runtime } from '@aws-sdk/client-lambda';
45

56
describe('render function', () => {
67
describe('import', () => {
@@ -40,13 +41,33 @@ describe('render function', () => {
4041
const source = printNodeArray(rendered);
4142
assert.match(source, /name: /);
4243
});
43-
it('does render runtime property', () => {
44+
test.each([[Runtime.nodejs16x], [Runtime.nodejs18x], [Runtime.nodejs20x], [Runtime.nodejs22x]])(
45+
'does render runtime property for %s nodejs.',
46+
(nodejsRuntime: Runtime) => {
47+
const definition: FunctionDefinition = {};
48+
definition.runtime = nodejsRuntime;
49+
50+
const rendered = renderFunctions(definition);
51+
const source = printNodeArray(rendered);
52+
const expectedRuntime = nodejsRuntime.split('nodejs')[1].split('.')[0];
53+
assert(expectedRuntime);
54+
assert.match(source, new RegExp(`runtime: ${expectedRuntime}`));
55+
},
56+
);
57+
58+
it('throws error for unsupported nodejs runtime', () => {
59+
const definition: FunctionDefinition = {};
60+
definition.runtime = Runtime.nodejs14x;
61+
62+
assert.throws(() => renderFunctions(definition), /Unsupported nodejs runtime/);
63+
});
64+
it('does not render runtime property for unsupported runtimes', () => {
4465
const definition: FunctionDefinition = {};
45-
definition.runtime = 'nodejs18.x';
66+
definition.runtime = Runtime.dotnet8;
4667

4768
const rendered = renderFunctions(definition);
4869
const source = printNodeArray(rendered);
49-
assert.match(source, /runtime: 18/);
70+
assert.doesNotMatch(source, /runtime: /);
5071
});
5172
it('does render timeoutSeconds property', () => {
5273
const definition: FunctionDefinition = {};

packages/amplify-gen2-codegen/src/function/source_builder.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import ts, { ObjectLiteralElementLike, VariableDeclaration, VariableStatement } from 'typescript';
22
import { EnvironmentResponse, Runtime } from '@aws-sdk/client-lambda';
33
import { renderResourceTsFile } from '../resource/resource';
4+
import assert from 'node:assert';
45

56
export interface FunctionDefinition {
67
category?: string;
@@ -128,14 +129,26 @@ export function createFunctionDefinition(
128129
);
129130
}
130131

131-
let nodeRuntime = 0;
132-
if (definition?.runtime) {
133-
const runtime = definition?.runtime;
134-
if (runtime === Runtime.nodejs16x) {
135-
nodeRuntime = 16;
136-
} else if (runtime === Runtime.nodejs18x) {
137-
nodeRuntime = 18;
132+
const runtime = definition?.runtime;
133+
if (runtime && runtime.includes('nodejs')) {
134+
let nodeRuntime: number | undefined;
135+
switch (runtime) {
136+
case Runtime.nodejs16x:
137+
nodeRuntime = 16;
138+
break;
139+
case Runtime.nodejs18x:
140+
nodeRuntime = 18;
141+
break;
142+
case Runtime.nodejs20x:
143+
nodeRuntime = 20;
144+
break;
145+
case Runtime.nodejs22x:
146+
nodeRuntime = 22;
147+
break;
148+
default:
149+
throw new Error(`Unsupported nodejs runtime for function: ${runtime}`);
138150
}
151+
assert(nodeRuntime, 'Expected nodejs version to be set');
139152

140153
defineFunctionProperties.push(createParameter('runtime', factory.createNumericLiteral(nodeRuntime)));
141154
}

0 commit comments

Comments
 (0)