From 9263ac471f1da6bed7f8ad9a8390f5672ca5056a Mon Sep 17 00:00:00 2001 From: Brandon Roberts Date: Thu, 10 Aug 2023 08:36:56 -0500 Subject: [PATCH] fix(vite-plugin-angular): add compatibility support for Angular v16.2+ (#600) --- .../tests/create-analog.spec.ts | 39 +++++++++++++++++++ .../src/lib/utils/devkit.ts | 15 ++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/apps/create-analog-e2e/tests/create-analog.spec.ts b/apps/create-analog-e2e/tests/create-analog.spec.ts index 2bc1c6193..48895801e 100644 --- a/apps/create-analog-e2e/tests/create-analog.spec.ts +++ b/apps/create-analog-e2e/tests/create-analog.spec.ts @@ -1,5 +1,38 @@ import { checkFilesExist, uniq, runCommandAsync } from '@nx/plugin/testing'; import { readFileSync, writeFileSync, rmdirSync } from 'node:fs'; +import fs from 'node:fs'; +import path from 'node:path'; + +function copy(src, dest) { + const stat = fs.statSync(src); + if (stat.isDirectory()) { + copyDir(src, dest); + } else { + fs.copyFileSync(src, dest); + } +} + +/** + * @param {string} srcDir + * @param {string} destDir + */ +function copyDir(srcDir, destDir) { + fs.mkdirSync(destDir, { recursive: true }); + for (const file of fs.readdirSync(srcDir)) { + const srcFile = path.resolve(srcDir, file); + const destFile = path.resolve(destDir, file); + copy(srcFile, destFile); + } +} + +function emptyDir(dir) { + if (!fs.existsSync(dir)) { + return; + } + for (const file of fs.readdirSync(dir)) { + fs.rmSync(path.resolve(dir, file), { recursive: true, force: true }); + } +} describe('create-analog e2e', () => { it('should create my-app', async () => { @@ -15,6 +48,12 @@ describe('create-analog e2e', () => { cwd: tmpDir, }); + emptyDir(`${tmpDir}/node_modules/@analogjs`); + copyDir( + `${process.cwd()}/node_modules/@analogjs`, + `${tmpDir}/node_modules/@analogjs` + ); + let viteConfig = readFileSync(`${tmpDir}/vite.config.ts`, 'utf-8'); viteConfig = viteConfig.replace( 'analog()', diff --git a/packages/vite-plugin-angular/src/lib/utils/devkit.ts b/packages/vite-plugin-angular/src/lib/utils/devkit.ts index 3b1509702..8a85ca668 100644 --- a/packages/vite-plugin-angular/src/lib/utils/devkit.ts +++ b/packages/vite-plugin-angular/src/lib/utils/devkit.ts @@ -1,6 +1,17 @@ -import { requiresLinking } from '@angular-devkit/build-angular/src/tools/babel/webpack-loader'; -import angularApplicationPreset from '@angular-devkit/build-angular/src/tools/babel/presets/application'; +import * as wbl from '@angular-devkit/build-angular/src/tools/babel/webpack-loader'; +import * as app from '@angular-devkit/build-angular/src/tools/babel/presets/application'; +let requiresLinking: Function; +/** + * Workaround for compatibility with Angular 16.2+ + */ +if (typeof wbl['requiresLinking'] !== 'undefined') { + requiresLinking = wbl.requiresLinking; +} else if (typeof (app as any)['requiresLinking'] !== 'undefined') { + requiresLinking = (app as any)['requiresLinking'] as Function; +} + +const angularApplicationPreset = app.default; import { createJitResourceTransformer } from '@angular-devkit/build-angular/src/tools/esbuild/angular/jit-resource-transformer'; import { CompilerPluginOptions } from '@angular-devkit/build-angular/src/tools/esbuild/angular/compiler-plugin'; import { JavaScriptTransformer } from '@angular-devkit/build-angular/src/tools/esbuild/javascript-transformer';