@typespec/compiler
Version:
TypeSpec Compiler Preview
91 lines • 3.53 kB
JavaScript
import { isIntrinsicType } from "../../core/decorator-utils.js";
import { getEncode, getFormat } from "../../lib/decorators.js";
import { defineKit } from "../define-kit.js";
defineKit({
scalar: {
is(type) {
return type.entityKind === "Type" && type.kind === "Scalar";
},
extendsBoolean: extendsStdType("boolean"),
extendsBytes: extendsStdType("bytes"),
extendsDecimal: extendsStdType("decimal"),
extendsDecimal128: extendsStdType("decimal128"),
extendsDuration: extendsStdType("duration"),
extendsFloat: extendsStdType("float"),
extendsFloat32: extendsStdType("float32"),
extendsFloat64: extendsStdType("float64"),
extendsInt8: extendsStdType("int8"),
extendsInt16: extendsStdType("int16"),
extendsInt32: extendsStdType("int32"),
extendsInt64: extendsStdType("int64"),
extendsInteger: extendsStdType("integer"),
extendsNumeric: extendsStdType("numeric"),
extendsOffsetDateTime: extendsStdType("offsetDateTime"),
extendsPlainDate: extendsStdType("plainDate"),
extendsPlainTime: extendsStdType("plainTime"),
extendsSafeint: extendsStdType("safeint"),
extendsString: extendsStdType("string"),
extendsUint8: extendsStdType("uint8"),
extendsUint16: extendsStdType("uint16"),
extendsUint32: extendsStdType("uint32"),
extendsUint64: extendsStdType("uint64"),
extendsUrl: extendsStdType("url"),
extendsUtcDateTime: extendsStdType("utcDateTime"),
isBoolean: isStdType("boolean"),
isBytes: isStdType("bytes"),
isDecimal: isStdType("decimal"),
isDecimal128: isStdType("decimal128"),
isDuration: isStdType("duration"),
isFloat: isStdType("float"),
isFloat32: isStdType("float32"),
isFloat64: isStdType("float64"),
isInt8: isStdType("int8"),
isInt16: isStdType("int16"),
isInt32: isStdType("int32"),
isInt64: isStdType("int64"),
isInteger: isStdType("integer"),
isNumeric: isStdType("numeric"),
isOffsetDateTime: isStdType("offsetDateTime"),
isPlainDate: isStdType("plainDate"),
isPlainTime: isStdType("plainTime"),
isSafeint: isStdType("safeint"),
isString: isStdType("string"),
isUint8: isStdType("uint8"),
isUint16: isStdType("uint16"),
isUint32: isStdType("uint32"),
isUint64: isStdType("uint64"),
isUrl: isStdType("url"),
isUtcDateTime: isStdType("utcDateTime"),
getStdBase(type) {
const tspNamespace = this.program.resolveTypeReference("TypeSpec")[0];
let current = type;
while (current) {
if (current.namespace === tspNamespace) {
return current;
}
current = current.baseScalar;
}
return null;
},
getEncoding(type) {
return getEncode(this.program, type);
},
getFormat(type) {
return getFormat(this.program, type);
},
},
});
function isStdType(typeName) {
return function (type) {
return type === this.program.checker.getStdType(typeName);
};
}
function extendsStdType(typeName) {
return function (type) {
if (!this.scalar.is(type)) {
return false;
}
return isIntrinsicType(this.program, type, typeName);
};
}
//# sourceMappingURL=scalar.js.map