From 8863bb4255537925af8317f3820654791e1e0d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=91=A8=F0=9F=8F=BC=E2=80=8D=F0=9F=92=BB=20Romain=20M?= =?UTF-8?q?arcadier-Muller?= Date: Thu, 23 May 2019 09:49:37 +0200 Subject: [PATCH 1/3] fix(core): Correctly search for loaded modules in node 12 Node 12 has corrected how the require.resolve function applied un-documented behavior, so that it is needed to make relative search paths explicit (./). The new approach should be backwards-compatible. Related: nodejs/node#27583 --- packages/@aws-cdk/cdk/lib/runtime-info.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/cdk/lib/runtime-info.ts b/packages/@aws-cdk/cdk/lib/runtime-info.ts index 3bd6790634656..209c45e71d276 100644 --- a/packages/@aws-cdk/cdk/lib/runtime-info.ts +++ b/packages/@aws-cdk/cdk/lib/runtime-info.ts @@ -55,7 +55,7 @@ function findNpmPackage(fileName: string): { name: string, version: string, priv const paths = mod.paths.map(stripNodeModules); try { - const packagePath = require.resolve('package.json', { paths }); + const packagePath = require.resolve('./package.json', { paths }); return require(packagePath); } catch (e) { return undefined; From 97a76a7aeedca6af1861751f61e0f8d758c84f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=91=A8=F0=9F=8F=BC=E2=80=8D=F0=9F=92=BB=20Romain=20M?= =?UTF-8?q?arcadier-Muller?= Date: Thu, 23 May 2019 10:27:15 +0200 Subject: [PATCH 2/3] Allow different behavior for pre- and post- node12 --- packages/@aws-cdk/cdk/lib/node-version.ts | 22 ++++++++++++++++++++++ packages/@aws-cdk/cdk/lib/runtime-info.ts | 7 ++++++- packages/@aws-cdk/cdk/package-lock.json | 11 +++++++++++ packages/@aws-cdk/cdk/package.json | 4 +++- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 packages/@aws-cdk/cdk/lib/node-version.ts diff --git a/packages/@aws-cdk/cdk/lib/node-version.ts b/packages/@aws-cdk/cdk/lib/node-version.ts new file mode 100644 index 0000000000000..f209e8c0f1a9e --- /dev/null +++ b/packages/@aws-cdk/cdk/lib/node-version.ts @@ -0,0 +1,22 @@ +import process = require('process'); +import semver = require('semver'); + +const nodeVersion = semver.parse(process.versions.node); +if (nodeVersion == null) { + throw new Error(`Unable to determine node runtime version from ${process.versions.node}`); +} + +/** + * The major version of the node runtime. + */ +export const major = nodeVersion.major; + +/** + * The minor version of the node runtime. + */ +export const minor = nodeVersion.minor; + +/** + * The revision of the node runtime. + */ +export const patch = nodeVersion.patch; diff --git a/packages/@aws-cdk/cdk/lib/runtime-info.ts b/packages/@aws-cdk/cdk/lib/runtime-info.ts index 209c45e71d276..c978691acc808 100644 --- a/packages/@aws-cdk/cdk/lib/runtime-info.ts +++ b/packages/@aws-cdk/cdk/lib/runtime-info.ts @@ -1,4 +1,5 @@ import cxapi = require('@aws-cdk/cx-api'); +import { major as nodeMajorVersion } from './node-version'; /** * Returns a list of loaded modules and their versions. @@ -55,7 +56,11 @@ function findNpmPackage(fileName: string): { name: string, version: string, priv const paths = mod.paths.map(stripNodeModules); try { - const packagePath = require.resolve('./package.json', { paths }); + const packagePath = require.resolve( + // Resolution behavior changed in node 12.0.0 - https://github.com/nodejs/node/issues/27583 + nodeMajorVersion >= 12 ? './package.json' : 'package.json', + { paths } + ); return require(packagePath); } catch (e) { return undefined; diff --git a/packages/@aws-cdk/cdk/package-lock.json b/packages/@aws-cdk/cdk/package-lock.json index ff4995939ee42..0dec5cd7563c0 100644 --- a/packages/@aws-cdk/cdk/package-lock.json +++ b/packages/@aws-cdk/cdk/package-lock.json @@ -10,6 +10,12 @@ "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", "dev": true }, + "@types/semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-OO0srjOGH99a4LUN2its3+r6CBYcplhJ466yLqs+zvAWgphCpS8hYZEZ797tRDP/QKcqTdb/YCN6ifASoAWkrQ==", + "dev": true + }, "fast-check": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-1.14.0.tgz", @@ -30,6 +36,11 @@ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-1.6.2.tgz", "integrity": "sha512-HNwHOH63m7kCxe0kWEe5jSLwJiL2N83RUUN8POniFuZS+OsbFcMWlvXgxIU2nwKy2zYG2bQan40WBNK4biYPRg==", "dev": true + }, + "semver": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", + "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==" } } } diff --git a/packages/@aws-cdk/cdk/package.json b/packages/@aws-cdk/cdk/package.json index d764290a98fb3..3f63416cd87d4 100644 --- a/packages/@aws-cdk/cdk/package.json +++ b/packages/@aws-cdk/cdk/package.json @@ -68,6 +68,7 @@ "license": "Apache-2.0", "devDependencies": { "@types/lodash": "^4.14.123", + "@types/semver": "^6.0.0", "cdk-build-tools": "^0.31.0", "cfn2ts": "^0.31.0", "fast-check": "^1.14.0", @@ -75,7 +76,8 @@ "pkglint": "^0.31.0" }, "dependencies": { - "@aws-cdk/cx-api": "^0.31.0" + "@aws-cdk/cx-api": "^0.31.0", + "semver": "^6.1.0" }, "homepage": "https://github.com/awslabs/aws-cdk", "peerDependencies": { From fcfa8de32e04ece0d373469118b5fb1cb43c0ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=91=A8=F0=9F=8F=BC=E2=80=8D=F0=9F=92=BB=20Romain=20M?= =?UTF-8?q?arcadier-Muller?= Date: Thu, 23 May 2019 10:44:48 +0200 Subject: [PATCH 3/3] Stop using semver as it's not JSII-able --- packages/@aws-cdk/cdk/lib/node-version.ts | 13 ++-- packages/@aws-cdk/cdk/package-lock.json | 84 +++++++++++------------ packages/@aws-cdk/cdk/package.json | 6 +- 3 files changed, 47 insertions(+), 56 deletions(-) diff --git a/packages/@aws-cdk/cdk/lib/node-version.ts b/packages/@aws-cdk/cdk/lib/node-version.ts index f209e8c0f1a9e..f7ebf928ed773 100644 --- a/packages/@aws-cdk/cdk/lib/node-version.ts +++ b/packages/@aws-cdk/cdk/lib/node-version.ts @@ -1,22 +1,19 @@ import process = require('process'); -import semver = require('semver'); -const nodeVersion = semver.parse(process.versions.node); -if (nodeVersion == null) { - throw new Error(`Unable to determine node runtime version from ${process.versions.node}`); -} +// process.versions.node is like "12.3.1" +const [strMajor, strMinor, strPatch, ] = process.versions.node.split('.'); /** * The major version of the node runtime. */ -export const major = nodeVersion.major; +export const major = Number(strMajor); /** * The minor version of the node runtime. */ -export const minor = nodeVersion.minor; +export const minor = Number(strMinor); /** * The revision of the node runtime. */ -export const patch = nodeVersion.patch; +export const patch = Number(strPatch); diff --git a/packages/@aws-cdk/cdk/package-lock.json b/packages/@aws-cdk/cdk/package-lock.json index 0dec5cd7563c0..525adfddc50e6 100644 --- a/packages/@aws-cdk/cdk/package-lock.json +++ b/packages/@aws-cdk/cdk/package-lock.json @@ -1,46 +1,42 @@ { - "name": "@aws-cdk/cdk", - "version": "0.31.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/lodash": { - "version": "4.14.123", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", - "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", - "dev": true - }, - "@types/semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-OO0srjOGH99a4LUN2its3+r6CBYcplhJ466yLqs+zvAWgphCpS8hYZEZ797tRDP/QKcqTdb/YCN6ifASoAWkrQ==", - "dev": true - }, - "fast-check": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-1.14.0.tgz", - "integrity": "sha512-haI2vSLhtIUhxJJT4Ys67IEINkou9GBlKP+GNr0AqtZUszY6Od+pzHlLki4I3pM9q6G9LTFX03ZyJ9zVCWXUXA==", - "dev": true, - "requires": { - "pure-rand": "^1.6.2" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "pure-rand": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-1.6.2.tgz", - "integrity": "sha512-HNwHOH63m7kCxe0kWEe5jSLwJiL2N83RUUN8POniFuZS+OsbFcMWlvXgxIU2nwKy2zYG2bQan40WBNK4biYPRg==", - "dev": true - }, - "semver": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", - "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==" - } - } + "name": "@aws-cdk/cdk", + "version": "0.31.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/lodash": { + "version": "4.14.130", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.130.tgz", + "integrity": "sha512-H++wk0tbneBsRVfLkgAAd0IIpmpVr2Bj4T0HncoOsQf3/xrJexRYQK2Tqo0Ej3pFslM8GkMgdis9bu6xIb1ycw==", + "dev": true + }, + "fast-check": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-1.15.1.tgz", + "integrity": "sha512-AhVx0sam1qDBmrEFRD3OufJHekzka7pyOj3zVAz6H0QenxUCIXG0LFLxcju6oRQNOt8FZOq3AfX+B0GtPNDjkA==", + "dev": true, + "requires": { + "pure-rand": "^1.6.2", + "tslib": "^1.9.3" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "pure-rand": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-1.6.2.tgz", + "integrity": "sha512-HNwHOH63m7kCxe0kWEe5jSLwJiL2N83RUUN8POniFuZS+OsbFcMWlvXgxIU2nwKy2zYG2bQan40WBNK4biYPRg==", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + } + } } diff --git a/packages/@aws-cdk/cdk/package.json b/packages/@aws-cdk/cdk/package.json index 3f63416cd87d4..152318440374b 100644 --- a/packages/@aws-cdk/cdk/package.json +++ b/packages/@aws-cdk/cdk/package.json @@ -67,8 +67,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@types/lodash": "^4.14.123", - "@types/semver": "^6.0.0", + "@types/lodash": "^4.14.130", "cdk-build-tools": "^0.31.0", "cfn2ts": "^0.31.0", "fast-check": "^1.14.0", @@ -76,8 +75,7 @@ "pkglint": "^0.31.0" }, "dependencies": { - "@aws-cdk/cx-api": "^0.31.0", - "semver": "^6.1.0" + "@aws-cdk/cx-api": "^0.31.0" }, "homepage": "https://github.com/awslabs/aws-cdk", "peerDependencies": {