Skip to content

Commit ce7ce06

Browse files
authored
fix: add check for existence of runtime package in user project (#226)
1 parent 967bb66 commit ce7ce06

File tree

5 files changed

+60
-24
lines changed

5 files changed

+60
-24
lines changed

src/helpers/getAngularVersion.js

-22
This file was deleted.

src/helpers/getPackageVersion.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
const { readJSON } = require('fs-extra')
2+
3+
/**
4+
* Get Angular version from package.json.
5+
* @param {string} root
6+
* @returns {Promise<string | undefined>}
7+
*/
8+
const getAngularVersion = async function (root) {
9+
let packagePath
10+
try {
11+
// eslint-disable-next-line n/no-missing-require
12+
packagePath = require.resolve('@angular/core/package.json', { paths: [root] })
13+
} catch {
14+
// module not found
15+
return
16+
}
17+
18+
const { version } = await readJSON(packagePath)
19+
return version
20+
}
21+
22+
module.exports.getAngularVersion = getAngularVersion
23+
24+
/**
25+
* Get Angular Runtime version from package.json.
26+
* @param {string} root
27+
* @returns {Promise<string | undefined>}
28+
*/
29+
const getAngularRuntimeVersion = async function (root) {
30+
let packagePath
31+
try {
32+
// eslint-disable-next-line n/no-missing-require
33+
packagePath = require.resolve('@netlify/angular-runtime/package.json', { paths: [root] })
34+
} catch {
35+
// module not found
36+
return
37+
}
38+
39+
const { version } = await readJSON(packagePath)
40+
return version
41+
}
42+
43+
module.exports.getAngularRuntimeVersion = getAngularRuntimeVersion

src/helpers/serverModuleHelpers.js

+15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const { parse, join } = require('node:path')
55
const { satisfies } = require('semver')
66

77
const getAngularJson = require('./getAngularJson')
8+
const { getAngularRuntimeVersion } = require('./getPackageVersion')
89
const { getEngineBasedOnKnownSignatures } = require('./serverTsSignature')
910
const { getProject } = require('./setUpEdgeFunction')
1011

@@ -102,6 +103,20 @@ const fixServerTs = async function ({ angularVersion, siteRoot, failPlugin, fail
102103
return
103104
}
104105

106+
// check if user has installed runtime package and if the version is 2.2.0 or newer
107+
// userspace `server.ts` file does import utils from runtime, so it has to be resolvable
108+
// from site root and auto-installed plugin in `.netlify/plugins` wouldn't suffice for that.
109+
const angularRuntimeVersionInstalledByUser = await getAngularRuntimeVersion(siteRoot)
110+
if (!angularRuntimeVersionInstalledByUser) {
111+
failBuild(
112+
"Angular@19 SSR on Netlify requires '@netlify/angular-runtime' version 2.2.0 or later to be installed. Please install it and try again.",
113+
)
114+
} else if (!satisfies(angularRuntimeVersionInstalledByUser, '>=2.2.0', { includePrerelease: true })) {
115+
failBuild(
116+
`Angular@19 SSR on Netlify requires '@netlify/angular-runtime' version 2.2.0 or later to be installed. Found version "${angularRuntimeVersionInstalledByUser}. Please update it to version 2.2.0 or later and try again.`,
117+
)
118+
}
119+
105120
// check wether project is using stable CommonEngine or Developer Preview AppEngine
106121
const serverModuleContents = await readFile(serverModuleLocation, 'utf8')
107122

src/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const ensureNoCompetingPlugin = require('./helpers/ensureNoCompetingPlugin')
44
const fixOutputDir = require('./helpers/fixOutputDir')
55
const getAngularJson = require('./helpers/getAngularJson')
66
const getAngularRoot = require('./helpers/getAngularRoot')
7-
const getAngularVersion = require('./helpers/getAngularVersion')
7+
const { getAngularVersion } = require('./helpers/getPackageVersion')
88
const { fixServerTs, revertServerTsFix } = require('./helpers/serverModuleHelpers')
99
const { getProject, setUpEdgeFunction } = require('./helpers/setUpEdgeFunction')
1010
const setUpHeaders = require('./helpers/setUpHeaders')

tests/integration.test.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { fileURLToPath } from 'node:url'
66

77
import build from '@netlify/build'
88

9-
import getAngularVersion from '../src/helpers/getAngularVersion.js'
9+
import { getAngularVersion } from '../src/helpers/getPackageVersion.js'
1010
import validateAngularVersion from '../src/helpers/validateAngularVersion.js'
1111

1212
test('project without angular config file fails the plugin execution but does not error', async () => {

0 commit comments

Comments
 (0)