Skip to content

Commit

Permalink
fix(vite-plugin-angular): remove @ngtools/webpack and make @angular-d…
Browse files Browse the repository at this point in the history
…evkit/build-angular optional (#1304)
  • Loading branch information
brandonroberts authored Aug 29, 2024
1 parent 2e68efa commit 7b4a947
Show file tree
Hide file tree
Showing 10 changed files with 94 additions and 32 deletions.
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@
"@commitlint/cli": "^17.4.2",
"@commitlint/config-conventional": "^17.4.2",
"@netlify/functions": "^2.3.0",
"@ngtools/webpack": "^18.0.0",
"@nx/cypress": "19.2.3",
"@nx/eslint": "19.2.3",
"@nx/eslint-plugin": "19.2.3",
Expand Down
1 change: 0 additions & 1 deletion packages/create-analog/template-angular-v16/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
"@angular-devkit/build-angular": "^16.2.0",
"@angular/cli": "^16.2.0",
"@angular/compiler-cli": "^16.2.0",
"@ngtools/webpack": "^16.2.0",
"@nx/vite": "~18.0.0",
"nx": "~18.0.0",
"jsdom": "^22.1.0",
Expand Down
1 change: 0 additions & 1 deletion packages/create-analog/template-angular-v17/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
"@angular-devkit/build-angular": "^17.2.0",
"@angular/cli": "^17.2.0",
"@angular/compiler-cli": "^17.2.0",
"@ngtools/webpack": "^17.2.0",
"@nx/vite": "~18.0.0",
"nx": "~18.0.0",
"jsdom": "^22.1.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/create-analog/template-blog/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"@analogjs/content": "^1.7.3-beta.6",
"@analogjs/router": "^1.7.3-beta.6",
"@angular/animations": "^18.0.0",
"@angular/build": "^18.0.0",
"@angular/common": "^18.0.0",
"@angular/compiler": "^18.0.0",
"@angular/core": "^18.0.0",
Expand All @@ -38,7 +39,6 @@
"@analogjs/platform": "^1.7.3-beta.6",
"@analogjs/vite-plugin-angular": "^1.7.3-beta.6",
"@analogjs/vitest-angular": "^1.7.3-beta.6",
"@angular-devkit/build-angular": "^18.0.0",
"@angular/cli": "^18.0.0",
"@angular/compiler-cli": "^18.0.0",
"jsdom": "^22.1.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/create-analog/template-latest/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"@analogjs/content": "^1.7.3-beta.6",
"@analogjs/router": "^1.7.3-beta.6",
"@angular/animations": "^18.0.0",
"@angular/build": "^18.0.0",
"@angular/common": "^18.0.0",
"@angular/compiler": "^18.0.0",
"@angular/core": "^18.0.0",
Expand All @@ -40,7 +41,6 @@
"@analogjs/platform": "^1.7.3-beta.6",
"@analogjs/vite-plugin-angular": "^1.7.3-beta.6",
"@analogjs/vitest-angular": "^1.7.3-beta.6",
"@angular-devkit/build-angular": "^18.0.0",
"@angular/cli": "^18.0.0",
"@angular/compiler-cli": "^18.0.0",
"jsdom": "^22.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/create-analog/template-minimal/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"@analogjs/content": "^1.7.3-beta.1",
"@analogjs/router": "^1.7.3-beta.1",
"@angular/animations": "^18.0.0",
"@angular/build": "^18.0.0",
"@angular/common": "^18.0.0",
"@angular/compiler": "^18.0.0",
"@angular/core": "^18.0.0",
Expand All @@ -40,7 +41,6 @@
"@analogjs/platform": "^1.7.3-beta.1",
"@analogjs/vite-plugin-angular": "^1.7.3-beta.1",
"@analogjs/vitest-angular": "^1.7.3-beta.1",
"@angular-devkit/build-angular": "^18.0.0",
"@angular/cli": "^18.0.0",
"@angular/compiler-cli": "^18.0.0",
"typescript": "~5.4.2",
Expand Down
10 changes: 9 additions & 1 deletion packages/vite-plugin-angular/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,15 @@
},
"peerDependencies": {
"@angular-devkit/build-angular": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
"@ngtools/webpack": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
"@angular/build": "^18.0.0"
},
"peerDependenciesMeta": {
"@angular-devkit/build-angular": {
"optional": true
},
"@angular/build": {
"optional": true
}
},
"dependencies": {
"ts-morph": "^21.0.0"
Expand Down
21 changes: 6 additions & 15 deletions packages/vite-plugin-angular/src/lib/angular-vite-plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
ModuleNode,
normalizePath,
Plugin,
UserConfig,
ViteDevServer,
preprocessCSS,
ResolvedConfig,
Expand All @@ -19,7 +18,12 @@ import {
StyleUrlsResolver,
TemplateUrlsResolver,
} from './component-resolvers.js';
import { augmentHostWithResources } from './host.js';
import {
augmentHostWithCaching,
augmentHostWithResources,
augmentProgramWithVersioning,
mergeTransformers,
} from './host.js';
import { jitPlugin } from './angular-jit-plugin.js';
import { buildOptimizerPlugin } from './angular-build-optimizer-plugin.js';

Expand Down Expand Up @@ -119,19 +123,8 @@ export function angular(options?: PluginOptions): Plugin[] {
// The file emitter created during `onStart` that will be used during the build in `onLoad` callbacks for TS files
let fileEmitter: FileEmitter | undefined;
let compilerOptions = {};
// Temporary deep import for transformer support
const {
mergeTransformers,
replaceBootstrap,
} = require('@ngtools/webpack/src/ivy/transformation');
const {
augmentProgramWithVersioning,
augmentHostWithCaching,
} = require('@ngtools/webpack/src/ivy/host');
const ts = require('typescript');

// let compilerCli: typeof import('@angular/compiler-cli');
let userConfig: UserConfig;
let resolvedConfig: ResolvedConfig;
let rootNames: string[];
let host: ts.CompilerHost;
Expand Down Expand Up @@ -159,7 +152,6 @@ export function angular(options?: PluginOptions): Plugin[] {
name: '@analogjs/vite-plugin-angular',
async config(config, { command }) {
watchMode = command === 'serve';
userConfig = config;

pluginOptions.tsconfig =
options?.tsconfig ??
Expand Down Expand Up @@ -572,7 +564,6 @@ export function angular(options?: PluginOptions): Plugin[] {
mergeTransformers(
{
before: [
replaceBootstrap(getTypeChecker),
...(jit
? [
compilerCli.constructorParametersDownlevelTransform(
Expand Down
77 changes: 76 additions & 1 deletion packages/vite-plugin-angular/src/lib/host.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { CompilerHost } from '@angular/compiler-cli';
import { normalizePath } from '@ngtools/webpack/src/ivy/paths.js';
import { normalizePath } from 'vite';

import { readFileSync } from 'node:fs';
import * as ts from 'typescript';
import { compileAnalogFile } from './authoring/analog.js';
import { TEMPLATE_TAG_REGEX } from './authoring/constants.js';
import { MarkdownTemplateTransform } from './authoring/markdown-transform.js';

import { createRequire } from 'node:module';
import { createHash } from 'node:crypto';

const require = createRequire(import.meta.url);

Expand Down Expand Up @@ -151,3 +153,76 @@ export function augmentHostWithResources(
return null;
};
}

export function augmentProgramWithVersioning(program: ts.Program): void {
const baseGetSourceFiles = program.getSourceFiles;
program.getSourceFiles = function (...parameters) {
const files: readonly (ts.SourceFile & { version?: string })[] =
baseGetSourceFiles(...parameters);

for (const file of files) {
if (file.version === undefined) {
file.version = createHash('sha256').update(file.text).digest('hex');
}
}

return files;
};
}

export function augmentHostWithCaching(
host: ts.CompilerHost,
cache: Map<string, ts.SourceFile>
): void {
const baseGetSourceFile = host.getSourceFile;
host.getSourceFile = function (
fileName,
languageVersion,
onError,
shouldCreateNewSourceFile,
...parameters
) {
if (!shouldCreateNewSourceFile && cache.has(fileName)) {
return cache.get(fileName);
}

const file = baseGetSourceFile.call(
host,
fileName,
languageVersion,
onError,
true,
...parameters
);

if (file) {
cache.set(fileName, file);
}

return file;
};
}

export function mergeTransformers(
first: ts.CustomTransformers,
second: ts.CustomTransformers
): ts.CustomTransformers {
const result: ts.CustomTransformers = {};

if (first.before || second.before) {
result.before = [...(first.before || []), ...(second.before || [])];
}

if (first.after || second.after) {
result.after = [...(first.after || []), ...(second.after || [])];
}

if (first.afterDeclarations || second.afterDeclarations) {
result.afterDeclarations = [
...(first.afterDeclarations || []),
...(second.afterDeclarations || []),
];
}

return result;
}
9 changes: 0 additions & 9 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 7b4a947

Please sign in to comment.