diff --git a/.projenrc.ts b/.projenrc.ts index ba1c93809..8fd28e037 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -1344,6 +1344,7 @@ new JsiiBuild(cliLibAlpha, { packageName: 'awscdkclilibalpha', }, rosettaStrict: true, + rosettaDependencies: ['aws-cdk-lib@^2'], stability: Stability.DEPRECATED, composite: true, excludeTypescript: CLI_LIB_EXCLUDE_PATTERNS, diff --git a/packages/@aws-cdk/cli-lib-alpha/.gitignore b/packages/@aws-cdk/cli-lib-alpha/.gitignore index e108ae76c..a9f088520 100644 --- a/packages/@aws-cdk/cli-lib-alpha/.gitignore +++ b/packages/@aws-cdk/cli-lib-alpha/.gitignore @@ -54,6 +54,8 @@ lib/**/*.yaml lib/**/*.yml lib/init-templates/** cdk.out +.jsii.tabl.json +!/rosetta/default.ts-fixture .jsii tsconfig.json !/API.md diff --git a/packages/@aws-cdk/cli-lib-alpha/.projen/tasks.json b/packages/@aws-cdk/cli-lib-alpha/.projen/tasks.json index fe4fadecc..0b8446b2a 100644 --- a/packages/@aws-cdk/cli-lib-alpha/.projen/tasks.json +++ b/packages/@aws-cdk/cli-lib-alpha/.projen/tasks.json @@ -231,6 +231,9 @@ "name": "post-compile", "description": "Runs after successful compilation", "steps": [ + { + "spawn": "rosetta:extract" + }, { "spawn": "docgen" }, @@ -266,6 +269,15 @@ } ] }, + "rosetta:extract": { + "name": "rosetta:extract", + "description": "Test rosetta extract", + "steps": [ + { + "exec": "yarn --silent jsii-rosetta extract --strict" + } + ] + }, "test": { "name": "test", "description": "Run tests", diff --git a/packages/@aws-cdk/cli-lib-alpha/package.json b/packages/@aws-cdk/cli-lib-alpha/package.json index ab802be15..33c3eff8c 100644 --- a/packages/@aws-cdk/cli-lib-alpha/package.json +++ b/packages/@aws-cdk/cli-lib-alpha/package.json @@ -27,6 +27,7 @@ "package:python": "npx projen package:python", "post-compile": "npx projen post-compile", "pre-compile": "npx projen pre-compile", + "rosetta:extract": "npx projen rosetta:extract", "test": "npx projen test", "test:watch": "npx projen test:watch", "unbump": "npx projen unbump", @@ -121,13 +122,11 @@ "excludeTypescript": [ "lib/init-templates/*/typescript/*/*.template.ts" ], - "projectReferences": true, - "metadata": { - "jsii": { - "rosetta": { - "strict": true - } - } + "projectReferences": true + }, + "jsiiRosetta": { + "exampleDependencies": { + "aws-cdk-lib": "^2" } }, "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"." diff --git a/packages/@aws-cdk/cloud-assembly-schema/.gitignore b/packages/@aws-cdk/cloud-assembly-schema/.gitignore index 382afa8f2..976c094da 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/.gitignore +++ b/packages/@aws-cdk/cloud-assembly-schema/.gitignore @@ -44,6 +44,8 @@ jspm_packages/ /dist/changelog.md /dist/version.txt !/.eslintrc.js +.jsii.tabl.json +!/rosetta/default.ts-fixture .jsii tsconfig.json cli-version.json diff --git a/packages/@aws-cdk/cloud-assembly-schema/.projen/tasks.json b/packages/@aws-cdk/cloud-assembly-schema/.projen/tasks.json index 21aa28116..ec059fc89 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/.projen/tasks.json +++ b/packages/@aws-cdk/cloud-assembly-schema/.projen/tasks.json @@ -219,7 +219,12 @@ }, "post-compile": { "name": "post-compile", - "description": "Runs after successful compilation" + "description": "Runs after successful compilation", + "steps": [ + { + "spawn": "rosetta:extract" + } + ] }, "pre-compile": { "name": "pre-compile", @@ -236,6 +241,15 @@ } ] }, + "rosetta:extract": { + "name": "rosetta:extract", + "description": "Test rosetta extract", + "steps": [ + { + "exec": "yarn --silent jsii-rosetta extract --strict" + } + ] + }, "test": { "name": "test", "description": "Run tests", diff --git a/packages/@aws-cdk/cloud-assembly-schema/lib/cloud-assembly/context-queries.ts b/packages/@aws-cdk/cloud-assembly-schema/lib/cloud-assembly/context-queries.ts index 5a997c965..564907523 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/lib/cloud-assembly/context-queries.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/lib/cloud-assembly/context-queries.ts @@ -363,6 +363,8 @@ export interface KeyContextQuery extends ContextLookupRoleOptions { * to generate a validly compiling example). * * @example + * import { CcApiContextQuery } from '@aws-cdk/cloud-assembly-schema'; + * * const x: CcApiContextQuery = { * typeName: 'AWS::Some::Type', * expectedMatchCount: 'exactly-one', @@ -370,7 +372,6 @@ export interface KeyContextQuery extends ContextLookupRoleOptions { * account: '11111111111', * region: 'us-east-1', * }; - * console.log(x); */ export interface CcApiContextQuery extends ContextLookupRoleOptions { /** diff --git a/packages/@aws-cdk/cloud-assembly-schema/package.json b/packages/@aws-cdk/cloud-assembly-schema/package.json index 1187e07ce..cbd824d57 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/package.json +++ b/packages/@aws-cdk/cloud-assembly-schema/package.json @@ -26,6 +26,7 @@ "package:python": "npx projen package:python", "post-compile": "npx projen post-compile", "pre-compile": "npx projen pre-compile", + "rosetta:extract": "npx projen rosetta:extract", "test": "npx projen test", "test:watch": "npx projen test:watch", "unbump": "npx projen unbump", diff --git a/packages/@aws-cdk/cloud-assembly-schema/rosetta/default.ts-fixture b/packages/@aws-cdk/cloud-assembly-schema/rosetta/default.ts-fixture new file mode 100644 index 000000000..7b2106a96 --- /dev/null +++ b/packages/@aws-cdk/cloud-assembly-schema/rosetta/default.ts-fixture @@ -0,0 +1,3 @@ +// Fixture intentionally empty + +/// here diff --git a/projenrc/jsii.ts b/projenrc/jsii.ts index 06df0e94d..4f3c82a22 100644 --- a/projenrc/jsii.ts +++ b/projenrc/jsii.ts @@ -1,4 +1,4 @@ -import { yarn } from 'cdklabs-projen-project-types'; +import { Rosetta, yarn } from 'cdklabs-projen-project-types'; import * as pj from 'projen'; import { Stability } from 'projen/lib/cdk'; import { WorkflowSteps } from 'projen/lib/github'; @@ -109,10 +109,19 @@ export interface JsiiBuildOptions { /** * Whether to turn on 'strict' mode for Rosetta * - * @default false + * @default true */ readonly rosettaStrict?: boolean; + /** + * Additional example dependencies + * + * @see https://github.com/aws/jsii-rosetta?tab=readme-ov-file#dependencies + * + * @default [] + */ + readonly rosettaDependencies?: string[]; + /** * Whether to turn on composite mode for the TypeScript project * @@ -320,19 +329,26 @@ export class JsiiBuild extends pj.Component { this.addTargetToRelease('go', task, golang); } - const jsiiSuffix = - options.jsiiVersion === '*' - ? // If jsiiVersion is "*", don't specify anything so the user can manage. - '' - : // Otherwise, use `jsiiVersion` or fall back to `5.7` - `@${options.jsiiVersion ?? '5.7'}`; + // If jsiiVersion is "*", don't specify anything so the user can manage. + // Otherwise, use `jsiiVersion` or fall back to `5.7` + const jsiiVersion = (options.jsiiVersion === '*' ? undefined : options.jsiiVersion) ?? '5.7'; + const jsiiSuffix = jsiiVersion ? `@${jsiiVersion}` : ''; + tsProject.addDevDeps( `jsii${jsiiSuffix}`, - `jsii-rosetta${jsiiSuffix}`, 'jsii-diff', 'jsii-pacmak', ); + new Rosetta(project as any, { + strict: options.rosettaStrict ?? true, + version: jsiiVersion, + }); + if (options.rosettaDependencies?.length) { + const deps = Object.fromEntries(options.rosettaDependencies.map(d => pj.Dependencies.parseDependency(d)).map(d => [d.name, d.version ?? '*'])); + tsProject.package.file.addOverride('jsiiRosetta.exampleDependencies', deps); + } + tsProject.gitignore.exclude('.jsii', 'tsconfig.json'); tsProject.npmignore?.include('.jsii'); @@ -351,22 +367,11 @@ export class JsiiBuild extends pj.Component { tsProject.npmignore.readonly = false; } - const packageJson = tsProject.package.file; - if ((options.pypiClassifiers ?? []).length > 0) { - packageJson.patch( + tsProject.package.file.patch( pj.JsonPatch.add('/jsii/targets/python/classifiers', options.pypiClassifiers), ); } - - if (options.rosettaStrict) { - packageJson.patch( - pj.JsonPatch.add('/jsii/metadata', {}), - pj.JsonPatch.add('/jsii/metadata/jsii', {}), - pj.JsonPatch.add('/jsii/metadata/jsii/rosetta', {}), - pj.JsonPatch.add('/jsii/metadata/jsii/rosetta/strict', true), - ); - } } /**