jsii-pacmak 1.65.0 → 1.67.0

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 (41) hide show
  1. package/generate.sh +2 -1
  2. package/lib/targets/dotnet/dotnetgenerator.js +19 -110
  3. package/lib/targets/dotnet/dotnettyperesolver.js +5 -4
  4. package/lib/targets/dotnet/runtime-type-checking.d.ts +13 -0
  5. package/lib/targets/dotnet/runtime-type-checking.js +146 -0
  6. package/lib/targets/go/dependencies.d.ts +16 -0
  7. package/lib/targets/go/dependencies.js +59 -0
  8. package/lib/targets/go/emit-context.d.ts +2 -0
  9. package/lib/targets/go/package.d.ts +1 -0
  10. package/lib/targets/go/package.js +54 -33
  11. package/lib/targets/go/runtime/class-constructor.d.ts +2 -1
  12. package/lib/targets/go/runtime/class-constructor.js +4 -1
  13. package/lib/targets/go/runtime/method-call.d.ts +2 -2
  14. package/lib/targets/go/runtime/method-call.js +11 -5
  15. package/lib/targets/go/runtime/property-access.d.ts +3 -2
  16. package/lib/targets/go/runtime/property-access.js +7 -2
  17. package/lib/targets/go/runtime/runtime-type-checking.d.ts +29 -0
  18. package/lib/targets/go/runtime/runtime-type-checking.js +408 -0
  19. package/lib/targets/go/types/class.d.ts +10 -5
  20. package/lib/targets/go/types/class.js +60 -30
  21. package/lib/targets/go/types/enum.d.ts +2 -2
  22. package/lib/targets/go/types/enum.js +6 -2
  23. package/lib/targets/go/types/go-type-reference.d.ts +6 -1
  24. package/lib/targets/go/types/go-type-reference.js +37 -21
  25. package/lib/targets/go/types/go-type.d.ts +4 -1
  26. package/lib/targets/go/types/go-type.js +3 -0
  27. package/lib/targets/go/types/interface.d.ts +5 -3
  28. package/lib/targets/go/types/interface.js +40 -17
  29. package/lib/targets/go/types/struct.d.ts +7 -3
  30. package/lib/targets/go/types/struct.js +41 -2
  31. package/lib/targets/go/types/type-member.d.ts +8 -1
  32. package/lib/targets/go/types/type-member.js +63 -18
  33. package/lib/targets/go.d.ts +6 -2
  34. package/lib/targets/go.js +6 -4
  35. package/lib/targets/java.d.ts +19 -0
  36. package/lib/targets/java.js +223 -1
  37. package/lib/targets/python/type-name.js +3 -3
  38. package/lib/targets/python.js +5 -1
  39. package/lib/version.d.ts +2 -2
  40. package/lib/version.js +4 -3
  41. package/package.json +14 -14
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.JavaBuilder = void 0;
4
4
  const spec = require("@jsii/spec");
5
+ const assert = require("assert");
5
6
  const clone = require("clone");
6
7
  const case_utils_1 = require("codemaker/lib/case-utils");
8
+ const crypto_1 = require("crypto");
7
9
  const fs = require("fs-extra");
8
10
  const jsii_rosetta_1 = require("jsii-rosetta");
9
11
  const path = require("path");
@@ -425,6 +427,7 @@ class JavaGenerator extends generator_1.Generator {
425
427
  : this.renderAccessLevel(method);
426
428
  this.code.openBlock(`${initializerAccessLevel} ${cls.name}(${this.renderMethodParameters(method)})`);
427
429
  this.code.line('super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);');
430
+ this.emitUnionParameterValdation(method.parameters);
428
431
  this.code.line(`software.amazon.jsii.JsiiEngine.getInstance().createNewObject(this${this.renderMethodCallArguments(method)});`);
429
432
  this.code.closeBlock();
430
433
  }
