@cosmology/ast
Version:
Cosmos TypeScript AST generation
145 lines (144 loc) • 5.61 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 (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeLong = void 0;
const t = __importStar(require("@babel/types"));
exports.TypeLong = {
propTypes: {
bigint: "bigint",
long: "Long",
},
propIdentifiers: {
bigint: t.identifier("bigint"),
long: t.identifier("Long"),
},
types: {
bigint: "BigInt",
long: "Long",
},
identifiers: {
bigint: t.identifier("BigInt"),
long: t.identifier("Long"),
},
fromStringArray: {
bigint: t.callExpression(t.identifier("BigInt"), [t.identifier("e")]),
long: t.callExpression(t.memberExpression(t.identifier("Long"), t.identifier("fromString")), [t.identifier("e")]),
},
toStringArray: {
bigint: t.callExpression(t.memberExpression(t.identifier("e"), t.identifier("toString")), []),
long: t.identifier("e"),
},
uzeroExpressions: {
bigint: t.callExpression(t.identifier("BigInt"), [t.numericLiteral(0)]),
long: t.memberExpression(t.identifier("Long"), t.identifier("UZERO")),
},
zeroExpressions: {
bigint: t.callExpression(t.identifier("BigInt"), [t.numericLiteral(0)]),
long: t.memberExpression(t.identifier("Long"), t.identifier("ZERO")),
},
fromValueExpressions: {
bigint: t.identifier("BigInt"),
long: t.memberExpression(t.identifier("Long"), t.identifier("fromValue")),
},
fromNumberExpressions: {
bigint: t.identifier("BigInt"),
long: t.memberExpression(t.identifier("Long"), t.identifier("fromNumber")),
},
fromStringExpressions: {
bigint: t.identifier("BigInt"),
long: t.memberExpression(t.identifier("Long"), t.identifier("fromString")),
},
addUtil: (ctx) => {
if (!ctx) {
return;
}
const longLib = ctx.pluginValue("prototypes.typingsFormat.num64");
switch (longLib) {
case "long":
ctx.addUtil("Long");
break;
}
},
getPropType: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.propTypes);
},
getType: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.types);
},
getFromStringArray: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.fromStringArray);
},
getToStringArray: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.toStringArray);
},
getPropIdentifier: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.propIdentifiers);
},
getIdentifier: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.identifiers);
},
getUZero: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.uzeroExpressions);
},
getZero: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.zeroExpressions);
},
getFromValue: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.fromValueExpressions);
},
getFromValueWithArgs: (ctx, arg) => {
const longLib = ctx.pluginValue("prototypes.typingsFormat.num64");
const args = [];
switch (longLib) {
case "bigint":
args.push(t.callExpression(t.memberExpression(arg, t.identifier("toString")), []));
break;
case "long":
args.push(arg);
default:
}
return t.callExpression(exports.TypeLong.getFromValue(ctx), args);
},
getFromNumber: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.fromNumberExpressions);
},
getFromString: (ctx) => {
return exports.TypeLong.getNode(ctx, exports.TypeLong.fromStringExpressions);
},
getNode: (ctx, mappings) => {
const longLib = ctx.pluginValue("prototypes.typingsFormat.num64");
return mappings[longLib] ?? mappings["long"];
},
getLongNotZero: (prop, ctx) => {
const longLib = ctx.pluginValue("prototypes.typingsFormat.num64");
switch (longLib) {
case "bigint":
return t.binaryExpression("!==", t.memberExpression(t.identifier("message"), t.identifier(prop)), t.callExpression(t.identifier("BigInt"), [t.numericLiteral(0)]));
case "long":
default:
return t.unaryExpression("!", t.callExpression(t.memberExpression(t.memberExpression(t.identifier("message"), t.identifier(prop)), t.identifier("isZero")), []));
}
},
};
;