Skip to content

Commit afb3e67

Browse files
authored
chore(spec2cdk): support local, temporary service files (#27675)
To work with new features that are not released on CFN yet, we need the ability to provide local schema overrides. This changes adds support for this, by importing additional schema files into the model database before codegen. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent d1c36c6 commit afb3e67

File tree

5 files changed

+41
-2
lines changed

5 files changed

+41
-2
lines changed

tools/@aws-cdk/spec2cdk/README.md

+5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ Path patterns can use the following variables:
3737

3838
```
3939

40+
## Temporary Schemas
41+
42+
You can import additional, temporary CloudFormation Registry Schemas to test new functionality that is not yet published in `@aws-cdk/aws-service-spec`.
43+
To do this, drop the schema file into `temporary-schemas/us-east-1` and it will be imported on top of the default model.
44+
4045
## Use as @aws-cdk/cfn2ts replacement
4146

4247
You can use the `cfn2ts` binary as a drop-in replacement for the existing `@aws-cdk/cfn2ts` command.

tools/@aws-cdk/spec2cdk/lib/generate.ts

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as path from 'path';
22
import { loadAwsServiceSpec } from '@aws-cdk/aws-service-spec';
3+
import { DatabaseBuilder } from '@aws-cdk/service-spec-importers';
34
import { SpecDatabase } from '@aws-cdk/service-spec-types';
45
import { TypeScriptRenderer } from '@cdklabs/typewriter';
56
import * as fs from 'fs-extra';
@@ -118,6 +119,12 @@ export interface GenerateOutput {
118119
export async function generate(modules: GenerateModuleMap, options: GenerateOptions) {
119120
enableDebug(options);
120121
const db = await loadAwsServiceSpec();
122+
123+
// Load additional schema files
124+
await new DatabaseBuilder(db as any, { validate: false })
125+
.importCloudFormationRegistryResources(path.join(__dirname, '..', 'temporary-schemas'))
126+
.build();
127+
121128
return generator(db, modules, options);
122129
}
123130

tools/@aws-cdk/spec2cdk/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"license": "Apache-2.0",
3434
"dependencies": {
3535
"@aws-cdk/aws-service-spec": "^0.0.23",
36+
"@aws-cdk/service-spec-importers": "^0.0.1",
3637
"@aws-cdk/service-spec-types": "^0.0.23",
3738
"@cdklabs/tskb": "^0.0.1",
3839
"@cdklabs/typewriter": "^0.0.2",

tools/@aws-cdk/spec2cdk/temporary-schemas/us-east-1/.keep

Whitespace-only changes.

yarn.lock

+28-2
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,22 @@
6868
resolved "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v24/-/lambda-layer-kubectl-v24-2.0.242.tgz#4273a5ad7714f933a7eba155eb9280823086db71"
6969
integrity sha512-7/wIOo685tmrEe4hh6zqDELhBZh5OQGf3Hd2FU2Vnwy2ZubW8qTmEw5gqJCsCrGKeYDoa1BcVhDRZ/nzjkaqyA==
7070

71+
"@aws-cdk/service-spec-importers@^0.0.1":
72+
version "0.0.1"
73+
resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.1.tgz#9565d3c358e4b5237c778bee50f8591553846819"
74+
integrity sha512-CyUWiNcyFxdLeqiWIfR22eOGV4BTFDn6p+qLeNdX21vzBk4WFNlJ1n5VI+Z44a2BJyrG4ckp0Vj4SFP9Q76Mjw==
75+
dependencies:
76+
"@aws-cdk/service-spec-types" "^0.0.23"
77+
"@cdklabs/tskb" "^0.0.2"
78+
ajv "^6"
79+
canonicalize "^2.0.0"
80+
chalk "^4"
81+
commander "^11.1.0"
82+
fast-json-patch "^3.1.1"
83+
fs-extra "^11.1.1"
84+
glob "^8"
85+
sort-json "^2.0.1"
86+
7187
"@aws-cdk/service-spec-types@^0.0.23":
7288
version "0.0.23"
7389
resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.23.tgz#b336c6e4cd50ea098b3e2728fb98bf8e8686dce7"
@@ -4724,7 +4740,7 @@ aggregate-error@^3.0.0:
47244740
clean-stack "^2.0.0"
47254741
indent-string "^4.0.0"
47264742

4727-
ajv@^6.10.0, ajv@^6.12.4:
4743+
ajv@^6, ajv@^6.10.0, ajv@^6.12.4:
47284744
version "6.12.6"
47294745
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
47304746
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -5515,6 +5531,11 @@ caniuse-lite@^1.0.30001539:
55155531
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001541.tgz#b1aef0fadd87fb72db4dcb55d220eae17b81cdb1"
55165532
integrity sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw==
55175533

5534+
canonicalize@^2.0.0:
5535+
version "2.0.0"
5536+
resolved "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz#32be2cef4446d67fd5348027a384cae28f17226a"
5537+
integrity sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==
5538+
55185539
[email protected], case@^1.6.3:
55195540
version "1.6.3"
55205541
resolved "https://registry.npmjs.org/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9"
@@ -5865,6 +5886,11 @@ commander@^10.0.1:
58655886
resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
58665887
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
58675888

5889+
commander@^11.1.0:
5890+
version "11.1.0"
5891+
resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
5892+
integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
5893+
58685894
commander@^2.16.0, commander@^2.20.3, commander@^2.8.1:
58695895
version "2.20.3"
58705896
resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -7942,7 +7968,7 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, gl
79427968
once "^1.3.0"
79437969
path-is-absolute "^1.0.0"
79447970

7945-
glob@^8.0.1:
7971+
glob@^8, glob@^8.0.1:
79467972
version "8.1.0"
79477973
resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
79487974
integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==

0 commit comments

Comments
 (0)