@cdktn/provider-generator 0.24.0-pre.9 → 0.24.0-pre.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.spec.swcrc +22 -0
- package/LICENSE +355 -0
- package/README.md +1 -1
- package/build/__tests__/edge-provider-schema/builder.d.ts +9 -3
- package/build/__tests__/edge-provider-schema/builder.js +6 -3
- package/build/__tests__/edge-provider-schema/cli.js +8 -3
- package/build/__tests__/edge-provider-schema/index.js +119 -1
- package/build/__tests__/provider.test.js +4 -1
- package/build/get/__tests__/generator/ephemeral-resources.test.d.ts +2 -0
- package/build/get/__tests__/generator/ephemeral-resources.test.js +49 -0
- package/build/get/__tests__/generator/module-generator.test.js +12 -12
- package/build/get/__tests__/generator/provider-functions.test.d.ts +2 -0
- package/build/get/__tests__/generator/provider-functions.test.js +176 -0
- package/build/get/__tests__/generator/provider-source-matching.test.d.ts +2 -0
- package/build/get/__tests__/generator/provider-source-matching.test.js +45 -0
- package/build/get/__tests__/generator/provider.test.js +9 -1
- package/build/get/__tests__/generator/supported-stored-classes.test.d.ts +2 -0
- package/build/get/__tests__/generator/supported-stored-classes.test.js +137 -0
- package/build/get/__tests__/generator/types.test.js +44 -1
- package/build/get/__tests__/generator/write-only.test.d.ts +2 -0
- package/build/get/__tests__/generator/write-only.test.js +65 -0
- package/build/get/__tests__/target-versions.test.d.ts +2 -0
- package/build/get/__tests__/target-versions.test.js +171 -0
- package/build/get/constructs-maker.d.ts +8 -1
- package/build/get/constructs-maker.js +46 -10
- package/build/get/generator/emitter/attributes-emitter.d.ts +13 -2
- package/build/get/generator/emitter/attributes-emitter.js +71 -5
- package/build/get/generator/emitter/index.d.ts +1 -0
- package/build/get/generator/emitter/index.js +2 -1
- package/build/get/generator/emitter/provider-functions-emitter.d.ts +11 -0
- package/build/get/generator/emitter/provider-functions-emitter.js +94 -0
- package/build/get/generator/emitter/resource-emitter.d.ts +5 -1
- package/build/get/generator/emitter/resource-emitter.js +83 -7
- package/build/get/generator/emitter/struct-emitter.js +10 -10
- package/build/get/generator/models/attribute-model.d.ts +4 -0
- package/build/get/generator/models/attribute-model.js +50 -4
- package/build/get/generator/models/attribute-type-model.d.ts +24 -0
- package/build/get/generator/models/attribute-type-model.js +91 -5
- package/build/get/generator/models/index.d.ts +1 -0
- package/build/get/generator/models/index.js +2 -1
- package/build/get/generator/models/provider-function-model.d.ts +102 -0
- package/build/get/generator/models/provider-function-model.js +667 -0
- package/build/get/generator/models/resource-model.d.ts +3 -0
- package/build/get/generator/models/resource-model.js +13 -4
- package/build/get/generator/models/struct.d.ts +2 -0
- package/build/get/generator/models/struct.js +6 -2
- package/build/get/generator/models/supported-stored-classes.d.ts +5 -0
- package/build/get/generator/models/supported-stored-classes.js +86 -0
- package/build/get/generator/module-generator.js +3 -3
- package/build/get/generator/provider-generator.d.ts +2 -0
- package/build/get/generator/provider-generator.js +41 -6
- package/build/get/generator/resource-parser.js +3 -1
- package/jest.config.js +16 -9
- package/package.json +28 -27
- package/package.sh +1 -1
- package/src/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +4 -0
- package/src/__tests__/__snapshots__/provider.test.ts.snap +2828 -2828
- package/src/__tests__/edge-provider-schema/builder.ts +201 -0
- package/src/__tests__/edge-provider-schema/cli.ts +51 -0
- package/src/__tests__/edge-provider-schema/index.ts +284 -0
- package/src/__tests__/edge-provider-schema.test.ts +24 -0
- package/src/__tests__/provider.test.ts +183 -0
- package/src/get/__tests__/constructs-maker.test.ts +118 -0
- package/src/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +5 -5
- package/src/get/__tests__/generator/__snapshots__/ephemeral-resources.test.ts.snap +524 -0
- package/src/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +3310 -3310
- package/src/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +355 -355
- package/src/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +8 -8
- package/src/get/__tests__/generator/__snapshots__/provider-functions.test.ts.snap +444 -0
- package/src/get/__tests__/generator/__snapshots__/provider.test.ts.snap +8 -8
- package/src/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +126 -126
- package/src/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +17 -17
- package/src/get/__tests__/generator/__snapshots__/types.test.ts.snap +201 -52
- package/src/get/__tests__/generator/__snapshots__/write-only.test.ts.snap +262 -0
- package/src/get/__tests__/generator/complex-computed-types.test.ts +28 -0
- package/src/get/__tests__/generator/deep-nested-attributes.test.ts +56 -0
- package/src/get/__tests__/generator/description-escaping.test.ts +84 -0
- package/src/get/__tests__/generator/empty-provider-resources.test.ts +26 -0
- package/src/get/__tests__/generator/ephemeral-resources.test.ts +46 -0
- package/src/get/__tests__/generator/export-sharding.test.ts +169 -0
- package/src/get/__tests__/generator/fixtures/deeply-nested-collections.test.fixture.json +129 -0
- package/src/get/__tests__/generator/fixtures/ephemeral-resources.test.fixture.json +160 -0
- package/src/get/__tests__/generator/fixtures/provider-functions-collision.test.fixture.json +31 -0
- package/src/get/__tests__/generator/fixtures/provider-functions-synthetic.test.fixture.json +192 -0
- package/src/get/__tests__/generator/fixtures/provider-functions.test.fixture.json +170 -0
- package/src/get/__tests__/generator/fixtures/write-only.test.fixture.json +58 -0
- package/src/get/__tests__/generator/import-style.test.ts +129 -0
- package/src/get/__tests__/generator/module-generator.test.ts +528 -0
- package/src/get/__tests__/generator/nested-types.test.ts +54 -0
- package/src/get/__tests__/generator/provider-functions.test.ts +262 -0
- package/src/get/__tests__/generator/provider-source-matching.test.ts +84 -0
- package/src/get/__tests__/generator/provider.test.ts +59 -0
- package/src/get/__tests__/generator/resource-types.test.ts +118 -0
- package/src/get/__tests__/generator/skipped-attributes.test.ts +72 -0
- package/src/get/__tests__/generator/supported-stored-classes.test.ts +147 -0
- package/src/get/__tests__/generator/types.test.ts +686 -0
- package/src/get/__tests__/generator/versions-file.test.ts +72 -0
- package/src/get/__tests__/generator/write-only.test.ts +71 -0
- package/src/get/__tests__/target-versions.test.ts +206 -0
- package/src/get/__tests__/util.ts +75 -0
- package/src/get/constructs-maker.ts +885 -0
- package/src/get/generator/custom-defaults.ts +493 -0
- package/src/get/generator/emitter/attributes-emitter.ts +316 -0
- package/src/get/generator/emitter/index.ts +6 -0
- package/src/get/generator/emitter/provider-functions-emitter.ts +117 -0
- package/src/get/generator/emitter/resource-emitter.ts +330 -0
- package/src/get/generator/emitter/struct-emitter.ts +683 -0
- package/src/get/generator/loop-detection.ts +81 -0
- package/src/get/generator/models/attribute-model.ts +273 -0
- package/src/get/generator/models/attribute-type-model.ts +560 -0
- package/src/get/generator/models/index.ts +8 -0
- package/src/get/generator/models/provider-function-model.ts +872 -0
- package/src/get/generator/models/resource-model.ts +183 -0
- package/src/get/generator/models/scope.ts +54 -0
- package/src/get/generator/models/struct.ts +124 -0
- package/src/get/generator/models/supported-stored-classes.ts +88 -0
- package/src/get/generator/module-generator.ts +234 -0
- package/src/get/generator/provider-generator.ts +428 -0
- package/src/get/generator/resource-parser.ts +764 -0
- package/src/get/generator/sanitized-comments.ts +49 -0
- package/src/get/generator/skipped-attributes.ts +27 -0
- package/src/index.ts +40 -0
- package/src/util.ts +26 -0
- package/tsconfig.json +1 -2
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// Copyright (c) HashiCorp, Inc
|
|
2
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
3
|
+
import { logger } from "@cdktn/commons";
|
|
4
|
+
import { resolveStoredClassName } from "../../generator/models/supported-stored-classes";
|
|
5
|
+
import {
|
|
6
|
+
AttributeModel,
|
|
7
|
+
AttributeTypeModel,
|
|
8
|
+
MapAttributeTypeModel,
|
|
9
|
+
} from "../../generator/models";
|
|
10
|
+
|
|
11
|
+
describe("resolveStoredClassName", () => {
|
|
12
|
+
test("own composed name resolves as-is when supported (not collapsed)", () => {
|
|
13
|
+
expect(resolveStoredClassName("stringListMap", "list")).toEqual({
|
|
14
|
+
name: "StringListMap",
|
|
15
|
+
collapsed: false,
|
|
16
|
+
});
|
|
17
|
+
expect(resolveStoredClassName("stringMapMap", "map")).toEqual({
|
|
18
|
+
name: "StringMapMap",
|
|
19
|
+
collapsed: false,
|
|
20
|
+
});
|
|
21
|
+
expect(resolveStoredClassName("numberMapMap", "map")).toEqual({
|
|
22
|
+
name: "NumberMapMap",
|
|
23
|
+
collapsed: false,
|
|
24
|
+
});
|
|
25
|
+
expect(resolveStoredClassName("booleanMapMap", "map")).toEqual({
|
|
26
|
+
name: "BooleanMapMap",
|
|
27
|
+
collapsed: false,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("unsupported own composed name collapses to nearest Any-wrapper", () => {
|
|
32
|
+
// map(map(list(string))) - own "stringListMapMap" unsupported, element is a map
|
|
33
|
+
expect(resolveStoredClassName("stringListMapMap", "map")).toEqual({
|
|
34
|
+
name: "AnyMapMap",
|
|
35
|
+
collapsed: true,
|
|
36
|
+
});
|
|
37
|
+
// list(map(map(string))) - own "stringMapMapList" unsupported, element is a map
|
|
38
|
+
expect(resolveStoredClassName("stringMapMapList", "map")).toEqual({
|
|
39
|
+
name: "AnyMapList",
|
|
40
|
+
collapsed: true,
|
|
41
|
+
});
|
|
42
|
+
// set(map(list(number))) - own "numberListMapList" unsupported, element is a map
|
|
43
|
+
expect(resolveStoredClassName("numberListMapList", "map")).toEqual({
|
|
44
|
+
name: "AnyMapList",
|
|
45
|
+
collapsed: true,
|
|
46
|
+
});
|
|
47
|
+
// map(map(map(list(string)))) - own "stringListMapMapMap" unsupported, element is a map
|
|
48
|
+
expect(resolveStoredClassName("stringListMapMapMap", "map")).toEqual({
|
|
49
|
+
name: "AnyMapMap",
|
|
50
|
+
collapsed: true,
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("returns undefined when neither the own name nor a collapsed Any-wrapper exists", () => {
|
|
55
|
+
// Own name doesn't end in List/Map at all.
|
|
56
|
+
expect(resolveStoredClassName("somethingWeird", "map")).toBeUndefined();
|
|
57
|
+
// Own name ends in Map, but the element isn't itself a list/set/map, so there is no
|
|
58
|
+
// "AnyXMap" candidate to fall back to.
|
|
59
|
+
expect(resolveStoredClassName("weirdMap", "struct")).toBeUndefined();
|
|
60
|
+
expect(resolveStoredClassName("weirdMap", "simple")).toBeUndefined();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// A minimal stand-in for a non-complex, non-collection AttributeTypeModel whose
|
|
65
|
+
// typeModelType is neither "list", "set", "map", nor "simple"/"struct" - i.e. a shape the
|
|
66
|
+
// generator's collapse logic has no candidate class name for. Used to exercise the
|
|
67
|
+
// defensive plain-getter fallback in AttributeModel.getterType without needing a real
|
|
68
|
+
// (currently nonexistent) unsupported shape.
|
|
69
|
+
class UnresolvableStubTypeModel implements AttributeTypeModel {
|
|
70
|
+
get struct() {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
get isComplex() {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
getStoredClassInitializer(_name: string) {
|
|
77
|
+
return "";
|
|
78
|
+
}
|
|
79
|
+
get storedClassType() {
|
|
80
|
+
return "unresolvable";
|
|
81
|
+
}
|
|
82
|
+
get inputTypeDefinition() {
|
|
83
|
+
return "any";
|
|
84
|
+
}
|
|
85
|
+
getAttributeAccessFunction(name: string) {
|
|
86
|
+
return `this.interpolationForAttribute('${name}')`;
|
|
87
|
+
}
|
|
88
|
+
get toTerraformFunction() {
|
|
89
|
+
return "cdktn.anyToTerraform";
|
|
90
|
+
}
|
|
91
|
+
get toHclTerraformFunction() {
|
|
92
|
+
return "cdktn.anyToHclTerraform";
|
|
93
|
+
}
|
|
94
|
+
get typeModelType() {
|
|
95
|
+
return "unresolvable-shape";
|
|
96
|
+
}
|
|
97
|
+
get hasReferenceClass() {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
get isTokenizable() {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
get isStoredClassUnavailable() {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
describe("AttributeModel.getterType loud fallback", () => {
|
|
109
|
+
test("falls back to a plain getter and logs a debug breadcrumb when no stored class (not even a collapsed Any-wrapper) is available", () => {
|
|
110
|
+
const debugSpy = jest.spyOn(logger, "debug").mockImplementation();
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
// A map whose element is itself an unrecognized shape: own composed name
|
|
114
|
+
// ("unresolvableMap") isn't in the supported set, and the element's typeModelType
|
|
115
|
+
// isn't "list"/"set"/"map", so there is no "AnyXMap" candidate either.
|
|
116
|
+
const type = new MapAttributeTypeModel(new UnresolvableStubTypeModel());
|
|
117
|
+
expect(type.isStoredClassUnavailable).toBe(true);
|
|
118
|
+
|
|
119
|
+
const attribute = new AttributeModel({
|
|
120
|
+
storageName: "_weirdAttribute",
|
|
121
|
+
name: "weirdAttribute",
|
|
122
|
+
type,
|
|
123
|
+
optional: false,
|
|
124
|
+
computed: true,
|
|
125
|
+
terraformName: "weird_attribute",
|
|
126
|
+
terraformFullName: "test_resource.weird_attribute",
|
|
127
|
+
provider: false,
|
|
128
|
+
required: false,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
expect(attribute.getterType).toEqual({ _type: "plain" });
|
|
132
|
+
expect(attribute.storedClassBoundaryKind).toEqual("fallback");
|
|
133
|
+
|
|
134
|
+
expect(debugSpy).toHaveBeenCalledTimes(1);
|
|
135
|
+
const [message] = debugSpy.mock.calls[0];
|
|
136
|
+
expect(message).toContain("test_resource.weird_attribute");
|
|
137
|
+
expect(message).toContain("unresolvableMap");
|
|
138
|
+
|
|
139
|
+
// Repeated access must not spam the logger.
|
|
140
|
+
void attribute.getterType;
|
|
141
|
+
void attribute.getterType;
|
|
142
|
+
expect(debugSpy).toHaveBeenCalledTimes(1);
|
|
143
|
+
} finally {
|
|
144
|
+
debugSpy.mockRestore();
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|