@@ -861,7 +864,10 @@ class JavaGenerator extends generator_1.Generator {
861
864
  dependencies.push({
862
865
  groupId: 'software.amazon.jsii',
863
866
  artifactId: 'jsii-runtime',
864
- version: (0, version_utils_1.toMavenVersionRange)(`^${version_1.VERSION}`),
867
+ version: version_1.VERSION === '0.0.0'
868
+ ? '[0.0.0-SNAPSHOT]'
869
+ : // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
870
+ (0, version_utils_1.toMavenVersionRange)(`^${version_1.VERSION}`),
865
871
  });
866
872
  // Provides @org.jetbrains.*
867
873
  dependencies.push({
@@ -1008,6 +1014,23 @@ class JavaGenerator extends generator_1.Generator {
1008
1014
  else {
1009
1015
  this.code.openBlock(signature);
1010
1016
  let statement = '';
1017
+ // Setters have one overload for each possible type in the union parameter.
1018
+ // If a setter can take a `String | Number`, then we render two setters;
1019
+ // one that takes a string, and one that takes a number.
1020
+ // This allows the compiler to do this type checking for us,
1021
+ // so we should not emit these checks for primitive-only unions.
1022
+ // Also, Java does not allow us to perform these checks if the types
1023
+ // have no overlap (eg if a String instanceof Number).
1024
+ if (type.includes('java.lang.Object') &&
1025
+ (!spec.isPrimitiveTypeReference(prop.type) ||
1026
+ prop.type.primitive === spec.PrimitiveType.Any)) {
1027
+ this.emitUnionParameterValdation([
1028
+ {
1029
+ name: 'value',
1030
+ type: this.filterType(prop.type, { covariant: prop.static, optional: prop.optional }, type),
1031
+ },
1032
+ ]);
1033
+ }
1011
1034
  if (prop.static) {
1012
1035
  statement += `software.amazon.jsii.JsiiObject.jsiiStaticSet(${javaClass}.class, `;
1013
1036
  }
@@ -1024,6 +1047,27 @@ class JavaGenerator extends generator_1.Generator {
1024
1047
  }
1025
1048
  }
1026
1049
  }
1050
+ /**
1051
+ * Filters types from a union to select only those that correspond to the
1052
+ * specified javaType.
1053
+ *
1054
+ * @param ref the type to be filtered.
1055
+ * @param javaType the java type that is expected.
1056
+ * @param covariant whether collections should use the covariant form.
1057
+ * @param optional whether the type at an optional location or not
1058
+ *
1059
+ * @returns a type reference that matches the provided javaType.
1060
+ */
1061
+ filterType(ref, { covariant, optional }, javaType) {
1062
+ if (!spec.isUnionTypeReference(ref)) {
1063
+ // No filterning needed -- this isn't a type union!
1064
+ return ref;
1065
+ }
1066
+ const types = ref.union.types.filter((t) => this.toDecoratedJavaType({ optional, type: t }, { covariant }) ===
1067
+ javaType);
1068
+ assert(types.length > 0, `No type found in ${spec.describeTypeReference(ref)} has Java type ${javaType}`);
1069
+ return { union: { types } };
1070
+ }
1027
1071
  emitMethod(cls, method, { defaultImpl = false, final = false, overrides = !!method.overrides, } = {}) {
1028
1072
  const returnType = method.returns
1029
1073
  ? this.toDecoratedJavaType(method.returns)
@@ -1055,10 +1099,167 @@ class JavaGenerator extends generator_1.Generator {
1055
1099
  }
1056
1100
  else {
1057
1101
  this.code.openBlock(`${modifiers.join(' ')} ${signature}`);
1102
+ this.emitUnionParameterValdation(method.parameters);
1058
1103
  this.code.line(this.renderMethodCall(cls, method, async));
1059
1104
  this.code.closeBlock();
1060
1105
  }
1061
1106
  }
1107
+ /**
1108
+ * Emits type checks for values passed for type union parameters.
1109
+ *
1110
+ * @param parameters the list of parameters received by the function.
1111
+ */
1112
+ emitUnionParameterValdation(parameters) {
1113
+ if (!this.runtimeTypeChecking) {
1114
+ // We were configured not to emit those, so bail out now.
1115
+ return;
1116
+ }
1117
+ const unionParameters = parameters?.filter(({ type }) => containsUnionType(type));
1118
+ if (unionParameters == null || unionParameters.length === 0) {
1119
+ return;
1120
+ }
1121
+ this.code.openBlock('if (software.amazon.jsii.Configuration.getRuntimeTypeChecking())');
1122
+ for (const param of unionParameters) {
1123
+ if (param.variadic) {
1124
+ const javaType = this.toJavaType(param.type);
1125
+ const asListName = `__${param.name}__asList`;
1126
+ this.code.line(`final java.util.List<${javaType}> ${asListName} = java.util.Arrays.asList(${param.name});`);
1127
+ validate.call(this, asListName, `.append("${param.name}")`, {
1128
+ collection: {
1129
+ kind: spec.CollectionKind.Array,
1130
+ elementtype: param.type,
1131
+ },
1132
+ }, param.name, true);
1133
+ }
1134
+ else {
1135
+ validate.call(this, param.name, `.append("${param.name}")`, param.type, param.name);
1136
+ }
1137
+ }
1138
+ this.code.closeBlock();
1139
+ function validate(value, descr, type, parameterName, isRawArray = false) {
1140
+ if (spec.isUnionTypeReference(type)) {
1141
+ validateTypeUnion.call(this, value, descr, type, parameterName);
1142
+ }
1143
+ else if (spec.isCollectionTypeReference(type)) {
1144
+ switch (type.collection.kind) {
1145
+ case spec.CollectionKind.Array:
1146
+ return validateArray.call(this, value, descr, type.collection.elementtype, parameterName, isRawArray);
1147
+ case spec.CollectionKind.Map:
1148
+ return validateMap.call(this, value, descr, type.collection.elementtype, parameterName);
1149
+ default:
1150
+ throw new Error(`Unhandled collection kind: ${spec.describeTypeReference(type)}`);
1151
+ }
1152
+ }
1153
+ }
1154
+ function validateArray(value, descr, elementType, parameterName, isRawArray = false) {
1155
+ const suffix = (0, crypto_1.createHash)('sha256')
1156
+ .update(descr)
1157
+ .digest('hex')
1158
+ .slice(0, 6);
1159
+ const idxName = `__idx_${suffix}`;
1160
+ const valName = `__val_${suffix}`;
1161
+ this.code.openBlock(`for (int ${idxName} = 0; ${idxName} < ${value}.size(); ${idxName}++)`);
1162
+ const eltType = this.toJavaType(elementType);
1163
+ this.code.line(`final ${eltType} ${valName} = ${value}.get(${idxName});`);
1164
+ validate.call(this, valName, isRawArray
1165
+ ? `${descr}.append("[").append(${idxName}).append("]")`
1166
+ : `${descr}.append(".get(").append(${idxName}).append(")")`, elementType, parameterName);
1167
+ this.code.closeBlock();
1168
+ }
1169
+ function validateMap(value, descr, elementType, parameterName) {
1170
+ // we have to perform this check before the loop,
1171
+ // because the loop will assume that the keys are Strings;
1172
+ // this throws a ClassCastException
1173
+ this.code.openBlock(`if (!(${value}.keySet().toArray()[0] instanceof String))`);
1174
+ this.code.indent(`throw new IllegalArgumentException(`);
1175
+ this.code.indent(`new java.lang.StringBuilder("Expected ")`);
1176
+ this.code.line(`${descr}.append(".keySet()")`);
1177
+ this.code.line(`.append(" to contain class String; received ")`);
1178
+ this.code.line(`.append(${value}.keySet().toArray()[0].getClass()).toString());`);
1179
+ this.code.unindent(false);
1180
+ this.code.unindent(false);
1181
+ this.code.closeBlock();
1182
+ const suffix = (0, crypto_1.createHash)('sha256')
1183
+ .update(descr)
1184
+ .digest('hex')
1185
+ .slice(0, 6);
1186
+ const varName = `__item_${suffix}`;
1187
+ const valName = `__val_${suffix}`;
1188
+ const javaElemType = this.toJavaType(elementType);
1189
+ this.code.openBlock(`for (final java.util.Map.Entry<String, ${javaElemType}> ${varName}: ${value}.entrySet())`);
1190
+ this.code.line(`final ${javaElemType} ${valName} = ${varName}.getValue();`);
1191
+ validate.call(this, valName, `${descr}.append(".get(\\"").append((${varName}.getKey())).append("\\")")`, elementType, parameterName);
1192
+ this.code.closeBlock();
1193
+ }
1194
+ function validateTypeUnion(value, descr, type, parameterName) {
1195
+ let emitAnd = false;
1196
+ const nestedCollectionUnionTypes = new Map();
1197
+ const typeRefs = type.union.types;
1198
+ if (typeRefs.length > 1) {
1199
+ this.code.indent('if (');
1200
+ }
1201
+ const checked = new Set();
1202
+ for (const typeRef of typeRefs) {
1203
+ const prefix = emitAnd ? '&&' : '';
1204
+ const javaRawType = this.toJavaTypeNoGenerics(typeRef);
1205
+ if (checked.has(javaRawType)) {
1206
+ continue;
1207
+ }
1208
+ else {
1209
+ checked.add(javaRawType);
1210
+ }
1211
+ const javaType = this.toJavaType(typeRef);
1212
+ if (javaRawType !== javaType) {
1213
+ nestedCollectionUnionTypes.set(javaType, typeRef);
1214
+ }
1215
+ const test = `${value} instanceof ${javaRawType}`;
1216
+ if (typeRefs.length > 1) {
1217
+ this.code.line(`${prefix} !(${test})`);
1218
+ }
1219
+ emitAnd = true;
1220
+ }
1221
+ if (typeRefs.length > 1 &&
1222
+ typeRefs.some((t) => spec.isNamedTypeReference(t) &&
1223
+ spec.isInterfaceType(this.findType(t.fqn)))) {
1224
+ // Only anonymous objects at runtime can be `JsiiObject`s.
1225
+ this.code.line(`&& !(${value}.getClass().equals(software.amazon.jsii.JsiiObject.class))`);
1226
+ }
1227
+ if (typeRefs.length > 1) {
1228
+ this.code.unindent(false);
1229
+ this.code.openBlock(')');
1230
+ const placeholders = typeRefs
1231
+ .map((typeRef) => {
1232
+ return `${this.toJavaType(typeRef)}`;
1233
+ })
1234
+ .join(', ');
1235
+ this.code.indent(`throw new IllegalArgumentException(`);
1236
+ this.code.indent(`new java.lang.StringBuilder("Expected ")`);
1237
+ this.code.line(descr);
1238
+ this.code.line(`.append(" to be one of: ${placeholders}; received ")`);
1239
+ this.code.line(`.append(${value}.getClass()).toString());`);
1240
+ this.code.unindent(false);
1241
+ this.code.unindent(false);
1242
+ this.code.closeBlock();
1243
+ }
1244
+ for (const [javaType, typeRef] of nestedCollectionUnionTypes) {
1245
+ const varName = typeRefs.length > 1
1246
+ ? `__cast_${(0, crypto_1.createHash)('sha256')
1247
+ .update(value)
1248
+ .digest('hex')
1249
+ .slice(0, 6)}`
1250
+ : value;
1251
+ if (typeRefs.length > 1) {
1252
+ this.code.openBlock(`if (${value} instanceof ${this.toJavaTypeNoGenerics(typeRef)})`);
1253
+ this.code.line(`@SuppressWarnings("unchecked")`);
1254
+ this.code.line(`final ${javaType} ${varName} = (${javaType})${value};`);
1255
+ }
1256
+ validate.call(this, varName, descr, typeRef, parameterName);
1257
+ if (typeRefs.length > 1) {
1258
+ this.code.closeBlock();
1259
+ }
1260
+ }
1261
+ }
1262
+ }
1062
1263
  /**
1063
1264
  * We are now going to build a class that can be used as a proxy for untyped
1064
1265
  * javascript objects that implement this interface. we want java code to be
@@ -1726,6 +1927,22 @@ class JavaGenerator extends generator_1.Generator {
1726
1927
  toDecoratedJavaTypes(optionalValue, { covariant = false } = {}) {
1727
1928
  return this.toJavaTypes(optionalValue.type, { covariant }).map((nakedType) => `${optionalValue.optional ? ANN_NULLABLE : ANN_NOT_NULL} ${nakedType}`);
1728
1929
  }
1930
+ // Strips <*> from the type name.
1931
+ // necessary, because of type erasure; the compiler
1932
+ // will not let you check `foo instanceof Map<String, Foo>`,
1933
+ // and you must instead check `foo instanceof Map`.
1934
+ toJavaTypeNoGenerics(type, opts) {
1935
+ const typeStr = this.toJavaType(type, opts);
1936
+ const leftAngleBracketIdx = typeStr.indexOf('<');
1937
+ const rightAngleBracketIdx = typeStr.indexOf('>');
1938
+ if ((leftAngleBracketIdx < 0 && rightAngleBracketIdx >= 0) ||
1939
+ (leftAngleBracketIdx >= 0 && rightAngleBracketIdx < 0)) {
1940
+ throw new Error(`Invalid generic type: found ${typeStr}`);
1941
+ }
1942
+ return leftAngleBracketIdx > 0 && rightAngleBracketIdx > 0
1943
+ ? typeStr.slice(0, leftAngleBracketIdx)
1944
+ : typeStr;
1945
+ }
1729
1946
  toJavaType(type, opts) {
1730
1947
  const types = this.toJavaTypes(type, opts);
1731
1948
  if (types.length > 1) {
@@ -2366,4 +2583,9 @@ function splitNamespace(ns) {
2366
2583
  function escape(s) {
2367
2584
  return s.replace(/["\\<>&]/g, (c) => `&#${c.charCodeAt(0)};`);
2368
2585
  }
2586
+ function containsUnionType(typeRef) {
2587
+ return (spec.isUnionTypeReference(typeRef) ||
2588
+ (spec.isCollectionTypeReference(typeRef) &&
2589
+ containsUnionType(typeRef.collection.elementtype)));
2590
+ }
2369
2591
  //# sourceMappingURL=java.js.map
@@ -217,7 +217,7 @@ class UserType {
217
217
  // Identify declarations that are not yet initialized and hence cannot be
218
218
  // used as part of a type qualification. Since this is not a forward
219
219
  // reference, the type was already emitted and its un-qualified name must
220
- // be used instead of it's locally qualified name.
220
+ // be used instead of its locally qualified name.
221
221
  const nestingParent = surroundingTypeFqns
222
222
  ?.map((fqn) => toPythonFqn(fqn, assembly).pythonFqn)
223
223
  ?.reverse()
@@ -233,7 +233,7 @@ class UserType {
233
233
  // This is not for a type annotation, so we should be at a point in time
234
234
  // where the surrounding symbol has been defined entirely, so we can
235
235
  // refer to it "normally" now.
236
- return { pythonType: pythonFqn.substring(nestingParent.length + 1) };
236
+ return { pythonType: pythonFqn.slice(packageName.length + 1) };
237
237
  }
238
238
  // We'll just make a module-qualified reference at this point.
239
239
  return {
@@ -251,7 +251,7 @@ class UserType {
251
251
  .substring(0, 8);
252
252
  const alias = `_${toImport}_${aliasSuffix}`;
253
253
  return {
254
- pythonType: [alias, ...nested].join('.'),
254
+ pythonType: wrapType([alias, ...nested].join('.')),
255
255
  requiredImport: {
256
256
  sourcePackage: relativeImportPath(submodulePythonName, typeSubmodulePythonName),
257
257
  item: `${toImport} as ${alias}`,
@@ -394,6 +394,7 @@ class BaseMethod {
394
394
  const paramType = (0, type_name_1.toTypeName)(prop.prop).pythonType({
395
395
  ...context,
396
396
  parameterType: true,
397
+ typeAnnotation: true,
397
398
  });
398
399
  const paramDefault = prop.prop.optional ? ' = None' : '';
399
400
  pythonParams.push(`${paramName}: ${paramType}${paramDefault}`);
@@ -739,7 +740,10 @@ class Struct extends BasePythonClassType {
739
740
  // Re-type struct arguments that were passed as "dict". Do this before validating argument types...
740
741
  for (const member of members.filter((m) => m.isStruct(this.generator))) {
741
742
  // Note that "None" is NOT an instance of dict (that's convenient!)
742
- const typeName = (0, type_name_1.toPythonFullName)(member.type.type.fqn, context.assembly);
743
+ const typeName = (0, type_name_1.toTypeName)(member.type.type).pythonType({
744
+ ...context,
745
+ typeAnnotation: false,
746
+ });
743
747
  code.openBlock(`if isinstance(${member.pythonName}, dict)`);
744
748
  code.line(`${member.pythonName} = ${typeName}(**${member.pythonName})`);
745
749
  code.closeBlock();
package/lib/version.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** The short version number for this JSII compiler (e.g: `X.Y.Z`) */
2
- export declare const VERSION = "1.65.0";
2
+ export declare const VERSION: string;
3
3
  /** The qualified version number for this JSII compiler (e.g: `X.Y.Z (build #######)`) */
4
- export declare const VERSION_DESC = "1.65.0 (build 7a02b7f)";
4
+ export declare const VERSION_DESC = "1.67.0 (build 2c027f5)";
5
5
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
- // Generated at 2022-08-18T14:34:45Z by generate.sh
2
+ // Generated at 2022-09-02T16:06:26Z by generate.sh
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.VERSION_DESC = exports.VERSION = void 0;
5
5
  /** The short version number for this JSII compiler (e.g: `X.Y.Z`) */
6
- exports.VERSION = '1.65.0';
6
+ // eslint-disable-next-line @typescript-eslint/no-inferrable-types
7
+ exports.VERSION = '1.67.0';
7
8
  /** The qualified version number for this JSII compiler (e.g: `X.Y.Z (build #######)`) */
8
- exports.VERSION_DESC = '1.65.0 (build 7a02b7f)';
9
+ exports.VERSION_DESC = '1.67.0 (build 2c027f5)';
9
10
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsii-pacmak",
3
- "version": "1.65.0",
3
+ "version": "1.67.0",
4
4
  "description": "A code generation framework for jsii backend languages",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -37,35 +37,35 @@
37
37
  "package": "package-js"
38
38
  },
39
39
  "dependencies": {
40
- "@jsii/check-node": "1.65.0",
41
- "@jsii/spec": "^1.65.0",
40
+ "@jsii/check-node": "1.67.0",
41
+ "@jsii/spec": "^1.67.0",
42
42
  "clone": "^2.1.2",
43
- "codemaker": "^1.65.0",
43
+ "codemaker": "^1.67.0",
44
44
  "commonmark": "^0.30.0",
45
45
  "escape-string-regexp": "^4.0.0",
46
46
  "fs-extra": "^10.1.0",
47
- "jsii-reflect": "^1.65.0",
48
- "jsii-rosetta": "^1.65.0",
47
+ "jsii-reflect": "^1.67.0",
48
+ "jsii-rosetta": "^1.67.0",
49
49
  "semver": "^7.3.7",
50
50
  "spdx-license-list": "^6.6.0",
51
51
  "xmlbuilder": "^15.1.1",
52
52
  "yargs": "^16.2.0"
53
53
  },
54
54
  "devDependencies": {
55
- "@jsii/dotnet-runtime": "^1.65.0",
56
- "@jsii/java-runtime": "^1.65.0",
57
- "@jsii/go-runtime": "^1.65.0",
58
- "@scope/jsii-calc-lib": "^1.65.0",
55
+ "@jsii/dotnet-runtime": "^1.67.0",
56
+ "@jsii/java-runtime": "^1.67.0",
57
+ "@jsii/go-runtime": "^1.67.0",
58
+ "@scope/jsii-calc-lib": "^1.67.0",
59
59
  "@types/clone": "^2.1.1",
60
60
  "@types/diff": "^5.0.2",
61
61
  "@types/commonmark": "^0.27.5",
62
62
  "@types/fs-extra": "^9.0.13",
63
- "@types/semver": "^7.3.10",
63
+ "@types/semver": "^7.3.12",
64
64
  "diff": "^5.1.0",
65
- "jsii": "^1.65.0",
66
- "jsii-build-tools": "^1.65.0",
65
+ "jsii": "^1.67.0",
66
+ "jsii-build-tools": "^1.67.0",
67
67
  "jsii-calc": "^3.20.120",
68
- "pyright": "^1.1.266"
68
+ "pyright": "^1.1.268"
69
69
  },
70
70
  "keywords": [
71
71
  "jsii",