@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.
Files changed (124) hide show
  1. package/.spec.swcrc +22 -0
  2. package/LICENSE +355 -0
  3. package/README.md +1 -1
  4. package/build/__tests__/edge-provider-schema/builder.d.ts +9 -3
  5. package/build/__tests__/edge-provider-schema/builder.js +6 -3
  6. package/build/__tests__/edge-provider-schema/cli.js +8 -3
  7. package/build/__tests__/edge-provider-schema/index.js +119 -1
  8. package/build/__tests__/provider.test.js +4 -1
  9. package/build/get/__tests__/generator/ephemeral-resources.test.d.ts +2 -0
  10. package/build/get/__tests__/generator/ephemeral-resources.test.js +49 -0
  11. package/build/get/__tests__/generator/module-generator.test.js +12 -12
  12. package/build/get/__tests__/generator/provider-functions.test.d.ts +2 -0
  13. package/build/get/__tests__/generator/provider-functions.test.js +176 -0
  14. package/build/get/__tests__/generator/provider-source-matching.test.d.ts +2 -0
  15. package/build/get/__tests__/generator/provider-source-matching.test.js +45 -0
  16. package/build/get/__tests__/generator/provider.test.js +9 -1
  17. package/build/get/__tests__/generator/supported-stored-classes.test.d.ts +2 -0
  18. package/build/get/__tests__/generator/supported-stored-classes.test.js +137 -0
  19. package/build/get/__tests__/generator/types.test.js +44 -1
  20. package/build/get/__tests__/generator/write-only.test.d.ts +2 -0
  21. package/build/get/__tests__/generator/write-only.test.js +65 -0
  22. package/build/get/__tests__/target-versions.test.d.ts +2 -0
  23. package/build/get/__tests__/target-versions.test.js +171 -0
  24. package/build/get/constructs-maker.d.ts +8 -1
  25. package/build/get/constructs-maker.js +46 -10
  26. package/build/get/generator/emitter/attributes-emitter.d.ts +13 -2
  27. package/build/get/generator/emitter/attributes-emitter.js +71 -5
  28. package/build/get/generator/emitter/index.d.ts +1 -0
  29. package/build/get/generator/emitter/index.js +2 -1
  30. package/build/get/generator/emitter/provider-functions-emitter.d.ts +11 -0
  31. package/build/get/generator/emitter/provider-functions-emitter.js +94 -0
  32. package/build/get/generator/emitter/resource-emitter.d.ts +5 -1
  33. package/build/get/generator/emitter/resource-emitter.js +83 -7
  34. package/build/get/generator/emitter/struct-emitter.js +10 -10
  35. package/build/get/generator/models/attribute-model.d.ts +4 -0
  36. package/build/get/generator/models/attribute-model.js +50 -4
  37. package/build/get/generator/models/attribute-type-model.d.ts +24 -0
  38. package/build/get/generator/models/attribute-type-model.js +91 -5
  39. package/build/get/generator/models/index.d.ts +1 -0
  40. package/build/get/generator/models/index.js +2 -1
  41. package/build/get/generator/models/provider-function-model.d.ts +102 -0
  42. package/build/get/generator/models/provider-function-model.js +667 -0
  43. package/build/get/generator/models/resource-model.d.ts +3 -0
  44. package/build/get/generator/models/resource-model.js +13 -4
  45. package/build/get/generator/models/struct.d.ts +2 -0
  46. package/build/get/generator/models/struct.js +6 -2
  47. package/build/get/generator/models/supported-stored-classes.d.ts +5 -0
  48. package/build/get/generator/models/supported-stored-classes.js +86 -0
  49. package/build/get/generator/module-generator.js +3 -3
  50. package/build/get/generator/provider-generator.d.ts +2 -0
  51. package/build/get/generator/provider-generator.js +41 -6
  52. package/build/get/generator/resource-parser.js +3 -1
  53. package/jest.config.js +16 -9
  54. package/package.json +28 -27
  55. package/package.sh +1 -1
  56. package/src/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +4 -0
  57. package/src/__tests__/__snapshots__/provider.test.ts.snap +2828 -2828
  58. package/src/__tests__/edge-provider-schema/builder.ts +201 -0
  59. package/src/__tests__/edge-provider-schema/cli.ts +51 -0
  60. package/src/__tests__/edge-provider-schema/index.ts +284 -0
  61. package/src/__tests__/edge-provider-schema.test.ts +24 -0
  62. package/src/__tests__/provider.test.ts +183 -0
  63. package/src/get/__tests__/constructs-maker.test.ts +118 -0
  64. package/src/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +5 -5
  65. package/src/get/__tests__/generator/__snapshots__/ephemeral-resources.test.ts.snap +524 -0
  66. package/src/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +3310 -3310
  67. package/src/get/__tests__/generator/__snapshots__/module-generator.test.ts.snap +355 -355
  68. package/src/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +8 -8
  69. package/src/get/__tests__/generator/__snapshots__/provider-functions.test.ts.snap +444 -0
  70. package/src/get/__tests__/generator/__snapshots__/provider.test.ts.snap +8 -8
  71. package/src/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +126 -126
  72. package/src/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +17 -17
  73. package/src/get/__tests__/generator/__snapshots__/types.test.ts.snap +201 -52
  74. package/src/get/__tests__/generator/__snapshots__/write-only.test.ts.snap +262 -0
  75. package/src/get/__tests__/generator/complex-computed-types.test.ts +28 -0
  76. package/src/get/__tests__/generator/deep-nested-attributes.test.ts +56 -0
  77. package/src/get/__tests__/generator/description-escaping.test.ts +84 -0
  78. package/src/get/__tests__/generator/empty-provider-resources.test.ts +26 -0
  79. package/src/get/__tests__/generator/ephemeral-resources.test.ts +46 -0
  80. package/src/get/__tests__/generator/export-sharding.test.ts +169 -0
  81. package/src/get/__tests__/generator/fixtures/deeply-nested-collections.test.fixture.json +129 -0
  82. package/src/get/__tests__/generator/fixtures/ephemeral-resources.test.fixture.json +160 -0
  83. package/src/get/__tests__/generator/fixtures/provider-functions-collision.test.fixture.json +31 -0
  84. package/src/get/__tests__/generator/fixtures/provider-functions-synthetic.test.fixture.json +192 -0
  85. package/src/get/__tests__/generator/fixtures/provider-functions.test.fixture.json +170 -0
  86. package/src/get/__tests__/generator/fixtures/write-only.test.fixture.json +58 -0
  87. package/src/get/__tests__/generator/import-style.test.ts +129 -0
  88. package/src/get/__tests__/generator/module-generator.test.ts +528 -0
  89. package/src/get/__tests__/generator/nested-types.test.ts +54 -0
  90. package/src/get/__tests__/generator/provider-functions.test.ts +262 -0
  91. package/src/get/__tests__/generator/provider-source-matching.test.ts +84 -0
  92. package/src/get/__tests__/generator/provider.test.ts +59 -0
  93. package/src/get/__tests__/generator/resource-types.test.ts +118 -0
  94. package/src/get/__tests__/generator/skipped-attributes.test.ts +72 -0
  95. package/src/get/__tests__/generator/supported-stored-classes.test.ts +147 -0
  96. package/src/get/__tests__/generator/types.test.ts +686 -0
  97. package/src/get/__tests__/generator/versions-file.test.ts +72 -0
  98. package/src/get/__tests__/generator/write-only.test.ts +71 -0
  99. package/src/get/__tests__/target-versions.test.ts +206 -0
  100. package/src/get/__tests__/util.ts +75 -0
  101. package/src/get/constructs-maker.ts +885 -0
  102. package/src/get/generator/custom-defaults.ts +493 -0
  103. package/src/get/generator/emitter/attributes-emitter.ts +316 -0
  104. package/src/get/generator/emitter/index.ts +6 -0
  105. package/src/get/generator/emitter/provider-functions-emitter.ts +117 -0
  106. package/src/get/generator/emitter/resource-emitter.ts +330 -0
  107. package/src/get/generator/emitter/struct-emitter.ts +683 -0
  108. package/src/get/generator/loop-detection.ts +81 -0
  109. package/src/get/generator/models/attribute-model.ts +273 -0
  110. package/src/get/generator/models/attribute-type-model.ts +560 -0
  111. package/src/get/generator/models/index.ts +8 -0
  112. package/src/get/generator/models/provider-function-model.ts +872 -0
  113. package/src/get/generator/models/resource-model.ts +183 -0
  114. package/src/get/generator/models/scope.ts +54 -0
  115. package/src/get/generator/models/struct.ts +124 -0
  116. package/src/get/generator/models/supported-stored-classes.ts +88 -0
  117. package/src/get/generator/module-generator.ts +234 -0
  118. package/src/get/generator/provider-generator.ts +428 -0
  119. package/src/get/generator/resource-parser.ts +764 -0
  120. package/src/get/generator/sanitized-comments.ts +49 -0
  121. package/src/get/generator/skipped-attributes.ts +27 -0
  122. package/src/index.ts +40 -0
  123. package/src/util.ts +26 -0
  124. 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
+ });