@@ -311,15 +311,16 @@ export class DataGenerator implements Planner {
311311 /**
312312 * Contributes resolver override statements to backend.ts.
313313 *
314- * Generates code that reads VTL files from `data/resolvers/` at runtime
315- * and overrides the pipeline function response mapping templates, replacing
316- * the S3-based templates with inline content .
314+ * Generates code that reads VTL files from `data/resolvers/` at deploy
315+ * time, uploads them as CDK Assets to S3, and overrides the pipeline
316+ * function mapping template S3 locations .
317317 */
318318 private contributeResolverOverrides ( ) : void {
319319 // Imports for the generated backend.ts file
320- this . backendGenerator . addImport ( 'fs' , [ 'readFileSync' , ' readdirSync'] ) ;
320+ this . backendGenerator . addImport ( 'fs' , [ 'readdirSync' ] ) ;
321321 this . backendGenerator . addImport ( 'path' , [ 'join' , 'dirname' ] ) ;
322322 this . backendGenerator . addImport ( 'url' , [ 'fileURLToPath' ] ) ;
323+ this . backendGenerator . addNamespaceImport ( 'aws-cdk-lib/aws-s3-assets' , 'assets' ) ;
323324
324325 // const __dirname = dirname(fileURLToPath(import.meta.url));
325326 this . backendGenerator . addStatement (
@@ -399,13 +400,12 @@ export class DataGenerator implements Planner {
399400 * const functionId = `${typeName}${fieldName.charAt(0).toUpperCase() + fieldName.slice(1)}DataResolverFn`;
400401 * const pipelineFunction = backend.data.resources.cfnResources.cfnFunctionConfigurations[functionId];
401402 * if (pipelineFunction) {
402- * const template = readFileSync(join(resolversDir, file), "utf8");
403+ * const templatePath = join(resolversDir, file);
404+ * const vtlTemplate = new assets.Asset(backend.data, `VTLTemplate-${file}`, { path: templatePath });
403405 * if (isRequest) {
404- * pipelineFunction.requestMappingTemplateS3Location = undefined;
405- * pipelineFunction.requestMappingTemplate = template;
406+ * pipelineFunction.requestMappingTemplateS3Location = vtlTemplate.s3ObjectUrl;
406407 * } else {
407- * pipelineFunction.responseMappingTemplateS3Location = undefined;
408- * pipelineFunction.responseMappingTemplate = template;
408+ * pipelineFunction.responseMappingTemplateS3Location = vtlTemplate.s3ObjectUrl;
409409 * }
410410 * }
411411 * }
@@ -530,17 +530,32 @@ export class DataGenerator implements Planner {
530530 factory . createIdentifier ( 'pipelineFunction' ) ,
531531 factory . createBlock (
532532 [
533- // const template = readFileSync( join(resolversDir, file), "utf8" );
533+ // const templatePath = join(resolversDir, file);
534534 TS . constDecl (
535- 'template' ,
536- factory . createCallExpression ( factory . createIdentifier ( 'readFileSync' ) , undefined , [
537- factory . createCallExpression ( factory . createIdentifier ( 'join' ) , undefined , [
538- factory . createIdentifier ( 'resolversDir' ) ,
539- factory . createIdentifier ( 'file' ) ,
540- ] ) ,
541- factory . createStringLiteral ( 'utf8' ) ,
535+ 'templatePath' ,
536+ factory . createCallExpression ( factory . createIdentifier ( 'join' ) , undefined , [
537+ factory . createIdentifier ( 'resolversDir' ) ,
538+ factory . createIdentifier ( 'file' ) ,
542539 ] ) ,
543540 ) ,
541+ // const vtlTemplate = new assets.Asset(backend.data, `VTLTemplate-${file}`, { path: templatePath });
542+ TS . constDecl (
543+ 'vtlTemplate' ,
544+ factory . createNewExpression (
545+ factory . createPropertyAccessExpression ( factory . createIdentifier ( 'assets' ) , factory . createIdentifier ( 'Asset' ) ) ,
546+ undefined ,
547+ [
548+ TS . propAccess ( 'backend' , 'data' ) as ts . Expression ,
549+ factory . createTemplateExpression ( factory . createTemplateHead ( 'VTLTemplate-' ) , [
550+ factory . createTemplateSpan ( factory . createIdentifier ( 'file' ) , factory . createTemplateTail ( '' ) ) ,
551+ ] ) ,
552+ factory . createObjectLiteralExpression (
553+ [ factory . createPropertyAssignment ( 'path' , factory . createIdentifier ( 'templatePath' ) ) ] ,
554+ false ,
555+ ) ,
556+ ] ,
557+ ) ,
558+ ) ,
544559 // if (isRequest) { ... } else { ... }
545560 factory . createIfStatement (
546561 factory . createIdentifier ( 'isRequest' ) ,
@@ -552,16 +567,10 @@ export class DataGenerator implements Planner {
552567 factory . createIdentifier ( 'pipelineFunction' ) ,
553568 factory . createIdentifier ( 'requestMappingTemplateS3Location' ) ,
554569 ) ,
555- factory . createIdentifier ( 'undefined' ) ,
556- ) ,
557- ) ,
558- factory . createExpressionStatement (
559- factory . createAssignment (
560570 factory . createPropertyAccessExpression (
561- factory . createIdentifier ( 'pipelineFunction ' ) ,
562- factory . createIdentifier ( 'requestMappingTemplate ' ) ,
571+ factory . createIdentifier ( 'vtlTemplate ' ) ,
572+ factory . createIdentifier ( 's3ObjectUrl ' ) ,
563573 ) ,
564- factory . createIdentifier ( 'template' ) ,
565574 ) ,
566575 ) ,
567576 ] ,
@@ -575,16 +584,10 @@ export class DataGenerator implements Planner {
575584 factory . createIdentifier ( 'pipelineFunction' ) ,
576585 factory . createIdentifier ( 'responseMappingTemplateS3Location' ) ,
577586 ) ,
578- factory . createIdentifier ( 'undefined' ) ,
579- ) ,
580- ) ,
581- factory . createExpressionStatement (
582- factory . createAssignment (
583587 factory . createPropertyAccessExpression (
584- factory . createIdentifier ( 'pipelineFunction ' ) ,
585- factory . createIdentifier ( 'responseMappingTemplate ' ) ,
588+ factory . createIdentifier ( 'vtlTemplate ' ) ,
589+ factory . createIdentifier ( 's3ObjectUrl ' ) ,
586590 ) ,
587- factory . createIdentifier ( 'template' ) ,
588591 ) ,
589592 ) ,
590593 ] ,
0 commit comments