Skip to content

Commit 9df13e3

Browse files
fix(vite-plugin-angular): use conditional imports across Angular Devkit versions (#1077)
1 parent 8e513df commit 9df13e3

File tree

2 files changed

+89
-26
lines changed

2 files changed

+89
-26
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { SourceFileCache } from './source-file-cache';
2+
3+
export interface CompilerPluginOptions {
4+
sourcemap: boolean;
5+
tsconfig: string;
6+
jit?: boolean;
7+
/** Skip TypeScript compilation setup. This is useful to re-use the TypeScript compilation from another plugin. */
8+
noopTypeScriptCompilation?: boolean;
9+
advancedOptimizations?: boolean;
10+
thirdPartySourcemaps?: boolean;
11+
fileReplacements?: Record<string, string>;
12+
sourceFileCache?: SourceFileCache;
13+
// loadResultCache?: LoadResultCache;
14+
incremental: boolean;
15+
}
Lines changed: 74 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,86 @@
1-
import * as wbl from '@angular-devkit/build-angular/src/tools/babel/webpack-loader.js';
2-
import * as app from '@angular-devkit/build-angular/src/tools/babel/presets/application.js';
3-
import * as cp from '@angular-devkit/build-angular/src/tools/esbuild/angular/compiler-plugin.js';
1+
import { VERSION } from '@angular/compiler-cli';
2+
import { createRequire } from 'node:module';
3+
import type { CompilerPluginOptions } from './compiler-plugin-options.js';
44
import * as sfc from './source-file-cache.js';
55

6-
let requiresLinking: Function;
7-
/**
8-
* Workaround for compatibility with Angular 16.2+
9-
*/
10-
if (typeof (wbl as any)['requiresLinking'] !== 'undefined') {
11-
requiresLinking = (wbl as any).requiresLinking;
12-
} else if (typeof (app as any)['requiresLinking'] !== 'undefined') {
13-
requiresLinking = (app as any)['requiresLinking'] as Function;
14-
}
6+
const require = createRequire(import.meta.url);
157

16-
/**
17-
* Workaround for compatibility with Angular 17.0+
18-
*/
8+
const angularVersion = Number(VERSION.major);
9+
let requiresLinking: Function;
1910
let sourceFileCache: any;
20-
if (typeof (cp as any)['SourceFileCache'] !== 'undefined') {
21-
sourceFileCache = (cp as any).SourceFileCache;
11+
let cjt: Function;
12+
let jt: any;
13+
let angularApplicationPreset: Function;
14+
15+
if (angularVersion < 15) {
16+
throw new Error('AnalogJS is not compatible with Angular v14 and lower');
17+
} else if (angularVersion >= 15 && angularVersion < 16) {
18+
const app = require('@angular-devkit/build-angular/src/babel/presets/application.js');
19+
const wbl = require('@angular-devkit/build-angular/src/babel/webpack-loader.js');
20+
const cp = require('@angular-devkit/build-angular/src/builders/browser-esbuild/compiler-plugin.js');
21+
const {
22+
createJitResourceTransformer,
23+
} = require('@angular-devkit/build-angular/src/builders/browser-esbuild/angular/jit-resource-transformer.js');
24+
const {
25+
JavaScriptTransformer,
26+
} = require('@angular-devkit/build-angular/src/builders/browser-esbuild/javascript-transformer.js');
27+
28+
requiresLinking = wbl.requiresLinking;
29+
sourceFileCache = cp.SourceFileCache;
30+
cjt = createJitResourceTransformer;
31+
jt = JavaScriptTransformer;
32+
angularApplicationPreset = app.default;
33+
} else if (angularVersion >= 16 && angularVersion < 18) {
34+
const app = require('@angular-devkit/build-angular/src/tools/babel/presets/application.js');
35+
const wbl = require('@angular-devkit/build-angular/src/tools/babel/webpack-loader.js');
36+
const cp = require('@angular-devkit/build-angular/src/tools/esbuild/angular/compiler-plugin.js');
37+
const {
38+
createJitResourceTransformer,
39+
} = require('@angular-devkit/build-angular/src/tools/esbuild/angular/jit-resource-transformer.js');
40+
const {
41+
JavaScriptTransformer,
42+
} = require('@angular-devkit/build-angular/src/tools/esbuild/javascript-transformer.js');
43+
44+
/**
45+
* Workaround for compatibility with Angular 16.2+
46+
*/
47+
if (typeof wbl['requiresLinking'] !== 'undefined') {
48+
requiresLinking = wbl.requiresLinking;
49+
} else if (typeof app['requiresLinking'] !== 'undefined') {
50+
requiresLinking = app['requiresLinking'];
51+
}
52+
/**
53+
* Workaround for compatibility with Angular 17.0+
54+
*/
55+
if (typeof cp['SourceFileCache'] !== 'undefined') {
56+
sourceFileCache = cp.SourceFileCache;
57+
} else {
58+
sourceFileCache = sfc.SourceFileCache;
59+
}
60+
61+
cjt = createJitResourceTransformer;
62+
jt = JavaScriptTransformer;
63+
angularApplicationPreset = app.default;
2264
} else {
23-
sourceFileCache = sfc.SourceFileCache;
24-
}
65+
const {
66+
createJitResourceTransformer,
67+
JavaScriptTransformer,
68+
SourceFileCache,
69+
} = require('@angular/build/private');
70+
const app = require('@angular-devkit/build-angular/src/tools/babel/presets/application.js');
2571

26-
const angularApplicationPreset = app.default;
27-
import { createJitResourceTransformer } from '@angular-devkit/build-angular/src/tools/esbuild/angular/jit-resource-transformer.js';
28-
import { CompilerPluginOptions } from '@angular-devkit/build-angular/src/tools/esbuild/angular/compiler-plugin.js';
29-
import { JavaScriptTransformer } from '@angular-devkit/build-angular/src/tools/esbuild/javascript-transformer.js';
72+
requiresLinking = app.requiresLinking;
73+
sourceFileCache = SourceFileCache;
74+
cjt = createJitResourceTransformer;
75+
jt = JavaScriptTransformer;
76+
angularApplicationPreset = app.default;
77+
}
3078

3179
export {
3280
requiresLinking,
3381
angularApplicationPreset,
34-
createJitResourceTransformer,
35-
CompilerPluginOptions,
36-
JavaScriptTransformer,
82+
cjt as createJitResourceTransformer,
83+
jt as JavaScriptTransformer,
3784
sourceFileCache as SourceFileCache,
85+
CompilerPluginOptions,
3886
};

0 commit comments

Comments
 (0)