jsii
Version:
[](https://cdk.dev) [](https://github.com/aws/jsii
108 lines • 4.29 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.typeReferenceToString = typeReferenceToString;
exports.typeReferenceEqual = typeReferenceEqual;
exports.createTypeResolver = createTypeResolver;
exports.resolveType = resolveType;
const spec = __importStar(require("@jsii/spec"));
const type_visitor_1 = require("./type-visitor");
/**
* Convert a type reference to a string
*/
function typeReferenceToString(x) {
return (0, type_visitor_1.visitTypeReference)(x, {
named: function (ref) {
return ref.fqn;
},
primitive: function (ref) {
return ref.primitive;
},
collection: function (ref) {
return `${ref.collection.kind}<${typeReferenceToString(ref.collection.elementtype)}>`;
},
union: function (ref) {
return ref.union.types.map(typeReferenceToString).join(' | ');
},
intersection: function (ref) {
return ref.intersection.types.map(typeReferenceToString).join(' & ');
},
});
}
/**
* Return whether the given type references are equal
*/
function typeReferenceEqual(a, b) {
if (spec.isNamedTypeReference(a) && spec.isNamedTypeReference(b)) {
return a.fqn === b.fqn;
}
if (spec.isPrimitiveTypeReference(a) && spec.isPrimitiveTypeReference(b)) {
return a.primitive === b.primitive;
}
if (spec.isCollectionTypeReference(a) && spec.isCollectionTypeReference(b)) {
return (a.collection.kind === b.collection.kind && typeReferenceEqual(a.collection.elementtype, b.collection.elementtype));
}
if (spec.isUnionTypeReference(a) && spec.isUnionTypeReference(b)) {
return (a.union.types.length === b.union.types.length &&
a.union.types.every((aType, i) => typeReferenceEqual(aType, b.union.types[i])));
}
if (spec.isIntersectionTypeReference(a) && spec.isIntersectionTypeReference(b)) {
return (a.intersection.types.length === b.intersection.types.length &&
a.intersection.types.every((aType, i) => typeReferenceEqual(aType, b.intersection.types[i])));
}
return false;
}
/**
* Creates a type resolver function for a given context (assembly + dependency closure).
*/
function createTypeResolver(assembly, dependencyClosure) {
return (typeRef) => resolveType(typeRef, assembly, dependencyClosure);
}
/**
* Resolve a type from a name to the actual type.
* Uses a given assembly and dependency closure for lookup.
*/
function resolveType(typeRef, assembly, dependencyClosure) {
if (typeof typeRef !== 'string') {
typeRef = typeRef.fqn;
}
const [assm] = typeRef.split('.');
if (assembly.name === assm) {
return assembly.types?.[typeRef];
}
const foreignAssm = dependencyClosure.find((dep) => dep.name === assm);
return foreignAssm?.types?.[typeRef];
}
//# sourceMappingURL=type-reference.js.map