Skip to content

Commit 59ad25e

Browse files
committed
refactor: split reading angular version out to separate helper function
1 parent 210de56 commit 59ad25e

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

src/helpers/getAngularVersion.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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

src/helpers/validateAngularVersion.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
1-
const { readJSON } = require('fs-extra')
21
const { satisfies } = require('semver')
32

43
/**
54
* Ensure site is using Angular v17+.
6-
* @param {string} root
7-
* @returns {Promise<boolean>}
5+
* @param {string | undefined} version
6+
* @returns {boolean}
87
*/
9-
const validateAngularVersion = async function (root) {
10-
let packagePath
11-
try {
12-
// eslint-disable-next-line n/no-missing-require
13-
packagePath = require.resolve('@angular/core/package.json', { paths: [root] })
14-
} catch {
15-
// module not found
8+
const validateAngularVersion = function (version) {
9+
if (!version) {
1610
console.warn('This site does not seem to be using Angular.')
1711
return false
1812
}
1913

20-
const { version } = await readJSON(packagePath)
2114
if (!satisfies(version, '>=17.0.0-rc', { includePrerelease: true })) {
2215
console.warn(`This site does not seem to be using Angular 17 or later. Found: ${version}.`)
2316
return false

src/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const ensureNoCompetingPlugin = require('./helpers/ensureNoCompetingPlugin')
22
const fixOutputDir = require('./helpers/fixOutputDir')
33
const getAngularJson = require('./helpers/getAngularJson')
44
const getAngularRoot = require('./helpers/getAngularRoot')
5+
const getAngularVersion = require('./helpers/getAngularVersion')
56
const { setUpEdgeFunction } = require('./helpers/setUpEdgeFunction')
67
const validateAngularVersion = require('./helpers/validateAngularVersion')
78

@@ -11,7 +12,8 @@ module.exports = {
1112
async onPreBuild({ netlifyConfig, utils, constants }) {
1213
const { failBuild, failPlugin } = utils.build
1314
const siteRoot = getAngularRoot({ failBuild, netlifyConfig })
14-
isValidAngularProject = await validateAngularVersion(siteRoot)
15+
const angularVersion = await getAngularVersion(siteRoot)
16+
isValidAngularProject = validateAngularVersion(angularVersion)
1517
if (!isValidAngularProject) {
1618
console.warn('Skipping build plugin.')
1719
return

tests/integration.test.mjs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url'
66

77
import build from '@netlify/build'
88

9+
import getAngularVersion from '../src/helpers/getAngularVersion.js'
910
import validateAngularVersion from '../src/helpers/validateAngularVersion.js'
1011

1112
test('project without angular config file fails the plugin execution but does not error', async () => {
@@ -95,21 +96,21 @@ test('Angular 19 using App Engine (Developer Preview)', async () => {
9596
})
9697

9798
test('checks version for angular 19', async () => {
98-
const result = await validateAngularVersion('tests/fixtures/angular-19-common-engine')
99+
const result = validateAngularVersion(await getAngularVersion('tests/fixtures/angular-19-common-engine'))
99100
assert.strictEqual(result, true)
100101
})
101102

102103
test('checks version for angular 18', async () => {
103-
const result = await validateAngularVersion('tests/fixtures/application-builder')
104+
const result = validateAngularVersion(await getAngularVersion('tests/fixtures/application-builder'))
104105
assert.strictEqual(result, true)
105106
})
106107

107108
test('checks version for angular 17', async () => {
108-
const result = await validateAngularVersion('tests/fixtures/angular-17')
109+
const result = validateAngularVersion(await getAngularVersion('tests/fixtures/angular-17'))
109110
assert.strictEqual(result, true)
110111
})
111112

112113
test('fails angular version validation when angular dependencies are missing', async () => {
113-
const result = await validateAngularVersion('missing-angular-deps')
114+
const result = validateAngularVersion(await getAngularVersion('missing-angular-deps'))
114115
assert.strictEqual(result, false)
115116
})

0 commit comments

Comments
 (0)