diff --git a/CHANGELOG.md b/CHANGELOG.md index 54dee502b6d69..3a949e3bfc65a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.95.1](https://github.com/aws/aws-cdk/compare/v1.95.0...v1.95.1) (2021-03-25) + + +### Bug Fixes + +* **codebuild:** module fails to load with error "Cannot use import statement outside a module" ([b1ffd33](https://github.com/aws/aws-cdk/commit/b1ffd335b6c41a26c1f88db2fc5a739c4c18c7fe)), closes [#13699](https://github.com/aws/aws-cdk/issues/13699) [#13699](https://github.com/aws/aws-cdk/issues/13699) + ## [1.95.0](https://github.com/aws/aws-cdk/compare/v1.94.1...v1.95.0) (2021-03-25) diff --git a/package.json b/package.json index c79dbb9cfa2ff..6dad27d90e51f 100644 --- a/package.json +++ b/package.json @@ -51,9 +51,6 @@ "nohoist": [ "**/jszip", "**/jszip/**", - "@aws-cdk/aws-codebuild/@aws-cdk/yaml-cfn", - "@aws-cdk/aws-codebuild/@aws-cdk/yaml-cfn/yaml", - "@aws-cdk/aws-codebuild/@aws-cdk/yaml-cfn/yaml/**", "@aws-cdk/aws-codepipeline-actions/case", "@aws-cdk/aws-codepipeline-actions/case/**", "@aws-cdk/aws-cognito/punycode", @@ -66,9 +63,6 @@ "@aws-cdk/cloud-assembly-schema/jsonschema/**", "@aws-cdk/cloud-assembly-schema/semver", "@aws-cdk/cloud-assembly-schema/semver/**", - "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn", - "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn/yaml", - "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn/yaml/**", "@aws-cdk/core/@balena/dockerignore", "@aws-cdk/core/@balena/dockerignore/**", "@aws-cdk/core/fs-extra", @@ -81,9 +75,6 @@ "@aws-cdk/cx-api/semver/**", "@aws-cdk/yaml-cfn/yaml", "@aws-cdk/yaml-cfn/yaml/**", - "aws-cdk-lib/@aws-cdk/yaml-cfn", - "aws-cdk-lib/@aws-cdk/yaml-cfn/yaml", - "aws-cdk-lib/@aws-cdk/yaml-cfn/yaml/**", "aws-cdk-lib/@balena/dockerignore", "aws-cdk-lib/@balena/dockerignore/**", "aws-cdk-lib/case", @@ -102,9 +93,6 @@ "aws-cdk-lib/semver/**", "aws-cdk-lib/yaml", "aws-cdk-lib/yaml/**", - "monocdk/@aws-cdk/yaml-cfn", - "monocdk/@aws-cdk/yaml-cfn/yaml", - "monocdk/@aws-cdk/yaml-cfn/yaml/**", "monocdk/@balena/dockerignore", "monocdk/@balena/dockerignore/**", "monocdk/case", diff --git a/packages/@aws-cdk/aws-codebuild/package.json b/packages/@aws-cdk/aws-codebuild/package.json index e3a2a673ad946..e5a9a34ecd807 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -103,9 +103,6 @@ "@aws-cdk/yaml-cfn": "0.0.0", "constructs": "^3.3.69" }, - "bundledDependencies": [ - "@aws-cdk/yaml-cfn" - ], "homepage": "https://github.com/aws/aws-cdk", "peerDependencies": { "@aws-cdk/aws-cloudwatch": "0.0.0", @@ -122,6 +119,7 @@ "@aws-cdk/aws-secretsmanager": "0.0.0", "@aws-cdk/core": "0.0.0", "@aws-cdk/region-info": "0.0.0", + "@aws-cdk/yaml-cfn": "0.0.0", "constructs": "^3.3.69" }, "engines": { diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index 402577b396714..6ec40598cac62 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -363,6 +363,7 @@ "@aws-cdk/aws-wafv2": "0.0.0", "@aws-cdk/aws-workspaces": "0.0.0", "@aws-cdk/core": "0.0.0", + "@aws-cdk/yaml-cfn": "0.0.0", "constructs": "^3.3.69" }, "devDependencies": { @@ -374,9 +375,6 @@ "pkglint": "0.0.0", "ts-jest": "^26.5.4" }, - "bundledDependencies": [ - "@aws-cdk/yaml-cfn" - ], "keywords": [ "aws", "cdk", diff --git a/packages/@aws-cdk/yaml-cfn/.gitignore b/packages/@aws-cdk/yaml-cfn/.gitignore index 8b9c845e5d12a..bb785cfb74f08 100644 --- a/packages/@aws-cdk/yaml-cfn/.gitignore +++ b/packages/@aws-cdk/yaml-cfn/.gitignore @@ -3,6 +3,7 @@ *.d.ts node_modules dist +tsconfig.json .jsii .LAST_BUILD @@ -14,4 +15,4 @@ nyc.config.js !.eslintrc.js !jest.config.js -junit.xml +junit.xml \ No newline at end of file diff --git a/packages/@aws-cdk/yaml-cfn/package.json b/packages/@aws-cdk/yaml-cfn/package.json index 842455998dad5..7fc68d44a23af 100644 --- a/packages/@aws-cdk/yaml-cfn/package.json +++ b/packages/@aws-cdk/yaml-cfn/package.json @@ -23,6 +23,32 @@ "cloudformation", "yaml" ], + "jsii": { + "outdir": "dist", + "targets": { + "java": { + "package": "software.amazon.awscdk.yaml.cfn", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "cdk-yaml-cfn" + } + }, + "dotnet": { + "namespace": "Amazon.CDK.Yaml.Cfn", + "packageId": "Amazon.CDK.Yaml.Cfn", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" + }, + "python": { + "distName": "aws-cdk.yaml-cfn", + "module": "aws_cdk.yaml_cfn", + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ] + } + }, + "projectReferences": true + }, "scripts": { "build": "cdk-build", "watch": "cdk-watch", diff --git a/packages/@aws-cdk/yaml-cfn/tsconfig.json b/packages/@aws-cdk/yaml-cfn/tsconfig.json deleted file mode 100644 index 5e75173fa8734..0000000000000 --- a/packages/@aws-cdk/yaml-cfn/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target":"ES2018", - "module": "commonjs", - "lib": ["es2016", "es2017.object", "es2017.string"], - "declaration": true, - "composite": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization":false - }, - "include": ["**/*.ts" ], - "exclude": ["node_modules"] -} diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 7abdfa6de5a45..bc1a4b73f08c2 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -81,7 +81,6 @@ }, "license": "Apache-2.0", "bundledDependencies": [ - "@aws-cdk/yaml-cfn", "@balena/dockerignore", "case", "fs-extra", @@ -93,7 +92,6 @@ "yaml" ], "dependencies": { - "@aws-cdk/yaml-cfn": "0.0.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^9.1.0", diff --git a/packages/decdk/test/schema.test.ts b/packages/decdk/test/schema.test.ts index 84888d94b365b..7b097dcc9fcbe 100644 --- a/packages/decdk/test/schema.test.ts +++ b/packages/decdk/test/schema.test.ts @@ -79,7 +79,7 @@ test('schemaForInterface: interface with primitives', async () => { * are propagated outwards. */ function spawn(command: string, options: SpawnOptions | undefined) { - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { const cp = spawnAsync(command, [], { stdio: 'inherit', ...options }); cp.on('error', reject); diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 42ac44b1a8a60..7f1f6da5555b1 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -87,7 +87,6 @@ }, "license": "Apache-2.0", "bundledDependencies": [ - "@aws-cdk/yaml-cfn", "@balena/dockerignore", "case", "fs-extra", @@ -99,7 +98,6 @@ "yaml" ], "dependencies": { - "@aws-cdk/yaml-cfn": "0.0.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^9.1.0", diff --git a/tools/nodeunit-shim/index.ts b/tools/nodeunit-shim/index.ts index 1c4ee174ff229..8ba50bedefefd 100644 --- a/tools/nodeunit-shim/index.ts +++ b/tools/nodeunit-shim/index.ts @@ -81,7 +81,7 @@ export function nodeunitShim(exports: Record) { }); } else { // It's a test - test(testName, () => new Promise(ok => { + test(testName, () => new Promise(ok => { testObj(new Test(ok)); })); } diff --git a/tools/pkglint/bin/pkglint.ts b/tools/pkglint/bin/pkglint.ts index 31cf7f5d2c74d..0b5cd61ef1649 100644 --- a/tools/pkglint/bin/pkglint.ts +++ b/tools/pkglint/bin/pkglint.ts @@ -24,16 +24,8 @@ async function main(): Promise { const pkgs = findPackageJsons(argv.directory as string); - for (const rule of rules) { - for (const pkg of pkgs.filter(pkg => pkg.shouldApply(rule))) { - rule.prepare(pkg); - } - } - for (const rule of rules) { - for (const pkg of pkgs.filter(pkg => pkg.shouldApply(rule))) { - await rule.validate(pkg); - } - } + rules.forEach(rule => pkgs.filter(pkg => pkg.shouldApply(rule)).forEach(pkg => rule.prepare(pkg))); + rules.forEach(rule => pkgs.filter(pkg => pkg.shouldApply(rule)).forEach(pkg => rule.validate(pkg))); if (argv.fix) { pkgs.forEach(pkg => pkg.applyFixes()); diff --git a/tools/pkglint/lib/packagejson.ts b/tools/pkglint/lib/packagejson.ts index 7a7375fbe6fab..a59e8f1c6e307 100644 --- a/tools/pkglint/lib/packagejson.ts +++ b/tools/pkglint/lib/packagejson.ts @@ -361,5 +361,5 @@ export abstract class ValidationRule { /** * Will be executed for every package definition once, should mutate the package object */ - public abstract validate(pkg: PackageJson): void | Promise; + public abstract validate(pkg: PackageJson): void; } diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index 6f4e41b83c00c..f7929a353035a 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -1,7 +1,6 @@ import * as fs from 'fs'; import * as path from 'path'; import * as caseUtils from 'case'; -import * as fse from 'fs-extra'; import * as glob from 'glob'; import * as semver from 'semver'; import { LICENSE, NOTICE } from './licensing'; @@ -12,7 +11,6 @@ import { fileShouldBe, fileShouldBeginWith, fileShouldContain, fileShouldNotContain, findInnerPackages, - findPackageDir, monoRepoRoot, } from './util'; @@ -1373,42 +1371,25 @@ export class FastFailingBuildScripts extends ValidationRule { } } -/** - * For every bundled dependency, we need to make sure that package and all of its transitive dependencies are nohoisted - * - * Bundling literally works by including `/node_modules/` into - * the tarball when `npm pack` is run, and if that directory does not exist at - * that exact location (because it has been hoisted) then NPM shrugs its - * shoulders and the dependency will be missing from the distribution. - * - * -- - * - * We also must not forget to nohoist transitive dependencies. Strictly - * speaking, we need to only hoist transitive *runtime* dependencies (`dependencies`, not - * `devDependencies`). - * - * For 3rd party deps, there is no difference and we short-circuit by adding a - * catch-all glob (`/node_modules//**`), but for in-repo bundled - * dependencies, we DO need the `devDependencies` installed as per normal and - * only the transitive runtime dependencies nohoisted (recursively). - */ export class YarnNohoistBundledDependencies extends ValidationRule { public readonly name = 'yarn/nohoist-bundled-dependencies'; - public async validate(pkg: PackageJson) { + public validate(pkg: PackageJson) { const bundled: string[] = pkg.json.bundleDependencies || pkg.json.bundledDependencies || []; + if (bundled.length === 0) { return; } const repoPackageJson = path.resolve(__dirname, '../../../package.json'); - const nohoist = new Set(require(repoPackageJson).workspaces.nohoist); // eslint-disable-line @typescript-eslint/no-require-imports - const expectedNoHoistEntries = new Array(); + const nohoist: string[] = require(repoPackageJson).workspaces.nohoist; // eslint-disable-line @typescript-eslint/no-require-imports + const missing = new Array(); for (const dep of bundled) { - await noHoistDependency(pkg.packageName, dep, pkg.packageRoot); + for (const entry of [`${pkg.packageName}/${dep}`, `${pkg.packageName}/${dep}/**`]) { + if (nohoist.indexOf(entry) >= 0) { continue; } + missing.push(entry); + } } - const missing = expectedNoHoistEntries.filter(entry => !nohoist.has(entry)); - if (missing.length > 0) { pkg.report({ ruleName: this.name, @@ -1420,23 +1401,6 @@ export class YarnNohoistBundledDependencies extends ValidationRule { }, }); } - - async function noHoistDependency(parentPackageHierarchy: string, depName: string, parentPackageDir: string) { - expectedNoHoistEntries.push(`${parentPackageHierarchy}/${depName}`); - - const dependencyDir = await findPackageDir(depName, parentPackageDir); - if (!isMonoRepoPackageDir(dependencyDir)) { - // Not one of ours, so we can just ignore everything underneath as well - expectedNoHoistEntries.push(`${parentPackageHierarchy}/${depName}/**`); - return; - } - - // A monorepo package, recurse into dependencies (but not devDependencies) - const packageJson = await fse.readJson(path.join(dependencyDir, 'package.json')); - for (const dep of Object.keys(packageJson.dependencies ?? {})) { - await noHoistDependency(`${parentPackageHierarchy}/${depName}`, dep, dependencyDir); - } - } } } @@ -1706,14 +1670,3 @@ function cdkMajorVersion() { const releaseJson = require(`${__dirname}/../../../release.json`); return releaseJson.majorVersion as number; } - -/** - * Whether this is a package in the monorepo or not - * - * We're going to be cheeky and not do too much analysis, and say that - * a package that has `/node_modules/` in the directory name is NOT in the - * monorepo, otherwise it is. - */ -function isMonoRepoPackageDir(packageDir: string) { - return path.resolve(packageDir).indexOf(`${path.sep}node_modules${path.sep}`) === -1; -} diff --git a/tools/pkglint/lib/util.ts b/tools/pkglint/lib/util.ts index fe56512113ec2..10b4415a6c3ca 100644 --- a/tools/pkglint/lib/util.ts +++ b/tools/pkglint/lib/util.ts @@ -190,39 +190,3 @@ export function* findInnerPackages(dir: string): IterableIterator { yield* findInnerPackages(path.join(dir, fname)); } } - -/** - * Find package directory - * - * Do this by walking upwards in the directory tree until we find - * `/node_modules//package.json`. - * - * ------- - * - * Things that we tried but don't work: - * - * 1. require.resolve(`${depName}/package.json`, { paths: [rootDir] }); - * - * Breaks with ES Modules if `package.json` has not been exported, which is - * being enforced starting Node12. - * - * 2. findPackageJsonUpwardFrom(require.resolve(depName, { paths: [rootDir] })) - * - * Breaks if a built-in NodeJS package name conflicts with an NPM package name - * (in Node15 `string_decoder` is introduced...) - */ -export async function findPackageDir(depName: string, rootDir: string) { - let prevDir; - let dir = rootDir; - while (dir !== prevDir) { - const candidateDir = path.join(dir, 'node_modules', depName); - if (await new Promise(ok => fs.exists(path.join(candidateDir, 'package.json'), ok))) { - return new Promise((ok, ko) => fs.realpath(candidateDir, (err, result) => err ? ko(err) : ok(result))); - } - - prevDir = dir; - dir = path.dirname(dir); // dirname('/') -> '/', dirname('c:\\') -> 'c:\\' - } - - throw new Error(`Did not find '${depName}' upwards of '${rootDir}'`); -} \ No newline at end of file diff --git a/version.v1.json b/version.v1.json index 15eb58f541684..cf4c9c13cf1bc 100644 --- a/version.v1.json +++ b/version.v1.json @@ -1,3 +1,3 @@ { - "version": "1.95.0" + "version": "1.95.1" }